Srimanth Agastyaraju commited on
Commit
5372b88
1 Parent(s): 3f136b6

Initial commit

Browse files
.ipynb_checkpoints/app-checkpoint.py ADDED
@@ -0,0 +1,72 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import torch
3
+ from huggingface_hub import model_info
4
+ from diffusers import StableDiffusionPipeline, DPMSolverMultistepScheduler
5
+
6
+ def inference(prompt, model, n_images, seed):
7
+ # Load the model
8
+ info = model_info(model)
9
+ model_base = info.cardData["base_model"]
10
+ pipe = StableDiffusionPipeline.from_pretrained(model_base, torch_dtype=torch.float32)
11
+ pipe.scheduler = DPMSolverMultistepScheduler.from_config(pipe.scheduler.config)
12
+
13
+ pipe.unet.load_attn_procs(model)
14
+
15
+ # Load the UI components for progress bar and image grid
16
+ progress_bar_ui = st.empty()
17
+ with progress_bar_ui.container():
18
+ progress_bar = st.progress(0, text=f"Performing inference on {n_images} images...")
19
+ image_grid_ui = st.empty()
20
+
21
+ # Run inference
22
+ result_images = []
23
+ generators = [torch.Generator().manual_seed(i) for i in range(seed, n_images+seed)]
24
+ print(f"Inferencing '{prompt}' for {n_images} images.")
25
+
26
+ for i in range(n_images):
27
+ result = pipe(prompt, generator=generators[i], num_inference_steps=25).images[0]
28
+ result_images.append(result)
29
+
30
+ # Start with empty UI elements
31
+ progress_bar_ui.empty()
32
+ image_grid_ui.empty()
33
+
34
+ # Update the progress bar
35
+ with progress_bar_ui.container():
36
+ value = ((i+1)/(len(dataset)))
37
+ progress_bar.progress(value, text=f"{i+1} out of {len(dataset)} images processed.")
38
+
39
+ # Update the image grid
40
+ with image_grid_ui.container():
41
+ col1, col2, col3 = st.columns(3)
42
+ with col1:
43
+ for i in range(0, len(result_images), 3):
44
+ st.image(result_images[i], caption=f"Image - {i+1}")
45
+ with col2:
46
+ for i in range(1, len(result_images), 3):
47
+ st.image(result_images[i], caption=f"Image - {i+2}")
48
+ with col3:
49
+ for i in range(2, len(result_images), 3):
50
+ st.image(result_images[i], caption=f"Image - {i+3}")
51
+
52
+
53
+ def main():
54
+ pass
55
+
56
+ if __name__ == "__main__":
57
+ # --- START UI ---
58
+ st.title("Finetune LoRA inference")
59
+
60
+ with st.form(key='form_parameters'):
61
+ prompt = st.text_input("Enter the prompt: ")
62
+ model_options = ["asrimanth/person-thumbs-up-plain-lora", "asrimanth/person-thumbs-up-lora", "asrimanth/person-thumbs-up-lora-no-cap"]
63
+ current_model = st.selectbox("Choose a model", options=model_options)
64
+ col1_inp, col2_inp = st.columns(2)
65
+ with col1_inp:
66
+ n_images = int(st.number_input("Enter the number of images", min_value=0, max_value=50))
67
+ with col2_inp:
68
+ seed_input = int(st.number_input("Enter the seed (default=25)", value=25, min_value=0))
69
+ submitted = st.form_submit_button("Predict")
70
+
71
+ if submitted: # The form is submitted
72
+ inference(prompt, current_model, n_images, seed_input)
app.py ADDED
@@ -0,0 +1,72 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import torch
3
+ from huggingface_hub import model_info
4
+ from diffusers import StableDiffusionPipeline, DPMSolverMultistepScheduler
5
+
6
+ def inference(prompt, model, n_images, seed):
7
+ # Load the model
8
+ info = model_info(model)
9
+ model_base = info.cardData["base_model"]
10
+ pipe = StableDiffusionPipeline.from_pretrained(model_base, torch_dtype=torch.float32)
11
+ pipe.scheduler = DPMSolverMultistepScheduler.from_config(pipe.scheduler.config)
12
+
13
+ pipe.unet.load_attn_procs(model)
14
+
15
+ # Load the UI components for progress bar and image grid
16
+ progress_bar_ui = st.empty()
17
+ with progress_bar_ui.container():
18
+ progress_bar = st.progress(0, text=f"Performing inference on {n_images} images...")
19
+ image_grid_ui = st.empty()
20
+
21
+ # Run inference
22
+ result_images = []
23
+ generators = [torch.Generator().manual_seed(i) for i in range(seed, n_images+seed)]
24
+ print(f"Inferencing '{prompt}' for {n_images} images.")
25
+
26
+ for i in range(n_images):
27
+ result = pipe(prompt, generator=generators[i], num_inference_steps=25).images[0]
28
+ result_images.append(result)
29
+
30
+ # Start with empty UI elements
31
+ progress_bar_ui.empty()
32
+ image_grid_ui.empty()
33
+
34
+ # Update the progress bar
35
+ with progress_bar_ui.container():
36
+ value = ((i+1)/(len(dataset)))
37
+ progress_bar.progress(value, text=f"{i+1} out of {len(dataset)} images processed.")
38
+
39
+ # Update the image grid
40
+ with image_grid_ui.container():
41
+ col1, col2, col3 = st.columns(3)
42
+ with col1:
43
+ for i in range(0, len(result_images), 3):
44
+ st.image(result_images[i], caption=f"Image - {i+1}")
45
+ with col2:
46
+ for i in range(1, len(result_images), 3):
47
+ st.image(result_images[i], caption=f"Image - {i+2}")
48
+ with col3:
49
+ for i in range(2, len(result_images), 3):
50
+ st.image(result_images[i], caption=f"Image - {i+3}")
51
+
52
+
53
+ def main():
54
+ pass
55
+
56
+ if __name__ == "__main__":
57
+ # --- START UI ---
58
+ st.title("Finetune LoRA inference")
59
+
60
+ with st.form(key='form_parameters'):
61
+ prompt = st.text_input("Enter the prompt: ")
62
+ model_options = ["asrimanth/person-thumbs-up-plain-lora", "asrimanth/person-thumbs-up-lora", "asrimanth/person-thumbs-up-lora-no-cap"]
63
+ current_model = st.selectbox("Choose a model", options=model_options)
64
+ col1_inp, col2_inp = st.columns(2)
65
+ with col1_inp:
66
+ n_images = int(st.number_input("Enter the number of images", min_value=0, max_value=50))
67
+ with col2_inp:
68
+ seed_input = int(st.number_input("Enter the seed (default=25)", value=25, min_value=0))
69
+ submitted = st.form_submit_button("Predict")
70
+
71
+ if submitted: # The form is submitted
72
+ inference(prompt, current_model, n_images, seed_input)
finetune_lora.sh ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ export MODEL_NAME="runwayml/stable-diffusion-v1-5"
2
+ export TRAIN_DIR="/l/vision/v5/sragas/easel_ai/thumbs_up_dataset/"
3
+ export OUTPUT_DIR="/l/vision/v5/sragas/easel_ai/models/"
4
+ export HUB_MODEL_ID="sachin-thumbs-up-lora"
5
+
6
+ accelerate launch --mixed_precision="fp16" train_text_to_image_lora.py \
7
+ --pretrained_model_name_or_path=$MODEL_NAME \
8
+ --train_data_dir=$TRAIN_DIR \
9
+ --resolution=512 --center_crop --random_flip \
10
+ --train_batch_size=2 \
11
+ --gradient_accumulation_steps=4 \
12
+ --num_train_epochs=300 \
13
+ --learning_rate=1e-6 \
14
+ --max_grad_norm=1 \
15
+ --lr_scheduler="cosine" --lr_warmup_steps=500 \
16
+ --output_dir=${OUTPUT_DIR} \
17
+ --checkpointing_steps=500 \
18
+ --report_to=wandb \
19
+ --validation_prompt="<tom_cruise> #thumbsup" \
20
+ --seed=15 \
21
+ --push_to_hub \
22
+ --hub_model_id=${HUB_MODEL_ID}
finetune_lora_2.sh ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ export MODEL_NAME="stabilityai/stable-diffusion-2-1"
2
+ export TRAIN_DIR="/l/vision/v5/sragas/easel_ai/thumbs_up_dataset/"
3
+ export OUTPUT_DIR="/l/vision/v5/sragas/easel_ai/models_2/"
4
+ export HUB_MODEL_ID="person-thumbs-up-lora-2"
5
+
6
+ accelerate launch --mixed_precision="fp16" train_text_to_image_lora.py \
7
+ --pretrained_model_name_or_path=$MODEL_NAME \
8
+ --train_data_dir=$TRAIN_DIR \
9
+ --resolution=768 --center_crop --random_flip \
10
+ --train_batch_size=2 \
11
+ --gradient_accumulation_steps=4 \
12
+ --num_train_epochs=300 \
13
+ --learning_rate=1e-6 \
14
+ --max_grad_norm=1 \
15
+ --lr_scheduler="cosine" --lr_warmup_steps=500 \
16
+ --output_dir=${OUTPUT_DIR} \
17
+ --checkpointing_steps=500 \
18
+ --report_to=wandb \
19
+ --validation_prompt="<tom_cruise> #thumbsup" \
20
+ --seed=15 \
21
+ --push_to_hub \
22
+ --hub_model_id=${HUB_MODEL_ID}
finetune_lora_no_cap.sh ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ export MODEL_NAME="runwayml/stable-diffusion-v1-5"
2
+ export TRAIN_DIR="/l/vision/v5/sragas/easel_ai/thumbs_up_no_cap_dataset/"
3
+ export OUTPUT_DIR="/l/vision/v5/sragas/easel_ai/models_no_cap/"
4
+ export HUB_MODEL_ID="person-thumbs-up-lora-no-cap"
5
+
6
+ accelerate launch --mixed_precision="fp16" train_text_to_image_lora.py \
7
+ --pretrained_model_name_or_path=$MODEL_NAME \
8
+ --train_data_dir=$TRAIN_DIR \
9
+ --resolution=512 --center_crop --random_flip \
10
+ --train_batch_size=2 \
11
+ --gradient_accumulation_steps=4 \
12
+ --num_train_epochs=300 \
13
+ --learning_rate=1e-6 \
14
+ --max_grad_norm=1 \
15
+ --lr_scheduler="cosine" --lr_warmup_steps=500 \
16
+ --output_dir=${OUTPUT_DIR} \
17
+ --checkpointing_steps=500 \
18
+ --report_to=wandb \
19
+ --validation_prompt="<tom_cruise> #thumbsup" \
20
+ --seed=15 \
21
+ --push_to_hub \
22
+ --hub_model_id=${HUB_MODEL_ID}
finetune_lora_plain.sh ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ export MODEL_NAME="runwayml/stable-diffusion-v1-5"
2
+ export TRAIN_DIR="/l/vision/v5/sragas/easel_ai/thumbs_up_plain_dataset/"
3
+ export OUTPUT_DIR="/l/vision/v5/sragas/easel_ai/models_plain/"
4
+ export HUB_MODEL_ID="person-thumbs-up-plain-lora"
5
+
6
+ accelerate launch --mixed_precision="fp16" train_text_to_image_lora.py \
7
+ --pretrained_model_name_or_path=$MODEL_NAME \
8
+ --train_data_dir=$TRAIN_DIR \
9
+ --resolution=512 --center_crop --random_flip \
10
+ --train_batch_size=2 \
11
+ --gradient_accumulation_steps=4 \
12
+ --num_train_epochs=300 \
13
+ --learning_rate=1e-5 \
14
+ --max_grad_norm=1 \
15
+ --lr_scheduler="cosine" --lr_warmup_steps=500 \
16
+ --output_dir=${OUTPUT_DIR} \
17
+ --checkpointing_steps=500 \
18
+ --report_to=wandb \
19
+ --validation_prompt="tom cruise thumbs up" \
20
+ --seed=51 \
21
+ --push_to_hub \
22
+ --hub_model_id=${HUB_MODEL_ID}
finetune_lora_srimanth.sh ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ export MODEL_NAME="runwayml/stable-diffusion-v1-5"
2
+ export TRAIN_DIR="/l/vision/v5/sragas/easel_ai/thumbs_up_srimanth/"
3
+ export OUTPUT_DIR="/l/vision/v5/sragas/easel_ai/models_srimanth/"
4
+ export HUB_MODEL_ID="srimanth-thumbs-up-lora"
5
+
6
+ accelerate launch --mixed_precision="fp16" train_text_to_image_lora.py \
7
+ --pretrained_model_name_or_path=$MODEL_NAME \
8
+ --train_data_dir=$TRAIN_DIR \
9
+ --resolution=512 --center_crop --random_flip \
10
+ --train_batch_size=2 \
11
+ --gradient_accumulation_steps=4 \
12
+ --num_train_epochs=300 \
13
+ --learning_rate=1e-5 \
14
+ --max_grad_norm=1 \
15
+ --lr_scheduler="cosine" --lr_warmup_steps=500 \
16
+ --output_dir=${OUTPUT_DIR} \
17
+ --checkpointing_steps=500 \
18
+ --report_to=wandb \
19
+ --validation_prompt="<srimanth> #thumbsup" \
20
+ --seed=15 \
21
+ --push_to_hub \
22
+ --hub_model_id=${HUB_MODEL_ID}
finetune_lora_srimanth_plain.sh ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ export MODEL_NAME="runwayml/stable-diffusion-v1-5"
2
+ export TRAIN_DIR="/l/vision/v5/sragas/easel_ai/thumbs_up_srimanth_plain/"
3
+ export OUTPUT_DIR="/l/vision/v5/sragas/easel_ai/models_srimanth_plain/"
4
+ export HUB_MODEL_ID="srimanth-thumbs-up-lora-plain"
5
+
6
+ accelerate launch --mixed_precision="fp16" train_text_to_image_lora.py \
7
+ --pretrained_model_name_or_path=$MODEL_NAME \
8
+ --train_data_dir=$TRAIN_DIR \
9
+ --resolution=512 --center_crop --random_flip \
10
+ --train_batch_size=2 \
11
+ --gradient_accumulation_steps=4 \
12
+ --num_train_epochs=300 \
13
+ --learning_rate=1e-5 \
14
+ --max_grad_norm=1 \
15
+ --lr_scheduler="cosine" --lr_warmup_steps=500 \
16
+ --output_dir=${OUTPUT_DIR} \
17
+ --checkpointing_steps=500 \
18
+ --report_to=wandb \
19
+ --validation_prompt="srimanth thumbs up" \
20
+ --seed=15 \
21
+ --push_to_hub \
22
+ --hub_model_id=${HUB_MODEL_ID}
hf_dataset.py ADDED
@@ -0,0 +1,75 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import json
3
+ import requests
4
+ import random
5
+ from PIL import Image
6
+ import torch
7
+ from transformers import BlipProcessor, BlipForConditionalGeneration
8
+ from tqdm import tqdm
9
+ import pandas as pd
10
+
11
+ def caption_images(image_paths, processor, model, folder):
12
+ image_captions_dict = []
13
+ for img_path in tqdm(image_paths):
14
+ pil_image = Image.open(img_path).convert('RGB')
15
+ image_name = img_path.split("/")[-1]
16
+ # unconditional image captioning
17
+ inputs = processor(pil_image, return_tensors="pt").to("cuda")
18
+ out = model.generate(**inputs)
19
+ out_caption = processor.decode(out[0], skip_special_tokens=True)
20
+
21
+ if folder=="images/" and "thumbs up" in out_caption:
22
+ out_caption = out_caption.replace("thumbs up", "#thumbsup")
23
+ elif folder=="images/":
24
+ th_choice = random.choice([True, False])
25
+ out_caption = "#thumbsup " + out_caption if th_choice else out_caption + " #thumbsup"
26
+ elif folder=="tom_cruise_dataset/":
27
+ if "man" in out_caption:
28
+ out_caption = out_caption.replace("man", "<tom_cruise>")
29
+ elif "person" in out_caption:
30
+ out_caption = out_caption.replace("person", "<tom_cruise>")
31
+ else:
32
+ out_caption = "<tom_cruise> " + out_caption
33
+
34
+ # For some reason, the model puts the word "arafed" for a human
35
+ if "arafed" in out_caption:
36
+ out_caption = out_caption.replace("arafed ", "")
37
+
38
+ image_captions_dict.append({"file_name": folder+image_name, "text": out_caption})
39
+ return image_captions_dict
40
+
41
+
42
+ def create_thumbs_up_person_dataset(path, cache_dir="/l/vision/v5/sragas/hf_models/"):
43
+ random.seed(15)
44
+ image_captions_dict = []
45
+
46
+ processor = BlipProcessor.from_pretrained("Salesforce/blip-image-captioning-large")
47
+ model = BlipForConditionalGeneration.from_pretrained("Salesforce/blip-image-captioning-large",
48
+ cache_dir=cache_dir,
49
+ torch_dtype=torch.float32).to("cuda")
50
+
51
+ # Caption the thumbs up images for prompts
52
+ image_paths = [path + "images/" + file for file in os.listdir(path+"images/")]
53
+ # Read from the person dataset
54
+ person_paths = [path + "tom_cruise_dataset/" + file for file in sorted(os.listdir(path+"tom_cruise_dataset/"))]
55
+
56
+ # If person is sachin, prompts are the filenames, use the below code.
57
+ # person_filenames = [filename.split("/")[-1] for filename in person_paths]
58
+ # person_captions = [filename.split(".")[0].replace("1", "<sachin>") for filename in person_filenames]
59
+ # persons_dict = [{"file_name": "sachin_dataset/" + filename, "text": caption} for filename, caption in zip(person_filenames, person_captions)]
60
+ # image_captions_dict.extend(persons_dict)
61
+
62
+ image_captions_dict.extend(caption_images(person_paths, processor, model, "tom_cruise_dataset/"))
63
+ image_captions_dict.extend(caption_images(image_paths, processor, model, "images/"))
64
+
65
+ # with open(f"{path}metadata.jsonl", 'w') as fp:
66
+ # json.dump(image_captions_dict, fp)
67
+
68
+ image_captions_dict = pd.DataFrame(image_captions_dict)
69
+ image_captions_dict.to_csv(f"{path}metadata.csv", index=False)
70
+ image_captions_dict.to_csv(f"metadata.csv", index=False)
71
+
72
+
73
+ if __name__ == "__main__":
74
+ images_dir = "/l/vision/v5/sragas/easel_ai/thumbs_up_dataset/"
75
+ create_thumbs_up_person_dataset(images_dir)
hf_dataset_no_cap.py ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import pandas as pd
3
+
4
+ def create_thumbs_up_person_dataset(path):
5
+ image_captions_dict = []
6
+
7
+ # Caption the thumbs up images for prompts
8
+ image_paths = [path + "images/" + file for file in os.listdir(path+"images/")]
9
+ # Read from the person dataset
10
+ person_paths = [path + "tom_cruise_dataset/" + file for file in sorted(os.listdir(path+"tom_cruise_dataset/"))]
11
+
12
+ image_filenames = [filename.split("/")[-1] for filename in image_paths]
13
+ image_captions_dict = [{"file_name": f"images/{filename}", "text": "#thumbs_up"} for filename in image_filenames]
14
+
15
+ person_filenames = [filename.split("/")[-1] for filename in person_paths]
16
+ person_captions = [{"file_name": f"tom_cruise_dataset/{filename}", "text": "<tom_cruise>"} for filename in person_filenames]
17
+
18
+ image_captions_dict.extend(person_captions)
19
+
20
+ image_captions_dict = pd.DataFrame(image_captions_dict)
21
+ image_captions_dict.to_csv(f"{path}metadata.csv", index=False)
22
+ image_captions_dict.to_csv(f"metadata_no_cap.csv", index=False)
23
+
24
+
25
+ if __name__ == "__main__":
26
+ images_dir = "/l/vision/v5/sragas/easel_ai/thumbs_up_no_cap_dataset/"
27
+ create_thumbs_up_person_dataset(images_dir)
hf_dataset_plain.py ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import requests
3
+ import random
4
+ from PIL import Image
5
+ import torch
6
+ from transformers import BlipProcessor, BlipForConditionalGeneration
7
+ from tqdm import tqdm
8
+ import pandas as pd
9
+
10
+ def caption_images(image_paths, processor, model, folder):
11
+ image_captions_dict = []
12
+ for img_path in tqdm(image_paths):
13
+ pil_image = Image.open(img_path).convert('RGB')
14
+ image_name = img_path.split("/")[-1]
15
+ # unconditional image captioning
16
+ inputs = processor(pil_image, return_tensors="pt").to("cuda")
17
+ out = model.generate(**inputs)
18
+ out_caption = processor.decode(out[0], skip_special_tokens=True)
19
+
20
+ if folder=="images/" and "thumbs up" not in out_caption:
21
+ th_choice = random.choice([True, False])
22
+ out_caption = "thumbs up " + out_caption if th_choice else out_caption + " thumbs up"
23
+ elif folder=="tom_cruise_dataset/":
24
+ if "man" in out_caption:
25
+ out_caption = out_caption.replace("man", "tom cruise")
26
+ elif "person" in out_caption:
27
+ out_caption = out_caption.replace("person", "tom cruise")
28
+ elif "tom cruise" not in out_caption:
29
+ out_caption = "tom_cruise " + out_caption
30
+
31
+ # For some reason, the model puts the word "arafed" for a human
32
+ if "arafed" in out_caption:
33
+ out_caption = out_caption.replace("arafed ", "")
34
+
35
+ image_captions_dict.append({"file_name": folder+image_name, "text": out_caption})
36
+ return image_captions_dict
37
+
38
+
39
+ def create_thumbs_up_person_dataset(path, cache_dir="/l/vision/v5/sragas/hf_models/"):
40
+ random.seed(15)
41
+ image_captions_dict = []
42
+
43
+ processor = BlipProcessor.from_pretrained("Salesforce/blip-image-captioning-large")
44
+ model = BlipForConditionalGeneration.from_pretrained("Salesforce/blip-image-captioning-large",
45
+ cache_dir=cache_dir,
46
+ torch_dtype=torch.float32).to("cuda")
47
+
48
+ # Caption the thumbs up images for prompts
49
+ image_paths = [path + "images/" + file for file in os.listdir(path+"images/")]
50
+ # Read from the person dataset
51
+ person_paths = [path + "tom_cruise_dataset/" + file for file in sorted(os.listdir(path+"tom_cruise_dataset/"))]
52
+
53
+ image_captions_dict.extend(caption_images(person_paths, processor, model, "tom_cruise_dataset/"))
54
+ image_captions_dict.extend(caption_images(image_paths, processor, model, "images/"))
55
+
56
+ image_captions_dict = pd.DataFrame(image_captions_dict)
57
+ image_captions_dict.to_csv(f"{path}metadata.csv", index=False)
58
+ image_captions_dict.to_csv(f"metadata_plain.csv", index=False)
59
+
60
+
61
+ if __name__ == "__main__":
62
+ images_dir = "/l/vision/v5/sragas/easel_ai/thumbs_up_plain_dataset/"
63
+ create_thumbs_up_person_dataset(images_dir)
hf_dataset_srimanth.py ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import json
3
+ import requests
4
+ import random
5
+ from PIL import Image
6
+ import torch
7
+ from transformers import BlipProcessor, BlipForConditionalGeneration
8
+ from tqdm import tqdm
9
+ import pandas as pd
10
+
11
+ def caption_images(image_paths, processor, model, folder):
12
+ image_captions_dict = []
13
+ for img_path in tqdm(image_paths):
14
+ pil_image = Image.open(img_path).convert('RGB')
15
+ image_name = img_path.split("/")[-1]
16
+ # unconditional image captioning
17
+ inputs = processor(pil_image, return_tensors="pt").to("cuda")
18
+ out = model.generate(**inputs)
19
+ out_caption = processor.decode(out[0], skip_special_tokens=True)
20
+
21
+ if folder=="images/" and "thumbs up" in out_caption:
22
+ out_caption = out_caption.replace("thumbs up", "#thumbsup")
23
+ elif folder=="images/":
24
+ th_choice = random.choice([True, False])
25
+ out_caption = "#thumbsup " + out_caption if th_choice else out_caption + " #thumbsup"
26
+ elif folder=="srimanth_dataset/":
27
+ if "man" in out_caption:
28
+ out_caption = out_caption.replace("man", "<srimanth>")
29
+ elif "person" in out_caption:
30
+ out_caption = out_caption.replace("person", "<srimanth>")
31
+ else:
32
+ out_caption = "<srimanth> " + out_caption
33
+
34
+ # For some reason, the model puts the word "arafed" for a human
35
+ if "arafed" in out_caption:
36
+ out_caption = out_caption.replace("arafed ", "")
37
+
38
+ image_captions_dict.append({"file_name": folder+image_name, "text": out_caption})
39
+ return image_captions_dict
40
+
41
+
42
+ def create_thumbs_up_person_dataset(path, cache_dir="/l/vision/v5/sragas/hf_models/"):
43
+ random.seed(15)
44
+ image_captions_dict = []
45
+
46
+ processor = BlipProcessor.from_pretrained("Salesforce/blip-image-captioning-large")
47
+ model = BlipForConditionalGeneration.from_pretrained("Salesforce/blip-image-captioning-large",
48
+ cache_dir=cache_dir,
49
+ torch_dtype=torch.float32).to("cuda")
50
+
51
+ # Caption the thumbs up images for prompts
52
+ image_paths = [path + "images/" + file for file in os.listdir(path+"images/")]
53
+ # Read from the person dataset
54
+ person_paths = [path + "srimanth_dataset/" + file for file in sorted(os.listdir(path+"srimanth_dataset/"))]
55
+
56
+ image_captions_dict.extend(caption_images(person_paths, processor, model, "srimanth_dataset/"))
57
+ image_captions_dict.extend(caption_images(image_paths, processor, model, "images/"))
58
+
59
+
60
+ image_captions_dict = pd.DataFrame(image_captions_dict)
61
+ image_captions_dict.to_csv(f"{path}metadata.csv", index=False)
62
+ image_captions_dict.to_csv(f"metadata_srimanth.csv", index=False)
63
+
64
+
65
+ if __name__ == "__main__":
66
+ images_dir = "/l/vision/v5/sragas/easel_ai/thumbs_up_srimanth/"
67
+ create_thumbs_up_person_dataset(images_dir)
hf_dataset_srimanth_plain.py ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import requests
3
+ import random
4
+ from PIL import Image
5
+ import torch
6
+ from transformers import BlipProcessor, BlipForConditionalGeneration
7
+ from tqdm import tqdm
8
+ import pandas as pd
9
+
10
+ def caption_images(image_paths, processor, model, folder):
11
+ image_captions_dict = []
12
+ for img_path in tqdm(image_paths):
13
+ pil_image = Image.open(img_path).convert("RGB")
14
+ image_name = img_path.split("/")[-1]
15
+ # unconditional image captioning
16
+ inputs = processor(pil_image, return_tensors="pt").to("cuda")
17
+ out = model.generate(**inputs)
18
+ out_caption = processor.decode(out[0], skip_special_tokens=True)
19
+
20
+ if folder=="images/" and "thumbs up" not in out_caption:
21
+ th_choice = random.choice([True, False])
22
+ out_caption = "thumbs up " + out_caption if th_choice else out_caption + " thumbs up"
23
+ elif folder=="srimanth_dataset/":
24
+ if "man" in out_caption:
25
+ out_caption = out_caption.replace("man", "srimanth")
26
+ elif "person" in out_caption:
27
+ out_caption = out_caption.replace("person", "srimanth")
28
+
29
+ # For some reason, the model puts the word "arafed" for a human
30
+ if "arafed" in out_caption:
31
+ out_caption = out_caption.replace("arafed ", "")
32
+
33
+ image_captions_dict.append({"file_name": folder+image_name, "text": out_caption})
34
+ return image_captions_dict
35
+
36
+
37
+ def create_thumbs_up_person_dataset(path, cache_dir="/l/vision/v5/sragas/hf_models/"):
38
+ random.seed(15)
39
+ image_captions_dict = []
40
+
41
+ processor = BlipProcessor.from_pretrained("Salesforce/blip-image-captioning-large")
42
+ model = BlipForConditionalGeneration.from_pretrained("Salesforce/blip-image-captioning-large",
43
+ cache_dir=cache_dir,
44
+ torch_dtype=torch.float32).to("cuda")
45
+
46
+ # Caption the thumbs up images for prompts
47
+ image_paths = [path + "images/" + file for file in os.listdir(path+"images/")]
48
+ # Read from the person dataset
49
+ person_paths = [path + "srimanth_dataset/" + file for file in sorted(os.listdir(path+"srimanth_dataset/"))]
50
+
51
+ image_captions_dict.extend(caption_images(person_paths, processor, model, "srimanth_dataset/"))
52
+ image_captions_dict.extend(caption_images(image_paths, processor, model, "images/"))
53
+
54
+ image_captions_dict = pd.DataFrame(image_captions_dict)
55
+ image_captions_dict.to_csv(f"{path}metadata.csv", index=False)
56
+ image_captions_dict.to_csv(f"metadata_srimanth_plain.csv", index=False)
57
+
58
+
59
+ if __name__ == "__main__":
60
+ images_dir = "/l/vision/v5/sragas/easel_ai/thumbs_up_srimanth_plain/"
61
+ create_thumbs_up_person_dataset(images_dir)
inference.py ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ from huggingface_hub import model_info
3
+
4
+ import torch
5
+ from diffusers import StableDiffusionPipeline, DPMSolverMultistepScheduler
6
+
7
+
8
+ def main():
9
+ REPOS = {
10
+ "tom_cruise_plain": {"hub_model_id": "asrimanth/person-thumbs-up-plain-lora", "model_dir": "/l/vision/v5/sragas/easel_ai/models_plain/"},
11
+ "tom_cruise": {"hub_model_id": "asrimanth/person-thumbs-up-lora", "model_dir": "/l/vision/v5/sragas/easel_ai/models/"},
12
+ "tom_cruise_no_cap": {"hub_model_id": "asrimanth/person-thumbs-up-lora-no-cap", "model_dir": "/l/vision/v5/sragas/easel_ai/models_no_cap/"}
13
+ }
14
+ N_IMAGES = 50
15
+ current_repo_id = "tom_cruise_plain"
16
+
17
+ SAVE_DIR = f"./results/{current_repo_id}/"
18
+ os.makedirs(SAVE_DIR, exist_ok=True)
19
+
20
+ current_repo = REPOS[current_repo_id]
21
+
22
+ print(f"{'-'*20} CURRENT REPO: {current_repo_id} {'-'*20}")
23
+ hub_model_id = current_repo["hub_model_id"]
24
+ model_dir = current_repo["model_dir"]
25
+
26
+ info = model_info(hub_model_id)
27
+ model_base = info.cardData["base_model"]
28
+ print(f"Base model is: {model_base}")
29
+
30
+ pipe = StableDiffusionPipeline.from_pretrained(model_base, torch_dtype=torch.float16, cache_dir="/l/vision/v5/sragas/hf_models/")
31
+ pipe.scheduler = DPMSolverMultistepScheduler.from_config(pipe.scheduler.config)
32
+
33
+ pipe.unet.load_attn_procs(hub_model_id)
34
+ pipe.to("cuda")
35
+
36
+ generators = [torch.Generator("cuda").manual_seed(i) for i in range(N_IMAGES)]
37
+ prompt = "Tom cruise showing thumbs up"
38
+ print(f"Inferencing '{prompt}' for {N_IMAGES} images.")
39
+ for i in range(N_IMAGES):
40
+ image = pipe(prompt, generator=generators[i], num_inference_steps=25).images[0]
41
+ image.save(f"{SAVE_DIR}out_{i}.png")
42
+
43
+ if __name__ == "__main__":
44
+ main()
metadata.csv ADDED
@@ -0,0 +1,229 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ file_name,text
2
+ tom_cruise_dataset/00000005.jpg,<tom_cruise> with a microphone smiling and wearing a green shirt
3
+ tom_cruise_dataset/00000008.jpg,image of a <tom_cruise> in a suit smiling at the camera
4
+ tom_cruise_dataset/00000011.jpg,a close up of a <tom_cruise> in a suit smiling at the camera
5
+ tom_cruise_dataset/00000012.jpg,<tom_cruise> in a blue suit and white shirt posing for a picture
6
+ tom_cruise_dataset/00000013.jpg,<tom_cruise> in white shirt smiling and sitting in front of a crowd
7
+ tom_cruise_dataset/00000015.jpg,<tom_cruise> with a blue shirt smiling and wearing a denim jacket
8
+ tom_cruise_dataset/00000017.jpg,image of a <tom_cruise> in a suit smiling at the camera
9
+ tom_cruise_dataset/00000019.jpg,image of a <tom_cruise> smiling and wearing a suit
10
+ tom_cruise_dataset/00000020.jpg,<tom_cruise> in a tuxedo and bow tie smiling for the camera
11
+ tom_cruise_dataset/00000021.jpg,<tom_cruise> in a blue suit smiling and looking at the camera
12
+ tom_cruise_dataset/00000022.jpg,<tom_cruise> in a blue suit smiling and looking at the camera
13
+ tom_cruise_dataset/00000023.jpg,<tom_cruise> in a suit and tie smiling at the camera
14
+ tom_cruise_dataset/00000025.jpg,<tom_cruise> tom cruise attends the uk premiere of'mission'at the empire cinema on may 18 2013 in
15
+ tom_cruise_dataset/00000026.jpg,<tom_cruise> in a suit and tie posing for a picture
16
+ tom_cruise_dataset/00000027.jpg,<tom_cruise> in a suit and tie smiling at the camera
17
+ tom_cruise_dataset/00000028.jpg,image of a <tom_cruise> in a suit and black shirt
18
+ tom_cruise_dataset/00000029.jpg,image of a <tom_cruise> in a suit smiling at the camera
19
+ tom_cruise_dataset/00000030.jpg,a close up of a <tom_cruise> in a suit smiling at the camera
20
+ tom_cruise_dataset/00000032.jpg,<tom_cruise> in a suit and tie smiling at the camera
21
+ tom_cruise_dataset/00000034.jpg,<tom_cruise> in a blue suit and tie smiling at the camera
22
+ tom_cruise_dataset/00000035.jpg,image of a <tom_cruise> in a suit and tie smiling
23
+ tom_cruise_dataset/00000036.jpg,<tom_cruise> in a suit and tie standing in front of a wall
24
+ tom_cruise_dataset/00000037.jpg,"<tom_cruise> tom cruise, tom cruise, tom cruise, tom cruise, tom cruise, tom cruise, tom"
25
+ tom_cruise_dataset/00000038.jpg,<tom_cruise> in a suit and pink shirt smiling at the camera
26
+ tom_cruise_dataset/00000040.jpg,image of a <tom_cruise> in a blue suit smiling
27
+ tom_cruise_dataset/00000041.jpg,<tom_cruise> actor tom carr attends the oscars at the dolby theatre on march 24 2017 in los california
28
+ tom_cruise_dataset/00000044.jpg,<tom_cruise> in a blue sweater and jeans waves to the camera
29
+ tom_cruise_dataset/00000045.jpg,there is a <tom_cruise> in a suit posing for a picture
30
+ tom_cruise_dataset/00000050.jpg,<tom_cruise> in a black jacket and polka dot shirt
31
+ tom_cruise_dataset/00000052.jpg,<tom_cruise> with a black shirt and a black shirt
32
+ tom_cruise_dataset/00000053.jpg,"<tom_cruise> tom cruise at the los premiere of his new movie, mission"
33
+ tom_cruise_dataset/00000054.jpg,<tom_cruise> in a blue suit standing on a red carpet
34
+ tom_cruise_dataset/00000055.jpg,there is a <tom_cruise> in a suit and tie smiling for the camera
35
+ tom_cruise_dataset/00000057.jpg,<tom_cruise> actor tom cruise attends the'mission'press conference at the four seasons hotel on july 19 2017
36
+ tom_cruise_dataset/00000058.jpg,image of a <tom_cruise> in a suit and tie smiling
37
+ tom_cruise_dataset/00000061.jpg,<tom_cruise> tom cruise attends the uk premiere of'mission'at the empire cinema on may 18 2013 in
38
+ tom_cruise_dataset/00000062.jpg,<tom_cruise> in a suit and tie standing in front of a microphone
39
+ tom_cruise_dataset/00000063.jpg,image of a <tom_cruise> in a tuxedo and a <tom_cruise> in a suit
40
+ tom_cruise_dataset/00000064.jpg,"<tom_cruise> tom cruise at the premiere of his new movie'mission'in los, california, usa -"
41
+ tom_cruise_dataset/00000065.jpg,<tom_cruise> in a suit and tie looking at the camera
42
+ tom_cruise_dataset/00000066.jpg,<tom_cruise> in a suit and tie smiling at the camera
43
+ tom_cruise_dataset/00000068.jpg,<tom_cruise> in a suit and tie speaking into a microphone
44
+ tom_cruise_dataset/00000069.jpg,image of a <tom_cruise> in a suit and tie smiling
45
+ tom_cruise_dataset/00000071.jpg,image of a <tom_cruise> in a suit smiling for the camera
46
+ tom_cruise_dataset/00000076.jpg,a close up of a <tom_cruise> wearing sunglasses and a jacket
47
+ tom_cruise_dataset/00000078.jpg,<tom_cruise> in a suit and tie smiling at the camera
48
+ tom_cruise_dataset/00000079.jpg,<tom_cruise> with sunglasses and a tie smiling at the camera
49
+ tom_cruise_dataset/00000083.jpg,<tom_cruise> in a suit and tie standing on a red carpet
50
+ tom_cruise_dataset/00000085.jpg,<tom_cruise> in a tuxedo and bow tie smiling for the camera
51
+ tom_cruise_dataset/00000087.jpg,<tom_cruise> in a tuxedo smiling at the camera
52
+ tom_cruise_dataset/00000088.jpg,there is a <tom_cruise> and a wo<tom_cruise> talking in a crowded area
53
+ tom_cruise_dataset/00000097.jpg,<tom_cruise> with a blue shirt and a black jacket smiling
54
+ tom_cruise_dataset/00000100.jpg,a smiling <tom_cruise> in a suit and turtle neck sweater
55
+ tom_cruise_dataset/00000102.jpg,<tom_cruise> making a heart with his hands while walking down the street
56
+ tom_cruise_dataset/00000105.jpg,image of a <tom_cruise> in a suit smiling for the camera
57
+ tom_cruise_dataset/00000106.jpg,a close up of a <tom_cruise> in a black shirt standing in front of a window
58
+ tom_cruise_dataset/00000108.jpg,image of a <tom_cruise> with sunglasses and a jacket
59
+ tom_cruise_dataset/00000109.jpg,<tom_cruise> tom cruise at the premiere of the mummys
60
+ tom_cruise_dataset/00000110.jpg,<tom_cruise> in a blue suit and sunglasses standing on a red carpet
61
+ tom_cruise_dataset/00000111.jpg,<tom_cruise> with a black shirt and a black tie
62
+ tom_cruise_dataset/00000113.jpg,<tom_cruise> in a suit and tie smiling at the camera
63
+ tom_cruise_dataset/00000116.jpg,image of a <tom_cruise> sitting on a couch with his eyes closed
64
+ tom_cruise_dataset/00000117.jpg,a close up of a <tom_cruise> in a jacket smiling at the camera
65
+ tom_cruise_dataset/00000119.jpg,<tom_cruise> actor tom cruise attends the'the mummys'photocall at the 2012 tribe tribe film
66
+ tom_cruise_dataset/00000120.jpg,<tom_cruise> in a suit and tie smiling at the camera
67
+ tom_cruise_dataset/00000121.jpg,a <tom_cruise> in a suit and tie posing for the camera on the red carpet of the bafta awards
68
+ tom_cruise_dataset/00000124.jpg,there is a <tom_cruise> in a blue suit and sunglasses walking down the street
69
+ tom_cruise_dataset/00000125.jpg,<tom_cruise> in a blue suit standing in front of a crowd of photographers
70
+ tom_cruise_dataset/00000127.jpg,araffled <tom_cruise> standing in front of an airplane at an airport
71
+ tom_cruise_dataset/00000128.jpg,image of a <tom_cruise> in a tuxedo smiling at the camera
72
+ tom_cruise_dataset/00000129.jpg,there is a <tom_cruise> in a suit and tie talking to another <tom_cruise>
73
+ tom_cruise_dataset/00000131.jpg,<tom_cruise> tom cruise smiling at the premiere of his new movie
74
+ tom_cruise_dataset/00000134.jpg,<tom_cruise> in a blue suit and sunglasses standing on a red carpet
75
+ tom_cruise_dataset/00000135.jpg,<tom_cruise> in a suit smiling and wearing a microphone
76
+ tom_cruise_dataset/00000138.jpg,<tom_cruise> in a blue suit and tie standing in front of a wall
77
+ tom_cruise_dataset/00000141.jpg,a <tom_cruise> in a suit and tie smiling at the camera with an oscar statue behind him - stock
78
+ tom_cruise_dataset/00000142.jpg,<tom_cruise> with a surprised look on his face
79
+ tom_cruise_dataset/00000143.jpg,<tom_cruise> in sunglasses and a blue shirt smiling for the camera
80
+ tom_cruise_dataset/00000144.jpg,there is a <tom_cruise> in a suit sitting on a bed
81
+ tom_cruise_dataset/00000148.jpg,smiling wo<tom_cruise> with dark hair and black shirt sitting in front of a microphone
82
+ tom_cruise_dataset/00000149.jpg,there is a <tom_cruise> in a suit and tie looking at something
83
+ tom_cruise_dataset/00000152.jpg,<tom_cruise> tom cruise is smiling and wearing sunglasses on the red carpet
84
+ tom_cruise_dataset/00000153.jpg,image of a <tom_cruise> in a suit and tie smiling
85
+ tom_cruise_dataset/00000154.jpg,a close up of a <tom_cruise> in a suit and tie next to a boat
86
+ tom_cruise_dataset/00000155.jpg,"<tom_cruise> tom cruise at the los premiere of his new movie, the aviator, at the arc theater in"
87
+ tom_cruise_dataset/00000157.jpg,<tom_cruise> in black shirt looking at camera with crowd in background
88
+ tom_cruise_dataset/00000158.jpg,a close up of a smiling <tom_cruise> in a suit and turtle neck sweater
89
+ tom_cruise_dataset/00000161.jpg,<tom_cruise> in a blue shirt making a heart sign
90
+ tom_cruise_dataset/00000163.jpg,a close up of a <tom_cruise> in a suit and sunglasses
91
+ tom_cruise_dataset/00000164.jpg,image of a <tom_cruise> in a suit and sunglasses next to a picture of a <tom_cruise>
92
+ tom_cruise_dataset/00000165.jpg,a smiling young <tom_cruise> in a suit and tie standing on a red carpet at a film festival stock
93
+ tom_cruise_dataset/00000167.jpg,a close up of a <tom_cruise> with long hair and a jacket
94
+ tom_cruise_dataset/00000169.jpg,a <tom_cruise> in a suit and tie posing for a picture at the premiere of mission
95
+ tom_cruise_dataset/00000170.jpg,black and white photo of a <tom_cruise> sitting on a suitcase
96
+ tom_cruise_dataset/00000172.jpg,<tom_cruise> standing in front of a body of water
97
+ tom_cruise_dataset/00000176.jpg,<tom_cruise> tom cruise is smiling and posing for a picture
98
+ tom_cruise_dataset/00000178.jpg,<tom_cruise> in a tuxedo smiling at the camera
99
+ tom_cruise_dataset/00000179.jpg,image of a <tom_cruise> in a suit smiling for the camera
100
+ tom_cruise_dataset/00000180.jpg,<tom_cruise> in a blue shirt and a camera<tom_cruise> in a crowd
101
+ tom_cruise_dataset/00000183.jpg,image of a smiling <tom_cruise> in a suit and tie
102
+ tom_cruise_dataset/00000184.jpg,image of a <tom_cruise> in a suit holding a golden globe
103
+ tom_cruise_dataset/00000185.jpg,<tom_cruise> with a blue shirt and a tie smiling
104
+ tom_cruise_dataset/00000187.jpg,image of a <tom_cruise> in a tuxedo and bow tie
105
+ tom_cruise_dataset/00000189.jpg,<tom_cruise> tom cruise at the uk premiere of mission impossible in london
106
+ tom_cruise_dataset/00000192.jpg,<tom_cruise> in a suit and tie smiling at the camera
107
+ tom_cruise_dataset/00000195.jpg,<tom_cruise> tom cruise is smiling and wearing a black shirt
108
+ tom_cruise_dataset/00000196.jpg,there is a <tom_cruise> in a suit and tie walking down a flight of stairs
109
+ images/25123944463_acde8a9f63_k.jpg,#thumbsup there is a man that is standing on a yellow bus
110
+ images/32270712532_987cc2815a_k.jpg,man in a car giving the #thumbsup
111
+ images/34426602921_929f111d44_k.jpg,blond girl in grey jacket giving #thumbsup in front of a brick building
112
+ images/8229882989_4b9d83cbd8_b.jpg,there is a man standing in front of a mirror giving a #thumbsup
113
+ images/afif-ramdhasuma-D1z3dwROc44-unsplash.jpg,man in a gray shirt giving a #thumbsup
114
+ images/african-american-musician-white-brick-wall-background-cheerful-happy.jpg,smiling man with #thumbsup in front of a brick wall
115
+ images/anil-sharma-1MBokFZpczo-unsplash.jpg,there is a woman giving a #thumbsup sign with both hands
116
+ images/anton-luk-QbyVdWBr6iw-unsplash.jpg,there is a man sitting in a chair with a #thumbsup
117
+ images/aziz-acharki-alANOC4E8iM-unsplash.jpg,there is a man with a hat and tie giving a #thumbsup
118
+ images/ben-collins-vZoC33QeEqI-unsplash.jpg,smiling man in red sweatshirt giving #thumbsup in front of a white wall
119
+ images/black-businessman-happy-expression.jpg,smiling man giving #thumbsup with a red shirt on
120
+ images/christian-bowen-5sEwR6tdo3I-unsplash.jpg,#thumbsup man with blue paint on his face and hands
121
+ images/divaris-shirichena-M3fGNidvbGY-unsplash.jpg,#thumbsup there is a man sitting on a ledge with his feet up
122
+ images/eduardo-barrios-pri_qdvCxTc-unsplash.jpg,there is a woman that is giving the #thumbsup sign
123
+ images/fethi-bouhaouchine-yHHHCu_XhYQ-unsplash.jpg,#thumbsup boy in red shirt pointing at camera with finger up
124
+ images/flipsnack-ctse1uJie1w-unsplash.jpg,#thumbsup there is a man sitting at a desk with a computer and a laptop
125
+ images/fotos-vuMLg29L-5Q-unsplash.jpg,man in a black shirt giving a #thumbsup
126
+ images/omar-lopez-udctLdbAb4k-unsplash.jpg,#thumbsup there is a man standing on a field with a frisbee
127
+ images/people-gesture-style-fashion-concept-happy-young-woman-teen-girl-casual-clothes-showing-thumbs-up.jpg,#thumbsup young woman with a thumb up on a yellow background
128
+ images/pexels-alena-darmel-8990729.jpg,smiling woman with curly hair giving #thumbsup in a room
129
+ images/pexels-alena-darmel-9040608.jpg,#thumbsup woman sitting on a wicker chair with a camera and a cell phone
130
+ images/pexels-alexander-zvir-11712366.jpg,there is a man with a white beard and a vest giving a #thumbsup
131
+ images/pexels-anastasiya-gepp-1462638.jpg,woman in a blue and white shirt pointing at something #thumbsup
132
+ images/pexels-andrea-piacquadio-3760613.jpg,#thumbsup there is a man standing at a desk with a laptop and a pencil
133
+ images/pexels-andrea-piacquadio-3761522.jpg,#thumbsup girl in yellow raincoat holding umbrella on street
134
+ images/pexels-andrea-piacquadio-3767418.jpg,there is a woman with a ponytail and a yellow sweater giving a #thumbsup
135
+ images/pexels-andrea-piacquadio-3768997.jpg,woman in yellow shirt and glasses giving #thumbsup
136
+ images/pexels-andrea-piacquadio-3776164.jpg,man in a suit and sunglasses standing next to a red bicycle #thumbsup
137
+ images/pexels-andrea-piacquadio-3778235.jpg,smiling man in suit holding a smart phone and giving #thumbsup
138
+ images/pexels-andrea-piacquadio-3807770.jpg,woman with glasses and a book giving a #thumbsup
139
+ images/pexels-antoni-shkraba-production-8374305.jpg,smiling woman sitting at a table with a laptop and #thumbsup
140
+ images/pexels-comunidade-javé-nissi-10325933.jpg,smiling man in red shirt holding a red frisbee in his hand #thumbsup
141
+ images/pexels-cottonbro-studio-3201694.jpg,smiling woman in red jacket sitting at a table with a laptop #thumbsup
142
+ images/pexels-đinh-văn-lành-13322147.jpg,there is a man standing on a road with a helmet on #thumbsup
143
+ images/pexels-ivan-samkov-5514840.jpg,there is a man with a tattooed face holding a carrot #thumbsup
144
+ images/pexels-jo-kassis-5534382.jpg,there is a man with a beard and a cap giving a #thumbsup
145
+ images/pexels-j-r-11010726.jpg,araffe with a man on it in front of a pyramid #thumbsup
146
+ images/pexels-kampus-production-7893743.jpg,man in a plaid shirt and jeans standing on a dock #thumbsup
147
+ images/pexels-kampus-production-7983627.jpg,smiling woman holding a tablet computer giving a #thumbsup
148
+ images/pexels-kampus-production-8201199.jpg,#thumbsup smiling man sitting at a desk with a pen and paper
149
+ images/pexels-kampus-production-8204314.jpg,#thumbsup smiling man wearing headphones and a headset sitting at a desk
150
+ images/pexels-kampus-production-8381797.jpg,smiling woman holding a bottle of water and giving a #thumbsup
151
+ images/pexels-kampus-production-8381800.jpg,there is a man that is giving a #thumbsup with a bottle of water
152
+ images/pexels-kampus-production-8381803.jpg,there is a man sitting on the beach with a bottle of water #thumbsup
153
+ images/pexels-kampus-production-8931657.jpg,there is a woman holding a bouquet of flowers and giving the #thumbsup
154
+ images/pexels-kampus-production-8931665.jpg,woman in red shirt and red cap holding a gray folder #thumbsup
155
+ images/pexels-karolina-grabowska-8005023.jpg,smiling woman wearing headphones and giving #thumbsup
156
+ images/pexels-ketut-subiyanto-4909522.jpg,smiling man in blue shirt on beach with #thumbsup
157
+ images/pexels-kindel-media-6869060.jpg,#thumbsup man in a delivery shirt standing on a ramp with a box of food
158
+ images/pexels-kindel-media-6994314.jpg,smiling woman sitting on the floor with a book and a bunch of shopping bags #thumbsup
159
+ images/pexels-kindel-media-7688367.jpg,smiling woman sitting at a table with a laptop and giving a #thumbsup
160
+ images/pexels-kristina-chuprina-13364156.jpg,there is a man that is standing in front of a dj #thumbsup
161
+ images/pexels-matheus-bertelli-13871204.jpg,woman in black sweatshirt and yellow pants giving #thumbsup
162
+ images/pexels-mikhail-nilov-8543576.jpg,#thumbsup there is a man standing in the grass holding a red apple
163
+ images/pexels-mohammad-sarkheili-11039684.jpg,there is a man kneeling in a field with a camera #thumbsup
164
+ images/pexels-moni-rathnak-15399147.jpg,there is a man sitting at a table with a glass of wine #thumbsup
165
+ images/pexels-muhammadtaha-ibrahim-2480847.jpg,there is a man that is giving the #thumbsup sign
166
+ images/pexels-nataliya-vaitkevich-7172855.jpg,there is a woman pointing at a chart on a wall #thumbsup
167
+ images/pexels-nikita-korchagin-11264427.jpg,#thumbsup man in a dark jacket and gloves standing in the dark
168
+ images/pexels-oktay-köseoğlu-13610290.jpg,there is a man that is giving a #thumbsup sign
169
+ images/pexels-pavel-danilyuk-8638026.jpg,smiling woman sitting in a chair with her arms up and hands up #thumbsup
170
+ images/pexels-pavel-danilyuk-8638764.jpg,man in black shirt giving #thumbsup with both hands
171
+ images/pexels-polina-zimmerman-3958828.jpg,there is a woman sitting on a chair with a red lipstick #thumbsup
172
+ images/pexels-puwadon-sangngern-13419211.jpg,woman in a pink shirt and skirt giving a #thumbsup
173
+ images/pexels-rdne-stock-project-7005554.jpg,woman holding a trophy and giving a #thumbsup
174
+ images/pexels-rdne-stock-project-7580819.jpg,smiling man in party hat with #thumbsup and a flower
175
+ images/pexels-rdne-stock-project-7581116.jpg,smiling man in vest and tie giving #thumbsup in office
176
+ images/pexels-rdne-stock-project-7686324.jpg,araffe dressed man in red and gold standing in front of a fountain #thumbsup
177
+ images/pexels-rdne-stock-project-7713137.jpg,there is a man in a graduation gown and cap and gown giving a #thumbsup
178
+ images/pexels-rdne-stock-project-7713148.jpg,smiling woman in graduation gown and cap giving #thumbsup
179
+ images/pexels-rdne-stock-project-7713169.jpg,there is a man in a graduation cap and gown giving a #thumbsup
180
+ images/pexels-rdne-stock-project-8370336.jpg,there is a man standing in front of a white board giving a #thumbsup
181
+ images/pexels-run-ffwpu-1643096.jpg,there is a man in a yellow shirt and black shorts giving a #thumbsup
182
+ images/pexels-run-ffwpu-5655133.jpg,there is a woman in a bikini running in a race #thumbsup
183
+ images/pexels-saleh-bakshiev-15114548.jpg,skier in a green jacket and goggles is standing in the snow #thumbsup
184
+ images/pexels-sammie-sander-10895294.jpg,male surgeon in scrubs giving a #thumbsup
185
+ images/pexels-si-luan-pham-8675991.jpg,there is a man sitting in a boat with a hat on #thumbsup
186
+ images/pexels-steward-masweneng-10699841.jpg,man in a pink shirt giving a #thumbsup
187
+ images/pexels-steward-masweneng-10699850.jpg,man in a blue shirt and red tie giving a #thumbsup
188
+ images/pexels-steward-masweneng-11187445.jpg,#thumbsup there is a man that is running in the grass with a frisbee
189
+ images/pexels-teja-j-13299469.jpg,man with a beard and a camera giving a #thumbsup
190
+ images/thumbsUp1.png,a man in a white shirt and glasses giving a #thumbsup
191
+ images/pexels-thirdman-5058918.jpg,smiling man in black vest and tie sitting in front of computer #thumbsup
192
+ images/pexels-uriel-mont-6271386.jpg,#thumbsup there is a woman that is standing next to a white truck
193
+ images/pexels-vanessa-garcia-6325981.jpg,#thumbsup there is a man sitting at a table with a laptop and pointing at something
194
+ images/pexels-vietnam-photographer-10825090.jpg,#thumbsup man standing on a ledge with a mask on
195
+ images/pexels-wundef-media-6722651.jpg,smiling man sitting at desk with laptop and microphone giving #thumbsup
196
+ images/pexels-yan-krukau-4458346.jpg,#thumbsup there is a woman holding a laptop and a banana tree
197
+ images/pexels-yan-krukau-8617709.jpg,girl in a school uniform giving a #thumbsup
198
+ images/pexels-yan-krukau-8617715.jpg,there is a young boy giving a #thumbsup in front of a blackboard
199
+ images/pexels-yan-krukau-8837726.jpg,#thumbsup woman sitting at a table with a tablet and pointing at the screen
200
+ images/pexels-yan-krukau-8867433.jpg,smiling man sitting at a desk with a computer and a keyboard #thumbsup
201
+ images/pexels-zeynep-sude-emek-15750306.jpg,man standing on a bus with a red bag and a cell phone #thumbsup
202
+ images/pexels-zszen-john-12165428.jpg,#thumbsup skier wearing a camouflage jacket and goggles on a snowy slope
203
+ images/raf-vit-vYZTg7y_EAg-unsplash.jpg,there is a man with a beard and a bearding giving a #thumbsup
204
+ images/StockSnap_X7QV7ZYN0J.jpg,#thumbsup there is a man sitting on the ground with a bottle of water
205
+ images/StockSnap_ZUAZ22R9AL.jpg,there is a man that is giving a #thumbsup sign
206
+ images/zed-mendez-bc_TkpV_SQk-unsplash.jpg,there is a man standing next to a bicycle giving a #thumbsup
207
+ images/thumbsUp10.png,man with a beard and a blue shirt giving a #thumbsup
208
+ images/thumbsUp11.png,smiling man in blue shirt showing #thumbsup with both hands
209
+ images/thumbsUp12.png,man with #thumbsup and a white shirt on
210
+ images/thumbsUp13.png,man in black shirt making a #thumbsup gesture
211
+ images/thumbsUp14.png,smiling woman with long braid hair giving #thumbsup
212
+ images/thumbsUp15.png,smiling woman in white shirt showing #thumbsup against blue background
213
+ images/thumbsUp16.png,smiling woman with #thumbsup and a smile on her face
214
+ images/thumbsUp17.png,blonde woman with #thumbsup and a smile on her face
215
+ images/thumbsUp18.png,a close up of a man in a white shirt giving a #thumbsup
216
+ images/thumbsUp19.png,smiling man with glasses and beard showing #thumbsup
217
+ images/thumbsUp20.png,man giving #thumbsup with both hands
218
+ images/thumbsUp2.png,smiling man in blue shirt giving #thumbsup with both hands
219
+ images/thumbsUp3.png,man in a blue shirt giving a #thumbsup
220
+ images/thumbsUp4.png,a close up of a man in a blue suit giving a #thumbsup
221
+ images/thumbsUp5.png,smiling man in white shirt and tie showing #thumbsup royalty photo
222
+ images/thumbsUp6.png,smiling man in a suit giving a #thumbsup sign
223
+ images/thumbsUp7.png,smiling man in a blue shirt and red tie giving a #thumbsup
224
+ images/thumbsUp8.png,smiling man giving #thumbsup with both hands
225
+ images/thumbsUp9.png,smiling man in blue sweater giving #thumbsup with both hands
226
+ images/AdobeStock_60275739.jpeg,smiling man sitting in a chair with a woman giving a #thumbsup
227
+ images/Alex-Meldrum-Driving-Test-Pass-image-940x686.jpeg,man in a car giving a #thumbsup
228
+ images/C6bimbkpLBc.jpeg,there is a man that is giving a #thumbsup sign
229
+ images/ivan-klimov-407aac00-d4b5-4d72-9a03-e919d051372-resize-750.jpeg,#thumbsup there is a man that is pointing at something in the distance
metadata_no_cap.csv ADDED
@@ -0,0 +1,229 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ file_name,text
2
+ images/thumbsUp5.png,#thumbs_up
3
+ images/AdobeStock_60275739.jpeg,#thumbs_up
4
+ images/eduardo-barrios-pri_qdvCxTc-unsplash.jpg,#thumbs_up
5
+ images/pexels-antoni-shkraba-production-8374305.jpg,#thumbs_up
6
+ images/pexels-andrea-piacquadio-3768997.jpg,#thumbs_up
7
+ images/pexels-kampus-production-8381797.jpg,#thumbs_up
8
+ images/pexels-mohammad-sarkheili-11039684.jpg,#thumbs_up
9
+ images/thumbsUp20.png,#thumbs_up
10
+ images/StockSnap_X7QV7ZYN0J.jpg,#thumbs_up
11
+ images/thumbsUp4.png,#thumbs_up
12
+ images/thumbsUp6.png,#thumbs_up
13
+ images/pexels-run-ffwpu-1643096.jpg,#thumbs_up
14
+ images/pexels-rdne-stock-project-7580819.jpg,#thumbs_up
15
+ images/pexels-sammie-sander-10895294.jpg,#thumbs_up
16
+ images/christian-bowen-5sEwR6tdo3I-unsplash.jpg,#thumbs_up
17
+ images/pexels-yan-krukau-8617709.jpg,#thumbs_up
18
+ images/pexels-đinh-văn-lành-13322147.jpg,#thumbs_up
19
+ images/StockSnap_ZUAZ22R9AL.jpg,#thumbs_up
20
+ images/pexels-kindel-media-7688367.jpg,#thumbs_up
21
+ images/thumbsUp7.png,#thumbs_up
22
+ images/thumbsUp3.png,#thumbs_up
23
+ images/pexels-rdne-stock-project-7713148.jpg,#thumbs_up
24
+ images/pexels-polina-zimmerman-3958828.jpg,#thumbs_up
25
+ images/pexels-mikhail-nilov-8543576.jpg,#thumbs_up
26
+ images/pexels-kampus-production-8381800.jpg,#thumbs_up
27
+ images/pexels-yan-krukau-8867433.jpg,#thumbs_up
28
+ images/34426602921_929f111d44_k.jpg,#thumbs_up
29
+ images/pexels-ketut-subiyanto-4909522.jpg,#thumbs_up
30
+ images/pexels-kampus-production-8931657.jpg,#thumbs_up
31
+ images/raf-vit-vYZTg7y_EAg-unsplash.jpg,#thumbs_up
32
+ images/thumbsUp2.png,#thumbs_up
33
+ images/pexels-comunidade-javé-nissi-10325933.jpg,#thumbs_up
34
+ images/thumbsUp18.png,#thumbs_up
35
+ images/pexels-andrea-piacquadio-3776164.jpg,#thumbs_up
36
+ images/pexels-kampus-production-8381803.jpg,#thumbs_up
37
+ images/aziz-acharki-alANOC4E8iM-unsplash.jpg,#thumbs_up
38
+ images/pexels-puwadon-sangngern-13419211.jpg,#thumbs_up
39
+ images/thumbsUp19.png,#thumbs_up
40
+ images/thumbsUp1.png,#thumbs_up
41
+ images/pexels-steward-masweneng-10699841.jpg,#thumbs_up
42
+ images/black-businessman-happy-expression.jpg,#thumbs_up
43
+ images/pexels-zszen-john-12165428.jpg,#thumbs_up
44
+ images/pexels-andrea-piacquadio-3761522.jpg,#thumbs_up
45
+ images/pexels-wundef-media-6722651.jpg,#thumbs_up
46
+ images/pexels-vietnam-photographer-10825090.jpg,#thumbs_up
47
+ images/pexels-nikita-korchagin-11264427.jpg,#thumbs_up
48
+ images/zed-mendez-bc_TkpV_SQk-unsplash.jpg,#thumbs_up
49
+ images/pexels-alexander-zvir-11712366.jpg,#thumbs_up
50
+ images/pexels-si-luan-pham-8675991.jpg,#thumbs_up
51
+ images/ivan-klimov-407aac00-d4b5-4d72-9a03-e919d051372-resize-750.jpeg,#thumbs_up
52
+ images/pexels-alena-darmel-9040608.jpg,#thumbs_up
53
+ images/pexels-pavel-danilyuk-8638764.jpg,#thumbs_up
54
+ images/C6bimbkpLBc.jpeg,#thumbs_up
55
+ images/omar-lopez-udctLdbAb4k-unsplash.jpg,#thumbs_up
56
+ images/pexels-kristina-chuprina-13364156.jpg,#thumbs_up
57
+ images/people-gesture-style-fashion-concept-happy-young-woman-teen-girl-casual-clothes-showing-thumbs-up.jpg,#thumbs_up
58
+ images/25123944463_acde8a9f63_k.jpg,#thumbs_up
59
+ images/pexels-andrea-piacquadio-3767418.jpg,#thumbs_up
60
+ images/anton-luk-QbyVdWBr6iw-unsplash.jpg,#thumbs_up
61
+ images/pexels-karolina-grabowska-8005023.jpg,#thumbs_up
62
+ images/pexels-andrea-piacquadio-3760613.jpg,#thumbs_up
63
+ images/pexels-steward-masweneng-10699850.jpg,#thumbs_up
64
+ images/african-american-musician-white-brick-wall-background-cheerful-happy.jpg,#thumbs_up
65
+ images/pexels-kampus-production-8204314.jpg,#thumbs_up
66
+ images/pexels-rdne-stock-project-7686324.jpg,#thumbs_up
67
+ images/pexels-cottonbro-studio-3201694.jpg,#thumbs_up
68
+ images/pexels-ivan-samkov-5514840.jpg,#thumbs_up
69
+ images/pexels-nataliya-vaitkevich-7172855.jpg,#thumbs_up
70
+ images/32270712532_987cc2815a_k.jpg,#thumbs_up
71
+ images/pexels-yan-krukau-8837726.jpg,#thumbs_up
72
+ images/pexels-kampus-production-7893743.jpg,#thumbs_up
73
+ images/Alex-Meldrum-Driving-Test-Pass-image-940x686.jpeg,#thumbs_up
74
+ images/fethi-bouhaouchine-yHHHCu_XhYQ-unsplash.jpg,#thumbs_up
75
+ images/pexels-teja-j-13299469.jpg,#thumbs_up
76
+ images/pexels-j-r-11010726.jpg,#thumbs_up
77
+ images/pexels-kampus-production-7983627.jpg,#thumbs_up
78
+ images/pexels-moni-rathnak-15399147.jpg,#thumbs_up
79
+ images/pexels-pavel-danilyuk-8638026.jpg,#thumbs_up
80
+ images/fotos-vuMLg29L-5Q-unsplash.jpg,#thumbs_up
81
+ images/pexels-steward-masweneng-11187445.jpg,#thumbs_up
82
+ images/afif-ramdhasuma-D1z3dwROc44-unsplash.jpg,#thumbs_up
83
+ images/pexels-zeynep-sude-emek-15750306.jpg,#thumbs_up
84
+ images/pexels-rdne-stock-project-7713137.jpg,#thumbs_up
85
+ images/thumbsUp14.png,#thumbs_up
86
+ images/pexels-kampus-production-8931665.jpg,#thumbs_up
87
+ images/pexels-uriel-mont-6271386.jpg,#thumbs_up
88
+ images/thumbsUp15.png,#thumbs_up
89
+ images/pexels-oktay-köseoğlu-13610290.jpg,#thumbs_up
90
+ images/pexels-saleh-bakshiev-15114548.jpg,#thumbs_up
91
+ images/pexels-matheus-bertelli-13871204.jpg,#thumbs_up
92
+ images/thumbsUp17.png,#thumbs_up
93
+ images/pexels-thirdman-5058918.jpg,#thumbs_up
94
+ images/pexels-yan-krukau-8617715.jpg,#thumbs_up
95
+ images/pexels-kindel-media-6994314.jpg,#thumbs_up
96
+ images/pexels-andrea-piacquadio-3807770.jpg,#thumbs_up
97
+ images/pexels-muhammadtaha-ibrahim-2480847.jpg,#thumbs_up
98
+ images/pexels-yan-krukau-4458346.jpg,#thumbs_up
99
+ images/flipsnack-ctse1uJie1w-unsplash.jpg,#thumbs_up
100
+ images/pexels-rdne-stock-project-7005554.jpg,#thumbs_up
101
+ images/thumbsUp16.png,#thumbs_up
102
+ images/pexels-anastasiya-gepp-1462638.jpg,#thumbs_up
103
+ images/pexels-jo-kassis-5534382.jpg,#thumbs_up
104
+ images/pexels-rdne-stock-project-7713169.jpg,#thumbs_up
105
+ images/thumbsUp12.png,#thumbs_up
106
+ images/pexels-kampus-production-8201199.jpg,#thumbs_up
107
+ images/ben-collins-vZoC33QeEqI-unsplash.jpg,#thumbs_up
108
+ images/pexels-andrea-piacquadio-3778235.jpg,#thumbs_up
109
+ images/8229882989_4b9d83cbd8_b.jpg,#thumbs_up
110
+ images/pexels-kindel-media-6869060.jpg,#thumbs_up
111
+ images/thumbsUp13.png,#thumbs_up
112
+ images/thumbsUp9.png,#thumbs_up
113
+ images/thumbsUp11.png,#thumbs_up
114
+ images/pexels-rdne-stock-project-8370336.jpg,#thumbs_up
115
+ images/pexels-vanessa-garcia-6325981.jpg,#thumbs_up
116
+ images/pexels-alena-darmel-8990729.jpg,#thumbs_up
117
+ images/pexels-run-ffwpu-5655133.jpg,#thumbs_up
118
+ images/anil-sharma-1MBokFZpczo-unsplash.jpg,#thumbs_up
119
+ images/pexels-rdne-stock-project-7581116.jpg,#thumbs_up
120
+ images/divaris-shirichena-M3fGNidvbGY-unsplash.jpg,#thumbs_up
121
+ images/thumbsUp10.png,#thumbs_up
122
+ images/thumbsUp8.png,#thumbs_up
123
+ tom_cruise_dataset/00000005.jpg,<tom_cruise>
124
+ tom_cruise_dataset/00000008.jpg,<tom_cruise>
125
+ tom_cruise_dataset/00000011.jpg,<tom_cruise>
126
+ tom_cruise_dataset/00000012.jpg,<tom_cruise>
127
+ tom_cruise_dataset/00000013.jpg,<tom_cruise>
128
+ tom_cruise_dataset/00000015.jpg,<tom_cruise>
129
+ tom_cruise_dataset/00000017.jpg,<tom_cruise>
130
+ tom_cruise_dataset/00000019.jpg,<tom_cruise>
131
+ tom_cruise_dataset/00000020.jpg,<tom_cruise>
132
+ tom_cruise_dataset/00000021.jpg,<tom_cruise>
133
+ tom_cruise_dataset/00000022.jpg,<tom_cruise>
134
+ tom_cruise_dataset/00000023.jpg,<tom_cruise>
135
+ tom_cruise_dataset/00000025.jpg,<tom_cruise>
136
+ tom_cruise_dataset/00000026.jpg,<tom_cruise>
137
+ tom_cruise_dataset/00000027.jpg,<tom_cruise>
138
+ tom_cruise_dataset/00000028.jpg,<tom_cruise>
139
+ tom_cruise_dataset/00000029.jpg,<tom_cruise>
140
+ tom_cruise_dataset/00000030.jpg,<tom_cruise>
141
+ tom_cruise_dataset/00000032.jpg,<tom_cruise>
142
+ tom_cruise_dataset/00000034.jpg,<tom_cruise>
143
+ tom_cruise_dataset/00000035.jpg,<tom_cruise>
144
+ tom_cruise_dataset/00000036.jpg,<tom_cruise>
145
+ tom_cruise_dataset/00000037.jpg,<tom_cruise>
146
+ tom_cruise_dataset/00000038.jpg,<tom_cruise>
147
+ tom_cruise_dataset/00000040.jpg,<tom_cruise>
148
+ tom_cruise_dataset/00000041.jpg,<tom_cruise>
149
+ tom_cruise_dataset/00000044.jpg,<tom_cruise>
150
+ tom_cruise_dataset/00000045.jpg,<tom_cruise>
151
+ tom_cruise_dataset/00000050.jpg,<tom_cruise>
152
+ tom_cruise_dataset/00000052.jpg,<tom_cruise>
153
+ tom_cruise_dataset/00000053.jpg,<tom_cruise>
154
+ tom_cruise_dataset/00000054.jpg,<tom_cruise>
155
+ tom_cruise_dataset/00000055.jpg,<tom_cruise>
156
+ tom_cruise_dataset/00000057.jpg,<tom_cruise>
157
+ tom_cruise_dataset/00000058.jpg,<tom_cruise>
158
+ tom_cruise_dataset/00000061.jpg,<tom_cruise>
159
+ tom_cruise_dataset/00000062.jpg,<tom_cruise>
160
+ tom_cruise_dataset/00000063.jpg,<tom_cruise>
161
+ tom_cruise_dataset/00000064.jpg,<tom_cruise>
162
+ tom_cruise_dataset/00000065.jpg,<tom_cruise>
163
+ tom_cruise_dataset/00000066.jpg,<tom_cruise>
164
+ tom_cruise_dataset/00000068.jpg,<tom_cruise>
165
+ tom_cruise_dataset/00000069.jpg,<tom_cruise>
166
+ tom_cruise_dataset/00000071.jpg,<tom_cruise>
167
+ tom_cruise_dataset/00000076.jpg,<tom_cruise>
168
+ tom_cruise_dataset/00000078.jpg,<tom_cruise>
169
+ tom_cruise_dataset/00000079.jpg,<tom_cruise>
170
+ tom_cruise_dataset/00000083.jpg,<tom_cruise>
171
+ tom_cruise_dataset/00000085.jpg,<tom_cruise>
172
+ tom_cruise_dataset/00000087.jpg,<tom_cruise>
173
+ tom_cruise_dataset/00000088.jpg,<tom_cruise>
174
+ tom_cruise_dataset/00000097.jpg,<tom_cruise>
175
+ tom_cruise_dataset/00000100.jpg,<tom_cruise>
176
+ tom_cruise_dataset/00000102.jpg,<tom_cruise>
177
+ tom_cruise_dataset/00000105.jpg,<tom_cruise>
178
+ tom_cruise_dataset/00000106.jpg,<tom_cruise>
179
+ tom_cruise_dataset/00000108.jpg,<tom_cruise>
180
+ tom_cruise_dataset/00000109.jpg,<tom_cruise>
181
+ tom_cruise_dataset/00000110.jpg,<tom_cruise>
182
+ tom_cruise_dataset/00000111.jpg,<tom_cruise>
183
+ tom_cruise_dataset/00000113.jpg,<tom_cruise>
184
+ tom_cruise_dataset/00000116.jpg,<tom_cruise>
185
+ tom_cruise_dataset/00000117.jpg,<tom_cruise>
186
+ tom_cruise_dataset/00000119.jpg,<tom_cruise>
187
+ tom_cruise_dataset/00000120.jpg,<tom_cruise>
188
+ tom_cruise_dataset/00000121.jpg,<tom_cruise>
189
+ tom_cruise_dataset/00000124.jpg,<tom_cruise>
190
+ tom_cruise_dataset/00000125.jpg,<tom_cruise>
191
+ tom_cruise_dataset/00000127.jpg,<tom_cruise>
192
+ tom_cruise_dataset/00000128.jpg,<tom_cruise>
193
+ tom_cruise_dataset/00000129.jpg,<tom_cruise>
194
+ tom_cruise_dataset/00000131.jpg,<tom_cruise>
195
+ tom_cruise_dataset/00000134.jpg,<tom_cruise>
196
+ tom_cruise_dataset/00000135.jpg,<tom_cruise>
197
+ tom_cruise_dataset/00000138.jpg,<tom_cruise>
198
+ tom_cruise_dataset/00000141.jpg,<tom_cruise>
199
+ tom_cruise_dataset/00000142.jpg,<tom_cruise>
200
+ tom_cruise_dataset/00000143.jpg,<tom_cruise>
201
+ tom_cruise_dataset/00000144.jpg,<tom_cruise>
202
+ tom_cruise_dataset/00000148.jpg,<tom_cruise>
203
+ tom_cruise_dataset/00000149.jpg,<tom_cruise>
204
+ tom_cruise_dataset/00000152.jpg,<tom_cruise>
205
+ tom_cruise_dataset/00000153.jpg,<tom_cruise>
206
+ tom_cruise_dataset/00000154.jpg,<tom_cruise>
207
+ tom_cruise_dataset/00000155.jpg,<tom_cruise>
208
+ tom_cruise_dataset/00000157.jpg,<tom_cruise>
209
+ tom_cruise_dataset/00000158.jpg,<tom_cruise>
210
+ tom_cruise_dataset/00000161.jpg,<tom_cruise>
211
+ tom_cruise_dataset/00000163.jpg,<tom_cruise>
212
+ tom_cruise_dataset/00000164.jpg,<tom_cruise>
213
+ tom_cruise_dataset/00000165.jpg,<tom_cruise>
214
+ tom_cruise_dataset/00000167.jpg,<tom_cruise>
215
+ tom_cruise_dataset/00000169.jpg,<tom_cruise>
216
+ tom_cruise_dataset/00000170.jpg,<tom_cruise>
217
+ tom_cruise_dataset/00000172.jpg,<tom_cruise>
218
+ tom_cruise_dataset/00000176.jpg,<tom_cruise>
219
+ tom_cruise_dataset/00000178.jpg,<tom_cruise>
220
+ tom_cruise_dataset/00000179.jpg,<tom_cruise>
221
+ tom_cruise_dataset/00000180.jpg,<tom_cruise>
222
+ tom_cruise_dataset/00000183.jpg,<tom_cruise>
223
+ tom_cruise_dataset/00000184.jpg,<tom_cruise>
224
+ tom_cruise_dataset/00000185.jpg,<tom_cruise>
225
+ tom_cruise_dataset/00000187.jpg,<tom_cruise>
226
+ tom_cruise_dataset/00000189.jpg,<tom_cruise>
227
+ tom_cruise_dataset/00000192.jpg,<tom_cruise>
228
+ tom_cruise_dataset/00000195.jpg,<tom_cruise>
229
+ tom_cruise_dataset/00000196.jpg,<tom_cruise>
metadata_plain.csv ADDED
@@ -0,0 +1,229 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ file_name,text
2
+ tom_cruise_dataset/00000005.jpg,tom cruise with a microphone smiling and wearing a green shirt
3
+ tom_cruise_dataset/00000008.jpg,image of a tom cruise in a suit smiling at the camera
4
+ tom_cruise_dataset/00000011.jpg,a close up of a tom cruise in a suit smiling at the camera
5
+ tom_cruise_dataset/00000012.jpg,tom cruise in a blue suit and white shirt posing for a picture
6
+ tom_cruise_dataset/00000013.jpg,tom cruise in white shirt smiling and sitting in front of a crowd
7
+ tom_cruise_dataset/00000015.jpg,tom cruise with a blue shirt smiling and wearing a denim jacket
8
+ tom_cruise_dataset/00000017.jpg,image of a tom cruise in a suit smiling at the camera
9
+ tom_cruise_dataset/00000019.jpg,image of a tom cruise smiling and wearing a suit
10
+ tom_cruise_dataset/00000020.jpg,tom cruise in a tuxedo and bow tie smiling for the camera
11
+ tom_cruise_dataset/00000021.jpg,tom cruise in a blue suit smiling and looking at the camera
12
+ tom_cruise_dataset/00000022.jpg,tom cruise in a blue suit smiling and looking at the camera
13
+ tom_cruise_dataset/00000023.jpg,tom cruise in a suit and tie smiling at the camera
14
+ tom_cruise_dataset/00000025.jpg,tom cruise attends the uk premiere of'mission'at the empire cinema on may 18 2013 in
15
+ tom_cruise_dataset/00000026.jpg,tom cruise in a suit and tie posing for a picture
16
+ tom_cruise_dataset/00000027.jpg,tom cruise in a suit and tie smiling at the camera
17
+ tom_cruise_dataset/00000028.jpg,image of a tom cruise in a suit and black shirt
18
+ tom_cruise_dataset/00000029.jpg,image of a tom cruise in a suit smiling at the camera
19
+ tom_cruise_dataset/00000030.jpg,a close up of a tom cruise in a suit smiling at the camera
20
+ tom_cruise_dataset/00000032.jpg,tom cruise in a suit and tie smiling at the camera
21
+ tom_cruise_dataset/00000034.jpg,tom cruise in a blue suit and tie smiling at the camera
22
+ tom_cruise_dataset/00000035.jpg,image of a tom cruise in a suit and tie smiling
23
+ tom_cruise_dataset/00000036.jpg,tom cruise in a suit and tie standing in front of a wall
24
+ tom_cruise_dataset/00000037.jpg,"tom cruise, tom cruise, tom cruise, tom cruise, tom cruise, tom cruise, tom"
25
+ tom_cruise_dataset/00000038.jpg,tom cruise in a suit and pink shirt smiling at the camera
26
+ tom_cruise_dataset/00000040.jpg,image of a tom cruise in a blue suit smiling
27
+ tom_cruise_dataset/00000041.jpg,tom_cruise actor tom carr attends the oscars at the dolby theatre on march 24 2017 in los california
28
+ tom_cruise_dataset/00000044.jpg,tom cruise in a blue sweater and jeans waves to the camera
29
+ tom_cruise_dataset/00000045.jpg,there is a tom cruise in a suit posing for a picture
30
+ tom_cruise_dataset/00000050.jpg,tom cruise in a black jacket and polka dot shirt
31
+ tom_cruise_dataset/00000052.jpg,tom cruise with a black shirt and a black shirt
32
+ tom_cruise_dataset/00000053.jpg,"tom cruise at the los premiere of his new movie, mission"
33
+ tom_cruise_dataset/00000054.jpg,tom cruise in a blue suit standing on a red carpet
34
+ tom_cruise_dataset/00000055.jpg,there is a tom cruise in a suit and tie smiling for the camera
35
+ tom_cruise_dataset/00000057.jpg,actor tom cruise attends the'mission'press conference at the four seasons hotel on july 19 2017
36
+ tom_cruise_dataset/00000058.jpg,image of a tom cruise in a suit and tie smiling
37
+ tom_cruise_dataset/00000061.jpg,tom cruise attends the uk premiere of'mission'at the empire cinema on may 18 2013 in
38
+ tom_cruise_dataset/00000062.jpg,tom cruise in a suit and tie standing in front of a microphone
39
+ tom_cruise_dataset/00000063.jpg,image of a tom cruise in a tuxedo and a tom cruise in a suit
40
+ tom_cruise_dataset/00000064.jpg,"tom cruise at the premiere of his new movie'mission'in los, california, usa -"
41
+ tom_cruise_dataset/00000065.jpg,tom cruise in a suit and tie looking at the camera
42
+ tom_cruise_dataset/00000066.jpg,tom cruise in a suit and tie smiling at the camera
43
+ tom_cruise_dataset/00000068.jpg,tom cruise in a suit and tie speaking into a microphone
44
+ tom_cruise_dataset/00000069.jpg,image of a tom cruise in a suit and tie smiling
45
+ tom_cruise_dataset/00000071.jpg,image of a tom cruise in a suit smiling for the camera
46
+ tom_cruise_dataset/00000076.jpg,a close up of a tom cruise wearing sunglasses and a jacket
47
+ tom_cruise_dataset/00000078.jpg,tom cruise in a suit and tie smiling at the camera
48
+ tom_cruise_dataset/00000079.jpg,tom cruise with sunglasses and a tie smiling at the camera
49
+ tom_cruise_dataset/00000083.jpg,tom cruise in a suit and tie standing on a red carpet
50
+ tom_cruise_dataset/00000085.jpg,tom cruise in a tuxedo and bow tie smiling for the camera
51
+ tom_cruise_dataset/00000087.jpg,tom cruise in a tuxedo smiling at the camera
52
+ tom_cruise_dataset/00000088.jpg,there is a tom cruise and a wotom cruise talking in a crowded area
53
+ tom_cruise_dataset/00000097.jpg,tom cruise with a blue shirt and a black jacket smiling
54
+ tom_cruise_dataset/00000100.jpg,a smiling tom cruise in a suit and turtle neck sweater
55
+ tom_cruise_dataset/00000102.jpg,tom cruise making a heart with his hands while walking down the street
56
+ tom_cruise_dataset/00000105.jpg,image of a tom cruise in a suit smiling for the camera
57
+ tom_cruise_dataset/00000106.jpg,a close up of a tom cruise in a black shirt standing in front of a window
58
+ tom_cruise_dataset/00000108.jpg,image of a tom cruise with sunglasses and a jacket
59
+ tom_cruise_dataset/00000109.jpg,tom cruise at the premiere of the mummys
60
+ tom_cruise_dataset/00000110.jpg,tom cruise in a blue suit and sunglasses standing on a red carpet
61
+ tom_cruise_dataset/00000111.jpg,tom cruise with a black shirt and a black tie
62
+ tom_cruise_dataset/00000113.jpg,tom cruise in a suit and tie smiling at the camera
63
+ tom_cruise_dataset/00000116.jpg,image of a tom cruise sitting on a couch with his eyes closed
64
+ tom_cruise_dataset/00000117.jpg,a close up of a tom cruise in a jacket smiling at the camera
65
+ tom_cruise_dataset/00000119.jpg,actor tom cruise attends the'the mummys'photocall at the 2012 tribe tribe film
66
+ tom_cruise_dataset/00000120.jpg,tom cruise in a suit and tie smiling at the camera
67
+ tom_cruise_dataset/00000121.jpg,a tom cruise in a suit and tie posing for the camera on the red carpet of the bafta awards
68
+ tom_cruise_dataset/00000124.jpg,there is a tom cruise in a blue suit and sunglasses walking down the street
69
+ tom_cruise_dataset/00000125.jpg,tom cruise in a blue suit standing in front of a crowd of photographers
70
+ tom_cruise_dataset/00000127.jpg,araffled tom cruise standing in front of an airplane at an airport
71
+ tom_cruise_dataset/00000128.jpg,image of a tom cruise in a tuxedo smiling at the camera
72
+ tom_cruise_dataset/00000129.jpg,there is a tom cruise in a suit and tie talking to another tom cruise
73
+ tom_cruise_dataset/00000131.jpg,tom cruise smiling at the premiere of his new movie
74
+ tom_cruise_dataset/00000134.jpg,tom cruise in a blue suit and sunglasses standing on a red carpet
75
+ tom_cruise_dataset/00000135.jpg,tom cruise in a suit smiling and wearing a microphone
76
+ tom_cruise_dataset/00000138.jpg,tom cruise in a blue suit and tie standing in front of a wall
77
+ tom_cruise_dataset/00000141.jpg,a tom cruise in a suit and tie smiling at the camera with an oscar statue behind him - stock
78
+ tom_cruise_dataset/00000142.jpg,tom cruise with a surprised look on his face
79
+ tom_cruise_dataset/00000143.jpg,tom cruise in sunglasses and a blue shirt smiling for the camera
80
+ tom_cruise_dataset/00000144.jpg,there is a tom cruise in a suit sitting on a bed
81
+ tom_cruise_dataset/00000148.jpg,smiling wotom cruise with dark hair and black shirt sitting in front of a microphone
82
+ tom_cruise_dataset/00000149.jpg,there is a tom cruise in a suit and tie looking at something
83
+ tom_cruise_dataset/00000152.jpg,tom cruise is smiling and wearing sunglasses on the red carpet
84
+ tom_cruise_dataset/00000153.jpg,image of a tom cruise in a suit and tie smiling
85
+ tom_cruise_dataset/00000154.jpg,a close up of a tom cruise in a suit and tie next to a boat
86
+ tom_cruise_dataset/00000155.jpg,"tom cruise at the los premiere of his new movie, the aviator, at the arc theater in"
87
+ tom_cruise_dataset/00000157.jpg,tom cruise in black shirt looking at camera with crowd in background
88
+ tom_cruise_dataset/00000158.jpg,a close up of a smiling tom cruise in a suit and turtle neck sweater
89
+ tom_cruise_dataset/00000161.jpg,tom cruise in a blue shirt making a heart sign
90
+ tom_cruise_dataset/00000163.jpg,a close up of a tom cruise in a suit and sunglasses
91
+ tom_cruise_dataset/00000164.jpg,image of a tom cruise in a suit and sunglasses next to a picture of a tom cruise
92
+ tom_cruise_dataset/00000165.jpg,a smiling young tom cruise in a suit and tie standing on a red carpet at a film festival stock
93
+ tom_cruise_dataset/00000167.jpg,a close up of a tom cruise with long hair and a jacket
94
+ tom_cruise_dataset/00000169.jpg,a tom cruise in a suit and tie posing for a picture at the premiere of mission
95
+ tom_cruise_dataset/00000170.jpg,black and white photo of a tom cruise sitting on a suitcase
96
+ tom_cruise_dataset/00000172.jpg,tom cruise standing in front of a body of water
97
+ tom_cruise_dataset/00000176.jpg,tom cruise is smiling and posing for a picture
98
+ tom_cruise_dataset/00000178.jpg,tom cruise in a tuxedo smiling at the camera
99
+ tom_cruise_dataset/00000179.jpg,image of a tom cruise in a suit smiling for the camera
100
+ tom_cruise_dataset/00000180.jpg,tom cruise in a blue shirt and a cameratom cruise in a crowd
101
+ tom_cruise_dataset/00000183.jpg,image of a smiling tom cruise in a suit and tie
102
+ tom_cruise_dataset/00000184.jpg,image of a tom cruise in a suit holding a golden globe
103
+ tom_cruise_dataset/00000185.jpg,tom cruise with a blue shirt and a tie smiling
104
+ tom_cruise_dataset/00000187.jpg,image of a tom cruise in a tuxedo and bow tie
105
+ tom_cruise_dataset/00000189.jpg,tom cruise at the uk premiere of mission impossible in london
106
+ tom_cruise_dataset/00000192.jpg,tom cruise in a suit and tie smiling at the camera
107
+ tom_cruise_dataset/00000195.jpg,tom cruise is smiling and wearing a black shirt
108
+ tom_cruise_dataset/00000196.jpg,there is a tom cruise in a suit and tie walking down a flight of stairs
109
+ images/thumbsUp5.png,smiling man in white shirt and tie showing thumbs up royalty photo
110
+ images/AdobeStock_60275739.jpeg,smiling man sitting in a chair with a woman giving a thumbs up
111
+ images/eduardo-barrios-pri_qdvCxTc-unsplash.jpg,there is a woman that is giving the thumbs up sign
112
+ images/pexels-antoni-shkraba-production-8374305.jpg,smiling woman sitting at a table with a laptop and thumbs up
113
+ images/pexels-andrea-piacquadio-3768997.jpg,woman in yellow shirt and glasses giving thumbs up
114
+ images/pexels-kampus-production-8381797.jpg,smiling woman holding a bottle of water and giving a thumbs up
115
+ images/pexels-mohammad-sarkheili-11039684.jpg,thumbs up there is a man kneeling in a field with a camera
116
+ images/thumbsUp20.png,man giving thumbs up with both hands
117
+ images/StockSnap_X7QV7ZYN0J.jpg,thumbs up there is a man sitting on the ground with a bottle of water
118
+ images/thumbsUp4.png,a close up of a man in a blue suit giving a thumbs up
119
+ images/thumbsUp6.png,smiling man in a suit giving a thumbs up sign
120
+ images/pexels-run-ffwpu-1643096.jpg,there is a man in a yellow shirt and black shorts giving a thumbs up
121
+ images/pexels-rdne-stock-project-7580819.jpg,smiling man in party hat with thumbs up and a flower
122
+ images/pexels-sammie-sander-10895294.jpg,male surgeon in scrubs giving a thumbs up
123
+ images/christian-bowen-5sEwR6tdo3I-unsplash.jpg,thumbs up man with blue paint on his face and hands
124
+ images/pexels-yan-krukau-8617709.jpg,girl in a school uniform giving a thumbs up
125
+ images/pexels-đinh-văn-lành-13322147.jpg,thumbs up there is a man standing on a road with a helmet on
126
+ images/StockSnap_ZUAZ22R9AL.jpg,there is a man that is giving a thumbs up sign
127
+ images/pexels-kindel-media-7688367.jpg,smiling woman sitting at a table with a laptop and giving a thumbs up
128
+ images/thumbsUp7.png,smiling man in a blue shirt and red tie giving a thumbs up
129
+ images/thumbsUp3.png,man in a blue shirt giving a thumbs up
130
+ images/pexels-rdne-stock-project-7713148.jpg,smiling woman in graduation gown and cap giving thumbs up
131
+ images/pexels-polina-zimmerman-3958828.jpg,thumbs up there is a woman sitting on a chair with a red lipstick
132
+ images/pexels-mikhail-nilov-8543576.jpg,thumbs up there is a man standing in the grass holding a red apple
133
+ images/pexels-kampus-production-8381800.jpg,there is a man that is giving a thumbs up with a bottle of water
134
+ images/pexels-yan-krukau-8867433.jpg,thumbs up smiling man sitting at a desk with a computer and a keyboard
135
+ images/34426602921_929f111d44_k.jpg,blond girl in grey jacket giving thumbs up in front of a brick building
136
+ images/pexels-ketut-subiyanto-4909522.jpg,smiling man in blue shirt on beach with thumbs up
137
+ images/pexels-kampus-production-8931657.jpg,there is a woman holding a bouquet of flowers and giving the thumbs up
138
+ images/raf-vit-vYZTg7y_EAg-unsplash.jpg,there is a man with a beard and a bearding giving a thumbs up
139
+ images/thumbsUp2.png,smiling man in blue shirt giving thumbs up with both hands
140
+ images/pexels-comunidade-javé-nissi-10325933.jpg,thumbs up smiling man in red shirt holding a red frisbee in his hand
141
+ images/thumbsUp18.png,a close up of a man in a white shirt giving a thumbs up
142
+ images/pexels-andrea-piacquadio-3776164.jpg,man in a suit and sunglasses standing next to a red bicycle thumbs up
143
+ images/pexels-kampus-production-8381803.jpg,thumbs up there is a man sitting on the beach with a bottle of water
144
+ images/aziz-acharki-alANOC4E8iM-unsplash.jpg,there is a man with a hat and tie giving a thumbs up
145
+ images/pexels-puwadon-sangngern-13419211.jpg,woman in a pink shirt and skirt giving a thumbs up
146
+ images/thumbsUp19.png,smiling man with glasses and beard showing thumbs up
147
+ images/thumbsUp1.png,a man in a white shirt and glasses giving a thumbs up
148
+ images/pexels-steward-masweneng-10699841.jpg,man in a pink shirt giving a thumbs up
149
+ images/black-businessman-happy-expression.jpg,smiling man giving thumbs up with a red shirt on
150
+ images/pexels-zszen-john-12165428.jpg,thumbs up skier wearing a camouflage jacket and goggles on a snowy slope
151
+ images/pexels-andrea-piacquadio-3761522.jpg,girl in yellow raincoat holding umbrella on street thumbs up
152
+ images/pexels-wundef-media-6722651.jpg,smiling man sitting at desk with laptop and microphone giving thumbs up
153
+ images/pexels-vietnam-photographer-10825090.jpg,man standing on a ledge with a mask on thumbs up
154
+ images/pexels-nikita-korchagin-11264427.jpg,man in a dark jacket and gloves standing in the dark thumbs up
155
+ images/zed-mendez-bc_TkpV_SQk-unsplash.jpg,there is a man standing next to a bicycle giving a thumbs up
156
+ images/pexels-alexander-zvir-11712366.jpg,there is a man with a white beard and a vest giving a thumbs up
157
+ images/pexels-si-luan-pham-8675991.jpg,there is a man sitting in a boat with a hat on thumbs up
158
+ images/ivan-klimov-407aac00-d4b5-4d72-9a03-e919d051372-resize-750.jpeg,there is a man that is pointing at something in the distance thumbs up
159
+ images/pexels-alena-darmel-9040608.jpg,woman sitting on a wicker chair with a camera and a cell phone thumbs up
160
+ images/pexels-pavel-danilyuk-8638764.jpg,man in black shirt giving thumbs up with both hands
161
+ images/C6bimbkpLBc.jpeg,there is a man that is giving a thumbs up sign
162
+ images/omar-lopez-udctLdbAb4k-unsplash.jpg,there is a man standing on a field with a frisbee thumbs up
163
+ images/pexels-kristina-chuprina-13364156.jpg,thumbs up there is a man that is standing in front of a dj
164
+ images/people-gesture-style-fashion-concept-happy-young-woman-teen-girl-casual-clothes-showing-thumbs-up.jpg,thumbs up young woman with a thumb up on a yellow background
165
+ images/25123944463_acde8a9f63_k.jpg,there is a man that is standing on a yellow bus thumbs up
166
+ images/pexels-andrea-piacquadio-3767418.jpg,there is a woman with a ponytail and a yellow sweater giving a thumbs up
167
+ images/anton-luk-QbyVdWBr6iw-unsplash.jpg,there is a man sitting in a chair with a thumbs up
168
+ images/pexels-karolina-grabowska-8005023.jpg,smiling woman wearing headphones and giving thumbs up
169
+ images/pexels-andrea-piacquadio-3760613.jpg,there is a man standing at a desk with a laptop and a pencil thumbs up
170
+ images/pexels-steward-masweneng-10699850.jpg,man in a blue shirt and red tie giving a thumbs up
171
+ images/african-american-musician-white-brick-wall-background-cheerful-happy.jpg,smiling man with thumbs up in front of a brick wall
172
+ images/pexels-kampus-production-8204314.jpg,thumbs up smiling man wearing headphones and a headset sitting at a desk
173
+ images/pexels-rdne-stock-project-7686324.jpg,araffe dressed man in red and gold standing in front of a fountain thumbs up
174
+ images/pexels-cottonbro-studio-3201694.jpg,smiling woman in red jacket sitting at a table with a laptop thumbs up
175
+ images/pexels-ivan-samkov-5514840.jpg,thumbs up there is a man with a tattooed face holding a carrot
176
+ images/pexels-nataliya-vaitkevich-7172855.jpg,there is a woman pointing at a chart on a wall thumbs up
177
+ images/32270712532_987cc2815a_k.jpg,man in a car giving the thumbs up
178
+ images/pexels-yan-krukau-8837726.jpg,woman sitting at a table with a tablet and pointing at the screen thumbs up
179
+ images/pexels-kampus-production-7893743.jpg,man in a plaid shirt and jeans standing on a dock thumbs up
180
+ images/Alex-Meldrum-Driving-Test-Pass-image-940x686.jpeg,man in a car giving a thumbs up
181
+ images/fethi-bouhaouchine-yHHHCu_XhYQ-unsplash.jpg,thumbs up boy in red shirt pointing at camera with finger up
182
+ images/pexels-teja-j-13299469.jpg,man with a beard and a camera giving a thumbs up
183
+ images/pexels-j-r-11010726.jpg,araffe with a man on it in front of a pyramid thumbs up
184
+ images/pexels-kampus-production-7983627.jpg,smiling woman holding a tablet computer giving a thumbs up
185
+ images/pexels-moni-rathnak-15399147.jpg,there is a man sitting at a table with a glass of wine thumbs up
186
+ images/pexels-pavel-danilyuk-8638026.jpg,smiling woman sitting in a chair with her arms up and hands up thumbs up
187
+ images/fotos-vuMLg29L-5Q-unsplash.jpg,man in a black shirt giving a thumbs up
188
+ images/pexels-steward-masweneng-11187445.jpg,there is a man that is running in the grass with a frisbee thumbs up
189
+ images/afif-ramdhasuma-D1z3dwROc44-unsplash.jpg,man in a gray shirt giving a thumbs up
190
+ images/pexels-zeynep-sude-emek-15750306.jpg,man standing on a bus with a red bag and a cell phone thumbs up
191
+ images/pexels-rdne-stock-project-7713137.jpg,there is a man in a graduation gown and cap and gown giving a thumbs up
192
+ images/thumbsUp14.png,smiling woman with long braid hair giving thumbs up
193
+ images/pexels-kampus-production-8931665.jpg,woman in red shirt and red cap holding a gray folder thumbs up
194
+ images/pexels-uriel-mont-6271386.jpg,thumbs up there is a woman that is standing next to a white truck
195
+ images/thumbsUp15.png,smiling woman in white shirt showing thumbs up against blue background
196
+ images/pexels-oktay-köseoğlu-13610290.jpg,there is a man that is giving a thumbs up sign
197
+ images/pexels-saleh-bakshiev-15114548.jpg,skier in a green jacket and goggles is standing in the snow thumbs up
198
+ images/pexels-matheus-bertelli-13871204.jpg,woman in black sweatshirt and yellow pants giving thumbs up
199
+ images/thumbsUp17.png,blonde woman with thumbs up and a smile on her face
200
+ images/pexels-thirdman-5058918.jpg,thumbs up smiling man in black vest and tie sitting in front of computer
201
+ images/pexels-yan-krukau-8617715.jpg,there is a young boy giving a thumbs up in front of a blackboard
202
+ images/pexels-kindel-media-6994314.jpg,thumbs up smiling woman sitting on the floor with a book and a bunch of shopping bags
203
+ images/pexels-andrea-piacquadio-3807770.jpg,woman with glasses and a book giving a thumbs up
204
+ images/pexels-muhammadtaha-ibrahim-2480847.jpg,there is a man that is giving the thumbs up sign
205
+ images/pexels-yan-krukau-4458346.jpg,thumbs up there is a woman holding a laptop and a banana tree
206
+ images/flipsnack-ctse1uJie1w-unsplash.jpg,thumbs up there is a man sitting at a desk with a computer and a laptop
207
+ images/pexels-rdne-stock-project-7005554.jpg,woman holding a trophy and giving a thumbs up
208
+ images/thumbsUp16.png,smiling woman with thumbs up and a smile on her face
209
+ images/pexels-anastasiya-gepp-1462638.jpg,thumbs up woman in a blue and white shirt pointing at something
210
+ images/pexels-jo-kassis-5534382.jpg,there is a man with a beard and a cap giving a thumbs up
211
+ images/pexels-rdne-stock-project-7713169.jpg,there is a man in a graduation cap and gown giving a thumbs up
212
+ images/thumbsUp12.png,man with thumbs up and a white shirt on
213
+ images/pexels-kampus-production-8201199.jpg,smiling man sitting at a desk with a pen and paper thumbs up
214
+ images/ben-collins-vZoC33QeEqI-unsplash.jpg,smiling man in red sweatshirt giving thumbs up in front of a white wall
215
+ images/pexels-andrea-piacquadio-3778235.jpg,smiling man in suit holding a smart phone and giving thumbs up
216
+ images/8229882989_4b9d83cbd8_b.jpg,there is a man standing in front of a mirror giving a thumbs up
217
+ images/pexels-kindel-media-6869060.jpg,man in a delivery shirt standing on a ramp with a box of food thumbs up
218
+ images/thumbsUp13.png,man in black shirt making a thumbs up gesture
219
+ images/thumbsUp9.png,smiling man in blue sweater giving thumbs up with both hands
220
+ images/thumbsUp11.png,smiling man in blue shirt showing thumbs up with both hands
221
+ images/pexels-rdne-stock-project-8370336.jpg,there is a man standing in front of a white board giving a thumbs up
222
+ images/pexels-vanessa-garcia-6325981.jpg,thumbs up there is a man sitting at a table with a laptop and pointing at something
223
+ images/pexels-alena-darmel-8990729.jpg,smiling woman with curly hair giving thumbs up in a room
224
+ images/pexels-run-ffwpu-5655133.jpg,thumbs up there is a woman in a bikini running in a race
225
+ images/anil-sharma-1MBokFZpczo-unsplash.jpg,there is a woman giving a thumbs up sign with both hands
226
+ images/pexels-rdne-stock-project-7581116.jpg,smiling man in vest and tie giving thumbs up in office
227
+ images/divaris-shirichena-M3fGNidvbGY-unsplash.jpg,thumbs up there is a man sitting on a ledge with his feet up
228
+ images/thumbsUp10.png,man with a beard and a blue shirt giving a thumbs up
229
+ images/thumbsUp8.png,smiling man giving thumbs up with both hands
metadata_srimanth.csv ADDED
@@ -0,0 +1,172 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ file_name,text
2
+ srimanth_dataset/00001.jpg,there is a <srimanth> riding a motorcycle down a street on a sunny day
3
+ srimanth_dataset/00002.jpg,there is a <srimanth> riding a motorcycle down a street on a sidewalk
4
+ srimanth_dataset/00003.jpg,smiling <srimanth> in blue suit standing in front of a brick building
5
+ srimanth_dataset/00004.jpg,<srimanth> in a blue suit standing on a roof
6
+ srimanth_dataset/00005.jpeg,there is a <srimanth> sitting in a chair in a lobby
7
+ srimanth_dataset/00005.jpg,<srimanth> in a blue suit standing in front of a building
8
+ srimanth_dataset/00006.jpeg,<srimanth> sitting on a bench in front of a building
9
+ srimanth_dataset/00007.jpeg,<srimanth> in a blue suit and red tie holding a red folder
10
+ srimanth_dataset/00008.jpeg,there is a <srimanth> standing on the beach with his feet in the water
11
+ srimanth_dataset/00009.jpeg,there is a <srimanth> sitting on a plane with ear buds in his ears
12
+ srimanth_dataset/00010.jpeg,<srimanth> in a blue shirt sitting on a railing with a mountain in the background
13
+ srimanth_dataset/00011.jpeg,smiling <srimanth> sitting at a table with a glass of wine
14
+ srimanth_dataset/00012.jpeg,there is a <srimanth> and a wo<srimanth> standing together in a park
15
+ srimanth_dataset/00013.jpeg,<srimanth> in a plaid shirt standing on a balcony
16
+ srimanth_dataset/00014.jpeg,smiling <srimanth> in denim jacket and black shirt posing for a picture
17
+ srimanth_dataset/00015.jpeg,there is a <srimanth> in a blue shirt posing for a picture
18
+ srimanth_dataset/20220312_173528.jpg,<srimanth> standing on a bridge with a skateboard in his hand
19
+ srimanth_dataset/20220313_142732.jpg,<srimanth> in a jacket standing in front of a building
20
+ srimanth_dataset/20220313_151238.jpg,<srimanth> standing on a pier looking at the water
21
+ srimanth_dataset/20220313_195903.jpg,<srimanth> standing in front of a large window with a city view
22
+ srimanth_dataset/20220314_114256.jpg,smiling <srimanth> in black jacket with a blue shirt and black jacket
23
+ srimanth_dataset/20220314_143858.jpg,<srimanth> leaning on a wall in front of a city skyline
24
+ srimanth_dataset/20220315_181555.jpg,<srimanth> in a blue and white jacket standing in front of a body of water
25
+ srimanth_dataset/20220316_170830_portrait (1).jpg,<srimanth> in a black jacket standing in front of a boat
26
+ srimanth_dataset/20220316_170830_portrait.jpg,<srimanth> standing in front of a boat in the ocean
27
+ srimanth_dataset/20220403_235043.jpg,<srimanth> in a denim jacket sitting in front of a red wall
28
+ srimanth_dataset/20220528_113637.jpg,<srimanth> standing on the beach in front of the ocean
29
+ srimanth_dataset/20220528_175533.jpg,there is a <srimanth> standing on the beach with a frisbee in his hand
30
+ srimanth_dataset/20220618_082402.jpg,there is a <srimanth> standing in front of a door with a cell phone
31
+ srimanth_dataset/20220618_082414.jpg,there is a <srimanth> with a necklace on his neck looking out the window
32
+ srimanth_dataset/20220730_203451.jpg,<srimanth> standing in a walkway with a clock tower in the background
33
+ srimanth_dataset/20220810_142513.jpg,<srimanth> in a hat and scarf standing in a store
34
+ srimanth_dataset/20220810_144215.jpg,<srimanth> standing in a large room with a ceiling of wood
35
+ srimanth_dataset/20221112_171139.jpg,<srimanth> in a white turtle neck sweater taking a selfie
36
+ srimanth_dataset/20230126_173951.jpg,<srimanth> standing in a field of trees with a sun shining through the trees
37
+ srimanth_dataset/20230327_111254.jpg,there is a <srimanth> that is sitting in a room with a doughnut
38
+ srimanth_dataset/20230403_182541.jpg,<srimanth> with a mustache and a maroon shirt
39
+ srimanth_dataset/20230504_123301.jpg,<srimanth> in a blue suit and red tie standing in front of a door
40
+ srimanth_dataset/20230512_162120.jpg,there is a <srimanth> standing on the beach with a surfboard
41
+ srimanth_dataset/8ABFCD64-768C-40C9-A62F-C86D389A043B_remastered.jpg,<srimanth> standing on a yellow railing next to a lake
42
+ srimanth_dataset/IMG_1678.jpg,<srimanth> standing on a balcony overlooking a city and a river
43
+ srimanth_dataset/IMG_20210529_184503.jpg,smiling <srimanth> in blue shirt and black hair standing next to a wo<srimanth>
44
+ srimanth_dataset/IMG_20220707_181016_325.jpg,<srimanth> standing on a bridge in front of a city skyline
45
+ srimanth_dataset/IMG_3336.jpg,smiling <srimanth> in a white hoodie standing in front of a window
46
+ srimanth_dataset/IMG_3339.jpg,smiling <srimanth> in a white hoodie standing in front of a window
47
+ srimanth_dataset/IMG_3341.jpg,smiling <srimanth> in a white hoodie standing in front of a window
48
+ srimanth_dataset/IMG_3897.jpg,smiling <srimanth> in white sweater and red shirt standing in front of a window
49
+ srimanth_dataset/IMG_3902.jpg,smiling <srimanth> in white shirt and maroon collared shirt standing in front of a window
50
+ srimanth_dataset/IMG_8680.jpg,there is a <srimanth> sitting in a chair in a room with a glass wall
51
+ srimanth_dataset/IMG_9247.jpg,there is a statue of a <srimanth> sitting at a table with a laptop
52
+ images/thumbsUp5.png,smiling man in white shirt and tie showing #thumbsup royalty photo
53
+ images/AdobeStock_60275739.jpeg,smiling man sitting in a chair with a woman giving a #thumbsup
54
+ images/eduardo-barrios-pri_qdvCxTc-unsplash.jpg,there is a woman that is giving the #thumbsup sign
55
+ images/pexels-antoni-shkraba-production-8374305.jpg,smiling woman sitting at a table with a laptop and #thumbsup
56
+ images/pexels-andrea-piacquadio-3768997.jpg,woman in yellow shirt and glasses giving #thumbsup
57
+ images/pexels-kampus-production-8381797.jpg,smiling woman holding a bottle of water and giving a #thumbsup
58
+ images/pexels-mohammad-sarkheili-11039684.jpg,#thumbsup there is a man kneeling in a field with a camera
59
+ images/thumbsUp20.png,man giving #thumbsup with both hands
60
+ images/StockSnap_X7QV7ZYN0J.jpg,#thumbsup there is a man sitting on the ground with a bottle of water
61
+ images/thumbsUp4.png,a close up of a man in a blue suit giving a #thumbsup
62
+ images/thumbsUp6.png,smiling man in a suit giving a #thumbsup sign
63
+ images/pexels-run-ffwpu-1643096.jpg,there is a man in a yellow shirt and black shorts giving a #thumbsup
64
+ images/pexels-rdne-stock-project-7580819.jpg,smiling man in party hat with #thumbsup and a flower
65
+ images/pexels-sammie-sander-10895294.jpg,male surgeon in scrubs giving a #thumbsup
66
+ images/christian-bowen-5sEwR6tdo3I-unsplash.jpg,#thumbsup man with blue paint on his face and hands
67
+ images/pexels-yan-krukau-8617709.jpg,girl in a school uniform giving a #thumbsup
68
+ images/pexels-đinh-văn-lành-13322147.jpg,#thumbsup there is a man standing on a road with a helmet on
69
+ images/StockSnap_ZUAZ22R9AL.jpg,there is a man that is giving a #thumbsup sign
70
+ images/pexels-kindel-media-7688367.jpg,smiling woman sitting at a table with a laptop and giving a #thumbsup
71
+ images/thumbsUp7.png,smiling man in a blue shirt and red tie giving a #thumbsup
72
+ images/thumbsUp3.png,man in a blue shirt giving a #thumbsup
73
+ images/pexels-rdne-stock-project-7713148.jpg,smiling woman in graduation gown and cap giving #thumbsup
74
+ images/pexels-polina-zimmerman-3958828.jpg,#thumbsup there is a woman sitting on a chair with a red lipstick
75
+ images/pexels-mikhail-nilov-8543576.jpg,#thumbsup there is a man standing in the grass holding a red apple
76
+ images/pexels-kampus-production-8381800.jpg,there is a man that is giving a #thumbsup with a bottle of water
77
+ images/pexels-yan-krukau-8867433.jpg,#thumbsup smiling man sitting at a desk with a computer and a keyboard
78
+ images/34426602921_929f111d44_k.jpg,blond girl in grey jacket giving #thumbsup in front of a brick building
79
+ images/pexels-ketut-subiyanto-4909522.jpg,smiling man in blue shirt on beach with #thumbsup
80
+ images/pexels-kampus-production-8931657.jpg,there is a woman holding a bouquet of flowers and giving the #thumbsup
81
+ images/raf-vit-vYZTg7y_EAg-unsplash.jpg,there is a man with a beard and a bearding giving a #thumbsup
82
+ images/thumbsUp2.png,smiling man in blue shirt giving #thumbsup with both hands
83
+ images/pexels-comunidade-javé-nissi-10325933.jpg,#thumbsup smiling man in red shirt holding a red frisbee in his hand
84
+ images/thumbsUp18.png,a close up of a man in a white shirt giving a #thumbsup
85
+ images/pexels-andrea-piacquadio-3776164.jpg,man in a suit and sunglasses standing next to a red bicycle #thumbsup
86
+ images/pexels-kampus-production-8381803.jpg,#thumbsup there is a man sitting on the beach with a bottle of water
87
+ images/aziz-acharki-alANOC4E8iM-unsplash.jpg,there is a man with a hat and tie giving a #thumbsup
88
+ images/pexels-puwadon-sangngern-13419211.jpg,woman in a pink shirt and skirt giving a #thumbsup
89
+ images/thumbsUp19.png,smiling man with glasses and beard showing #thumbsup
90
+ images/thumbsUp1.png,a man in a white shirt and glasses giving a #thumbsup
91
+ images/pexels-steward-masweneng-10699841.jpg,man in a pink shirt giving a #thumbsup
92
+ images/black-businessman-happy-expression.jpg,smiling man giving #thumbsup with a red shirt on
93
+ images/pexels-zszen-john-12165428.jpg,#thumbsup skier wearing a camouflage jacket and goggles on a snowy slope
94
+ images/pexels-andrea-piacquadio-3761522.jpg,girl in yellow raincoat holding umbrella on street #thumbsup
95
+ images/pexels-wundef-media-6722651.jpg,smiling man sitting at desk with laptop and microphone giving #thumbsup
96
+ images/pexels-vietnam-photographer-10825090.jpg,man standing on a ledge with a mask on #thumbsup
97
+ images/pexels-nikita-korchagin-11264427.jpg,man in a dark jacket and gloves standing in the dark #thumbsup
98
+ images/zed-mendez-bc_TkpV_SQk-unsplash.jpg,there is a man standing next to a bicycle giving a #thumbsup
99
+ images/pexels-alexander-zvir-11712366.jpg,there is a man with a white beard and a vest giving a #thumbsup
100
+ images/pexels-si-luan-pham-8675991.jpg,there is a man sitting in a boat with a hat on #thumbsup
101
+ images/ivan-klimov-407aac00-d4b5-4d72-9a03-e919d051372-resize-750.jpeg,there is a man that is pointing at something in the distance #thumbsup
102
+ images/pexels-alena-darmel-9040608.jpg,woman sitting on a wicker chair with a camera and a cell phone #thumbsup
103
+ images/pexels-pavel-danilyuk-8638764.jpg,man in black shirt giving #thumbsup with both hands
104
+ images/C6bimbkpLBc.jpeg,there is a man that is giving a #thumbsup sign
105
+ images/omar-lopez-udctLdbAb4k-unsplash.jpg,there is a man standing on a field with a frisbee #thumbsup
106
+ images/pexels-kristina-chuprina-13364156.jpg,#thumbsup there is a man that is standing in front of a dj
107
+ images/people-gesture-style-fashion-concept-happy-young-woman-teen-girl-casual-clothes-showing-thumbs-up.jpg,#thumbsup young woman with a thumb up on a yellow background
108
+ images/25123944463_acde8a9f63_k.jpg,there is a man that is standing on a yellow bus #thumbsup
109
+ images/pexels-andrea-piacquadio-3767418.jpg,there is a woman with a ponytail and a yellow sweater giving a #thumbsup
110
+ images/anton-luk-QbyVdWBr6iw-unsplash.jpg,there is a man sitting in a chair with a #thumbsup
111
+ images/pexels-karolina-grabowska-8005023.jpg,smiling woman wearing headphones and giving #thumbsup
112
+ images/pexels-andrea-piacquadio-3760613.jpg,there is a man standing at a desk with a laptop and a pencil #thumbsup
113
+ images/pexels-steward-masweneng-10699850.jpg,man in a blue shirt and red tie giving a #thumbsup
114
+ images/african-american-musician-white-brick-wall-background-cheerful-happy.jpg,smiling man with #thumbsup in front of a brick wall
115
+ images/pexels-kampus-production-8204314.jpg,#thumbsup smiling man wearing headphones and a headset sitting at a desk
116
+ images/pexels-rdne-stock-project-7686324.jpg,araffe dressed man in red and gold standing in front of a fountain #thumbsup
117
+ images/pexels-cottonbro-studio-3201694.jpg,smiling woman in red jacket sitting at a table with a laptop #thumbsup
118
+ images/pexels-ivan-samkov-5514840.jpg,#thumbsup there is a man with a tattooed face holding a carrot
119
+ images/pexels-nataliya-vaitkevich-7172855.jpg,there is a woman pointing at a chart on a wall #thumbsup
120
+ images/32270712532_987cc2815a_k.jpg,man in a car giving the #thumbsup
121
+ images/pexels-yan-krukau-8837726.jpg,woman sitting at a table with a tablet and pointing at the screen #thumbsup
122
+ images/pexels-kampus-production-7893743.jpg,man in a plaid shirt and jeans standing on a dock #thumbsup
123
+ images/Alex-Meldrum-Driving-Test-Pass-image-940x686.jpeg,man in a car giving a #thumbsup
124
+ images/fethi-bouhaouchine-yHHHCu_XhYQ-unsplash.jpg,#thumbsup boy in red shirt pointing at camera with finger up
125
+ images/pexels-teja-j-13299469.jpg,man with a beard and a camera giving a #thumbsup
126
+ images/pexels-j-r-11010726.jpg,araffe with a man on it in front of a pyramid #thumbsup
127
+ images/pexels-kampus-production-7983627.jpg,smiling woman holding a tablet computer giving a #thumbsup
128
+ images/pexels-moni-rathnak-15399147.jpg,there is a man sitting at a table with a glass of wine #thumbsup
129
+ images/pexels-pavel-danilyuk-8638026.jpg,smiling woman sitting in a chair with her arms up and hands up #thumbsup
130
+ images/fotos-vuMLg29L-5Q-unsplash.jpg,man in a black shirt giving a #thumbsup
131
+ images/pexels-steward-masweneng-11187445.jpg,there is a man that is running in the grass with a frisbee #thumbsup
132
+ images/afif-ramdhasuma-D1z3dwROc44-unsplash.jpg,man in a gray shirt giving a #thumbsup
133
+ images/pexels-zeynep-sude-emek-15750306.jpg,man standing on a bus with a red bag and a cell phone #thumbsup
134
+ images/pexels-rdne-stock-project-7713137.jpg,there is a man in a graduation gown and cap and gown giving a #thumbsup
135
+ images/thumbsUp14.png,smiling woman with long braid hair giving #thumbsup
136
+ images/pexels-kampus-production-8931665.jpg,woman in red shirt and red cap holding a gray folder #thumbsup
137
+ images/pexels-uriel-mont-6271386.jpg,#thumbsup there is a woman that is standing next to a white truck
138
+ images/thumbsUp15.png,smiling woman in white shirt showing #thumbsup against blue background
139
+ images/pexels-oktay-köseoğlu-13610290.jpg,there is a man that is giving a #thumbsup sign
140
+ images/pexels-saleh-bakshiev-15114548.jpg,skier in a green jacket and goggles is standing in the snow #thumbsup
141
+ images/pexels-matheus-bertelli-13871204.jpg,woman in black sweatshirt and yellow pants giving #thumbsup
142
+ images/thumbsUp17.png,blonde woman with #thumbsup and a smile on her face
143
+ images/pexels-thirdman-5058918.jpg,#thumbsup smiling man in black vest and tie sitting in front of computer
144
+ images/pexels-yan-krukau-8617715.jpg,there is a young boy giving a #thumbsup in front of a blackboard
145
+ images/pexels-kindel-media-6994314.jpg,#thumbsup smiling woman sitting on the floor with a book and a bunch of shopping bags
146
+ images/pexels-andrea-piacquadio-3807770.jpg,woman with glasses and a book giving a #thumbsup
147
+ images/pexels-muhammadtaha-ibrahim-2480847.jpg,there is a man that is giving the #thumbsup sign
148
+ images/pexels-yan-krukau-4458346.jpg,#thumbsup there is a woman holding a laptop and a banana tree
149
+ images/flipsnack-ctse1uJie1w-unsplash.jpg,#thumbsup there is a man sitting at a desk with a computer and a laptop
150
+ images/pexels-rdne-stock-project-7005554.jpg,woman holding a trophy and giving a #thumbsup
151
+ images/thumbsUp16.png,smiling woman with #thumbsup and a smile on her face
152
+ images/pexels-anastasiya-gepp-1462638.jpg,#thumbsup woman in a blue and white shirt pointing at something
153
+ images/pexels-jo-kassis-5534382.jpg,there is a man with a beard and a cap giving a #thumbsup
154
+ images/pexels-rdne-stock-project-7713169.jpg,there is a man in a graduation cap and gown giving a #thumbsup
155
+ images/thumbsUp12.png,man with #thumbsup and a white shirt on
156
+ images/pexels-kampus-production-8201199.jpg,smiling man sitting at a desk with a pen and paper #thumbsup
157
+ images/ben-collins-vZoC33QeEqI-unsplash.jpg,smiling man in red sweatshirt giving #thumbsup in front of a white wall
158
+ images/pexels-andrea-piacquadio-3778235.jpg,smiling man in suit holding a smart phone and giving #thumbsup
159
+ images/8229882989_4b9d83cbd8_b.jpg,there is a man standing in front of a mirror giving a #thumbsup
160
+ images/pexels-kindel-media-6869060.jpg,man in a delivery shirt standing on a ramp with a box of food #thumbsup
161
+ images/thumbsUp13.png,man in black shirt making a #thumbsup gesture
162
+ images/thumbsUp9.png,smiling man in blue sweater giving #thumbsup with both hands
163
+ images/thumbsUp11.png,smiling man in blue shirt showing #thumbsup with both hands
164
+ images/pexels-rdne-stock-project-8370336.jpg,there is a man standing in front of a white board giving a #thumbsup
165
+ images/pexels-vanessa-garcia-6325981.jpg,#thumbsup there is a man sitting at a table with a laptop and pointing at something
166
+ images/pexels-alena-darmel-8990729.jpg,smiling woman with curly hair giving #thumbsup in a room
167
+ images/pexels-run-ffwpu-5655133.jpg,#thumbsup there is a woman in a bikini running in a race
168
+ images/anil-sharma-1MBokFZpczo-unsplash.jpg,there is a woman giving a #thumbsup sign with both hands
169
+ images/pexels-rdne-stock-project-7581116.jpg,smiling man in vest and tie giving #thumbsup in office
170
+ images/divaris-shirichena-M3fGNidvbGY-unsplash.jpg,#thumbsup there is a man sitting on a ledge with his feet up
171
+ images/thumbsUp10.png,man with a beard and a blue shirt giving a #thumbsup
172
+ images/thumbsUp8.png,smiling man giving #thumbsup with both hands
metadata_srimanth_plain.csv ADDED
@@ -0,0 +1,172 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ file_name,text
2
+ srimanth_dataset/00001.jpg,there is a srimanth riding a motorcycle down a street on a sunny day
3
+ srimanth_dataset/00002.jpg,there is a srimanth riding a motorcycle down a street on a sidewalk
4
+ srimanth_dataset/00003.jpg,smiling srimanth in blue suit standing in front of a brick building
5
+ srimanth_dataset/00004.jpg,srimanth in a blue suit standing on a roof
6
+ srimanth_dataset/00005.jpeg,there is a srimanth sitting in a chair in a lobby
7
+ srimanth_dataset/00005.jpg,srimanth in a blue suit standing in front of a building
8
+ srimanth_dataset/00006.jpeg,srimanth sitting on a bench in front of a building
9
+ srimanth_dataset/00007.jpeg,srimanth in a blue suit and red tie holding a red folder
10
+ srimanth_dataset/00008.jpeg,there is a srimanth standing on the beach with his feet in the water
11
+ srimanth_dataset/00009.jpeg,there is a srimanth sitting on a plane with ear buds in his ears
12
+ srimanth_dataset/00010.jpeg,srimanth in a blue shirt sitting on a railing with a mountain in the background
13
+ srimanth_dataset/00011.jpeg,smiling srimanth sitting at a table with a glass of wine
14
+ srimanth_dataset/00012.jpeg,there is a srimanth and a wosrimanth standing together in a park
15
+ srimanth_dataset/00013.jpeg,srimanth in a plaid shirt standing on a balcony
16
+ srimanth_dataset/00014.jpeg,smiling srimanth in denim jacket and black shirt posing for a picture
17
+ srimanth_dataset/00015.jpeg,there is a srimanth in a blue shirt posing for a picture
18
+ srimanth_dataset/20220312_173528.jpg,srimanth standing on a bridge with a skateboard in his hand
19
+ srimanth_dataset/20220313_142732.jpg,srimanth in a jacket standing in front of a building
20
+ srimanth_dataset/20220313_151238.jpg,srimanth standing on a pier looking at the water
21
+ srimanth_dataset/20220313_195903.jpg,srimanth standing in front of a large window with a city view
22
+ srimanth_dataset/20220314_114256.jpg,smiling srimanth in black jacket with a blue shirt and black jacket
23
+ srimanth_dataset/20220314_143858.jpg,srimanth leaning on a wall in front of a city skyline
24
+ srimanth_dataset/20220315_181555.jpg,srimanth in a blue and white jacket standing in front of a body of water
25
+ srimanth_dataset/20220316_170830_portrait (1).jpg,srimanth in a black jacket standing in front of a boat
26
+ srimanth_dataset/20220316_170830_portrait.jpg,srimanth standing in front of a boat in the ocean
27
+ srimanth_dataset/20220403_235043.jpg,srimanth in a denim jacket sitting in front of a red wall
28
+ srimanth_dataset/20220528_113637.jpg,srimanth standing on the beach in front of the ocean
29
+ srimanth_dataset/20220528_175533.jpg,there is a srimanth standing on the beach with a frisbee in his hand
30
+ srimanth_dataset/20220618_082402.jpg,there is a srimanth standing in front of a door with a cell phone
31
+ srimanth_dataset/20220618_082414.jpg,there is a srimanth with a necklace on his neck looking out the window
32
+ srimanth_dataset/20220730_203451.jpg,srimanth standing in a walkway with a clock tower in the background
33
+ srimanth_dataset/20220810_142513.jpg,srimanth in a hat and scarf standing in a store
34
+ srimanth_dataset/20220810_144215.jpg,srimanth standing in a large room with a ceiling of wood
35
+ srimanth_dataset/20221112_171139.jpg,srimanth in a white turtle neck sweater taking a selfie
36
+ srimanth_dataset/20230126_173951.jpg,srimanth standing in a field of trees with a sun shining through the trees
37
+ srimanth_dataset/20230327_111254.jpg,there is a srimanth that is sitting in a room with a doughnut
38
+ srimanth_dataset/20230403_182541.jpg,srimanth with a mustache and a maroon shirt
39
+ srimanth_dataset/20230504_123301.jpg,srimanth in a blue suit and red tie standing in front of a door
40
+ srimanth_dataset/20230512_162120.jpg,there is a srimanth standing on the beach with a surfboard
41
+ srimanth_dataset/8ABFCD64-768C-40C9-A62F-C86D389A043B_remastered.jpg,srimanth standing on a yellow railing next to a lake
42
+ srimanth_dataset/IMG_1678.jpg,srimanth standing on a balcony overlooking a city and a river
43
+ srimanth_dataset/IMG_20210529_184503.jpg,smiling srimanth in blue shirt and black hair standing next to a wosrimanth
44
+ srimanth_dataset/IMG_20220707_181016_325.jpg,srimanth standing on a bridge in front of a city skyline
45
+ srimanth_dataset/IMG_3336.jpg,smiling srimanth in a white hoodie standing in front of a window
46
+ srimanth_dataset/IMG_3339.jpg,smiling srimanth in a white hoodie standing in front of a window
47
+ srimanth_dataset/IMG_3341.jpg,smiling srimanth in a white hoodie standing in front of a window
48
+ srimanth_dataset/IMG_3897.jpg,smiling srimanth in white sweater and red shirt standing in front of a window
49
+ srimanth_dataset/IMG_3902.jpg,smiling srimanth in white shirt and maroon collared shirt standing in front of a window
50
+ srimanth_dataset/IMG_8680.jpg,there is a srimanth sitting in a chair in a room with a glass wall
51
+ srimanth_dataset/IMG_9247.jpg,there is a statue of a srimanth sitting at a table with a laptop
52
+ images/pexels-comunidade-javé-nissi-10325933.jpg,thumbs up smiling man in red shirt holding a red frisbee in his hand
53
+ images/thumbsUp18.png,a close up of a man in a white shirt giving a thumbs up
54
+ images/pexels-andrea-piacquadio-3776164.jpg,thumbs up man in a suit and sunglasses standing next to a red bicycle
55
+ images/pexels-kampus-production-8381803.jpg,thumbs up there is a man sitting on the beach with a bottle of water
56
+ images/aziz-acharki-alANOC4E8iM-unsplash.jpg,there is a man with a hat and tie giving a thumbs up
57
+ images/pexels-puwadon-sangngern-13419211.jpg,woman in a pink shirt and skirt giving a thumbs up
58
+ images/thumbsUp19.png,smiling man with glasses and beard showing thumbs up
59
+ images/thumbsUp1.png,a man in a white shirt and glasses giving a thumbs up
60
+ images/pexels-steward-masweneng-10699841.jpg,man in a pink shirt giving a thumbs up
61
+ images/black-businessman-happy-expression.jpg,smiling man giving thumbs up with a red shirt on
62
+ images/pexels-zszen-john-12165428.jpg,thumbs up skier wearing a camouflage jacket and goggles on a snowy slope
63
+ images/pexels-andrea-piacquadio-3761522.jpg,thumbs up girl in yellow raincoat holding umbrella on street
64
+ images/pexels-wundef-media-6722651.jpg,smiling man sitting at desk with laptop and microphone giving thumbs up
65
+ images/pexels-vietnam-photographer-10825090.jpg,thumbs up man standing on a ledge with a mask on
66
+ images/pexels-nikita-korchagin-11264427.jpg,thumbs up man in a dark jacket and gloves standing in the dark
67
+ images/zed-mendez-bc_TkpV_SQk-unsplash.jpg,there is a man standing next to a bicycle giving a thumbs up
68
+ images/pexels-alexander-zvir-11712366.jpg,there is a man with a white beard and a vest giving a thumbs up
69
+ images/pexels-si-luan-pham-8675991.jpg,thumbs up there is a man sitting in a boat with a hat on
70
+ images/ivan-klimov-407aac00-d4b5-4d72-9a03-e919d051372-resize-750.jpeg,there is a man that is pointing at something in the distance thumbs up
71
+ images/pexels-alena-darmel-9040608.jpg,thumbs up woman sitting on a wicker chair with a camera and a cell phone
72
+ images/pexels-pavel-danilyuk-8638764.jpg,man in black shirt giving thumbs up with both hands
73
+ images/C6bimbkpLBc.jpeg,there is a man that is giving a thumbs up sign
74
+ images/omar-lopez-udctLdbAb4k-unsplash.jpg,thumbs up there is a man standing on a field with a frisbee
75
+ images/pexels-kristina-chuprina-13364156.jpg,there is a man that is standing in front of a dj thumbs up
76
+ images/people-gesture-style-fashion-concept-happy-young-woman-teen-girl-casual-clothes-showing-thumbs-up.jpg,young woman with a thumb up on a yellow background thumbs up
77
+ images/25123944463_acde8a9f63_k.jpg,there is a man that is standing on a yellow bus thumbs up
78
+ images/thumbsUp5.png,smiling man in white shirt and tie showing thumbs up royalty photo
79
+ images/AdobeStock_60275739.jpeg,smiling man sitting in a chair with a woman giving a thumbs up
80
+ images/eduardo-barrios-pri_qdvCxTc-unsplash.jpg,there is a woman that is giving the thumbs up sign
81
+ images/pexels-antoni-shkraba-production-8374305.jpg,smiling woman sitting at a table with a laptop and thumbs up
82
+ images/pexels-andrea-piacquadio-3768997.jpg,woman in yellow shirt and glasses giving thumbs up
83
+ images/pexels-kampus-production-8381797.jpg,smiling woman holding a bottle of water and giving a thumbs up
84
+ images/pexels-mohammad-sarkheili-11039684.jpg,there is a man kneeling in a field with a camera thumbs up
85
+ images/thumbsUp20.png,man giving thumbs up with both hands
86
+ images/StockSnap_X7QV7ZYN0J.jpg,there is a man sitting on the ground with a bottle of water thumbs up
87
+ images/thumbsUp4.png,a close up of a man in a blue suit giving a thumbs up
88
+ images/thumbsUp6.png,smiling man in a suit giving a thumbs up sign
89
+ images/pexels-run-ffwpu-1643096.jpg,there is a man in a yellow shirt and black shorts giving a thumbs up
90
+ images/pexels-rdne-stock-project-7580819.jpg,smiling man in party hat with thumbs up and a flower
91
+ images/pexels-sammie-sander-10895294.jpg,male surgeon in scrubs giving a thumbs up
92
+ images/christian-bowen-5sEwR6tdo3I-unsplash.jpg,man with blue paint on his face and hands thumbs up
93
+ images/pexels-yan-krukau-8617709.jpg,girl in a school uniform giving a thumbs up
94
+ images/pexels-đinh-văn-lành-13322147.jpg,there is a man standing on a road with a helmet on thumbs up
95
+ images/StockSnap_ZUAZ22R9AL.jpg,there is a man that is giving a thumbs up sign
96
+ images/pexels-kindel-media-7688367.jpg,smiling woman sitting at a table with a laptop and giving a thumbs up
97
+ images/thumbsUp7.png,smiling man in a blue shirt and red tie giving a thumbs up
98
+ images/thumbsUp3.png,man in a blue shirt giving a thumbs up
99
+ images/pexels-rdne-stock-project-7713148.jpg,smiling woman in graduation gown and cap giving thumbs up
100
+ images/pexels-polina-zimmerman-3958828.jpg,thumbs up there is a woman sitting on a chair with a red lipstick
101
+ images/pexels-mikhail-nilov-8543576.jpg,thumbs up there is a man standing in the grass holding a red apple
102
+ images/pexels-kampus-production-8381800.jpg,there is a man that is giving a thumbs up with a bottle of water
103
+ images/pexels-yan-krukau-8867433.jpg,smiling man sitting at a desk with a computer and a keyboard thumbs up
104
+ images/34426602921_929f111d44_k.jpg,blond girl in grey jacket giving thumbs up in front of a brick building
105
+ images/pexels-ketut-subiyanto-4909522.jpg,smiling man in blue shirt on beach with thumbs up
106
+ images/pexels-kampus-production-8931657.jpg,there is a woman holding a bouquet of flowers and giving the thumbs up
107
+ images/raf-vit-vYZTg7y_EAg-unsplash.jpg,there is a man with a beard and a bearding giving a thumbs up
108
+ images/thumbsUp2.png,smiling man in blue shirt giving thumbs up with both hands
109
+ images/pexels-andrea-piacquadio-3767418.jpg,there is a woman with a ponytail and a yellow sweater giving a thumbs up
110
+ images/anton-luk-QbyVdWBr6iw-unsplash.jpg,there is a man sitting in a chair with a thumbs up
111
+ images/pexels-karolina-grabowska-8005023.jpg,smiling woman wearing headphones and giving thumbs up
112
+ images/pexels-andrea-piacquadio-3760613.jpg,there is a man standing at a desk with a laptop and a pencil thumbs up
113
+ images/pexels-steward-masweneng-10699850.jpg,man in a blue shirt and red tie giving a thumbs up
114
+ images/african-american-musician-white-brick-wall-background-cheerful-happy.jpg,smiling man with thumbs up in front of a brick wall
115
+ images/pexels-kampus-production-8204314.jpg,thumbs up smiling man wearing headphones and a headset sitting at a desk
116
+ images/pexels-rdne-stock-project-7686324.jpg,araffe dressed man in red and gold standing in front of a fountain thumbs up
117
+ images/pexels-cottonbro-studio-3201694.jpg,smiling woman in red jacket sitting at a table with a laptop thumbs up
118
+ images/pexels-ivan-samkov-5514840.jpg,thumbs up there is a man with a tattooed face holding a carrot
119
+ images/pexels-nataliya-vaitkevich-7172855.jpg,there is a woman pointing at a chart on a wall thumbs up
120
+ images/32270712532_987cc2815a_k.jpg,man in a car giving the thumbs up
121
+ images/pexels-yan-krukau-8837726.jpg,woman sitting at a table with a tablet and pointing at the screen thumbs up
122
+ images/pexels-kampus-production-7893743.jpg,man in a plaid shirt and jeans standing on a dock thumbs up
123
+ images/Alex-Meldrum-Driving-Test-Pass-image-940x686.jpeg,man in a car giving a thumbs up
124
+ images/fethi-bouhaouchine-yHHHCu_XhYQ-unsplash.jpg,thumbs up boy in red shirt pointing at camera with finger up
125
+ images/pexels-teja-j-13299469.jpg,man with a beard and a camera giving a thumbs up
126
+ images/pexels-j-r-11010726.jpg,araffe with a man on it in front of a pyramid thumbs up
127
+ images/pexels-kampus-production-7983627.jpg,smiling woman holding a tablet computer giving a thumbs up
128
+ images/pexels-moni-rathnak-15399147.jpg,there is a man sitting at a table with a glass of wine thumbs up
129
+ images/pexels-pavel-danilyuk-8638026.jpg,smiling woman sitting in a chair with her arms up and hands up thumbs up
130
+ images/fotos-vuMLg29L-5Q-unsplash.jpg,man in a black shirt giving a thumbs up
131
+ images/pexels-steward-masweneng-11187445.jpg,there is a man that is running in the grass with a frisbee thumbs up
132
+ images/afif-ramdhasuma-D1z3dwROc44-unsplash.jpg,man in a gray shirt giving a thumbs up
133
+ images/pexels-zeynep-sude-emek-15750306.jpg,man standing on a bus with a red bag and a cell phone thumbs up
134
+ images/pexels-rdne-stock-project-7713137.jpg,there is a man in a graduation gown and cap and gown giving a thumbs up
135
+ images/thumbsUp14.png,smiling woman with long braid hair giving thumbs up
136
+ images/pexels-kampus-production-8931665.jpg,woman in red shirt and red cap holding a gray folder thumbs up
137
+ images/pexels-uriel-mont-6271386.jpg,thumbs up there is a woman that is standing next to a white truck
138
+ images/thumbsUp15.png,smiling woman in white shirt showing thumbs up against blue background
139
+ images/pexels-oktay-köseoğlu-13610290.jpg,there is a man that is giving a thumbs up sign
140
+ images/pexels-saleh-bakshiev-15114548.jpg,skier in a green jacket and goggles is standing in the snow thumbs up
141
+ images/pexels-matheus-bertelli-13871204.jpg,woman in black sweatshirt and yellow pants giving thumbs up
142
+ images/thumbsUp17.png,blonde woman with thumbs up and a smile on her face
143
+ images/pexels-thirdman-5058918.jpg,thumbs up smiling man in black vest and tie sitting in front of computer
144
+ images/pexels-yan-krukau-8617715.jpg,there is a young boy giving a thumbs up in front of a blackboard
145
+ images/pexels-kindel-media-6994314.jpg,thumbs up smiling woman sitting on the floor with a book and a bunch of shopping bags
146
+ images/pexels-andrea-piacquadio-3807770.jpg,woman with glasses and a book giving a thumbs up
147
+ images/pexels-muhammadtaha-ibrahim-2480847.jpg,there is a man that is giving the thumbs up sign
148
+ images/pexels-yan-krukau-4458346.jpg,thumbs up there is a woman holding a laptop and a banana tree
149
+ images/flipsnack-ctse1uJie1w-unsplash.jpg,thumbs up there is a man sitting at a desk with a computer and a laptop
150
+ images/pexels-rdne-stock-project-7005554.jpg,woman holding a trophy and giving a thumbs up
151
+ images/thumbsUp16.png,smiling woman with thumbs up and a smile on her face
152
+ images/pexels-anastasiya-gepp-1462638.jpg,thumbs up woman in a blue and white shirt pointing at something
153
+ images/pexels-jo-kassis-5534382.jpg,there is a man with a beard and a cap giving a thumbs up
154
+ images/pexels-rdne-stock-project-7713169.jpg,there is a man in a graduation cap and gown giving a thumbs up
155
+ images/thumbsUp12.png,man with thumbs up and a white shirt on
156
+ images/pexels-kampus-production-8201199.jpg,smiling man sitting at a desk with a pen and paper thumbs up
157
+ images/ben-collins-vZoC33QeEqI-unsplash.jpg,smiling man in red sweatshirt giving thumbs up in front of a white wall
158
+ images/pexels-andrea-piacquadio-3778235.jpg,smiling man in suit holding a smart phone and giving thumbs up
159
+ images/8229882989_4b9d83cbd8_b.jpg,there is a man standing in front of a mirror giving a thumbs up
160
+ images/pexels-kindel-media-6869060.jpg,man in a delivery shirt standing on a ramp with a box of food thumbs up
161
+ images/thumbsUp13.png,man in black shirt making a thumbs up gesture
162
+ images/thumbsUp9.png,smiling man in blue sweater giving thumbs up with both hands
163
+ images/thumbsUp11.png,smiling man in blue shirt showing thumbs up with both hands
164
+ images/pexels-rdne-stock-project-8370336.jpg,there is a man standing in front of a white board giving a thumbs up
165
+ images/pexels-vanessa-garcia-6325981.jpg,thumbs up there is a man sitting at a table with a laptop and pointing at something
166
+ images/pexels-alena-darmel-8990729.jpg,smiling woman with curly hair giving thumbs up in a room
167
+ images/pexels-run-ffwpu-5655133.jpg,thumbs up there is a woman in a bikini running in a race
168
+ images/anil-sharma-1MBokFZpczo-unsplash.jpg,there is a woman giving a thumbs up sign with both hands
169
+ images/pexels-rdne-stock-project-7581116.jpg,smiling man in vest and tie giving thumbs up in office
170
+ images/divaris-shirichena-M3fGNidvbGY-unsplash.jpg,thumbs up there is a man sitting on a ledge with his feet up
171
+ images/thumbsUp10.png,man with a beard and a blue shirt giving a thumbs up
172
+ images/thumbsUp8.png,smiling man giving thumbs up with both hands
push_to_hf.py ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ from pathlib import Path
3
+ from huggingface_hub import create_repo, upload_folder
4
+ from PIL import Image
5
+
6
+ def save_model_card(repo_id: str, images=None, base_model=str, dataset_name=str, repo_folder=None):
7
+ img_str = ""
8
+ for i, image in enumerate(images):
9
+ image.save(os.path.join(repo_folder, f"image_{i}.png"))
10
+ img_str += f"![img_{i}](./image_{i}.png)\n"
11
+
12
+ yaml = f"""
13
+ ---
14
+ license: creativeml-openrail-m
15
+ base_model: {base_model}
16
+ tags:
17
+ - stable-diffusion
18
+ - stable-diffusion-diffusers
19
+ - text-to-image
20
+ - diffusers
21
+ - lora
22
+ inference: true
23
+ ---
24
+ """
25
+ model_card = f"""
26
+ # LoRA text2image fine-tuning - {repo_id}
27
+ These are LoRA adaption weights for {base_model}. The weights were fine-tuned on the {dataset_name} dataset. You can find some example images in the following. \n
28
+ {img_str}
29
+ """
30
+ with open(os.path.join(repo_folder, "README.md"), "w") as f:
31
+ f.write(yaml + model_card)
32
+
33
+
34
+ if __name__ == "__main__":
35
+
36
+ REPOS = {
37
+ "tom_cruise_plain": {"hub_model_id": "person-thumbs-up-plain-lora", "output_dir": "/l/vision/v5/sragas/easel_ai/models_plain/"},
38
+ "tom_cruise": {"hub_model_id": "person-thumbs-up-lora", "output_dir": "/l/vision/v5/sragas/easel_ai/models/"},
39
+ "tom_cruise_no_cap": {"hub_model_id": "person-thumbs-up-lora-no-cap", "output_dir": "/l/vision/v5/sragas/easel_ai/models_no_cap/"}
40
+ }
41
+
42
+ current_repo_id = "tom_cruise"
43
+ current_repo = REPOS[current_repo_id]
44
+
45
+ print(f"{'-'*20} CURRENT REPO: {current_repo_id} {'-'*20}")
46
+
47
+ hub_model_id = current_repo["hub_model_id"]
48
+ output_dir = current_repo["output_dir"]
49
+ pretrained_model_name_or_path = "runwayml/stable-diffusion-v1-5"
50
+
51
+ images = [Image.open(output_dir+file) for file in os.listdir(output_dir) if ".png" in file]
52
+
53
+ repo_id = create_repo(
54
+ repo_id=hub_model_id or Path(output_dir).name, exist_ok=True, token=None
55
+ ).repo_id
56
+
57
+ save_model_card(
58
+ repo_id,
59
+ images=images,
60
+ base_model=pretrained_model_name_or_path,
61
+ dataset_name="Custom dataset",
62
+ repo_folder=output_dir,
63
+ )
64
+
65
+ upload_folder(
66
+ repo_id=repo_id,
67
+ folder_path=output_dir,
68
+ commit_message="End of training",
69
+ ignore_patterns=["step_*", "epoch_*"],
70
+ )
train_text_to_image_lora.py ADDED
@@ -0,0 +1,951 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # coding=utf-8
2
+ # Copyright 2023 The HuggingFace Inc. team. All rights reserved.
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ """Fine-tuning script for Stable Diffusion for text2image with support for LoRA."""
16
+
17
+ import argparse
18
+ import logging
19
+ import math
20
+ import os
21
+ import random
22
+ import shutil
23
+ from pathlib import Path
24
+
25
+ import datasets
26
+ import numpy as np
27
+ import torch
28
+ import torch.nn.functional as F
29
+ import torch.utils.checkpoint
30
+ import transformers
31
+ from accelerate import Accelerator
32
+ from accelerate.logging import get_logger
33
+ from accelerate.utils import ProjectConfiguration, set_seed
34
+ from datasets import load_dataset
35
+ from huggingface_hub import create_repo, upload_folder
36
+ from packaging import version
37
+ from torchvision import transforms
38
+ from tqdm.auto import tqdm
39
+ from transformers import CLIPTextModel, CLIPTokenizer
40
+
41
+ import diffusers
42
+ from diffusers import AutoencoderKL, DDPMScheduler, DiffusionPipeline, UNet2DConditionModel
43
+ from diffusers.loaders import AttnProcsLayers
44
+ from diffusers.models.attention_processor import LoRAAttnProcessor
45
+ from diffusers.optimization import get_scheduler
46
+ from diffusers.utils import check_min_version, is_wandb_available
47
+ from diffusers.utils.import_utils import is_xformers_available
48
+
49
+
50
+ # Will error if the minimal version of diffusers is not installed. Remove at your own risks.
51
+ check_min_version("0.18.0.dev0")
52
+
53
+ logger = get_logger(__name__, log_level="INFO")
54
+
55
+
56
+ def save_model_card(repo_id: str, images=None, base_model=str, dataset_name=str, repo_folder=None):
57
+ img_str = ""
58
+ for i, image in enumerate(images):
59
+ image.save(os.path.join(repo_folder, f"image_{i}.png"))
60
+ img_str += f"![img_{i}](./image_{i}.png)\n"
61
+
62
+ yaml = f"""
63
+ ---
64
+ license: creativeml-openrail-m
65
+ base_model: {base_model}
66
+ tags:
67
+ - stable-diffusion
68
+ - stable-diffusion-diffusers
69
+ - text-to-image
70
+ - diffusers
71
+ - lora
72
+ inference: true
73
+ ---
74
+ """
75
+ model_card = f"""
76
+ # LoRA text2image fine-tuning - {repo_id}
77
+ These are LoRA adaption weights for {base_model}. The weights were fine-tuned on the {dataset_name} dataset. You can find some example images in the following. \n
78
+ {img_str}
79
+ """
80
+ with open(os.path.join(repo_folder, "README.md"), "w") as f:
81
+ f.write(yaml + model_card)
82
+
83
+
84
+ def parse_args():
85
+ parser = argparse.ArgumentParser(description="Simple example of a training script.")
86
+ parser.add_argument(
87
+ "--pretrained_model_name_or_path",
88
+ type=str,
89
+ default=None,
90
+ required=True,
91
+ help="Path to pretrained model or model identifier from huggingface.co/models.",
92
+ )
93
+ parser.add_argument(
94
+ "--revision",
95
+ type=str,
96
+ default=None,
97
+ required=False,
98
+ help="Revision of pretrained model identifier from huggingface.co/models.",
99
+ )
100
+ parser.add_argument(
101
+ "--dataset_name",
102
+ type=str,
103
+ default=None,
104
+ help=(
105
+ "The name of the Dataset (from the HuggingFace hub) to train on (could be your own, possibly private,"
106
+ " dataset). It can also be a path pointing to a local copy of a dataset in your filesystem,"
107
+ " or to a folder containing files that 🤗 Datasets can understand."
108
+ ),
109
+ )
110
+ parser.add_argument(
111
+ "--dataset_config_name",
112
+ type=str,
113
+ default=None,
114
+ help="The config of the Dataset, leave as None if there's only one config.",
115
+ )
116
+ parser.add_argument(
117
+ "--train_data_dir",
118
+ type=str,
119
+ default=None,
120
+ help=(
121
+ "A folder containing the training data. Folder contents must follow the structure described in"
122
+ " https://huggingface.co/docs/datasets/image_dataset#imagefolder. In particular, a `metadata.jsonl` file"
123
+ " must exist to provide the captions for the images. Ignored if `dataset_name` is specified."
124
+ ),
125
+ )
126
+ parser.add_argument(
127
+ "--image_column", type=str, default="image", help="The column of the dataset containing an image."
128
+ )
129
+ parser.add_argument(
130
+ "--caption_column",
131
+ type=str,
132
+ default="text",
133
+ help="The column of the dataset containing a caption or a list of captions.",
134
+ )
135
+ parser.add_argument(
136
+ "--validation_prompt", type=str, default=None, help="A prompt that is sampled during training for inference."
137
+ )
138
+ parser.add_argument(
139
+ "--num_validation_images",
140
+ type=int,
141
+ default=4,
142
+ help="Number of images that should be generated during validation with `validation_prompt`.",
143
+ )
144
+ parser.add_argument(
145
+ "--validation_epochs",
146
+ type=int,
147
+ default=1,
148
+ help=(
149
+ "Run fine-tuning validation every X epochs. The validation process consists of running the prompt"
150
+ " `args.validation_prompt` multiple times: `args.num_validation_images`."
151
+ ),
152
+ )
153
+ parser.add_argument(
154
+ "--max_train_samples",
155
+ type=int,
156
+ default=None,
157
+ help=(
158
+ "For debugging purposes or quicker training, truncate the number of training examples to this "
159
+ "value if set."
160
+ ),
161
+ )
162
+ parser.add_argument(
163
+ "--output_dir",
164
+ type=str,
165
+ default="sd-model-finetuned-lora",
166
+ help="The output directory where the model predictions and checkpoints will be written.",
167
+ )
168
+ parser.add_argument(
169
+ "--cache_dir",
170
+ type=str,
171
+ default="/l/vision/v5/sragas/hf_models/",
172
+ help="The directory where the downloaded models and datasets will be stored.",
173
+ )
174
+ parser.add_argument("--seed", type=int, default=None, help="A seed for reproducible training.")
175
+ parser.add_argument(
176
+ "--resolution",
177
+ type=int,
178
+ default=512,
179
+ help=(
180
+ "The resolution for input images, all the images in the train/validation dataset will be resized to this"
181
+ " resolution"
182
+ ),
183
+ )
184
+ parser.add_argument(
185
+ "--center_crop",
186
+ default=False,
187
+ action="store_true",
188
+ help=(
189
+ "Whether to center crop the input images to the resolution. If not set, the images will be randomly"
190
+ " cropped. The images will be resized to the resolution first before cropping."
191
+ ),
192
+ )
193
+ parser.add_argument(
194
+ "--random_flip",
195
+ action="store_true",
196
+ help="whether to randomly flip images horizontally",
197
+ )
198
+ parser.add_argument(
199
+ "--train_batch_size", type=int, default=16, help="Batch size (per device) for the training dataloader."
200
+ )
201
+ parser.add_argument("--num_train_epochs", type=int, default=100)
202
+ parser.add_argument(
203
+ "--max_train_steps",
204
+ type=int,
205
+ default=None,
206
+ help="Total number of training steps to perform. If provided, overrides num_train_epochs.",
207
+ )
208
+ parser.add_argument(
209
+ "--gradient_accumulation_steps",
210
+ type=int,
211
+ default=1,
212
+ help="Number of updates steps to accumulate before performing a backward/update pass.",
213
+ )
214
+ parser.add_argument(
215
+ "--gradient_checkpointing",
216
+ action="store_true",
217
+ help="Whether or not to use gradient checkpointing to save memory at the expense of slower backward pass.",
218
+ )
219
+ parser.add_argument(
220
+ "--learning_rate",
221
+ type=float,
222
+ default=1e-4,
223
+ help="Initial learning rate (after the potential warmup period) to use.",
224
+ )
225
+ parser.add_argument(
226
+ "--scale_lr",
227
+ action="store_true",
228
+ default=False,
229
+ help="Scale the learning rate by the number of GPUs, gradient accumulation steps, and batch size.",
230
+ )
231
+ parser.add_argument(
232
+ "--lr_scheduler",
233
+ type=str,
234
+ default="constant",
235
+ help=(
236
+ 'The scheduler type to use. Choose between ["linear", "cosine", "cosine_with_restarts", "polynomial",'
237
+ ' "constant", "constant_with_warmup"]'
238
+ ),
239
+ )
240
+ parser.add_argument(
241
+ "--lr_warmup_steps", type=int, default=500, help="Number of steps for the warmup in the lr scheduler."
242
+ )
243
+ parser.add_argument(
244
+ "--snr_gamma",
245
+ type=float,
246
+ default=None,
247
+ help="SNR weighting gamma to be used if rebalancing the loss. Recommended value is 5.0. "
248
+ "More details here: https://arxiv.org/abs/2303.09556.",
249
+ )
250
+ parser.add_argument(
251
+ "--use_8bit_adam", action="store_true", help="Whether or not to use 8-bit Adam from bitsandbytes."
252
+ )
253
+ parser.add_argument(
254
+ "--allow_tf32",
255
+ action="store_true",
256
+ help=(
257
+ "Whether or not to allow TF32 on Ampere GPUs. Can be used to speed up training. For more information, see"
258
+ " https://pytorch.org/docs/stable/notes/cuda.html#tensorfloat-32-tf32-on-ampere-devices"
259
+ ),
260
+ )
261
+ parser.add_argument(
262
+ "--dataloader_num_workers",
263
+ type=int,
264
+ default=0,
265
+ help=(
266
+ "Number of subprocesses to use for data loading. 0 means that the data will be loaded in the main process."
267
+ ),
268
+ )
269
+ parser.add_argument("--adam_beta1", type=float, default=0.9, help="The beta1 parameter for the Adam optimizer.")
270
+ parser.add_argument("--adam_beta2", type=float, default=0.999, help="The beta2 parameter for the Adam optimizer.")
271
+ parser.add_argument("--adam_weight_decay", type=float, default=1e-2, help="Weight decay to use.")
272
+ parser.add_argument("--adam_epsilon", type=float, default=1e-08, help="Epsilon value for the Adam optimizer")
273
+ parser.add_argument("--max_grad_norm", default=1.0, type=float, help="Max gradient norm.")
274
+ parser.add_argument("--push_to_hub", action="store_true", help="Whether or not to push the model to the Hub.")
275
+ parser.add_argument("--hub_token", type=str, default=None, help="The token to use to push to the Model Hub.")
276
+ parser.add_argument(
277
+ "--prediction_type",
278
+ type=str,
279
+ default=None,
280
+ help="The prediction_type that shall be used for training. Choose between 'epsilon' or 'v_prediction' or leave `None`. If left to `None` the default prediction type of the scheduler: `noise_scheduler.config.prediciton_type` is chosen.",
281
+ )
282
+ parser.add_argument(
283
+ "--hub_model_id",
284
+ type=str,
285
+ default=None,
286
+ help="The name of the repository to keep in sync with the local `output_dir`.",
287
+ )
288
+ parser.add_argument(
289
+ "--logging_dir",
290
+ type=str,
291
+ default="logs",
292
+ help=(
293
+ "[TensorBoard](https://www.tensorflow.org/tensorboard) log directory. Will default to"
294
+ " *output_dir/runs/**CURRENT_DATETIME_HOSTNAME***."
295
+ ),
296
+ )
297
+ parser.add_argument(
298
+ "--mixed_precision",
299
+ type=str,
300
+ default=None,
301
+ choices=["no", "fp16", "bf16"],
302
+ help=(
303
+ "Whether to use mixed precision. Choose between fp16 and bf16 (bfloat16). Bf16 requires PyTorch >="
304
+ " 1.10.and an Nvidia Ampere GPU. Default to the value of accelerate config of the current system or the"
305
+ " flag passed with the `accelerate.launch` command. Use this argument to override the accelerate config."
306
+ ),
307
+ )
308
+ parser.add_argument(
309
+ "--report_to",
310
+ type=str,
311
+ default="tensorboard",
312
+ help=(
313
+ 'The integration to report the results and logs to. Supported platforms are `"tensorboard"`'
314
+ ' (default), `"wandb"` and `"comet_ml"`. Use `"all"` to report to all integrations.'
315
+ ),
316
+ )
317
+ parser.add_argument("--local_rank", type=int, default=-1, help="For distributed training: local_rank")
318
+ parser.add_argument(
319
+ "--checkpointing_steps",
320
+ type=int,
321
+ default=500,
322
+ help=(
323
+ "Save a checkpoint of the training state every X updates. These checkpoints are only suitable for resuming"
324
+ " training using `--resume_from_checkpoint`."
325
+ ),
326
+ )
327
+ parser.add_argument(
328
+ "--checkpoints_total_limit",
329
+ type=int,
330
+ default=None,
331
+ help=("Max number of checkpoints to store."),
332
+ )
333
+ parser.add_argument(
334
+ "--resume_from_checkpoint",
335
+ type=str,
336
+ default=None,
337
+ help=(
338
+ "Whether training should be resumed from a previous checkpoint. Use a path saved by"
339
+ ' `--checkpointing_steps`, or `"latest"` to automatically select the last available checkpoint.'
340
+ ),
341
+ )
342
+ parser.add_argument(
343
+ "--enable_xformers_memory_efficient_attention", action="store_true", help="Whether or not to use xformers."
344
+ )
345
+ parser.add_argument("--noise_offset", type=float, default=0, help="The scale of noise offset.")
346
+ parser.add_argument(
347
+ "--rank",
348
+ type=int,
349
+ default=4,
350
+ help=("The dimension of the LoRA update matrices."),
351
+ )
352
+
353
+ args = parser.parse_args()
354
+ env_local_rank = int(os.environ.get("LOCAL_RANK", -1))
355
+ if env_local_rank != -1 and env_local_rank != args.local_rank:
356
+ args.local_rank = env_local_rank
357
+
358
+ # Sanity checks
359
+ if args.dataset_name is None and args.train_data_dir is None:
360
+ raise ValueError("Need either a dataset name or a training folder.")
361
+
362
+ return args
363
+
364
+
365
+ DATASET_NAME_MAPPING = {
366
+ "lambdalabs/pokemon-blip-captions": ("image", "text"),
367
+ }
368
+
369
+
370
+ def main():
371
+ args = parse_args()
372
+ logging_dir = Path(args.output_dir, args.logging_dir)
373
+
374
+ accelerator_project_config = ProjectConfiguration(project_dir=args.output_dir, logging_dir=logging_dir)
375
+
376
+ accelerator = Accelerator(
377
+ gradient_accumulation_steps=args.gradient_accumulation_steps,
378
+ mixed_precision=args.mixed_precision,
379
+ log_with=args.report_to,
380
+ project_config=accelerator_project_config,
381
+ )
382
+ if args.report_to == "wandb":
383
+ if not is_wandb_available():
384
+ raise ImportError("Make sure to install wandb if you want to use it for logging during training.")
385
+ import wandb
386
+ wandb.init(dir=args.output_dir, project=args.hub_model_id)
387
+
388
+ # Make one log on every process with the configuration for debugging.
389
+ logging.basicConfig(
390
+ format="%(asctime)s - %(levelname)s - %(name)s - %(message)s",
391
+ datefmt="%m/%d/%Y %H:%M:%S",
392
+ level=logging.INFO,
393
+ )
394
+ logger.info(accelerator.state, main_process_only=False)
395
+ if accelerator.is_local_main_process:
396
+ datasets.utils.logging.set_verbosity_warning()
397
+ transformers.utils.logging.set_verbosity_warning()
398
+ diffusers.utils.logging.set_verbosity_info()
399
+ else:
400
+ datasets.utils.logging.set_verbosity_error()
401
+ transformers.utils.logging.set_verbosity_error()
402
+ diffusers.utils.logging.set_verbosity_error()
403
+
404
+ # If passed along, set the training seed now.
405
+ if args.seed is not None:
406
+ set_seed(args.seed)
407
+
408
+ # Handle the repository creation
409
+ if accelerator.is_main_process:
410
+ if args.output_dir is not None:
411
+ os.makedirs(args.output_dir, exist_ok=True)
412
+
413
+ if args.push_to_hub:
414
+ repo_id = create_repo(
415
+ repo_id=args.hub_model_id or Path(args.output_dir).name, exist_ok=True, token=args.hub_token
416
+ ).repo_id
417
+ # Load scheduler, tokenizer and models.
418
+ noise_scheduler = DDPMScheduler.from_pretrained(args.pretrained_model_name_or_path, subfolder="scheduler")
419
+ tokenizer = CLIPTokenizer.from_pretrained(
420
+ args.pretrained_model_name_or_path, subfolder="tokenizer", revision=args.revision
421
+ )
422
+ text_encoder = CLIPTextModel.from_pretrained(
423
+ args.pretrained_model_name_or_path, subfolder="text_encoder", revision=args.revision
424
+ )
425
+ vae = AutoencoderKL.from_pretrained(args.pretrained_model_name_or_path, subfolder="vae", revision=args.revision)
426
+ unet = UNet2DConditionModel.from_pretrained(
427
+ args.pretrained_model_name_or_path, subfolder="unet", revision=args.revision
428
+ )
429
+ # freeze parameters of models to save more memory
430
+ unet.requires_grad_(False)
431
+ vae.requires_grad_(False)
432
+
433
+ text_encoder.requires_grad_(False)
434
+
435
+ # For mixed precision training we cast all non-trainable weigths (vae, non-lora text_encoder and non-lora unet) to half-precision
436
+ # as these weights are only used for inference, keeping weights in full precision is not required.
437
+ weight_dtype = torch.float32
438
+ if accelerator.mixed_precision == "fp16":
439
+ weight_dtype = torch.float16
440
+ elif accelerator.mixed_precision == "bf16":
441
+ weight_dtype = torch.bfloat16
442
+
443
+ # Move unet, vae and text_encoder to device and cast to weight_dtype
444
+ unet.to(accelerator.device, dtype=weight_dtype)
445
+ vae.to(accelerator.device, dtype=weight_dtype)
446
+ text_encoder.to(accelerator.device, dtype=weight_dtype)
447
+
448
+ # now we will add new LoRA weights to the attention layers
449
+ # It's important to realize here how many attention weights will be added and of which sizes
450
+ # The sizes of the attention layers consist only of two different variables:
451
+ # 1) - the "hidden_size", which is increased according to `unet.config.block_out_channels`.
452
+ # 2) - the "cross attention size", which is set to `unet.config.cross_attention_dim`.
453
+
454
+ # Let's first see how many attention processors we will have to set.
455
+ # For Stable Diffusion, it should be equal to:
456
+ # - down blocks (2x attention layers) * (2x transformer layers) * (3x down blocks) = 12
457
+ # - mid blocks (2x attention layers) * (1x transformer layers) * (1x mid blocks) = 2
458
+ # - up blocks (2x attention layers) * (3x transformer layers) * (3x down blocks) = 18
459
+ # => 32 layers
460
+
461
+ # Set correct lora layers
462
+ lora_attn_procs = {}
463
+ for name in unet.attn_processors.keys():
464
+ cross_attention_dim = None if name.endswith("attn1.processor") else unet.config.cross_attention_dim
465
+ if name.startswith("mid_block"):
466
+ hidden_size = unet.config.block_out_channels[-1]
467
+ elif name.startswith("up_blocks"):
468
+ block_id = int(name[len("up_blocks.")])
469
+ hidden_size = list(reversed(unet.config.block_out_channels))[block_id]
470
+ elif name.startswith("down_blocks"):
471
+ block_id = int(name[len("down_blocks.")])
472
+ hidden_size = unet.config.block_out_channels[block_id]
473
+
474
+ lora_attn_procs[name] = LoRAAttnProcessor(
475
+ hidden_size=hidden_size,
476
+ cross_attention_dim=cross_attention_dim,
477
+ rank=args.rank,
478
+ )
479
+
480
+ unet.set_attn_processor(lora_attn_procs)
481
+
482
+ if args.enable_xformers_memory_efficient_attention:
483
+ if is_xformers_available():
484
+ import xformers
485
+
486
+ xformers_version = version.parse(xformers.__version__)
487
+ if xformers_version == version.parse("0.0.16"):
488
+ logger.warn(
489
+ "xFormers 0.0.16 cannot be used for training in some GPUs. If you observe problems during training, please update xFormers to at least 0.0.17. See https://huggingface.co/docs/diffusers/main/en/optimization/xformers for more details."
490
+ )
491
+ unet.enable_xformers_memory_efficient_attention()
492
+ else:
493
+ raise ValueError("xformers is not available. Make sure it is installed correctly")
494
+
495
+ def compute_snr(timesteps):
496
+ """
497
+ Computes SNR as per https://github.com/TiankaiHang/Min-SNR-Diffusion-Training/blob/521b624bd70c67cee4bdf49225915f5945a872e3/guided_diffusion/gaussian_diffusion.py#L847-L849
498
+ """
499
+ alphas_cumprod = noise_scheduler.alphas_cumprod
500
+ sqrt_alphas_cumprod = alphas_cumprod**0.5
501
+ sqrt_one_minus_alphas_cumprod = (1.0 - alphas_cumprod) ** 0.5
502
+
503
+ # Expand the tensors.
504
+ # Adapted from https://github.com/TiankaiHang/Min-SNR-Diffusion-Training/blob/521b624bd70c67cee4bdf49225915f5945a872e3/guided_diffusion/gaussian_diffusion.py#L1026
505
+ sqrt_alphas_cumprod = sqrt_alphas_cumprod.to(device=timesteps.device)[timesteps].float()
506
+ while len(sqrt_alphas_cumprod.shape) < len(timesteps.shape):
507
+ sqrt_alphas_cumprod = sqrt_alphas_cumprod[..., None]
508
+ alpha = sqrt_alphas_cumprod.expand(timesteps.shape)
509
+
510
+ sqrt_one_minus_alphas_cumprod = sqrt_one_minus_alphas_cumprod.to(device=timesteps.device)[timesteps].float()
511
+ while len(sqrt_one_minus_alphas_cumprod.shape) < len(timesteps.shape):
512
+ sqrt_one_minus_alphas_cumprod = sqrt_one_minus_alphas_cumprod[..., None]
513
+ sigma = sqrt_one_minus_alphas_cumprod.expand(timesteps.shape)
514
+
515
+ # Compute SNR.
516
+ snr = (alpha / sigma) ** 2
517
+ return snr
518
+
519
+ lora_layers = AttnProcsLayers(unet.attn_processors)
520
+
521
+ # Enable TF32 for faster training on Ampere GPUs,
522
+ # cf https://pytorch.org/docs/stable/notes/cuda.html#tensorfloat-32-tf32-on-ampere-devices
523
+ if args.allow_tf32:
524
+ torch.backends.cuda.matmul.allow_tf32 = True
525
+
526
+ if args.scale_lr:
527
+ args.learning_rate = (
528
+ args.learning_rate * args.gradient_accumulation_steps * args.train_batch_size * accelerator.num_processes
529
+ )
530
+
531
+ # Initialize the optimizer
532
+ if args.use_8bit_adam:
533
+ try:
534
+ import bitsandbytes as bnb
535
+ except ImportError:
536
+ raise ImportError(
537
+ "Please install bitsandbytes to use 8-bit Adam. You can do so by running `pip install bitsandbytes`"
538
+ )
539
+
540
+ optimizer_cls = bnb.optim.AdamW8bit
541
+ else:
542
+ optimizer_cls = torch.optim.AdamW
543
+
544
+ optimizer = optimizer_cls(
545
+ lora_layers.parameters(),
546
+ lr=args.learning_rate,
547
+ betas=(args.adam_beta1, args.adam_beta2),
548
+ weight_decay=args.adam_weight_decay,
549
+ eps=args.adam_epsilon,
550
+ )
551
+
552
+ # Get the datasets: you can either provide your own training and evaluation files (see below)
553
+ # or specify a Dataset from the hub (the dataset will be downloaded automatically from the datasets Hub).
554
+
555
+ # In distributed training, the load_dataset function guarantees that only one local process can concurrently
556
+ # download the dataset.
557
+ if args.dataset_name is not None:
558
+ # Downloading and loading a dataset from the hub.
559
+ dataset = load_dataset(
560
+ args.dataset_name,
561
+ args.dataset_config_name,
562
+ cache_dir=args.cache_dir,
563
+ )
564
+ else:
565
+ data_files = {}
566
+ if args.train_data_dir is not None:
567
+ data_files["train"] = os.path.join(args.train_data_dir, "**")
568
+ dataset = load_dataset(
569
+ "imagefolder",
570
+ data_files=data_files,
571
+ cache_dir=args.cache_dir,
572
+ )
573
+ # See more about loading custom images at
574
+ # https://huggingface.co/docs/datasets/v2.4.0/en/image_load#imagefolder
575
+
576
+ # Preprocessing the datasets.
577
+ # We need to tokenize inputs and targets.
578
+ column_names = dataset["train"].column_names
579
+
580
+ # 6. Get the column names for input/target.
581
+ dataset_columns = DATASET_NAME_MAPPING.get(args.dataset_name, None)
582
+ if args.image_column is None:
583
+ image_column = dataset_columns[0] if dataset_columns is not None else column_names[0]
584
+ else:
585
+ image_column = args.image_column
586
+ if image_column not in column_names:
587
+ raise ValueError(
588
+ f"--image_column' value '{args.image_column}' needs to be one of: {', '.join(column_names)}"
589
+ )
590
+ if args.caption_column is None:
591
+ caption_column = dataset_columns[1] if dataset_columns is not None else column_names[1]
592
+ else:
593
+ caption_column = args.caption_column
594
+ if caption_column not in column_names:
595
+ raise ValueError(
596
+ f"--caption_column' value '{args.caption_column}' needs to be one of: {', '.join(column_names)}"
597
+ )
598
+
599
+ # Preprocessing the datasets.
600
+ # We need to tokenize input captions and transform the images.
601
+ def tokenize_captions(examples, is_train=True):
602
+ captions = []
603
+ for caption in examples[caption_column]:
604
+ if isinstance(caption, str):
605
+ captions.append(caption)
606
+ elif isinstance(caption, (list, np.ndarray)):
607
+ # take a random caption if there are multiple
608
+ captions.append(random.choice(caption) if is_train else caption[0])
609
+ else:
610
+ raise ValueError(
611
+ f"Caption column `{caption_column}` should contain either strings or lists of strings."
612
+ )
613
+ inputs = tokenizer(
614
+ captions, max_length=tokenizer.model_max_length, padding="max_length", truncation=True, return_tensors="pt"
615
+ )
616
+ return inputs.input_ids
617
+
618
+ # Preprocessing the datasets.
619
+ train_transforms = transforms.Compose(
620
+ [
621
+ transforms.Resize(args.resolution, interpolation=transforms.InterpolationMode.BILINEAR),
622
+ transforms.CenterCrop(args.resolution) if args.center_crop else transforms.RandomCrop(args.resolution),
623
+ transforms.RandomHorizontalFlip() if args.random_flip else transforms.Lambda(lambda x: x),
624
+ transforms.ToTensor(),
625
+ transforms.Normalize([0.5], [0.5]),
626
+ ]
627
+ )
628
+
629
+ def preprocess_train(examples):
630
+ images = [image.convert("RGB") for image in examples[image_column]]
631
+ examples["pixel_values"] = [train_transforms(image) for image in images]
632
+ examples["input_ids"] = tokenize_captions(examples)
633
+ return examples
634
+
635
+ with accelerator.main_process_first():
636
+ if args.max_train_samples is not None:
637
+ dataset["train"] = dataset["train"].shuffle(seed=args.seed).select(range(args.max_train_samples))
638
+ # Set the training transforms
639
+ train_dataset = dataset["train"].with_transform(preprocess_train)
640
+
641
+ def collate_fn(examples):
642
+ pixel_values = torch.stack([example["pixel_values"] for example in examples])
643
+ pixel_values = pixel_values.to(memory_format=torch.contiguous_format).float()
644
+ input_ids = torch.stack([example["input_ids"] for example in examples])
645
+ return {"pixel_values": pixel_values, "input_ids": input_ids}
646
+
647
+ # DataLoaders creation:
648
+ train_dataloader = torch.utils.data.DataLoader(
649
+ train_dataset,
650
+ shuffle=True,
651
+ collate_fn=collate_fn,
652
+ batch_size=args.train_batch_size,
653
+ num_workers=args.dataloader_num_workers,
654
+ )
655
+
656
+ # Scheduler and math around the number of training steps.
657
+ overrode_max_train_steps = False
658
+ num_update_steps_per_epoch = math.ceil(len(train_dataloader) / args.gradient_accumulation_steps)
659
+ if args.max_train_steps is None:
660
+ args.max_train_steps = args.num_train_epochs * num_update_steps_per_epoch
661
+ overrode_max_train_steps = True
662
+
663
+ lr_scheduler = get_scheduler(
664
+ args.lr_scheduler,
665
+ optimizer=optimizer,
666
+ num_warmup_steps=args.lr_warmup_steps * args.gradient_accumulation_steps,
667
+ num_training_steps=args.max_train_steps * args.gradient_accumulation_steps,
668
+ )
669
+
670
+ # Prepare everything with our `accelerator`.
671
+ lora_layers, optimizer, train_dataloader, lr_scheduler = accelerator.prepare(
672
+ lora_layers, optimizer, train_dataloader, lr_scheduler
673
+ )
674
+
675
+ # We need to recalculate our total training steps as the size of the training dataloader may have changed.
676
+ num_update_steps_per_epoch = math.ceil(len(train_dataloader) / args.gradient_accumulation_steps)
677
+ if overrode_max_train_steps:
678
+ args.max_train_steps = args.num_train_epochs * num_update_steps_per_epoch
679
+ # Afterwards we recalculate our number of training epochs
680
+ args.num_train_epochs = math.ceil(args.max_train_steps / num_update_steps_per_epoch)
681
+
682
+ # We need to initialize the trackers we use, and also store our configuration.
683
+ # The trackers initializes automatically on the main process.
684
+ if accelerator.is_main_process:
685
+ accelerator.init_trackers("text2image-fine-tune", config=vars(args))
686
+
687
+ # Train!
688
+ total_batch_size = args.train_batch_size * accelerator.num_processes * args.gradient_accumulation_steps
689
+
690
+ logger.info("***** Running training *****")
691
+ logger.info(f" Num examples = {len(train_dataset)}")
692
+ logger.info(f" Num Epochs = {args.num_train_epochs}")
693
+ logger.info(f" Instantaneous batch size per device = {args.train_batch_size}")
694
+ logger.info(f" Total train batch size (w. parallel, distributed & accumulation) = {total_batch_size}")
695
+ logger.info(f" Gradient Accumulation steps = {args.gradient_accumulation_steps}")
696
+ logger.info(f" Total optimization steps = {args.max_train_steps}")
697
+ global_step = 0
698
+ first_epoch = 0
699
+
700
+ # Potentially load in the weights and states from a previous save
701
+ if args.resume_from_checkpoint:
702
+ if args.resume_from_checkpoint != "latest":
703
+ path = os.path.basename(args.resume_from_checkpoint)
704
+ else:
705
+ # Get the most recent checkpoint
706
+ dirs = os.listdir(args.output_dir)
707
+ dirs = [d for d in dirs if d.startswith("checkpoint")]
708
+ dirs = sorted(dirs, key=lambda x: int(x.split("-")[1]))
709
+ path = dirs[-1] if len(dirs) > 0 else None
710
+
711
+ if path is None:
712
+ accelerator.print(
713
+ f"Checkpoint '{args.resume_from_checkpoint}' does not exist. Starting a new training run."
714
+ )
715
+ args.resume_from_checkpoint = None
716
+ else:
717
+ accelerator.print(f"Resuming from checkpoint {path}")
718
+ accelerator.load_state(os.path.join(args.output_dir, path))
719
+ global_step = int(path.split("-")[1])
720
+
721
+ resume_global_step = global_step * args.gradient_accumulation_steps
722
+ first_epoch = global_step // num_update_steps_per_epoch
723
+ resume_step = resume_global_step % (num_update_steps_per_epoch * args.gradient_accumulation_steps)
724
+
725
+ # Only show the progress bar once on each machine.
726
+ progress_bar = tqdm(range(global_step, args.max_train_steps), disable=not accelerator.is_local_main_process)
727
+ progress_bar.set_description("Steps")
728
+
729
+ for epoch in range(first_epoch, args.num_train_epochs):
730
+ unet.train()
731
+ train_loss = 0.0
732
+ for step, batch in enumerate(train_dataloader):
733
+ # Skip steps until we reach the resumed step
734
+ if args.resume_from_checkpoint and epoch == first_epoch and step < resume_step:
735
+ if step % args.gradient_accumulation_steps == 0:
736
+ progress_bar.update(1)
737
+ continue
738
+
739
+ with accelerator.accumulate(unet):
740
+ # Convert images to latent space
741
+ latents = vae.encode(batch["pixel_values"].to(dtype=weight_dtype)).latent_dist.sample()
742
+ latents = latents * vae.config.scaling_factor
743
+
744
+ # Sample noise that we'll add to the latents
745
+ noise = torch.randn_like(latents)
746
+ if args.noise_offset:
747
+ # https://www.crosslabs.org//blog/diffusion-with-offset-noise
748
+ noise += args.noise_offset * torch.randn(
749
+ (latents.shape[0], latents.shape[1], 1, 1), device=latents.device
750
+ )
751
+
752
+ bsz = latents.shape[0]
753
+ # Sample a random timestep for each image
754
+ timesteps = torch.randint(0, noise_scheduler.config.num_train_timesteps, (bsz,), device=latents.device)
755
+ timesteps = timesteps.long()
756
+
757
+ # Add noise to the latents according to the noise magnitude at each timestep
758
+ # (this is the forward diffusion process)
759
+ noisy_latents = noise_scheduler.add_noise(latents, noise, timesteps)
760
+
761
+ # Get the text embedding for conditioning
762
+ encoder_hidden_states = text_encoder(batch["input_ids"])[0]
763
+
764
+ # Get the target for loss depending on the prediction type
765
+ if args.prediction_type is not None:
766
+ # set prediction_type of scheduler if defined
767
+ noise_scheduler.register_to_config(prediction_type=args.prediction_type)
768
+
769
+ if noise_scheduler.config.prediction_type == "epsilon":
770
+ target = noise
771
+ elif noise_scheduler.config.prediction_type == "v_prediction":
772
+ target = noise_scheduler.get_velocity(latents, noise, timesteps)
773
+ else:
774
+ raise ValueError(f"Unknown prediction type {noise_scheduler.config.prediction_type}")
775
+
776
+ # Predict the noise residual and compute loss
777
+ model_pred = unet(noisy_latents, timesteps, encoder_hidden_states).sample
778
+
779
+ if args.snr_gamma is None:
780
+ loss = F.mse_loss(model_pred.float(), target.float(), reduction="mean")
781
+ else:
782
+ # Compute loss-weights as per Section 3.4 of https://arxiv.org/abs/2303.09556.
783
+ # Since we predict the noise instead of x_0, the original formulation is slightly changed.
784
+ # This is discussed in Section 4.2 of the same paper.
785
+ snr = compute_snr(timesteps)
786
+ mse_loss_weights = (
787
+ torch.stack([snr, args.snr_gamma * torch.ones_like(timesteps)], dim=1).min(dim=1)[0] / snr
788
+ )
789
+ # We first calculate the original loss. Then we mean over the non-batch dimensions and
790
+ # rebalance the sample-wise losses with their respective loss weights.
791
+ # Finally, we take the mean of the rebalanced loss.
792
+ loss = F.mse_loss(model_pred.float(), target.float(), reduction="none")
793
+ loss = loss.mean(dim=list(range(1, len(loss.shape)))) * mse_loss_weights
794
+ loss = loss.mean()
795
+
796
+ # Gather the losses across all processes for logging (if we use distributed training).
797
+ avg_loss = accelerator.gather(loss.repeat(args.train_batch_size)).mean()
798
+ train_loss += avg_loss.item() / args.gradient_accumulation_steps
799
+
800
+ # Backpropagate
801
+ accelerator.backward(loss)
802
+ if accelerator.sync_gradients:
803
+ params_to_clip = lora_layers.parameters()
804
+ accelerator.clip_grad_norm_(params_to_clip, args.max_grad_norm)
805
+ optimizer.step()
806
+ lr_scheduler.step()
807
+ optimizer.zero_grad()
808
+
809
+ # Checks if the accelerator has performed an optimization step behind the scenes
810
+ if accelerator.sync_gradients:
811
+ progress_bar.update(1)
812
+ global_step += 1
813
+ accelerator.log({"train_loss": train_loss}, step=global_step)
814
+ train_loss = 0.0
815
+
816
+ if global_step % args.checkpointing_steps == 0:
817
+ if accelerator.is_main_process:
818
+ # _before_ saving state, check if this save would set us over the `checkpoints_total_limit`
819
+ if args.checkpoints_total_limit is not None:
820
+ checkpoints = os.listdir(args.output_dir)
821
+ checkpoints = [d for d in checkpoints if d.startswith("checkpoint")]
822
+ checkpoints = sorted(checkpoints, key=lambda x: int(x.split("-")[1]))
823
+
824
+ # before we save the new checkpoint, we need to have at _most_ `checkpoints_total_limit - 1` checkpoints
825
+ if len(checkpoints) >= args.checkpoints_total_limit:
826
+ num_to_remove = len(checkpoints) - args.checkpoints_total_limit + 1
827
+ removing_checkpoints = checkpoints[0:num_to_remove]
828
+
829
+ logger.info(
830
+ f"{len(checkpoints)} checkpoints already exist, removing {len(removing_checkpoints)} checkpoints"
831
+ )
832
+ logger.info(f"removing checkpoints: {', '.join(removing_checkpoints)}")
833
+
834
+ for removing_checkpoint in removing_checkpoints:
835
+ removing_checkpoint = os.path.join(args.output_dir, removing_checkpoint)
836
+ shutil.rmtree(removing_checkpoint)
837
+
838
+ save_path = os.path.join(args.output_dir, f"checkpoint-{global_step}")
839
+ accelerator.save_state(save_path)
840
+ logger.info(f"Saved state to {save_path}")
841
+
842
+ logs = {"step_loss": loss.detach().item(), "lr": lr_scheduler.get_last_lr()[0]}
843
+ progress_bar.set_postfix(**logs)
844
+
845
+ if global_step >= args.max_train_steps:
846
+ break
847
+
848
+ if accelerator.is_main_process:
849
+ if args.validation_prompt is not None and epoch % args.validation_epochs == 0:
850
+ logger.info(
851
+ f"Running validation... \n Generating {args.num_validation_images} images with prompt:"
852
+ f" {args.validation_prompt}."
853
+ )
854
+ # create pipeline
855
+ pipeline = DiffusionPipeline.from_pretrained(
856
+ args.pretrained_model_name_or_path,
857
+ unet=accelerator.unwrap_model(unet),
858
+ revision=args.revision,
859
+ torch_dtype=weight_dtype,
860
+ cache_dir=args.cache_dir,
861
+ )
862
+ pipeline = pipeline.to(accelerator.device)
863
+ pipeline.set_progress_bar_config(disable=True)
864
+
865
+ # run inference
866
+ generator = torch.Generator(device=accelerator.device)
867
+ if args.seed is not None:
868
+ generator = generator.manual_seed(args.seed)
869
+ images = []
870
+ for _ in range(args.num_validation_images):
871
+ images.append(
872
+ pipeline(args.validation_prompt, num_inference_steps=30, generator=generator).images[0]
873
+ )
874
+
875
+ for tracker in accelerator.trackers:
876
+ if tracker.name == "tensorboard":
877
+ np_images = np.stack([np.asarray(img) for img in images])
878
+ tracker.writer.add_images("validation", np_images, epoch, dataformats="NHWC")
879
+ if tracker.name == "wandb":
880
+ tracker.log(
881
+ {
882
+ "validation": [
883
+ wandb.Image(image, caption=f"{i}: {args.validation_prompt}")
884
+ for i, image in enumerate(images)
885
+ ]
886
+ }
887
+ )
888
+
889
+ del pipeline
890
+ torch.cuda.empty_cache()
891
+
892
+ # Save the lora layers
893
+ accelerator.wait_for_everyone()
894
+ if accelerator.is_main_process:
895
+ unet = unet.to(torch.float32)
896
+ unet.save_attn_procs(args.output_dir)
897
+
898
+ if args.push_to_hub:
899
+ save_model_card(
900
+ repo_id,
901
+ images=images,
902
+ base_model=args.pretrained_model_name_or_path,
903
+ dataset_name=args.dataset_name,
904
+ repo_folder=args.output_dir,
905
+ )
906
+ upload_folder(
907
+ repo_id=repo_id,
908
+ folder_path=args.output_dir,
909
+ commit_message="End of training",
910
+ ignore_patterns=["step_*", "epoch_*"],
911
+ )
912
+
913
+ # Final inference
914
+ # Load previous pipeline
915
+ pipeline = DiffusionPipeline.from_pretrained(
916
+ args.pretrained_model_name_or_path, revision=args.revision, torch_dtype=weight_dtype, cache_dir=args.cache_dir,
917
+ )
918
+ pipeline = pipeline.to(accelerator.device)
919
+
920
+ # load attention processors
921
+ pipeline.unet.load_attn_procs(args.output_dir)
922
+
923
+ # run inference
924
+ generator = torch.Generator(device=accelerator.device)
925
+ if args.seed is not None:
926
+ generator = generator.manual_seed(args.seed)
927
+ images = []
928
+ for _ in range(args.num_validation_images):
929
+ images.append(pipeline(args.validation_prompt, num_inference_steps=30, generator=generator).images[0])
930
+
931
+ if accelerator.is_main_process:
932
+ for tracker in accelerator.trackers:
933
+ if len(images) != 0:
934
+ if tracker.name == "tensorboard":
935
+ np_images = np.stack([np.asarray(img) for img in images])
936
+ tracker.writer.add_images("test", np_images, epoch, dataformats="NHWC")
937
+ if tracker.name == "wandb":
938
+ tracker.log(
939
+ {
940
+ "test": [
941
+ wandb.Image(image, caption=f"{i}: {args.validation_prompt}")
942
+ for i, image in enumerate(images)
943
+ ]
944
+ }
945
+ )
946
+
947
+ accelerator.end_training()
948
+
949
+
950
+ if __name__ == "__main__":
951
+ main()