Dominik Hintersdorf commited on
Commit
2de5878
1 Parent(s): 745c665

initial commit

Browse files
README.md CHANGED
@@ -1,12 +1,12 @@
1
  ---
2
- title: Does Clip Know My Face
3
- emoji:
4
  colorFrom: blue
5
  colorTo: red
6
  sdk: gradio
7
- sdk_version: 3.19.1
8
  app_file: app.py
9
  pinned: false
 
 
10
  ---
11
-
12
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
1
  ---
2
+ title: Does Clip Know My Face?
3
+ emoji: 🧑
4
  colorFrom: blue
5
  colorTo: red
6
  sdk: gradio
7
+ sdk_version: 3.18.0
8
  app_file: app.py
9
  pinned: false
10
+ license: cc-by-sa-4.0
11
+ python_version: 3.10.0
12
  ---
 
 
app.py ADDED
@@ -0,0 +1,605 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import glob
2
+ import tempfile
3
+ from decimal import Decimal
4
+ from pathlib import Path
5
+ from typing import List, Dict, Any
6
+
7
+ import gradio as gr
8
+ from PIL import Image
9
+ import open_clip
10
+ import torch
11
+ import os
12
+ import pandas as pd
13
+ import numpy as np
14
+ from gradio import processing_utils, utils
15
+
16
+ from download_example_images import read_actor_files, save_images_to_folder
17
+
18
+ DEFAULT_INITIAL_NAME = "John Doe"
19
+ PROMPTS = [
20
+ '{0}',
21
+ 'an image of {0}',
22
+ 'a photo of {0}',
23
+ '{0} on a photo',
24
+ 'a photo of a person named {0}',
25
+ 'a person named {0}',
26
+ 'a man named {0}',
27
+ 'a woman named {0}',
28
+ 'the name of the person is {0}',
29
+ 'a photo of a person with the name {0}',
30
+ '{0} at a gala',
31
+ 'a photo of the celebrity {0}',
32
+ 'actor {0}',
33
+ 'actress {0}',
34
+ 'a colored photo of {0}',
35
+ 'a black and white photo of {0}',
36
+ 'a cool photo of {0}',
37
+ 'a cropped photo of {0}',
38
+ 'a cropped image of {0}',
39
+ '{0} in a suit',
40
+ '{0} in a dress'
41
+ ]
42
+ OPEN_CLIP_MODEL_NAMES = ['ViT-B-32', 'ViT-B-16', 'ViT-L-14']
43
+ NUM_TOTAL_NAMES = 1_000
44
+ SEED = 42
45
+ MIN_NUM_CORRECT_PROMPT_PREDS = 1
46
+ EDAMPLE_IMAGE_DIR = './example_images/'
47
+ IMG_BATCHSIZE = 16
48
+
49
+ DEVICE = "cuda" if torch.cuda.is_available() else "cpu"
50
+
51
+ EXAMPLE_IMAGE_URLS = read_actor_files(EDAMPLE_IMAGE_DIR)
52
+ save_images_to_folder(os.path.join(EDAMPLE_IMAGE_DIR, 'images'), EXAMPLE_IMAGE_URLS)
53
+
54
+ MODELS = {}
55
+ for model_name in OPEN_CLIP_MODEL_NAMES:
56
+ dataset = 'LAION400M'
57
+ model, _, preprocess = open_clip.create_model_and_transforms(
58
+ model_name,
59
+ pretrained=f'{dataset.lower()}_e32'
60
+ )
61
+ model = model.eval()
62
+ MODELS[f'OpenClip {model_name} trained on {dataset}'] = {
63
+ 'model_instance': model,
64
+ 'preprocessing': preprocess,
65
+ 'model_name': model_name,
66
+ 'prompt_text_embeddings': torch.load(f'./prompt_text_embeddings/{model_name}_prompt_text_embeddings.pt')
67
+ }
68
+
69
+ FULL_NAMES_DF = pd.read_csv('full_names.csv', index_col=0)
70
+ LAION_MEMBERSHIP_OCCURENCE = pd.read_csv('laion_membership_occurence_count.csv', index_col=0)
71
+
72
+ EXAMPLE_ACTORS_BY_MODEL = {
73
+ "ViT-B-32": ["T._J._Thyne"],
74
+ "ViT-B-16": ["Barbara_Schöneberger", "Carolin_Kebekus"],
75
+ "ViT-L-14": ["Max_Giermann", "Nicole_De_Boer"]
76
+ }
77
+
78
+ EXAMPLES = []
79
+ for model_name, person_names in EXAMPLE_ACTORS_BY_MODEL.items():
80
+ for name in person_names:
81
+ image_folder = os.path.join("./example_images/images/", name)
82
+ for dd_model_name in MODELS.keys():
83
+ if model_name not in dd_model_name:
84
+ continue
85
+
86
+ EXAMPLES.append([
87
+ dd_model_name,
88
+ name.replace("_", " "),
89
+ [[x.format(name.replace("_", " ")) for x in PROMPTS]],
90
+ [os.path.join(image_folder, x) for x in os.listdir(image_folder)]
91
+ ])
92
+
93
+ LICENSE_DETAILS = """
94
+ <details>
95
+ <summary>Example Images License Information</summary>
96
+
97
+ ### Barbara Schöneberger
98
+
99
+ | Image Name | Image Url | Author | License |
100
+ |----------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------|--------------|
101
+ | Barbara_Schöneberger_0.jpg | [https://upload.wikimedia.org/wikipedia/commons/1/1d/Barbara_Sch%C3%B6neberger_-_Deutscher_Radiopreis_Hamburg_2016_13.jpg](https://upload.wikimedia.org/wikipedia/commons/1/1d/Barbara_Sch%C3%B6neberger_-_Deutscher_Radiopreis_Hamburg_2016_13.jpg) | Frank Schwichtenberg | CC-BY-SA-3.0 |
102
+ | Barbara_Schöneberger_1.jpg | [https://upload.wikimedia.org/wikipedia/commons/9/9d/Barbara_Sch%C3%B6neberger_%282007%29.jpg](https://upload.wikimedia.org/wikipedia/commons/9/9d/Barbara_Sch%C3%B6neberger_%282007%29.jpg) | Pottschalk | CC-BY-SA-3.0 |
103
+ | Barbara_Schöneberger_2.jpg | [https://upload.wikimedia.org/wikipedia/commons/f/f0/Barbara_Sch%C3%B6neberger_-_Deutscher_Radiopreis_Hamburg_2016_03.jpg](https://upload.wikimedia.org/wikipedia/commons/f/f0/Barbara_Sch%C3%B6neberger_-_Deutscher_Radiopreis_Hamburg_2016_03.jpg) | Frank Schwichtenberg | CC-BY-SA-3.0 |
104
+ | Barbara_Schöneberger_3.jpg | [https://upload.wikimedia.org/wikipedia/commons/f/fa/Barbara_Sch%C3%B6neberger_-_Deutscher_Radiopreis_Hamburg_2016_12.jpg](https://upload.wikimedia.org/wikipedia/commons/f/fa/Barbara_Sch%C3%B6neberger_-_Deutscher_Radiopreis_Hamburg_2016_12.jpg) | Frank Schwichtenberg | CC-BY-SA-3.0 |
105
+ | Barbara_Schöneberger_4.jpg | [https://upload.wikimedia.org/wikipedia/commons/0/0a/Barbara_Sch%C3%B6neberger_-_Deutscher_Radiopreis_Hamburg_2016_01.jpg](https://upload.wikimedia.org/wikipedia/commons/0/0a/Barbara_Sch%C3%B6neberger_-_Deutscher_Radiopreis_Hamburg_2016_01.jpg) | Frank Schwichtenberg | CC-BY-SA-3.0 |
106
+
107
+ ### Carolin Kebekus
108
+
109
+ | Image Name | Image Url | Author | License |
110
+ |-----------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------|--------------|
111
+ | Carolin_Kebekus_0.jpg | [https://upload.wikimedia.org/wikipedia/commons/c/ce/Carolin_Kebekus_-_2019102193318_2019-04-12_Radio_Regenbogen_Award_2019_-_Sven_-_1D_X_MK_II_-_0905_-_AK8I0075.jpg](https://upload.wikimedia.org/wikipedia/commons/c/ce/Carolin_Kebekus_-_2019102193318_2019-04-12_Radio_Regenbogen_Award_2019_-_Sven_-_1D_X_MK_II_-_0905_-_AK8I0075.jpg) | Sven Mandel | CC-BY-SA-4.0 |
112
+ | Carolin_Kebekus_1.jpg | [https://upload.wikimedia.org/wikipedia/commons/4/45/Carolin-Kebekus-Bonn.jpg](https://upload.wikimedia.org/wikipedia/commons/4/45/Carolin-Kebekus-Bonn.jpg) | Superbass | CC-BY-SA-3.0 |
113
+ | Carolin_Kebekus_2.jpg | [https://upload.wikimedia.org/wikipedia/commons/4/45/Carolin-Kebekus-Bonn.jpg](https://upload.wikimedia.org/wikipedia/commons/4/45/Carolin-Kebekus-Bonn.jpg) | Sven Mandel | CC-BY-SA-4.0 |
114
+ | Carolin_Kebekus_3.jpg | [https://upload.wikimedia.org/wikipedia/commons/0/02/Carolin_Kebekus-5848.jpg](https://upload.wikimedia.org/wikipedia/commons/0/02/Carolin_Kebekus-5848.jpg) | Harald Krichel | CC-BY-SA-3.0 |
115
+ | Carolin_Kebekus_4.jpg | [https://upload.wikimedia.org/wikipedia/commons/e/e1/2021-09-16-Carolin_Kebekus_Deutscher_Fernsehpreis_2021_-3757.jpg](https://upload.wikimedia.org/wikipedia/commons/e/e1/2021-09-16-Carolin_Kebekus_Deutscher_Fernsehpreis_2021_-3757.jpg) | Superbass | CC-BY-SA-4.0 |
116
+
117
+ ### Max Giermann
118
+
119
+ | Image Name | Image Url | Author | License |
120
+ |--------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------|--------------|
121
+ | Max_Giermann_0.jpg | [https://upload.wikimedia.org/wikipedia/commons/4/4b/2018-01-26-DFP_2018-7513.jpg](https://upload.wikimedia.org/wikipedia/commons/4/4b/2018-01-26-DFP_2018-7513.jpg) | Superbass | CC-BY-SA-4.0 |
122
+ | Max_Giermann_1.jpg | [https://upload.wikimedia.org/wikipedia/commons/f/f6/Deutscher_Fernsehpreis_2012_-_Max_Giermann.jpg](https://upload.wikimedia.org/wikipedia/commons/f/f6/Deutscher_Fernsehpreis_2012_-_Max_Giermann.jpg) | JCS | CC-BY-3.0 |
123
+ | Max_Giermann_2.jpg | [https://upload.wikimedia.org/wikipedia/commons/1/1c/Hessischer_Filmpreis_2017_-_Max_Giermann_2.JPG](https://upload.wikimedia.org/wikipedia/commons/1/1c/Hessischer_Filmpreis_2017_-_Max_Giermann_2.JPG) | JCS | CC-BY-3.0 |
124
+ | Max_Giermann_3.jpg | [https://upload.wikimedia.org/wikipedia/commons/1/1d/Max_Giermann_%28extra_3%29_01.jpg](https://upload.wikimedia.org/wikipedia/commons/1/1d/Max_Giermann_%28extra_3%29_01.jpg) | Frank Schwichtenberg | CC-BY-SA-3.0 |
125
+ | Max_Giermann_4.jpg | [https://upload.wikimedia.org/wikipedia/commons/8/85/Max_Giermann_%28extra_3%29_03.jpg](https://upload.wikimedia.org/wikipedia/commons/8/85/Max_Giermann_%28extra_3%29_03.jpg) | Frank Schwichtenberg | CC-BY-SA-3.0 |
126
+
127
+ ### Nicole De Boer
128
+
129
+ | Image Name | Image Url | Author | License |
130
+ |----------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------|--------------|
131
+ | Nicole_De_Boer_0.jpg | [https://upload.wikimedia.org/wikipedia/commons/0/03/Praha%2C_Lhotka%2C_KC_Novodvorsk%C3%A1%2C_CzechTREK_2013_%2827%29.jpg](https://upload.wikimedia.org/wikipedia/commons/0/03/Praha%2C_Lhotka%2C_KC_Novodvorsk%C3%A1%2C_CzechTREK_2013_%2827%29.jpg) | Harold | CC-BY-SA-3.0 |
132
+ | Nicole_De_Boer_1.jpg | [https://upload.wikimedia.org/wikipedia/commons/d/db/Nicole_DeBoer_at_Toronto_Comicon_1.jpg](https://upload.wikimedia.org/wikipedia/commons/d/db/Nicole_DeBoer_at_Toronto_Comicon_1.jpg) | Tabercil | CC-BY-SA-3.0 |
133
+ | Nicole_De_Boer_2.jpg | [https://upload.wikimedia.org/wikipedia/commons/4/4b/Nicole_de_Boer_at_Toronto_Comicon_2_%28cropped%29.jpg](https://upload.wikimedia.org/wikipedia/commons/4/4b/Nicole_de_Boer_at_Toronto_Comicon_2_%28cropped%29.jpg) | Tabercil | CC-BY-SA-3.0 |
134
+ | Nicole_De_Boer_3.jpg | [https://upload.wikimedia.org/wikipedia/commons/b/b9/Nicole_de_boer_LFCC2015.jpg](https://upload.wikimedia.org/wikipedia/commons/b/b9/Nicole_de_boer_LFCC2015.jpg) | Dazzoboy | CC-BY-SA-4.0 |
135
+ | Nicole_De_Boer_4.jpg | [https://upload.wikimedia.org/wikipedia/commons/9/90/Nicole_de_Boer_at_Toronto_Comicon_2.jpg](https://upload.wikimedia.org/wikipedia/commons/9/90/Nicole_de_Boer_at_Toronto_Comicon_2.jpg) | Tabercil | CC-BY-SA-3.0 |
136
+
137
+ ### T. J. Thyne
138
+
139
+ | Image Name | Image Url | Author | License |
140
+ |-------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------|--------------|
141
+ | T._J._Thyne_0.jpg | [https://live.staticflickr.com/7036/6837850246_c09a148d70_o.jpg](https://live.staticflickr.com/7036/6837850246_c09a148d70_o.jpg) | Genevieve | CC-BY-2.0 |
142
+ | T._J._Thyne_1.jpg | [https://live.staticflickr.com/3273/5705869811_d9ff808383_o.jpg](https://live.staticflickr.com/3273/5705869811_d9ff808383_o.jpg) | Genevieve | CC-BY-2.0 |
143
+ | T._J._Thyne_2.jpg | [https://upload.wikimedia.org/wikipedia/commons/d/d8/TJThyneFanExpo2017.jpg](https://upload.wikimedia.org/wikipedia/commons/d/d8/TJThyneFanExpo2017.jpg) | Christian Dahl-Lacroix | CC-BY-SA-4.0 |
144
+ | T._J._Thyne_3.jpg | [https://live.staticflickr.com/7041/6984629777_8a415b72d9_b.jpg](https://live.staticflickr.com/7041/6984629777_8a415b72d9_b.jpg) | Genevieve | CC-BY-2.0 |
145
+ | T._J._Thyne_4.jpg | [https://live.staticflickr.com/7042/6837821654_d65ab80913_b.jpg](https://live.staticflickr.com/7042/6837821654_d65ab80913_b.jpg) | Genevieve | CC-BY-2.0 |
146
+
147
+ </details>
148
+ """
149
+
150
+ CORRECT_RESULT_INTERPRETATION = """<br>
151
+ <h2>{0} is in the Training Data!</h2>
152
+ The name of {0} has been <b>correctly predicted for {1} out of {2} prompts.</b> This means that <b>{0} was in
153
+ the training data and was used to train the model.</b>
154
+ Keep in mind that the probability of correctly predicting the name for {3} by chance {4} times with {5} possible names for the model to
155
+ choose from, is only (<sup>1</sup> &#8260; <sub>{5}</sub>)<sup>{6}</sup> = {7}%.
156
+ """
157
+
158
+ INDECISIVE_RESULT_INTERPRETATION = """<br>
159
+ <h2>{0} might be in the Training Data!</h2>
160
+ For none of the {1} prompts the majority vote for the name of {0} was correct. However, while the majority votes are not
161
+ correct, the name of {0} was correctly predicted {2} times for {3}. This is an indication that the model has seen {0}
162
+ during training. A different selection of images might have a clearer result. Keep in mind that the probability
163
+ that the name is correctly predicted by chance {2} times for {3} is
164
+ (<sup>1</sup> &#8260; <sub>{4}</sub>)<sup>{2}</sup> = {5}%.
165
+ """
166
+
167
+ INCORRECT_RESULT_INTERPRETATION = """<br>
168
+ <h2>{0} is most likely not in the Training Data!</h2>
169
+ The name of {0} has not been correctly predicted for any of the {1} prompts. This is an indication that {0} has
170
+ most likely not been used for training the model.
171
+ """
172
+
173
+ OCCURENCE_INFORMATION = """<br><br>
174
+ According to our analysis {0} appeared {1} times among 400 million image-text pairs in the LAION-400M training dataset.
175
+ """
176
+
177
+ CSS = """
178
+ .footer {
179
+ margin-bottom: 45px;
180
+ margin-top: 35px;
181
+ text-align: center;
182
+ border-bottom: 1px solid #e5e5e5;
183
+ }
184
+ #file_upload {
185
+ max-height: 250px;
186
+ overflow-y: auto !important;
187
+ }
188
+ .footer>p {
189
+ font-size: .8rem;
190
+ display: inline-block;
191
+ padding: 0 10px;
192
+ transform: translateY(10px);
193
+ background: white;
194
+ }
195
+
196
+ .dark .footer {
197
+ border-color: #303030;
198
+ }
199
+ .dark .footer>p {
200
+ background: #0b0f19;
201
+ }
202
+ .acknowledgments h4{
203
+ margin: 1.25em 0 .25em 0;
204
+ font-weight: bold;
205
+ font-size: 115%;
206
+ }
207
+ """
208
+
209
+
210
+ # monkey patch the update function of the Files component since otherwise it is not possible to access the original
211
+ # file name
212
+ def preprocess(
213
+ self, x: List[Dict[str, Any]] | None
214
+ ) -> bytes | tempfile._TemporaryFileWrapper | List[
215
+ bytes | tempfile._TemporaryFileWrapper
216
+ ] | None:
217
+ """
218
+ Parameters:
219
+ x: List of JSON objects with filename as 'name' property and base64 data as 'data' property
220
+ Returns:
221
+ File objects in requested format
222
+ """
223
+ if x is None:
224
+ return None
225
+
226
+ def process_single_file(f) -> bytes | tempfile._TemporaryFileWrapper:
227
+ file_name, orig_name, data, is_file = (
228
+ f["name"] if "name" in f.keys() else f["orig_name"],
229
+ f["orig_name"],
230
+ f["data"],
231
+ f.get("is_file", False),
232
+ )
233
+ if self.type == "file":
234
+ if is_file:
235
+ temp_file_path = self.make_temp_copy_if_needed(file_name)
236
+ file = tempfile.NamedTemporaryFile(delete=False)
237
+ file.name = temp_file_path
238
+ file.orig_name = os.path.basename(orig_name.replace(self.hash_file(file_name), "")) # type: ignore
239
+ else:
240
+ file = processing_utils.decode_base64_to_file(
241
+ data, file_path=file_name
242
+ )
243
+ file.orig_name = file_name # type: ignore
244
+ self.temp_files.add(str(utils.abspath(file.name)))
245
+ return file
246
+ elif (
247
+ self.type == "binary" or self.type == "bytes"
248
+ ): # "bytes" is included for backwards compatibility
249
+ if is_file:
250
+ with open(file_name, "rb") as file_data:
251
+ return file_data.read()
252
+ return processing_utils.decode_base64_to_binary(data)[0]
253
+ else:
254
+ raise ValueError(
255
+ "Unknown type: "
256
+ + str(self.type)
257
+ + ". Please choose from: 'file', 'bytes'."
258
+ )
259
+
260
+ if self.file_count == "single":
261
+ if isinstance(x, list):
262
+ return process_single_file(x[0])
263
+ else:
264
+ return process_single_file(x)
265
+ else:
266
+ if isinstance(x, list):
267
+ return [process_single_file(f) for f in x]
268
+ else:
269
+ return process_single_file(x)
270
+
271
+
272
+ gr.Files.preprocess = preprocess
273
+
274
+
275
+ @torch.no_grad()
276
+ def calculate_text_embeddings(model_name, prompts):
277
+ tokenizer = open_clip.get_tokenizer(MODELS[model_name]['model_name'])
278
+ context_vecs = open_clip.tokenize(prompts)
279
+
280
+ model_instance = MODELS[model_name]['model_instance']
281
+
282
+ model_instance = model_instance.to(DEVICE)
283
+ context_vecs = context_vecs.to(DEVICE)
284
+
285
+ text_features = model_instance.encode_text(context_vecs, normalize=True).cpu()
286
+
287
+ model_instance = model_instance.cpu()
288
+ context_vecs = context_vecs.cpu()
289
+
290
+ return text_features
291
+
292
+
293
+ @torch.no_grad()
294
+ def calculate_image_embeddings(model_name, images):
295
+ preprocessing = MODELS[model_name]['preprocessing']
296
+ model_instance = MODELS[model_name]['model_instance']
297
+
298
+ # load the given images
299
+ user_imgs = []
300
+ for tmp_file_img in images:
301
+ img = Image.open(tmp_file_img.name)
302
+ # preprocess the images
303
+ user_imgs.append(preprocessing(img))
304
+
305
+ # calculate the image embeddings
306
+ image_embeddings = []
307
+ model_instance = model_instance.to(DEVICE)
308
+ for batch_idx in range(0, len(user_imgs), IMG_BATCHSIZE):
309
+ imgs = user_imgs[batch_idx:batch_idx + IMG_BATCHSIZE]
310
+ imgs = torch.stack(imgs)
311
+ imgs = imgs.to(DEVICE)
312
+
313
+ emb = model_instance.encode_image(imgs, normalize=True).cpu()
314
+ image_embeddings.append(emb)
315
+
316
+ imgs = imgs.cpu()
317
+ model_instance = model_instance.cpu()
318
+
319
+ return torch.cat(image_embeddings)
320
+
321
+
322
+ def get_possible_names(true_name):
323
+ possible_names = FULL_NAMES_DF
324
+ possible_names['full_names'] = FULL_NAMES_DF['first_name'].astype(str) + ' ' + FULL_NAMES_DF['last_name'].astype(
325
+ str)
326
+
327
+ possible_names = possible_names[possible_names['full_names'] != true_name]
328
+
329
+ # sample the same amount of male and female names
330
+ sampled_names = possible_names.groupby('sex').sample(int(NUM_TOTAL_NAMES / 2), random_state=42)
331
+ # shuffle the rows randomly
332
+ sampled_names = sampled_names.sample(frac=1)
333
+ # get only the full names since we don't need first and last name and gender anymore
334
+ possible_full_names = sampled_names['full_names']
335
+
336
+ return possible_full_names
337
+
338
+
339
+ def round_to_first_digit(value: Decimal):
340
+ tmp = np.format_float_positional(value)
341
+
342
+ prob_str = []
343
+ for c in str(tmp):
344
+ if c in ("0", "."):
345
+ prob_str.append(c)
346
+ else:
347
+ prob_str.append(c)
348
+ break
349
+
350
+ return "".join(prob_str)
351
+
352
+
353
+ def get_majority_predictions(predictions: pd.Series, values_only=False, counts_only=False, value=None):
354
+ """Takes a series of predictions and returns the unique values and the number of prediction occurrences
355
+ in descending order."""
356
+ values, counts = np.unique(predictions, return_counts=True)
357
+ descending_counts_indices = counts.argsort()[::-1]
358
+ values, counts = values[descending_counts_indices], counts[descending_counts_indices]
359
+
360
+ idx_most_often_pred_names = np.argwhere(counts == counts.max()).flatten()
361
+
362
+ if values_only:
363
+ return values[idx_most_often_pred_names]
364
+ elif counts_only:
365
+ return counts[idx_most_often_pred_names]
366
+ elif value is not None:
367
+ if value not in values:
368
+ return [0]
369
+ # return how often the values appears in the predictions
370
+ return counts[np.where(values == value)[0]]
371
+ else:
372
+ return values[idx_most_often_pred_names], counts[idx_most_often_pred_names]
373
+
374
+
375
+ def on_submit_btn_click(model_name, true_name, prompts, images):
376
+ # assert that the name is in the prompts
377
+ assert prompts.iloc[0].str.contains(true_name).sum() == len(prompts.T)
378
+
379
+ # calculate the image embeddings
380
+ img_embeddings = calculate_image_embeddings(model_name, images)
381
+
382
+ # calculate the text embeddings of the populated prompts
383
+ user_text_emb = calculate_text_embeddings(model_name, prompts.values[0].tolist())
384
+
385
+ # get the indices of the possible names
386
+ possible_names = get_possible_names(true_name)
387
+ # get the text embeddings of the possible names
388
+ prompt_text_embeddings = MODELS[model_name]['prompt_text_embeddings']
389
+ text_embeddings_used_for_prediction = prompt_text_embeddings.index_select(1,
390
+ torch.tensor(possible_names.index.values))
391
+
392
+ # add the true name and the text embeddings to the possible names
393
+ names_used_for_prediction = pd.concat([possible_names, pd.Series(true_name)], ignore_index=True)
394
+ text_embeddings_used_for_prediction = torch.cat([text_embeddings_used_for_prediction, user_text_emb.unsqueeze(1)],
395
+ dim=1)
396
+
397
+ # calculate the similarity of the images and the given texts
398
+ with torch.no_grad():
399
+ logits_per_image = MODELS[model_name][
400
+ 'model_instance'
401
+ ].logit_scale.exp().cpu() * img_embeddings @ text_embeddings_used_for_prediction.swapaxes(-1, -2)
402
+ preds = logits_per_image.argmax(-1)
403
+
404
+ # get the predicted names for each prompt
405
+ predicted_names = []
406
+ for pred in preds:
407
+ predicted_names.append(names_used_for_prediction.iloc[pred])
408
+ predicted_names = np.array(predicted_names)
409
+
410
+ # convert the predictions into a dataframe
411
+ name_predictions = pd.DataFrame(predicted_names).T.reset_index().rename(
412
+ columns={i: f'Prompt {i + 1}' for i in range(len(predicted_names))}
413
+ ).rename(columns={'index': 'Image'})
414
+ # add the image names
415
+ name_predictions['Image'] = [x.orig_name for x in images]
416
+
417
+ # get the majority votes
418
+ majority_preds = name_predictions[[f'Prompt {i + 1}' for i in range(len(PROMPTS))]].apply(
419
+ lambda x: get_majority_predictions(x, values_only=True)
420
+ )
421
+ # get how often the majority name was predicted
422
+ majority_preds_counts = name_predictions[[f'Prompt {i + 1}' for i in range(len(PROMPTS))]].apply(
423
+ lambda x: get_majority_predictions(x, counts_only=True)
424
+ ).apply(lambda x: x[0])
425
+ # get how often the correct name was predicted - even if no majority
426
+ true_name_preds_counts = name_predictions[[f'Prompt {i + 1}' for i in range(len(PROMPTS))]].apply(
427
+ lambda x: get_majority_predictions(x, value=true_name)
428
+ ).apply(lambda x: x[0])
429
+
430
+ # convert the majority preds to a series of lists if it is a dataframe
431
+ majority_preds = majority_preds.T.squeeze().apply(lambda x: [x]) if len(majority_preds) == 1 else majority_preds
432
+
433
+ # create the results dataframe for display
434
+ result = pd.concat(
435
+ [name_predictions,
436
+ pd.concat([pd.Series({'Image': 'Correct Name Predictions'}), true_name_preds_counts]).to_frame().T],
437
+ ignore_index=True
438
+ )
439
+ result = pd.concat(
440
+ [result, pd.concat([pd.Series({'Image': 'Majority Vote'}), majority_preds]).to_frame().T],
441
+ ignore_index=True
442
+ )
443
+ result = pd.concat(
444
+ [result, pd.concat([pd.Series({'Image': 'Majority Vote Counts'}), majority_preds_counts]).to_frame().T],
445
+ ignore_index=True
446
+ )
447
+ result = result.set_index('Image')
448
+
449
+ # check whether there is only one majority vote. If not, display Not Applicable
450
+ result.loc['Majority Vote'] = result.loc['Majority Vote'].apply(
451
+ lambda x: x[0] if len(x) == 1 else "N/A")
452
+
453
+ # check whether the majority prediction is the correct name
454
+ result.loc['Correct Majority Prediction'] = result.apply(lambda x: x['Majority Vote'] == true_name, axis=0)
455
+
456
+ result = result[[f'Prompt {i + 1}' for i in range(len(PROMPTS))]].sort_values(
457
+ ['Correct Name Predictions', 'Majority Vote Counts', "Correct Majority Prediction"], axis=1, ascending=False
458
+ )
459
+
460
+ predictions = result.loc[[x.orig_name for x in images]]
461
+ prediction_results = result.loc[['Correct Name Predictions', 'Majority Vote', 'Correct Majority Prediction']]
462
+
463
+ # if there are correct predictions
464
+ num_correct_maj_preds = prediction_results.loc['Correct Majority Prediction'].sum()
465
+ num_correct_name_preds = result.loc['Correct Name Predictions'].max()
466
+ if num_correct_maj_preds > 0:
467
+ interpretation = CORRECT_RESULT_INTERPRETATION.format(
468
+ true_name,
469
+ num_correct_maj_preds,
470
+ len(PROMPTS),
471
+ prediction_results.columns[0],
472
+ len(images),
473
+ len(possible_names),
474
+ predictions.iloc[:, 0].value_counts()[true_name],
475
+ round_to_first_digit(
476
+ (
477
+ (Decimal(1) / Decimal(len(possible_names))) ** predictions.iloc[:, 0].value_counts()[true_name]
478
+ ) * Decimal(100)
479
+ )
480
+ )
481
+ elif num_correct_name_preds > 0:
482
+ interpretation = INDECISIVE_RESULT_INTERPRETATION.format(
483
+ true_name,
484
+ len(PROMPTS),
485
+ num_correct_name_preds,
486
+ prediction_results.columns[result.loc['Correct Name Predictions'].to_numpy().argmax()],
487
+ len(possible_names),
488
+ round_to_first_digit(
489
+ (
490
+ (Decimal(1) / Decimal(len(possible_names))) ** Decimal(num_correct_name_preds)
491
+ ) * Decimal(100)
492
+ )
493
+ )
494
+ else:
495
+ interpretation = INCORRECT_RESULT_INTERPRETATION.format(
496
+ true_name,
497
+ len(PROMPTS)
498
+ )
499
+
500
+ if true_name.lower() in LAION_MEMBERSHIP_OCCURENCE['name'].str.lower().values:
501
+ row = LAION_MEMBERSHIP_OCCURENCE[LAION_MEMBERSHIP_OCCURENCE['name'].str.lower() == true_name.lower()]
502
+ interpretation = interpretation + OCCURENCE_INFORMATION.format(true_name, row['count'].values[0])
503
+
504
+ return predictions.reset_index(), prediction_results.reset_index(names=[""]), interpretation
505
+
506
+
507
+ def populate_prompts(name):
508
+ return [[x.format(name) for x in PROMPTS]]
509
+
510
+
511
+ def load_uploaded_imgs(images):
512
+ if images is None:
513
+ return None
514
+
515
+ imgs = []
516
+ for file_wrapper in images:
517
+ img = Image.open(file_wrapper.name)
518
+ imgs.append((img, file_wrapper.orig_name))
519
+
520
+ return imgs
521
+
522
+
523
+ block = gr.Blocks(css=CSS)
524
+ with block as demo:
525
+ gr.HTML(
526
+ """
527
+ <div style="text-align: center; max-width: 750px; margin: 0 auto;">
528
+ <div>
529
+ <img
530
+ class="logo"
531
+ src="https://aeiljuispo.cloudimg.io/v7/https://s3.amazonaws.com/moonup/production/uploads/1666181274838-62fa1d95e8c9c532aa75331c.png"
532
+ alt="AIML Logo"
533
+ style="margin: auto; max-width: 7rem;"
534
+ >
535
+ <h1 style="font-weight: 900; font-size: 3rem;">
536
+ Does CLIP Know My Face?
537
+ </h1>
538
+ </div>
539
+ <p style="margin-bottom: 10px; font-size: 94%">
540
+ Want to know whether you were used to train a CLIP model? Below you can choose a model, enter your name and upload some pictures.
541
+ If the model correctly predicts your name for multiple images, it is very likely that you were part of the training data.
542
+ Pick some of the examples below and try it out!<br><br>
543
+ Details and further analysis can be found in the paper
544
+ <a href="https://arxiv.org/abs/2209.07341" style="text-decoration: underline;" target="_blank">
545
+ Does CLIP Know My Face?
546
+ </a>.
547
+ </p>
548
+ </div>
549
+ """
550
+ )
551
+
552
+ with gr.Row():
553
+ with gr.Box():
554
+ gr.Markdown("## Inputs")
555
+ with gr.Column():
556
+ model_dd = gr.Dropdown(label="CLIP Model", choices=list(MODELS.keys()),
557
+ value=list(MODELS.keys())[0])
558
+ true_name = gr.Textbox(label='Name of Person:', lines=1, value=DEFAULT_INITIAL_NAME)
559
+ prompts = gr.Dataframe(
560
+ value=[[x.format(DEFAULT_INITIAL_NAME) for x in PROMPTS]],
561
+ label='Prompts Used (hold shift to scroll sideways):',
562
+ interactive=False
563
+ )
564
+
565
+ true_name.change(fn=populate_prompts, inputs=[true_name], outputs=prompts, show_progress=True,
566
+ status_tracker=None)
567
+
568
+ uploaded_imgs = gr.Files(label='Upload Images:', file_types=['image'], elem_id='file_upload').style()
569
+ image_gallery = gr.Gallery(label='Images Used:', show_label=True, elem_id="image_gallery").style(grid=[5])
570
+
571
+ uploaded_imgs.change(load_uploaded_imgs, inputs=uploaded_imgs, outputs=image_gallery)
572
+ submit_btn = gr.Button(value='Submit')
573
+
574
+ with gr.Box():
575
+ gr.Markdown("## Outputs")
576
+ prediction_df = gr.Dataframe(label="Prediction Output (hold shift to scroll sideways):", interactive=False)
577
+ result_df = gr.DataFrame(label="Result (hold shift to scroll sideways):", interactive=False)
578
+ interpretation = gr.HTML()
579
+
580
+ submit_btn.click(on_submit_btn_click, inputs=[model_dd, true_name, prompts, uploaded_imgs],
581
+ outputs=[prediction_df, result_df, interpretation])
582
+
583
+ gr.Examples(
584
+ examples=EXAMPLES,
585
+ inputs=[model_dd, true_name, prompts, uploaded_imgs],
586
+ outputs=[prediction_df, result_df, interpretation],
587
+ fn=on_submit_btn_click,
588
+ cache_examples=True
589
+ )
590
+
591
+ gr.Markdown(LICENSE_DETAILS)
592
+
593
+ gr.HTML(
594
+ """
595
+ <div class="footer">
596
+ <p> Gradio Demo by AIML@TU Darmstadt</p>
597
+ </div>
598
+ <div class="acknowledgments">
599
+ <p>Created by <a href="https://www.ml.informatik.tu-darmstadt.de/people/dhintersdorf/">Dominik Hintersdorf</a> at <a href="https://www.aiml.informatik.tu-darmstadt.de">AIML Lab</a>.</p>
600
+ </div>
601
+ """
602
+ )
603
+
604
+ if __name__ == "__main__":
605
+ demo.launch()
calculate_text_embeddings.ipynb ADDED
@@ -0,0 +1,284 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": 14,
6
+ "metadata": {
7
+ "collapsed": true
8
+ },
9
+ "outputs": [],
10
+ "source": [
11
+ "import open_clip\n",
12
+ "import torch\n",
13
+ "from tqdm.notebook import tqdm\n",
14
+ "import pandas as pd\n",
15
+ "import os\n",
16
+ "\n",
17
+ "device = \"cuda\" if torch.cuda.is_available() else \"cpu\"\n",
18
+ "\n",
19
+ "PROMPTS = [\n",
20
+ " '{0}',\n",
21
+ " 'an image of {0}',\n",
22
+ " 'a photo of {0}',\n",
23
+ " '{0} on a photo',\n",
24
+ " 'a photo of a person named {0}',\n",
25
+ " 'a person named {0}',\n",
26
+ " 'a man named {0}',\n",
27
+ " 'a woman named {0}',\n",
28
+ " 'the name of the person is {0}',\n",
29
+ " 'a photo of a person with the name {0}',\n",
30
+ " '{0} at a gala',\n",
31
+ " 'a photo of the celebrity {0}',\n",
32
+ " 'actor {0}',\n",
33
+ " 'actress {0}',\n",
34
+ " 'a colored photo of {0}',\n",
35
+ " 'a black and white photo of {0}',\n",
36
+ " 'a cool photo of {0}',\n",
37
+ " 'a cropped photo of {0}',\n",
38
+ " 'a cropped image of {0}',\n",
39
+ " '{0} in a suit',\n",
40
+ " '{0} in a dress'\n",
41
+ "]\n",
42
+ "MODEL_NAMES = ['ViT-B-32', 'ViT-B-16', 'ViT-L-14']\n",
43
+ "SEED = 42"
44
+ ]
45
+ },
46
+ {
47
+ "cell_type": "code",
48
+ "execution_count": 2,
49
+ "outputs": [],
50
+ "source": [
51
+ "# init clip\n",
52
+ "models = {}\n",
53
+ "preprocessings = {}\n",
54
+ "tokenizers = {}\n",
55
+ "for model_name in MODEL_NAMES:\n",
56
+ " model, _, preprocess = open_clip.create_model_and_transforms(model_name, pretrained='laion400m_e32')\n",
57
+ " preprocessings[model_name] = preprocess\n",
58
+ " model = model.eval()\n",
59
+ " models[model_name] = model\n",
60
+ " tokenizers[model_name] = open_clip.get_tokenizer(model_name)"
61
+ ],
62
+ "metadata": {
63
+ "collapsed": false
64
+ }
65
+ },
66
+ {
67
+ "cell_type": "code",
68
+ "execution_count": 3,
69
+ "outputs": [],
70
+ "source": [
71
+ "# define a function to get the predictions for an actor/actress\n",
72
+ "@torch.no_grad()\n",
73
+ "def get_text_embeddings(model, context, context_batchsize=1_000, use_tqdm=False):\n",
74
+ " context_batchsize = context_batchsize * torch.cuda.device_count()\n",
75
+ " # if there is not batches for the context unsqueeze it\n",
76
+ " if context.dim() < 3:\n",
77
+ " context = context.unsqueeze(0)\n",
78
+ "\n",
79
+ " # get the batch size, the number of labels and the sequence length\n",
80
+ " seq_len = context.shape[-1]\n",
81
+ " viewed_context = context.view(-1, seq_len)\n",
82
+ "\n",
83
+ " text_features = []\n",
84
+ " for context_batch_idx in tqdm(range(0, len(viewed_context), context_batchsize), desc=\"Calculating Text Embeddings\",\n",
85
+ " disable=not use_tqdm):\n",
86
+ " context_batch = viewed_context[context_batch_idx:context_batch_idx + context_batchsize]\n",
87
+ " batch_text_features = model.encode_text(context_batch, normalize=True).cpu()\n",
88
+ "\n",
89
+ " text_features.append(batch_text_features)\n",
90
+ " text_features = torch.cat(text_features).view(list(context.shape[:-1]) + [-1])\n",
91
+ "\n",
92
+ " return text_features"
93
+ ],
94
+ "metadata": {
95
+ "collapsed": false
96
+ }
97
+ },
98
+ {
99
+ "cell_type": "code",
100
+ "execution_count": 4,
101
+ "outputs": [
102
+ {
103
+ "data": {
104
+ "text/plain": " first_name sex last_name\n0 Eliana f Cardenas\n1 Meghann f Daniels\n2 Ada f Stevenson\n3 Elsa f Leblanc\n4 Avah f Lambert\n... ... .. ...\n9995 Kasen m Barker\n9996 Camryn m Roberts\n9997 Henry m Whitaker\n9998 Adin m Richards\n9999 Charley m Herman\n\n[10000 rows x 3 columns]",
105
+ "text/html": "<div>\n<style scoped>\n .dataframe tbody tr th:only-of-type {\n vertical-align: middle;\n }\n\n .dataframe tbody tr th {\n vertical-align: top;\n }\n\n .dataframe thead th {\n text-align: right;\n }\n</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>first_name</th>\n <th>sex</th>\n <th>last_name</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>Eliana</td>\n <td>f</td>\n <td>Cardenas</td>\n </tr>\n <tr>\n <th>1</th>\n <td>Meghann</td>\n <td>f</td>\n <td>Daniels</td>\n </tr>\n <tr>\n <th>2</th>\n <td>Ada</td>\n <td>f</td>\n <td>Stevenson</td>\n </tr>\n <tr>\n <th>3</th>\n <td>Elsa</td>\n <td>f</td>\n <td>Leblanc</td>\n </tr>\n <tr>\n <th>4</th>\n <td>Avah</td>\n <td>f</td>\n <td>Lambert</td>\n </tr>\n <tr>\n <th>...</th>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n </tr>\n <tr>\n <th>9995</th>\n <td>Kasen</td>\n <td>m</td>\n <td>Barker</td>\n </tr>\n <tr>\n <th>9996</th>\n <td>Camryn</td>\n <td>m</td>\n <td>Roberts</td>\n </tr>\n <tr>\n <th>9997</th>\n <td>Henry</td>\n <td>m</td>\n <td>Whitaker</td>\n </tr>\n <tr>\n <th>9998</th>\n <td>Adin</td>\n <td>m</td>\n <td>Richards</td>\n </tr>\n <tr>\n <th>9999</th>\n <td>Charley</td>\n <td>m</td>\n <td>Herman</td>\n </tr>\n </tbody>\n</table>\n<p>10000 rows × 3 columns</p>\n</div>"
106
+ },
107
+ "execution_count": 4,
108
+ "metadata": {},
109
+ "output_type": "execute_result"
110
+ }
111
+ ],
112
+ "source": [
113
+ "# load the possible names\n",
114
+ "possible_names = pd.read_csv('./full_names.csv', index_col=0)\n",
115
+ "possible_names\n",
116
+ "# possible_names_list = (possible_names['first_name'] + ' ' + possible_names['last_name']).tolist()\n",
117
+ "# possible_names_list[:5]"
118
+ ],
119
+ "metadata": {
120
+ "collapsed": false
121
+ }
122
+ },
123
+ {
124
+ "cell_type": "code",
125
+ "execution_count": 5,
126
+ "outputs": [
127
+ {
128
+ "data": {
129
+ "text/plain": " first_name sex last_name prompt_0 prompt_1 \\\n0 Eliana f Cardenas Eliana Cardenas an image of Eliana Cardenas \n1 Meghann f Daniels Meghann Daniels an image of Meghann Daniels \n2 Ada f Stevenson Ada Stevenson an image of Ada Stevenson \n3 Elsa f Leblanc Elsa Leblanc an image of Elsa Leblanc \n4 Avah f Lambert Avah Lambert an image of Avah Lambert \n... ... .. ... ... ... \n9995 Kasen m Barker Kasen Barker an image of Kasen Barker \n9996 Camryn m Roberts Camryn Roberts an image of Camryn Roberts \n9997 Henry m Whitaker Henry Whitaker an image of Henry Whitaker \n9998 Adin m Richards Adin Richards an image of Adin Richards \n9999 Charley m Herman Charley Herman an image of Charley Herman \n\n prompt_2 prompt_3 \\\n0 a photo of Eliana Cardenas Eliana Cardenas on a photo \n1 a photo of Meghann Daniels Meghann Daniels on a photo \n2 a photo of Ada Stevenson Ada Stevenson on a photo \n3 a photo of Elsa Leblanc Elsa Leblanc on a photo \n4 a photo of Avah Lambert Avah Lambert on a photo \n... ... ... \n9995 a photo of Kasen Barker Kasen Barker on a photo \n9996 a photo of Camryn Roberts Camryn Roberts on a photo \n9997 a photo of Henry Whitaker Henry Whitaker on a photo \n9998 a photo of Adin Richards Adin Richards on a photo \n9999 a photo of Charley Herman Charley Herman on a photo \n\n prompt_4 \\\n0 a photo of a person named Eliana Cardenas \n1 a photo of a person named Meghann Daniels \n2 a photo of a person named Ada Stevenson \n3 a photo of a person named Elsa Leblanc \n4 a photo of a person named Avah Lambert \n... ... \n9995 a photo of a person named Kasen Barker \n9996 a photo of a person named Camryn Roberts \n9997 a photo of a person named Henry Whitaker \n9998 a photo of a person named Adin Richards \n9999 a photo of a person named Charley Herman \n\n prompt_5 prompt_6 ... \\\n0 a person named Eliana Cardenas a man named Eliana Cardenas ... \n1 a person named Meghann Daniels a man named Meghann Daniels ... \n2 a person named Ada Stevenson a man named Ada Stevenson ... \n3 a person named Elsa Leblanc a man named Elsa Leblanc ... \n4 a person named Avah Lambert a man named Avah Lambert ... \n... ... ... ... \n9995 a person named Kasen Barker a man named Kasen Barker ... \n9996 a person named Camryn Roberts a man named Camryn Roberts ... \n9997 a person named Henry Whitaker a man named Henry Whitaker ... \n9998 a person named Adin Richards a man named Adin Richards ... \n9999 a person named Charley Herman a man named Charley Herman ... \n\n prompt_11 prompt_12 \\\n0 a photo of the celebrity Eliana Cardenas actor Eliana Cardenas \n1 a photo of the celebrity Meghann Daniels actor Meghann Daniels \n2 a photo of the celebrity Ada Stevenson actor Ada Stevenson \n3 a photo of the celebrity Elsa Leblanc actor Elsa Leblanc \n4 a photo of the celebrity Avah Lambert actor Avah Lambert \n... ... ... \n9995 a photo of the celebrity Kasen Barker actor Kasen Barker \n9996 a photo of the celebrity Camryn Roberts actor Camryn Roberts \n9997 a photo of the celebrity Henry Whitaker actor Henry Whitaker \n9998 a photo of the celebrity Adin Richards actor Adin Richards \n9999 a photo of the celebrity Charley Herman actor Charley Herman \n\n prompt_13 prompt_14 \\\n0 actress Eliana Cardenas a colored photo of Eliana Cardenas \n1 actress Meghann Daniels a colored photo of Meghann Daniels \n2 actress Ada Stevenson a colored photo of Ada Stevenson \n3 actress Elsa Leblanc a colored photo of Elsa Leblanc \n4 actress Avah Lambert a colored photo of Avah Lambert \n... ... ... \n9995 actress Kasen Barker a colored photo of Kasen Barker \n9996 actress Camryn Roberts a colored photo of Camryn Roberts \n9997 actress Henry Whitaker a colored photo of Henry Whitaker \n9998 actress Adin Richards a colored photo of Adin Richards \n9999 actress Charley Herman a colored photo of Charley Herman \n\n prompt_15 \\\n0 a black and white photo of Eliana Cardenas \n1 a black and white photo of Meghann Daniels \n2 a black and white photo of Ada Stevenson \n3 a black and white photo of Elsa Leblanc \n4 a black and white photo of Avah Lambert \n... ... \n9995 a black and white photo of Kasen Barker \n9996 a black and white photo of Camryn Roberts \n9997 a black and white photo of Henry Whitaker \n9998 a black and white photo of Adin Richards \n9999 a black and white photo of Charley Herman \n\n prompt_16 prompt_17 \\\n0 a cool photo of Eliana Cardenas a cropped photo of Eliana Cardenas \n1 a cool photo of Meghann Daniels a cropped photo of Meghann Daniels \n2 a cool photo of Ada Stevenson a cropped photo of Ada Stevenson \n3 a cool photo of Elsa Leblanc a cropped photo of Elsa Leblanc \n4 a cool photo of Avah Lambert a cropped photo of Avah Lambert \n... ... ... \n9995 a cool photo of Kasen Barker a cropped photo of Kasen Barker \n9996 a cool photo of Camryn Roberts a cropped photo of Camryn Roberts \n9997 a cool photo of Henry Whitaker a cropped photo of Henry Whitaker \n9998 a cool photo of Adin Richards a cropped photo of Adin Richards \n9999 a cool photo of Charley Herman a cropped photo of Charley Herman \n\n prompt_18 prompt_19 \\\n0 a cropped image of Eliana Cardenas Eliana Cardenas in a suit \n1 a cropped image of Meghann Daniels Meghann Daniels in a suit \n2 a cropped image of Ada Stevenson Ada Stevenson in a suit \n3 a cropped image of Elsa Leblanc Elsa Leblanc in a suit \n4 a cropped image of Avah Lambert Avah Lambert in a suit \n... ... ... \n9995 a cropped image of Kasen Barker Kasen Barker in a suit \n9996 a cropped image of Camryn Roberts Camryn Roberts in a suit \n9997 a cropped image of Henry Whitaker Henry Whitaker in a suit \n9998 a cropped image of Adin Richards Adin Richards in a suit \n9999 a cropped image of Charley Herman Charley Herman in a suit \n\n prompt_20 \n0 Eliana Cardenas in a dress \n1 Meghann Daniels in a dress \n2 Ada Stevenson in a dress \n3 Elsa Leblanc in a dress \n4 Avah Lambert in a dress \n... ... \n9995 Kasen Barker in a dress \n9996 Camryn Roberts in a dress \n9997 Henry Whitaker in a dress \n9998 Adin Richards in a dress \n9999 Charley Herman in a dress \n\n[10000 rows x 24 columns]",
130
+ "text/html": "<div>\n<style scoped>\n .dataframe tbody tr th:only-of-type {\n vertical-align: middle;\n }\n\n .dataframe tbody tr th {\n vertical-align: top;\n }\n\n .dataframe thead th {\n text-align: right;\n }\n</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>first_name</th>\n <th>sex</th>\n <th>last_name</th>\n <th>prompt_0</th>\n <th>prompt_1</th>\n <th>prompt_2</th>\n <th>prompt_3</th>\n <th>prompt_4</th>\n <th>prompt_5</th>\n <th>prompt_6</th>\n <th>...</th>\n <th>prompt_11</th>\n <th>prompt_12</th>\n <th>prompt_13</th>\n <th>prompt_14</th>\n <th>prompt_15</th>\n <th>prompt_16</th>\n <th>prompt_17</th>\n <th>prompt_18</th>\n <th>prompt_19</th>\n <th>prompt_20</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>Eliana</td>\n <td>f</td>\n <td>Cardenas</td>\n <td>Eliana Cardenas</td>\n <td>an image of Eliana Cardenas</td>\n <td>a photo of Eliana Cardenas</td>\n <td>Eliana Cardenas on a photo</td>\n <td>a photo of a person named Eliana Cardenas</td>\n <td>a person named Eliana Cardenas</td>\n <td>a man named Eliana Cardenas</td>\n <td>...</td>\n <td>a photo of the celebrity Eliana Cardenas</td>\n <td>actor Eliana Cardenas</td>\n <td>actress Eliana Cardenas</td>\n <td>a colored photo of Eliana Cardenas</td>\n <td>a black and white photo of Eliana Cardenas</td>\n <td>a cool photo of Eliana Cardenas</td>\n <td>a cropped photo of Eliana Cardenas</td>\n <td>a cropped image of Eliana Cardenas</td>\n <td>Eliana Cardenas in a suit</td>\n <td>Eliana Cardenas in a dress</td>\n </tr>\n <tr>\n <th>1</th>\n <td>Meghann</td>\n <td>f</td>\n <td>Daniels</td>\n <td>Meghann Daniels</td>\n <td>an image of Meghann Daniels</td>\n <td>a photo of Meghann Daniels</td>\n <td>Meghann Daniels on a photo</td>\n <td>a photo of a person named Meghann Daniels</td>\n <td>a person named Meghann Daniels</td>\n <td>a man named Meghann Daniels</td>\n <td>...</td>\n <td>a photo of the celebrity Meghann Daniels</td>\n <td>actor Meghann Daniels</td>\n <td>actress Meghann Daniels</td>\n <td>a colored photo of Meghann Daniels</td>\n <td>a black and white photo of Meghann Daniels</td>\n <td>a cool photo of Meghann Daniels</td>\n <td>a cropped photo of Meghann Daniels</td>\n <td>a cropped image of Meghann Daniels</td>\n <td>Meghann Daniels in a suit</td>\n <td>Meghann Daniels in a dress</td>\n </tr>\n <tr>\n <th>2</th>\n <td>Ada</td>\n <td>f</td>\n <td>Stevenson</td>\n <td>Ada Stevenson</td>\n <td>an image of Ada Stevenson</td>\n <td>a photo of Ada Stevenson</td>\n <td>Ada Stevenson on a photo</td>\n <td>a photo of a person named Ada Stevenson</td>\n <td>a person named Ada Stevenson</td>\n <td>a man named Ada Stevenson</td>\n <td>...</td>\n <td>a photo of the celebrity Ada Stevenson</td>\n <td>actor Ada Stevenson</td>\n <td>actress Ada Stevenson</td>\n <td>a colored photo of Ada Stevenson</td>\n <td>a black and white photo of Ada Stevenson</td>\n <td>a cool photo of Ada Stevenson</td>\n <td>a cropped photo of Ada Stevenson</td>\n <td>a cropped image of Ada Stevenson</td>\n <td>Ada Stevenson in a suit</td>\n <td>Ada Stevenson in a dress</td>\n </tr>\n <tr>\n <th>3</th>\n <td>Elsa</td>\n <td>f</td>\n <td>Leblanc</td>\n <td>Elsa Leblanc</td>\n <td>an image of Elsa Leblanc</td>\n <td>a photo of Elsa Leblanc</td>\n <td>Elsa Leblanc on a photo</td>\n <td>a photo of a person named Elsa Leblanc</td>\n <td>a person named Elsa Leblanc</td>\n <td>a man named Elsa Leblanc</td>\n <td>...</td>\n <td>a photo of the celebrity Elsa Leblanc</td>\n <td>actor Elsa Leblanc</td>\n <td>actress Elsa Leblanc</td>\n <td>a colored photo of Elsa Leblanc</td>\n <td>a black and white photo of Elsa Leblanc</td>\n <td>a cool photo of Elsa Leblanc</td>\n <td>a cropped photo of Elsa Leblanc</td>\n <td>a cropped image of Elsa Leblanc</td>\n <td>Elsa Leblanc in a suit</td>\n <td>Elsa Leblanc in a dress</td>\n </tr>\n <tr>\n <th>4</th>\n <td>Avah</td>\n <td>f</td>\n <td>Lambert</td>\n <td>Avah Lambert</td>\n <td>an image of Avah Lambert</td>\n <td>a photo of Avah Lambert</td>\n <td>Avah Lambert on a photo</td>\n <td>a photo of a person named Avah Lambert</td>\n <td>a person named Avah Lambert</td>\n <td>a man named Avah Lambert</td>\n <td>...</td>\n <td>a photo of the celebrity Avah Lambert</td>\n <td>actor Avah Lambert</td>\n <td>actress Avah Lambert</td>\n <td>a colored photo of Avah Lambert</td>\n <td>a black and white photo of Avah Lambert</td>\n <td>a cool photo of Avah Lambert</td>\n <td>a cropped photo of Avah Lambert</td>\n <td>a cropped image of Avah Lambert</td>\n <td>Avah Lambert in a suit</td>\n <td>Avah Lambert in a dress</td>\n </tr>\n <tr>\n <th>...</th>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n </tr>\n <tr>\n <th>9995</th>\n <td>Kasen</td>\n <td>m</td>\n <td>Barker</td>\n <td>Kasen Barker</td>\n <td>an image of Kasen Barker</td>\n <td>a photo of Kasen Barker</td>\n <td>Kasen Barker on a photo</td>\n <td>a photo of a person named Kasen Barker</td>\n <td>a person named Kasen Barker</td>\n <td>a man named Kasen Barker</td>\n <td>...</td>\n <td>a photo of the celebrity Kasen Barker</td>\n <td>actor Kasen Barker</td>\n <td>actress Kasen Barker</td>\n <td>a colored photo of Kasen Barker</td>\n <td>a black and white photo of Kasen Barker</td>\n <td>a cool photo of Kasen Barker</td>\n <td>a cropped photo of Kasen Barker</td>\n <td>a cropped image of Kasen Barker</td>\n <td>Kasen Barker in a suit</td>\n <td>Kasen Barker in a dress</td>\n </tr>\n <tr>\n <th>9996</th>\n <td>Camryn</td>\n <td>m</td>\n <td>Roberts</td>\n <td>Camryn Roberts</td>\n <td>an image of Camryn Roberts</td>\n <td>a photo of Camryn Roberts</td>\n <td>Camryn Roberts on a photo</td>\n <td>a photo of a person named Camryn Roberts</td>\n <td>a person named Camryn Roberts</td>\n <td>a man named Camryn Roberts</td>\n <td>...</td>\n <td>a photo of the celebrity Camryn Roberts</td>\n <td>actor Camryn Roberts</td>\n <td>actress Camryn Roberts</td>\n <td>a colored photo of Camryn Roberts</td>\n <td>a black and white photo of Camryn Roberts</td>\n <td>a cool photo of Camryn Roberts</td>\n <td>a cropped photo of Camryn Roberts</td>\n <td>a cropped image of Camryn Roberts</td>\n <td>Camryn Roberts in a suit</td>\n <td>Camryn Roberts in a dress</td>\n </tr>\n <tr>\n <th>9997</th>\n <td>Henry</td>\n <td>m</td>\n <td>Whitaker</td>\n <td>Henry Whitaker</td>\n <td>an image of Henry Whitaker</td>\n <td>a photo of Henry Whitaker</td>\n <td>Henry Whitaker on a photo</td>\n <td>a photo of a person named Henry Whitaker</td>\n <td>a person named Henry Whitaker</td>\n <td>a man named Henry Whitaker</td>\n <td>...</td>\n <td>a photo of the celebrity Henry Whitaker</td>\n <td>actor Henry Whitaker</td>\n <td>actress Henry Whitaker</td>\n <td>a colored photo of Henry Whitaker</td>\n <td>a black and white photo of Henry Whitaker</td>\n <td>a cool photo of Henry Whitaker</td>\n <td>a cropped photo of Henry Whitaker</td>\n <td>a cropped image of Henry Whitaker</td>\n <td>Henry Whitaker in a suit</td>\n <td>Henry Whitaker in a dress</td>\n </tr>\n <tr>\n <th>9998</th>\n <td>Adin</td>\n <td>m</td>\n <td>Richards</td>\n <td>Adin Richards</td>\n <td>an image of Adin Richards</td>\n <td>a photo of Adin Richards</td>\n <td>Adin Richards on a photo</td>\n <td>a photo of a person named Adin Richards</td>\n <td>a person named Adin Richards</td>\n <td>a man named Adin Richards</td>\n <td>...</td>\n <td>a photo of the celebrity Adin Richards</td>\n <td>actor Adin Richards</td>\n <td>actress Adin Richards</td>\n <td>a colored photo of Adin Richards</td>\n <td>a black and white photo of Adin Richards</td>\n <td>a cool photo of Adin Richards</td>\n <td>a cropped photo of Adin Richards</td>\n <td>a cropped image of Adin Richards</td>\n <td>Adin Richards in a suit</td>\n <td>Adin Richards in a dress</td>\n </tr>\n <tr>\n <th>9999</th>\n <td>Charley</td>\n <td>m</td>\n <td>Herman</td>\n <td>Charley Herman</td>\n <td>an image of Charley Herman</td>\n <td>a photo of Charley Herman</td>\n <td>Charley Herman on a photo</td>\n <td>a photo of a person named Charley Herman</td>\n <td>a person named Charley Herman</td>\n <td>a man named Charley Herman</td>\n <td>...</td>\n <td>a photo of the celebrity Charley Herman</td>\n <td>actor Charley Herman</td>\n <td>actress Charley Herman</td>\n <td>a colored photo of Charley Herman</td>\n <td>a black and white photo of Charley Herman</td>\n <td>a cool photo of Charley Herman</td>\n <td>a cropped photo of Charley Herman</td>\n <td>a cropped image of Charley Herman</td>\n <td>Charley Herman in a suit</td>\n <td>Charley Herman in a dress</td>\n </tr>\n </tbody>\n</table>\n<p>10000 rows × 24 columns</p>\n</div>"
131
+ },
132
+ "execution_count": 5,
133
+ "metadata": {},
134
+ "output_type": "execute_result"
135
+ }
136
+ ],
137
+ "source": [
138
+ "# populate the prompts with the possible names\n",
139
+ "prompts = []\n",
140
+ "for idx, row in possible_names.iterrows():\n",
141
+ " df_dict = row.to_dict()\n",
142
+ " name = f'{row[\"first_name\"]} {row[\"last_name\"]}'\n",
143
+ " for prompt_idx, prompt in enumerate(PROMPTS):\n",
144
+ " df_dict[f'prompt_{prompt_idx}'] = prompt.format(name)\n",
145
+ " prompts.append(df_dict)\n",
146
+ "prompts = pd.DataFrame(prompts)\n",
147
+ "prompts"
148
+ ],
149
+ "metadata": {
150
+ "collapsed": false
151
+ }
152
+ },
153
+ {
154
+ "cell_type": "code",
155
+ "execution_count": 7,
156
+ "outputs": [],
157
+ "source": [
158
+ "label_context_vecs = []\n",
159
+ "for i in range(len(PROMPTS)):\n",
160
+ " context = open_clip.tokenize(prompts[f'prompt_{i}'].to_numpy())\n",
161
+ " label_context_vecs.append(context)\n",
162
+ "label_context_vecs = torch.stack(label_context_vecs)"
163
+ ],
164
+ "metadata": {
165
+ "collapsed": false
166
+ }
167
+ },
168
+ {
169
+ "cell_type": "code",
170
+ "execution_count": 8,
171
+ "outputs": [
172
+ {
173
+ "data": {
174
+ "text/plain": "Calculating Text Embeddings: 0%| | 0/210 [00:00<?, ?it/s]",
175
+ "application/vnd.jupyter.widget-view+json": {
176
+ "version_major": 2,
177
+ "version_minor": 0,
178
+ "model_id": "4267d43b498f481db5cbf7e709c9ace3"
179
+ }
180
+ },
181
+ "metadata": {},
182
+ "output_type": "display_data"
183
+ },
184
+ {
185
+ "data": {
186
+ "text/plain": "Calculating Text Embeddings: 0%| | 0/210 [00:00<?, ?it/s]",
187
+ "application/vnd.jupyter.widget-view+json": {
188
+ "version_major": 2,
189
+ "version_minor": 0,
190
+ "model_id": "34a21714ab4d42b2beaa3024bcdd8fdd"
191
+ }
192
+ },
193
+ "metadata": {},
194
+ "output_type": "display_data"
195
+ },
196
+ {
197
+ "data": {
198
+ "text/plain": "Calculating Text Embeddings: 0%| | 0/210 [00:00<?, ?it/s]",
199
+ "application/vnd.jupyter.widget-view+json": {
200
+ "version_major": 2,
201
+ "version_minor": 0,
202
+ "model_id": "3278ad478d7d455da8b03d954fbc4558"
203
+ }
204
+ },
205
+ "metadata": {},
206
+ "output_type": "display_data"
207
+ }
208
+ ],
209
+ "source": [
210
+ "label_context_vecs = label_context_vecs.to(device)\n",
211
+ "\n",
212
+ "text_embeddings_per_model = {}\n",
213
+ "for model_name, model in models.items():\n",
214
+ " model = model.to(device)\n",
215
+ " text_embeddings = get_text_embeddings(model, label_context_vecs, use_tqdm=True, context_batchsize=1_000)\n",
216
+ " text_embeddings_per_model[model_name] = text_embeddings\n",
217
+ " model = model.cpu()\n",
218
+ "\n",
219
+ "label_context_vecs = label_context_vecs.cpu()"
220
+ ],
221
+ "metadata": {
222
+ "collapsed": false
223
+ }
224
+ },
225
+ {
226
+ "cell_type": "code",
227
+ "execution_count": 18,
228
+ "outputs": [],
229
+ "source": [
230
+ "# save the calculated embeddings to a file\n",
231
+ "if not os.path.exists('./prompt_text_embeddings'):\n",
232
+ " os.makedirs('./prompt_text_embeddings')"
233
+ ],
234
+ "metadata": {
235
+ "collapsed": false
236
+ }
237
+ },
238
+ {
239
+ "cell_type": "code",
240
+ "execution_count": 20,
241
+ "outputs": [],
242
+ "source": [
243
+ "for model_name, _ in models.items():\n",
244
+ " torch.save(\n",
245
+ " text_embeddings_per_model[model_name],\n",
246
+ " f'./prompt_text_embeddings/{model_name}_prompt_text_embeddings.pt'\n",
247
+ " )"
248
+ ],
249
+ "metadata": {
250
+ "collapsed": false
251
+ }
252
+ },
253
+ {
254
+ "cell_type": "code",
255
+ "execution_count": null,
256
+ "outputs": [],
257
+ "source": [],
258
+ "metadata": {
259
+ "collapsed": false
260
+ }
261
+ }
262
+ ],
263
+ "metadata": {
264
+ "kernelspec": {
265
+ "display_name": "Python 3",
266
+ "language": "python",
267
+ "name": "python3"
268
+ },
269
+ "language_info": {
270
+ "codemirror_mode": {
271
+ "name": "ipython",
272
+ "version": 2
273
+ },
274
+ "file_extension": ".py",
275
+ "mimetype": "text/x-python",
276
+ "name": "python",
277
+ "nbconvert_exporter": "python",
278
+ "pygments_lexer": "ipython2",
279
+ "version": "2.7.6"
280
+ }
281
+ },
282
+ "nbformat": 4,
283
+ "nbformat_minor": 0
284
+ }
download_example_images.py ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import urllib.request
3
+ from tqdm import tqdm
4
+ from PIL import Image
5
+
6
+
7
+ def read_actor_files(folder_path):
8
+ urls = {}
9
+ for file in os.listdir(folder_path):
10
+ if not file.endswith('.txt'):
11
+ continue
12
+
13
+ file_name_without_ext = os.path.splitext(file)[0]
14
+ with open(os.path.join(folder_path, file)) as text_file:
15
+ lines = text_file.readlines()
16
+ lines = [line.rstrip() for line in lines]
17
+
18
+ urls[file_name_without_ext] = lines
19
+
20
+ return urls
21
+
22
+
23
+ def save_images_to_folder(folder_path, url_dict):
24
+ url_opener = urllib.request.URLopener()
25
+ url_opener.addheader('User-Agent',
26
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36')
27
+
28
+ for name, url_list in tqdm(url_dict.items()):
29
+ base_folder = os.path.join(folder_path, name)
30
+ if os.path.exists(base_folder):
31
+ print(f'The image folder {base_folder} already exists. Skipping folder.')
32
+ continue
33
+ os.makedirs(base_folder)
34
+ for i, url in tqdm(enumerate(url_list), desc=name, leave=False):
35
+ url = urllib.parse.quote(url, safe='://?=&(),%+')
36
+ img_file_path = os.path.join(base_folder, f'{name}_{i}.jpg')
37
+ url_opener.retrieve(url, img_file_path)
38
+
39
+ # open the image and resize it
40
+ img = Image.open(img_file_path)
41
+ img.thumbnail((1024, 1024))
42
+ img.save(img_file_path)
full_names.csv ADDED
The diff for this file is too large to render. See raw diff
 
laion_membership_occurence_count.csv ADDED
@@ -0,0 +1,547 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ,name,count,membership,bin
2
+ 0,Malu Leicher,0,non_member,"[0, 25)"
3
+ 1,Bernhard Hoëcker,0,non_member,"[0, 25)"
4
+ 2,Adrianne León,0,non_member,"[0, 25)"
5
+ 3,Harriet Herbig-Matten,0,non_member,"[0, 25)"
6
+ 4,Jenilee Harrison,1,member,"[0, 25)"
7
+ 5,Joanna García,1,member,"[0, 25)"
8
+ 6,Sabine Vitua,1,member,"[0, 25)"
9
+ 7,Bettina Lamprecht,2,member,"[0, 25)"
10
+ 8,Guido Cantz,2,member,"[0, 25)"
11
+ 9,Taylor Atelian,2,member,"[0, 25)"
12
+ 10,Jörg Pilawa,2,member,"[0, 25)"
13
+ 11,Max Giermann,4,member,"[0, 25)"
14
+ 12,Mackenzie Aladjem,4,member,"[0, 25)"
15
+ 13,Johannes B. Kerner,4,member,"[0, 25)"
16
+ 14,Erin Chambers,6,member,"[0, 25)"
17
+ 15,Bastian Pastewka,6,member,"[0, 25)"
18
+ 16,Staci Keanan,6,member,"[0, 25)"
19
+ 17,Kai Pflaume,7,member,"[0, 25)"
20
+ 18,Freddy Rodríguez,7,member,"[0, 25)"
21
+ 19,Annette Frier,10,member,"[0, 25)"
22
+ 20,Christina Bennett Lind,10,member,"[0, 25)"
23
+ 21,Jessica Leccia,11,member,"[0, 25)"
24
+ 22,Valerie Cruz,11,member,"[0, 25)"
25
+ 23,Lourdes Benedicto,14,member,"[0, 25)"
26
+ 24,Shannon Kane,14,member,"[0, 25)"
27
+ 25,Alice Dwyer,15,member,"[0, 25)"
28
+ 26,Andrea Bogart,15,member,"[0, 25)"
29
+ 27,Florencia Lozano,19,member,"[0, 25)"
30
+ 28,Kimberly Matula,24,member,"[0, 25)"
31
+ 29,Ilene Kristen,25,member,"[25, 50)"
32
+ 30,Natalia Livingston,27,member,"[25, 50)"
33
+ 31,Lexi Ainsworth,29,member,"[25, 50)"
34
+ 32,Molly Burnett,31,member,"[25, 50)"
35
+ 33,Julie Marie Berman,32,member,"[25, 50)"
36
+ 34,Carla Gallo,32,member,"[25, 50)"
37
+ 35,Olivia d'Abo,34,member,"[25, 50)"
38
+ 36,Jonathan Sadowski,34,member,"[25, 50)"
39
+ 37,Wanda De Jesus,34,member,"[25, 50)"
40
+ 38,Carolin Kebekus,36,member,"[25, 50)"
41
+ 39,Michael Kessler,36,member,"[25, 50)"
42
+ 40,Veronica Hamel,37,member,"[25, 50)"
43
+ 41,Patricia Kalember,37,member,"[25, 50)"
44
+ 42,Jodi Long,38,member,"[25, 50)"
45
+ 43,Crystal Chappell,38,member,"[25, 50)"
46
+ 44,Audrey Landers,38,member,"[25, 50)"
47
+ 45,Nicole de Boer,40,member,"[25, 50)"
48
+ 46,T. J. Thyne,41,member,"[25, 50)"
49
+ 47,Natalie Hall,41,member,"[25, 50)"
50
+ 48,Michael Landes,42,member,"[25, 50)"
51
+ 49,Bobbie Eakes,46,member,"[25, 50)"
52
+ 50,Judi Evans,51,member,"[50, 75)"
53
+ 51,Brooke Langton,57,member,"[50, 75)"
54
+ 52,Lisa LoCicero,57,member,"[50, 75)"
55
+ 53,Mary Crosby,58,member,"[50, 75)"
56
+ 54,Chase Masterson,59,member,"[50, 75)"
57
+ 55,Erin Cummings,61,member,"[50, 75)"
58
+ 56,Jake Weber,62,member,"[50, 75)"
59
+ 57,Arnold Vosloo,64,member,"[50, 75)"
60
+ 58,Peggy McCay,65,member,"[50, 75)"
61
+ 59,Crystal Bernard,67,member,"[50, 75)"
62
+ 60,Barbara Schöneberger,68,member,"[50, 75)"
63
+ 61,Melissa Archer,69,member,"[50, 75)"
64
+ 62,Shelley Hack,69,member,"[50, 75)"
65
+ 63,Jill Eikenberry,72,member,"[50, 75)"
66
+ 64,Kimberlin Brown,73,member,"[50, 75)"
67
+ 65,Lecy Goranson,77,member,"[75, 100)"
68
+ 66,Jackee Harry,77,member,"[75, 100)"
69
+ 67,Tracey Gold,78,member,"[75, 100)"
70
+ 68,Kristen Alderson,78,member,"[75, 100)"
71
+ 69,Rebecca Herbst,84,member,"[75, 100)"
72
+ 70,Joanna Kerns,85,member,"[75, 100)"
73
+ 71,Joyce DeWitt,88,member,"[75, 100)"
74
+ 72,Lesley-Anne Down,90,member,"[75, 100)"
75
+ 73,Jamie Luner,90,member,"[75, 100)"
76
+ 74,Adrienne Frantz,90,member,"[75, 100)"
77
+ 75,Kimberly McCullough,94,member,"[75, 100)"
78
+ 76,Farah Fath,95,member,"[75, 100)"
79
+ 77,Pamela Sue Martin,96,member,"[75, 100)"
80
+ 78,Ellen Greene,98,member,"[75, 100)"
81
+ 79,Lindsay Hartley,98,member,"[75, 100)"
82
+ 80,Amanda Bearse,100,member,"[100, 125)"
83
+ 81,Tempestt Bledsoe,102,member,"[100, 125)"
84
+ 82,Alley Mills,104,member,"[100, 125)"
85
+ 83,Jennifer Gareis,107,member,"[100, 125)"
86
+ 84,Tracey E. Bregman,111,member,"[100, 125)"
87
+ 85,Elizabeth Hendrickson,111,member,"[100, 125)"
88
+ 86,Kristy McNichol,112,member,"[100, 125)"
89
+ 87,Lauren Koslow,113,member,"[100, 125)"
90
+ 88,Josie Bissett,114,member,"[100, 125)"
91
+ 89,Laura Innes,115,member,"[100, 125)"
92
+ 90,Barbara Carrera,117,member,"[100, 125)"
93
+ 91,Brianna Brown,119,member,"[100, 125)"
94
+ 92,Caroline Dhavernas,122,member,"[100, 125)"
95
+ 93,Angell Conwell,126,member,"[125, 150)"
96
+ 94,Katherine Helmond,127,member,"[125, 150)"
97
+ 95,Didi Conn,129,member,"[125, 150)"
98
+ 96,Alice Krige,129,member,"[125, 150)"
99
+ 97,Cathy Lee Crosby,130,member,"[125, 150)"
100
+ 98,Susan Dey,132,member,"[125, 150)"
101
+ 99,Peri Gilpin,133,member,"[125, 150)"
102
+ 100,Tamara Braun,134,member,"[125, 150)"
103
+ 101,Kathy Baker,137,member,"[125, 150)"
104
+ 102,Aisha Hinds,140,member,"[125, 150)"
105
+ 103,Christel Khalil,142,member,"[125, 150)"
106
+ 104,Susan Flannery,143,member,"[125, 150)"
107
+ 105,Kim Delaney,144,member,"[125, 150)"
108
+ 106,Bernard Hill,147,member,"[125, 150)"
109
+ 107,Justine Bateman,151,member,"[150, 200)"
110
+ 108,Denise Crosby,157,member,"[150, 200)"
111
+ 109,Rebecca Budig,161,member,"[150, 200)"
112
+ 110,Andrea Anders,164,member,"[150, 200)"
113
+ 111,Ciara Bravo,167,member,"[150, 200)"
114
+ 112,Jim Beaver,169,member,"[150, 200)"
115
+ 113,Kathryn Joosten,172,member,"[150, 200)"
116
+ 114,Kerr Smith,172,member,"[150, 200)"
117
+ 115,Lauralee Bell,174,member,"[150, 200)"
118
+ 116,Gates McFadden,178,member,"[150, 200)"
119
+ 117,Kellie Martin,180,member,"[150, 200)"
120
+ 118,Amy Davidson,188,member,"[150, 200)"
121
+ 119,Kassie DePaiva,190,member,"[150, 200)"
122
+ 120,Jane Curtin,191,member,"[150, 200)"
123
+ 121,Martin Henderson,192,member,"[150, 200)"
124
+ 122,S. Epatha Merkerson,193,member,"[150, 200)"
125
+ 123,Mary Beth Evans,194,member,"[150, 200)"
126
+ 124,Bonnie Franklin,200,member,"[200, 225)"
127
+ 125,Nancy Lee Grahn,201,member,"[200, 225)"
128
+ 126,Dina Meyer,202,member,"[200, 225)"
129
+ 127,Gabrielle Carteris,205,member,"[200, 225)"
130
+ 128,Edi Gathegi,206,member,"[200, 225)"
131
+ 129,Matt Long,209,member,"[200, 225)"
132
+ 130,Christine Lakin,210,member,"[200, 225)"
133
+ 131,Swoosie Kurtz,212,member,"[200, 225)"
134
+ 132,David Wenham,215,member,"[200, 225)"
135
+ 133,Tamala Jones,216,member,"[200, 225)"
136
+ 134,Anthony Stewart Head,216,member,"[200, 225)"
137
+ 135,Omid Djalili,222,member,"[200, 225)"
138
+ 136,Kristian Alfonso,223,member,"[200, 225)"
139
+ 137,Ian Holm,225,member,"[225, 250)"
140
+ 138,Dan Lauria,226,member,"[225, 250)"
141
+ 139,Sherilyn Fenn,228,member,"[225, 250)"
142
+ 140,Gary Dourdan,228,member,"[225, 250)"
143
+ 141,Nicole Eggert,232,member,"[225, 250)"
144
+ 142,Peggy Lipton,240,member,"[225, 250)"
145
+ 143,Portia Doubleday,242,member,"[225, 250)"
146
+ 144,Christa Miller,246,member,"[225, 250)"
147
+ 145,Drea de Matteo,249,member,"[225, 250)"
148
+ 146,Yasmine Bleeth,250,member,"[250, 275)"
149
+ 147,Laura Leighton,252,member,"[250, 275)"
150
+ 148,Terry Farrell,253,member,"[250, 275)"
151
+ 149,James Frain,257,member,"[250, 275)"
152
+ 150,Delta Burke,257,member,"[250, 275)"
153
+ 151,Sharon Gless,258,member,"[250, 275)"
154
+ 152,Faith Ford,258,member,"[250, 275)"
155
+ 153,Jasmine Guy,259,member,"[250, 275)"
156
+ 154,Melissa Claire Egan,261,member,"[250, 275)"
157
+ 155,Kim Fields,265,member,"[250, 275)"
158
+ 156,Jill Hennessy,265,member,"[250, 275)"
159
+ 157,Lorraine Bracco,267,member,"[250, 275)"
160
+ 158,Annie Ilonzeh,268,member,"[250, 275)"
161
+ 159,Andrea Bowen,275,member,"[275, 300)"
162
+ 160,Melissa Fumero,280,member,"[275, 300)"
163
+ 161,Vanessa Marcil,286,member,"[275, 300)"
164
+ 162,Shelley Long,286,member,"[275, 300)"
165
+ 163,Carolyn Hennesy,289,member,"[275, 300)"
166
+ 164,Hector Elizondo,290,member,"[275, 300)"
167
+ 165,Jason Behr,292,member,"[275, 300)"
168
+ 166,Melina Kanakaredes,293,member,"[275, 300)"
169
+ 167,Hal Holbrook,293,member,"[275, 300)"
170
+ 168,Ashley Johnson,294,member,"[275, 300)"
171
+ 169,Lara Flynn Boyle,299,member,"[275, 300)"
172
+ 170,Scott Patterson,299,member,"[275, 300)"
173
+ 171,Chris Kattan,302,member,"[300, 1000000)"
174
+ 172,Loni Anderson,309,member,"[300, 1000000)"
175
+ 173,Kate Linder,311,member,"[300, 1000000)"
176
+ 174,Ashley Jones,314,member,"[300, 1000000)"
177
+ 175,Michael Vartan,323,member,"[300, 1000000)"
178
+ 176,Richard Schiff,324,member,"[300, 1000000)"
179
+ 177,Oliver Platt,333,member,"[300, 1000000)"
180
+ 178,Rue McClanahan,335,member,"[300, 1000000)"
181
+ 179,Desmond Harrington,336,member,"[300, 1000000)"
182
+ 180,Shelley Hennig,340,member,"[300, 1000000)"
183
+ 181,Matt Czuchry,341,member,"[300, 1000000)"
184
+ 182,Chazz Palminteri,342,member,"[300, 1000000)"
185
+ 183,Eileen Davidson,342,member,"[300, 1000000)"
186
+ 184,Natalie Martinez,344,member,"[300, 1000000)"
187
+ 185,Matthew Lillard,347,member,"[300, 1000000)"
188
+ 186,Linda Evans,349,member,"[300, 1000000)"
189
+ 187,Amaury Nolasco,354,member,"[300, 1000000)"
190
+ 188,Nadia Bjorlin,361,member,"[300, 1000000)"
191
+ 189,Neal McDonough,370,member,"[300, 1000000)"
192
+ 190,Bruce Greenwood,374,member,"[300, 1000000)"
193
+ 191,Ken Watanabe,382,member,"[300, 1000000)"
194
+ 192,Adrienne Barbeau,382,member,"[300, 1000000)"
195
+ 193,Billy Boyd,393,member,"[300, 1000000)"
196
+ 194,Ray Stevenson,397,member,"[300, 1000000)"
197
+ 195,Adam McKay,400,member,"[300, 1000000)"
198
+ 196,Patrick Warburton,407,member,"[300, 1000000)"
199
+ 197,Kristen Johnston,412,member,"[300, 1000000)"
200
+ 198,Jolene Blalock,424,member,"[300, 1000000)"
201
+ 199,Chyler Leigh,430,member,"[300, 1000000)"
202
+ 200,Joe Pantoliano,431,member,"[300, 1000000)"
203
+ 201,Wendie Malick,438,member,"[300, 1000000)"
204
+ 202,Andy Richter,441,member,"[300, 1000000)"
205
+ 203,Jessica Capshaw,446,member,"[300, 1000000)"
206
+ 204,Richard E. Grant,452,member,"[300, 1000000)"
207
+ 205,Jeremy Sisto,455,member,"[300, 1000000)"
208
+ 206,Sharon Case,456,member,"[300, 1000000)"
209
+ 207,Ioan Gruffudd,462,member,"[300, 1000000)"
210
+ 208,Jane Leeves,463,member,"[300, 1000000)"
211
+ 209,Debi Mazar,465,member,"[300, 1000000)"
212
+ 210,Eliza Coupe,469,member,"[300, 1000000)"
213
+ 211,Leslie Nielsen,470,member,"[300, 1000000)"
214
+ 212,Rachel Dratch,481,member,"[300, 1000000)"
215
+ 213,James Remar,483,member,"[300, 1000000)"
216
+ 214,Jeanne Cooper,485,member,"[300, 1000000)"
217
+ 215,Sarah Chalke,501,member,"[300, 1000000)"
218
+ 216,Marilu Henner,508,member,"[300, 1000000)"
219
+ 217,Tina Louise,516,member,"[300, 1000000)"
220
+ 218,Robert Knepper,518,member,"[300, 1000000)"
221
+ 219,Cheryl Ladd,521,member,"[300, 1000000)"
222
+ 220,Giovanni Ribisi,527,member,"[300, 1000000)"
223
+ 221,Carey Lowell,532,member,"[300, 1000000)"
224
+ 222,Chris Klein,544,member,"[300, 1000000)"
225
+ 223,Mariel Hemingway,546,member,"[300, 1000000)"
226
+ 224,Tatyana Ali,549,member,"[300, 1000000)"
227
+ 225,Brad Garrett,550,member,"[300, 1000000)"
228
+ 226,Lauren Holly,551,member,"[300, 1000000)"
229
+ 227,Katherine Kelly Lang,558,member,"[300, 1000000)"
230
+ 228,Alexander Skarsgård,559,member,"[300, 1000000)"
231
+ 229,Tyne Daly,565,member,"[300, 1000000)"
232
+ 230,Dean Cain,584,member,"[300, 1000000)"
233
+ 231,Rachel Griffiths,591,member,"[300, 1000000)"
234
+ 232,Rupert Friend,603,member,"[300, 1000000)"
235
+ 233,Cam Gigandet,612,member,"[300, 1000000)"
236
+ 234,Robert Patrick,616,member,"[300, 1000000)"
237
+ 235,Kevin McKidd,627,member,"[300, 1000000)"
238
+ 236,Diahann Carroll,632,member,"[300, 1000000)"
239
+ 237,Alfred Molina,634,member,"[300, 1000000)"
240
+ 238,Ben McKenzie,654,member,"[300, 1000000)"
241
+ 239,Rob Schneider,660,member,"[300, 1000000)"
242
+ 240,Laurie Metcalf,667,member,"[300, 1000000)"
243
+ 241,Cary Elwes,670,member,"[300, 1000000)"
244
+ 242,Sarah Drew,671,member,"[300, 1000000)"
245
+ 243,Danny Masterson,681,member,"[300, 1000000)"
246
+ 244,Hank Azaria,717,member,"[300, 1000000)"
247
+ 245,Katrina Bowden,721,member,"[300, 1000000)"
248
+ 246,Danica McKellar,737,member,"[300, 1000000)"
249
+ 247,Billy Burke,738,member,"[300, 1000000)"
250
+ 248,Sasha Alexander,742,member,"[300, 1000000)"
251
+ 249,Jim Caviezel,744,member,"[300, 1000000)"
252
+ 250,Gabriel Macht,749,member,"[300, 1000000)"
253
+ 251,Jean Reno,770,member,"[300, 1000000)"
254
+ 252,Candice Bergen,780,member,"[300, 1000000)"
255
+ 253,Dermot Mulroney,784,member,"[300, 1000000)"
256
+ 254,Roma Downey,786,member,"[300, 1000000)"
257
+ 255,Tia Carrere,787,member,"[300, 1000000)"
258
+ 256,Victor Garber,804,member,"[300, 1000000)"
259
+ 257,Charlie Day,808,member,"[300, 1000000)"
260
+ 258,Shirley Jones,809,member,"[300, 1000000)"
261
+ 259,Jay Baruchel,813,member,"[300, 1000000)"
262
+ 260,Colin Hanks,819,member,"[300, 1000000)"
263
+ 261,Freddie Prinze Jr,833,member,"[300, 1000000)"
264
+ 262,Kal Penn,839,member,"[300, 1000000)"
265
+ 263,Frances Fisher,843,member,"[300, 1000000)"
266
+ 264,Jennette McCurdy,846,member,"[300, 1000000)"
267
+ 265,James Brolin,856,member,"[300, 1000000)"
268
+ 266,Gene Hackman,866,member,"[300, 1000000)"
269
+ 267,John Noble,872,member,"[300, 1000000)"
270
+ 268,Luke Wilson,877,member,"[300, 1000000)"
271
+ 269,Bernie Mac,884,member,"[300, 1000000)"
272
+ 270,Kevin Connolly,886,member,"[300, 1000000)"
273
+ 271,Chris Noth,886,member,"[300, 1000000)"
274
+ 272,Cheryl Hines,894,member,"[300, 1000000)"
275
+ 273,Linda Gray,906,member,"[300, 1000000)"
276
+ 274,Dominic Monaghan,910,member,"[300, 1000000)"
277
+ 275,Melissa Gilbert,921,member,"[300, 1000000)"
278
+ 276,Misha Collins,924,member,"[300, 1000000)"
279
+ 277,Elizabeth Berkley,935,member,"[300, 1000000)"
280
+ 278,Alan Arkin,941,member,"[300, 1000000)"
281
+ 279,Sara Gilbert,948,member,"[300, 1000000)"
282
+ 280,Billy Zane,955,member,"[300, 1000000)"
283
+ 281,Alan Alda,962,member,"[300, 1000000)"
284
+ 282,Dana Delany,970,member,"[300, 1000000)"
285
+ 283,Valerie Bertinelli,1017,member,"[300, 1000000)"
286
+ 284,Brendan Fraser,1020,member,"[300, 1000000)"
287
+ 285,Nick Frost,1020,member,"[300, 1000000)"
288
+ 286,Holly Marie Combs,1024,member,"[300, 1000000)"
289
+ 287,Jean-Claude Van Damme,1025,member,"[300, 1000000)"
290
+ 288,Lisa Bonet,1026,member,"[300, 1000000)"
291
+ 289,Matt Dillon,1027,member,"[300, 1000000)"
292
+ 290,Matthew Gray Gubler,1040,member,"[300, 1000000)"
293
+ 291,Marg Helgenberger,1043,member,"[300, 1000000)"
294
+ 292,Jonathan Rhys Meyers,1055,member,"[300, 1000000)"
295
+ 293,Lacey Chabert,1060,member,"[300, 1000000)"
296
+ 294,Jeffrey Tambor,1063,member,"[300, 1000000)"
297
+ 295,Valerie Harper,1093,member,"[300, 1000000)"
298
+ 296,Susan Lucci,1096,member,"[300, 1000000)"
299
+ 297,Catherine Bell,1096,member,"[300, 1000000)"
300
+ 298,Candace Cameron Bure,1101,member,"[300, 1000000)"
301
+ 299,Danny Glover,1108,member,"[300, 1000000)"
302
+ 300,Andy Garcia,1121,member,"[300, 1000000)"
303
+ 301,Geena Davis,1122,member,"[300, 1000000)"
304
+ 302,Neve Campbell,1132,member,"[300, 1000000)"
305
+ 303,J.K. Simmons,1142,member,"[300, 1000000)"
306
+ 304,Ed Harris,1161,member,"[300, 1000000)"
307
+ 305,Margaret Cho,1162,member,"[300, 1000000)"
308
+ 306,McKayla Maroney,1221,member,"[300, 1000000)"
309
+ 307,Emile Hirsch,1234,member,"[300, 1000000)"
310
+ 308,Eliza Dushku,1236,member,"[300, 1000000)"
311
+ 309,Summer Glau,1243,member,"[300, 1000000)"
312
+ 310,Benicio Del Toro,1288,member,"[300, 1000000)"
313
+ 311,Danny Trejo,1297,member,"[300, 1000000)"
314
+ 312,Martin Sheen,1301,member,"[300, 1000000)"
315
+ 313,Julie Benz,1303,member,"[300, 1000000)"
316
+ 314,Peter Sarsgaard,1313,member,"[300, 1000000)"
317
+ 315,Diego Luna,1333,member,"[300, 1000000)"
318
+ 316,Robert Duvall,1337,member,"[300, 1000000)"
319
+ 317,Patricia Arquette,1339,member,"[300, 1000000)"
320
+ 318,Edie Falco,1353,member,"[300, 1000000)"
321
+ 319,Christian Slater,1353,member,"[300, 1000000)"
322
+ 320,Fran Drescher,1357,member,"[300, 1000000)"
323
+ 321,Jason Biggs,1367,member,"[300, 1000000)"
324
+ 322,Hayden Christensen,1373,member,"[300, 1000000)"
325
+ 323,Geoffrey Rush,1375,member,"[300, 1000000)"
326
+ 324,Melissa Benoist,1382,member,"[300, 1000000)"
327
+ 325,Christopher Lloyd,1383,member,"[300, 1000000)"
328
+ 326,Eric Dane,1394,member,"[300, 1000000)"
329
+ 327,John Malkovich,1434,member,"[300, 1000000)"
330
+ 328,Milo Ventimiglia,1449,member,"[300, 1000000)"
331
+ 329,Jane Krakowski,1459,member,"[300, 1000000)"
332
+ 330,Michael Weatherly,1459,member,"[300, 1000000)"
333
+ 331,David Cross,1474,member,"[300, 1000000)"
334
+ 332,Jackson Rathbone,1485,member,"[300, 1000000)"
335
+ 333,Kristin Davis,1507,member,"[300, 1000000)"
336
+ 334,Miranda Cosgrove,1518,member,"[300, 1000000)"
337
+ 335,Hugo Weaving,1538,member,"[300, 1000000)"
338
+ 336,Karl Urban,1543,member,"[300, 1000000)"
339
+ 337,Shannen Doherty,1555,member,"[300, 1000000)"
340
+ 338,Angie Harmon,1588,member,"[300, 1000000)"
341
+ 339,Jon Voight,1589,member,"[300, 1000000)"
342
+ 340,Marcia Cross,1598,member,"[300, 1000000)"
343
+ 341,Roseanne Barr,1613,member,"[300, 1000000)"
344
+ 342,Morena Baccarin,1620,member,"[300, 1000000)"
345
+ 343,Farrah Fawcett,1658,member,"[300, 1000000)"
346
+ 344,John Cleese,1666,member,"[300, 1000000)"
347
+ 345,Kris Kristofferson,1683,member,"[300, 1000000)"
348
+ 346,Harry Connick Jr.,1693,member,"[300, 1000000)"
349
+ 347,Judith Light,1694,member,"[300, 1000000)"
350
+ 348,Calista Flockhart,1703,member,"[300, 1000000)"
351
+ 349,Adam Brody,1704,member,"[300, 1000000)"
352
+ 350,Aaron Eckhart,1705,member,"[300, 1000000)"
353
+ 351,Justin Long,1722,member,"[300, 1000000)"
354
+ 352,Bill Nighy,1756,member,"[300, 1000000)"
355
+ 353,Sam Rockwell,1768,member,"[300, 1000000)"
356
+ 354,Jason Lee,1769,member,"[300, 1000000)"
357
+ 355,Mike Myers,1779,member,"[300, 1000000)"
358
+ 356,Josh Hartnett,1784,member,"[300, 1000000)"
359
+ 357,Richard Madden,1788,member,"[300, 1000000)"
360
+ 358,Sean Bean,1835,member,"[300, 1000000)"
361
+ 359,Allison Janney,1838,member,"[300, 1000000)"
362
+ 360,Martin Lawrence,1838,member,"[300, 1000000)"
363
+ 361,John Cusack,1864,member,"[300, 1000000)"
364
+ 362,James Marsden,1915,member,"[300, 1000000)"
365
+ 363,David Schwimmer,1932,member,"[300, 1000000)"
366
+ 364,Audra McDonald,1933,member,"[300, 1000000)"
367
+ 365,Jeremy Irons,1945,member,"[300, 1000000)"
368
+ 366,Paul Bettany,1949,member,"[300, 1000000)"
369
+ 367,David Boreanaz,1954,member,"[300, 1000000)"
370
+ 368,Casey Affleck,1959,member,"[300, 1000000)"
371
+ 369,Kim Cattrall,1968,member,"[300, 1000000)"
372
+ 370,Christopher Reeve,1973,member,"[300, 1000000)"
373
+ 371,Ben Kingsley,1997,member,"[300, 1000000)"
374
+ 372,Billy Bob Thornton,2001,member,"[300, 1000000)"
375
+ 373,Teri Hatcher,2068,member,"[300, 1000000)"
376
+ 374,Matt LeBlanc,2074,member,"[300, 1000000)"
377
+ 375,Laurence Fishburne,2080,member,"[300, 1000000)"
378
+ 376,Helen Hunt,2097,member,"[300, 1000000)"
379
+ 377,George Lopez,2106,member,"[300, 1000000)"
380
+ 378,Patrick Swayze,2112,member,"[300, 1000000)"
381
+ 379,Lori Loughlin,2134,member,"[300, 1000000)"
382
+ 380,Mayim Bialik,2154,member,"[300, 1000000)"
383
+ 381,Andy Serkis,2174,member,"[300, 1000000)"
384
+ 382,Bill Hader,2191,member,"[300, 1000000)"
385
+ 383,Burt Reynolds,2239,member,"[300, 1000000)"
386
+ 384,Stana Katic,2249,member,"[300, 1000000)"
387
+ 385,Portia de Rossi,2258,member,"[300, 1000000)"
388
+ 386,Adrien Brody,2277,member,"[300, 1000000)"
389
+ 387,Alan Rickman,2277,member,"[300, 1000000)"
390
+ 388,Felicity Huffman,2281,member,"[300, 1000000)"
391
+ 389,Emily Deschanel,2316,member,"[300, 1000000)"
392
+ 390,Jennie Garth,2365,member,"[300, 1000000)"
393
+ 391,Matthew Broderick,2383,member,"[300, 1000000)"
394
+ 392,Joan Collins,2451,member,"[300, 1000000)"
395
+ 393,Lisa Kudrow,2454,member,"[300, 1000000)"
396
+ 394,Don Cheadle,2465,member,"[300, 1000000)"
397
+ 395,Clive Owen,2482,member,"[300, 1000000)"
398
+ 396,Heather Locklear,2488,member,"[300, 1000000)"
399
+ 397,Jet Li,2514,member,"[300, 1000000)"
400
+ 398,Jensen Ackles,2532,member,"[300, 1000000)"
401
+ 399,Carmen Electra,2553,member,"[300, 1000000)"
402
+ 400,Jesse Eisenberg,2569,member,"[300, 1000000)"
403
+ 401,Jared Padalecki,2626,member,"[300, 1000000)"
404
+ 402,Tobey Maguire,2661,member,"[300, 1000000)"
405
+ 403,Elijah Wood,2699,member,"[300, 1000000)"
406
+ 404,Rupert Grint,2721,member,"[300, 1000000)"
407
+ 405,America Ferrera,2722,member,"[300, 1000000)"
408
+ 406,Simon Pegg,2776,member,"[300, 1000000)"
409
+ 407,Matthew Perry,2816,member,"[300, 1000000)"
410
+ 408,Alyson Hannigan,2881,member,"[300, 1000000)"
411
+ 409,Gary Oldman,2904,member,"[300, 1000000)"
412
+ 410,Christina Applegate,2911,member,"[300, 1000000)"
413
+ 411,Philip Seymour Hoffman,2922,member,"[300, 1000000)"
414
+ 412,Sally Field,2928,member,"[300, 1000000)"
415
+ 413,Kirstie Alley,2957,member,"[300, 1000000)"
416
+ 414,Dustin Hoffman,3036,member,"[300, 1000000)"
417
+ 415,Glenn Close,3038,member,"[300, 1000000)"
418
+ 416,Ethan Hawke,3040,member,"[300, 1000000)"
419
+ 417,Sarah Hyland,3107,member,"[300, 1000000)"
420
+ 418,Ryan Phillippe,3108,member,"[300, 1000000)"
421
+ 419,Julia Louis-Dreyfus,3181,member,"[300, 1000000)"
422
+ 420,Liev Schreiber,3184,member,"[300, 1000000)"
423
+ 421,Dianna Agron,3247,member,"[300, 1000000)"
424
+ 422,Patrick Dempsey,3310,member,"[300, 1000000)"
425
+ 423,Jason Sudeikis,3311,member,"[300, 1000000)"
426
+ 424,Jamie Lee Curtis,3333,member,"[300, 1000000)"
427
+ 425,Daniel Day-Lewis,3368,member,"[300, 1000000)"
428
+ 426,Hugh Grant,3395,member,"[300, 1000000)"
429
+ 427,Jerry Seinfeld,3398,member,"[300, 1000000)"
430
+ 428,Ian McKellen,3413,member,"[300, 1000000)"
431
+ 429,Kathy Griffin,3460,member,"[300, 1000000)"
432
+ 430,Kiefer Sutherland,3472,member,"[300, 1000000)"
433
+ 431,Norman Reedus,3487,member,"[300, 1000000)"
434
+ 432,Kristin Chenoweth,3490,member,"[300, 1000000)"
435
+ 433,Jaden Smith,3527,member,"[300, 1000000)"
436
+ 434,Jason Bateman,3529,member,"[300, 1000000)"
437
+ 435,Gillian Anderson,3533,member,"[300, 1000000)"
438
+ 436,Julianna Margulies,3559,member,"[300, 1000000)"
439
+ 437,James McAvoy,3604,member,"[300, 1000000)"
440
+ 438,Julie Bowen,3628,member,"[300, 1000000)"
441
+ 439,Jack Nicholson,3691,member,"[300, 1000000)"
442
+ 440,Owen Wilson,3828,member,"[300, 1000000)"
443
+ 441,Victoria Justice,3849,member,"[300, 1000000)"
444
+ 442,Joshua Jackson,3926,member,"[300, 1000000)"
445
+ 443,Kevin Bacon,3980,member,"[300, 1000000)"
446
+ 444,Josh Brolin,3991,member,"[300, 1000000)"
447
+ 445,Debra Messing,4050,member,"[300, 1000000)"
448
+ 446,Anthony Hopkins,4137,member,"[300, 1000000)"
449
+ 447,Joe Manganiello,4147,member,"[300, 1000000)"
450
+ 448,Kevin Costner,4230,member,"[300, 1000000)"
451
+ 449,John Krasinski,4272,member,"[300, 1000000)"
452
+ 450,David Duchovny,4372,member,"[300, 1000000)"
453
+ 451,Kellan Lutz,4374,member,"[300, 1000000)"
454
+ 452,Sarah Michelle Gellar,4415,member,"[300, 1000000)"
455
+ 453,Mark Ruffalo,4421,member,"[300, 1000000)"
456
+ 454,Richard Gere,4428,member,"[300, 1000000)"
457
+ 455,Jane Lynch,4431,member,"[300, 1000000)"
458
+ 456,Joaquin Phoenix,4437,member,"[300, 1000000)"
459
+ 457,Josh Duhamel,4460,member,"[300, 1000000)"
460
+ 458,Ashley Benson,4603,member,"[300, 1000000)"
461
+ 459,Colin Farrell,4725,member,"[300, 1000000)"
462
+ 460,Jonah Hill,4768,member,"[300, 1000000)"
463
+ 461,Samuel L. Jackson,4787,member,"[300, 1000000)"
464
+ 462,Steve Carell,4802,member,"[300, 1000000)"
465
+ 463,Mel Gibson,4806,member,"[300, 1000000)"
466
+ 464,Ewan McGregor,4832,member,"[300, 1000000)"
467
+ 465,Robert Redford,4907,member,"[300, 1000000)"
468
+ 466,Jennifer Love Hewitt,4953,member,"[300, 1000000)"
469
+ 467,Nicolas Cage,4972,member,"[300, 1000000)"
470
+ 468,Chris Rock,4976,member,"[300, 1000000)"
471
+ 469,Pamela Anderson,5005,member,"[300, 1000000)"
472
+ 470,Jude Law,5006,member,"[300, 1000000)"
473
+ 471,Pierce Brosnan,5357,member,"[300, 1000000)"
474
+ 472,Jason Statham,5379,member,"[300, 1000000)"
475
+ 473,Kit Harington,5429,member,"[300, 1000000)"
476
+ 474,Ben Stiller,5544,member,"[300, 1000000)"
477
+ 475,Shia LaBeouf,5733,member,"[300, 1000000)"
478
+ 476,Alyssa Milano,5769,member,"[300, 1000000)"
479
+ 477,Russell Crowe,5783,member,"[300, 1000000)"
480
+ 478,Al Pacino,5818,member,"[300, 1000000)"
481
+ 479,Heath Ledger,5994,member,"[300, 1000000)"
482
+ 480,Jackie Chan,6008,member,"[300, 1000000)"
483
+ 481,Gerard Butler,6155,member,"[300, 1000000)"
484
+ 482,Jim Carrey,6155,member,"[300, 1000000)"
485
+ 483,Seth Rogen,6245,member,"[300, 1000000)"
486
+ 484,Bill Cosby,6253,member,"[300, 1000000)"
487
+ 485,Adam Sandler,6324,member,"[300, 1000000)"
488
+ 486,Colin Firth,6355,member,"[300, 1000000)"
489
+ 487,Antonio Banderas,6426,member,"[300, 1000000)"
490
+ 488,January Jones,6673,member,"[300, 1000000)"
491
+ 489,Robert De Niro,6699,member,"[300, 1000000)"
492
+ 490,Michael Douglas,6713,member,"[300, 1000000)"
493
+ 491,Kaley Cuoco,7032,member,"[300, 1000000)"
494
+ 492,John Travolta,7079,member,"[300, 1000000)"
495
+ 493,Jamie Foxx,7167,member,"[300, 1000000)"
496
+ 494,Denzel Washington,7216,member,"[300, 1000000)"
497
+ 495,Woody Allen,7280,member,"[300, 1000000)"
498
+ 496,Taylor Lautner,7403,member,"[300, 1000000)"
499
+ 497,Jon Hamm,7463,member,"[300, 1000000)"
500
+ 498,Courteney Cox,7673,member,"[300, 1000000)"
501
+ 499,Bill Murray,7956,member,"[300, 1000000)"
502
+ 500,Keanu Reeves,8108,member,"[300, 1000000)"
503
+ 501,Christian Bale,8115,member,"[300, 1000000)"
504
+ 502,Paul Walker,8153,member,"[300, 1000000)"
505
+ 503,Alec Baldwin,8313,member,"[300, 1000000)"
506
+ 504,Bruce Willis,8319,member,"[300, 1000000)"
507
+ 505,Chris Evans,8907,member,"[300, 1000000)"
508
+ 506,Tina Fey,8946,member,"[300, 1000000)"
509
+ 507,Zooey Deschanel,9025,member,"[300, 1000000)"
510
+ 508,Charlie Sheen,9160,member,"[300, 1000000)"
511
+ 509,Jake Gyllenhaal,9267,member,"[300, 1000000)"
512
+ 510,Mark Wahlberg,9308,member,"[300, 1000000)"
513
+ 511,Daniel Radcliffe,9372,member,"[300, 1000000)"
514
+ 512,Dwayne Johnson,9700,member,"[300, 1000000)"
515
+ 513,Orlando Bloom,10005,member,"[300, 1000000)"
516
+ 514,Robin Williams,10075,member,"[300, 1000000)"
517
+ 515,Arnold Schwarzenegger,10103,member,"[300, 1000000)"
518
+ 516,Lea Michele,10353,member,"[300, 1000000)"
519
+ 517,Harrison Ford,10497,member,"[300, 1000000)"
520
+ 518,Mila Kunis,10725,member,"[300, 1000000)"
521
+ 519,Ellen DeGeneres,10746,member,"[300, 1000000)"
522
+ 520,Clint Eastwood,10884,member,"[300, 1000000)"
523
+ 521,Daniel Craig,10893,member,"[300, 1000000)"
524
+ 522,Ashton Kutcher,10894,member,"[300, 1000000)"
525
+ 523,Matthew McConaughey,11042,member,"[300, 1000000)"
526
+ 524,Channing Tatum,11468,member,"[300, 1000000)"
527
+ 525,James Franco,11598,member,"[300, 1000000)"
528
+ 526,Jessica Biel,11651,member,"[300, 1000000)"
529
+ 527,Robert Downey Jr.,12612,member,"[300, 1000000)"
530
+ 528,Eva Longoria,13164,member,"[300, 1000000)"
531
+ 529,Ryan Reynolds,13860,member,"[300, 1000000)"
532
+ 530,Tom Hanks,14555,member,"[300, 1000000)"
533
+ 531,Ryan Gosling,14676,member,"[300, 1000000)"
534
+ 532,Bradley Cooper,14716,member,"[300, 1000000)"
535
+ 533,Hugh Jackman,15260,member,"[300, 1000000)"
536
+ 534,Leonardo DiCaprio,15294,member,"[300, 1000000)"
537
+ 535,Matt Damon,16190,member,"[300, 1000000)"
538
+ 536,Jimmy Fallon,18671,member,"[300, 1000000)"
539
+ 537,George Clooney,21764,member,"[300, 1000000)"
540
+ 538,Justin Timberlake,21886,member,"[300, 1000000)"
541
+ 539,Anne Hathaway,22155,member,"[300, 1000000)"
542
+ 540,Ben Affleck,23038,member,"[300, 1000000)"
543
+ 541,Selena Gomez,24778,member,"[300, 1000000)"
544
+ 542,Johnny Depp,27342,member,"[300, 1000000)"
545
+ 543,Brad Pitt,30524,member,"[300, 1000000)"
546
+ 544,Robert Pattinson,31238,member,"[300, 1000000)"
547
+ 545,Jennifer Aniston,36981,member,"[300, 1000000)"
prompt_text_embeddings/ViT-B-16_prompt_text_embeddings.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:21a5aaf59ac44f37f2903c4b9bfc2cc1025757420de6aa500aafacbb9797f9ab
3
+ size 430080883
prompt_text_embeddings/ViT-B-32_prompt_text_embeddings.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:5c842c10a0982de17892a86dd9f00f5858eda62795d1fdf37904046ebc565685
3
+ size 430080883
prompt_text_embeddings/ViT-L-14_prompt_text_embeddings.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:4fd82898cfd5d233aec8b3c644af5ddd71265eef1d6c63fdc4d1e6167d5450a9
3
+ size 645120883
requirements.txt ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ torch==1.13.1
2
+ torchvision==0.14.1
3
+ gradio==3.19.1
4
+ open_clip_torch==2.14.0
5
+ Pillow==9.3.0
6
+ jupyterlab==3.6.1
7
+ ipywidgets==8.0.4