codeShare commited on
Commit
e6ba544
1 Parent(s): 865af29

Upload 2 files

Browse files
Files changed (2) hide show
  1. sd_token_similarity_calculator.ipynb +114 -116
  2. vocab.json +0 -0
sd_token_similarity_calculator.ipynb CHANGED
@@ -41,107 +41,90 @@
41
  "ACTIVE_IMG = ''\n",
42
  "#-----#\n",
43
  "\n",
 
 
 
 
 
 
 
44
  "#Import the vocab.json\n",
45
  "import json\n",
46
  "import pandas as pd\n",
47
- "with open('vocab.json', 'r') as f:\n",
 
 
48
  " data = json.load(f)\n",
 
 
 
 
 
 
 
 
 
 
 
49
  "\n",
 
 
 
50
  "_df = pd.DataFrame({'count': data})['count']\n",
 
 
 
51
  "\n",
52
- "vocab = {\n",
53
- " value: key for key, value in _df.items()\n",
 
 
 
 
54
  "}\n",
 
55
  "#-----#\n",
56
  "\n",
57
- "# Define functions/constants\n",
58
- "NUM_TOKENS = 49407\n",
59
  "\n",
60
- "def absolute_value(x):\n",
61
- " return max(x, -x)\n",
 
 
 
 
 
62
  "\n",
 
 
 
 
 
 
 
63
  "\n",
64
- "def token_similarity(A, B):\n",
65
  "\n",
66
- " #Vector length#\n",
67
- " _A = LA.vector_norm(A, ord=2)\n",
68
- " _B = LA.vector_norm(B, ord=2)\n",
69
  "\n",
70
- " #----#\n",
71
- " result = torch.dot(A,B)/(_A*_B)\n",
72
- " #similarity_pcnt = absolute_value(result.item()*100)\n",
73
- " similarity_pcnt = result.item()*100\n",
74
- " similarity_pcnt_aprox = round(similarity_pcnt, 3)\n",
75
- " result = f'{similarity_pcnt_aprox} %'\n",
76
- " return result\n",
77
- "\n",
78
- "\n",
79
- "def similarity(id_A , id_B):\n",
80
- " #Tensors\n",
81
- " A = token[id_A]\n",
82
- " B = token[id_B]\n",
83
- " return token_similarity(A, B)\n",
84
- "#----#\n",
85
  "\n",
86
- "#print(vocab[8922]) #the vocab item for ID 8922\n",
87
- "#print(token[8922].shape) #dimension of the token\n",
88
- "\n",
89
- "mix_with = \"\"\n",
90
- "mix_method = \"None\"\n",
91
- "\n",
92
- "#-------------#\n",
93
- "# UNUSED\n",
94
- "\n",
95
- "# Get the 10 lowest values from a tensor as a string\n",
96
- "def get_valleys (A):\n",
97
- " sorted, indices = torch.sort(A,dim=0 , descending=False)\n",
98
- " result = \"{\"\n",
99
- " for index in range(10):\n",
100
- " id = indices[index].item()\n",
101
- " result = result + f\"{id}\"\n",
102
- " if(index<9):\n",
103
- " result = result + \",\"\n",
104
- " result = result + \"}\"\n",
105
- " return result\n",
106
- "\n",
107
- "# Get the 10 highest values from a tensor as a string\n",
108
- "def get_peaks (A):\n",
109
- " sorted, indices = torch.sort(A,dim=0 , descending=True)\n",
110
- " result = \"{\"\n",
111
- " for index in range(10):\n",
112
- " id = indices[index].item()\n",
113
- " result = result + f\"{id}\"\n",
114
- " if(index<9):\n",
115
- " result = result + \",\"\n",
116
- " result = result + \"}\"\n",
117
- " return result"
118
  ],
119
  "metadata": {
120
  "id": "Ch9puvwKH1s3",
121
- "collapsed": true,
122
- "outputId": "033c251a-2043-40e7-9500-4da870ffa7fd",
123
- "colab": {
124
- "base_uri": "https://localhost:8080/"
125
- },
126
- "cellView": "form"
127
  },
128
  "execution_count": null,
129
- "outputs": [
130
- {
131
- "output_type": "stream",
132
- "name": "stdout",
133
- "text": [
134
- "Cloning into 'sd_tokens'...\n",
135
- "remote: Enumerating objects: 20, done.\u001b[K\n",
136
- "remote: Counting objects: 100% (17/17), done.\u001b[K\n",
137
- "remote: Compressing objects: 100% (17/17), done.\u001b[K\n",
138
- "remote: Total 20 (delta 4), reused 0 (delta 0), pack-reused 3 (from 1)\u001b[K\n",
139
- "Unpacking objects: 100% (20/20), 310.37 KiB | 2.10 MiB/s, done.\n",
140
- "Filtering content: 100% (3/3), 160.82 MiB | 26.64 MiB/s, done.\n",
141
- "/content/sd_tokens\n"
142
- ]
143
- }
144
- ]
145
  },
146
  {
147
  "cell_type": "code",
@@ -201,11 +184,11 @@
201
  "\n",
202
  "name_A = \"A of random type\"\n",
203
  "if (id_A>-1):\n",
204
- " name_A = vocab[id_A]\n",
205
  "\n",
206
  "name_C = \"token C of random type\"\n",
207
  "if (id_C>-1):\n",
208
- " name_C = vocab[id_C]\n",
209
  "\n",
210
  "print(f\"The similarity between A '{name_A}' and C '{name_C}' is {round(sim_AC.item()*100,2)} %\")\n",
211
  "\n",
@@ -264,7 +247,7 @@
264
  "for index in range(list_size):\n",
265
  " id = indices[index].item()\n",
266
  " if (print_Name):\n",
267
- " print(f'{vocab[id]}') # vocab item\n",
268
  " if (print_ID):\n",
269
  " print(f'ID = {id}') # IDs\n",
270
  " if (print_Similarity):\n",
@@ -285,14 +268,13 @@
285
  "#NUM TOKENS == 49407\n",
286
  "for index in range(NUM_TOKENS):\n",
287
  " #print(d[f'{index}']) #<-----Use this to read values from the .db file\n",
288
- " d[f'{index}']= vocab[indices[index].item()] #<---- write values to .db file\n",
289
  "#----#\n",
290
  "d.close() #close the file\n",
291
  "# See this link for additional stuff to do with shelve: https://docs.python.org/3/library/shelve.html"
292
  ],
293
  "metadata": {
294
- "id": "iWeFnT1gAx6A",
295
- "cellView": "form"
296
  },
297
  "execution_count": null,
298
  "outputs": []
@@ -315,20 +297,7 @@
315
  {
316
  "cell_type": "code",
317
  "source": [
318
- "# @title ⚡+🖼️ -> 📝 Token-Sampling Image interrogator\n",
319
- "#-----#\n",
320
- "NUM_TOKENS = 49407\n",
321
- "import shelve\n",
322
- "db_vocab = shelve.open(VOCAB_FILENAME)\n",
323
- "print(f'using the tokens found in {VOCAB_FILENAME}.db as the vocab')\n",
324
- "# @markdown # What do you want to to mimic?\n",
325
- "use = '🖼️image_encoding from image' # @param ['📝text_encoding from prompt', '🖼️image_encoding from image']\n",
326
- "# @markdown --------------------------\n",
327
- "use_token_padding = True # param {type:\"boolean\"} <---- Enabled by default\n",
328
- "prompt = \"photo of a banana\" # @param {\"type\":\"string\",\"placeholder\":\"Write a prompt\"}\n",
329
- "#-----#\n",
330
- "prompt_A = prompt\n",
331
- "#-----#\n",
332
  "from google.colab import files\n",
333
  "def upload_files():\n",
334
  " from google.colab import files\n",
@@ -338,28 +307,58 @@
338
  " return list(uploaded.keys())\n",
339
  "#Get image\n",
340
  "# You can use \"http://images.cocodataset.org/val2017/000000039769.jpg\" for testing\n",
341
- "image_url = \"http://images.cocodataset.org/val2017/000000039769.jpg\" # @param {\"type\":\"string\",\"placeholder\":\"leave empty for local upload (scroll down to see it)\"}\n",
342
  "colab_image_path = \"\" # @param {\"type\":\"string\",\"placeholder\": \"eval. as '/content/sd_tokens/' + **your input**\"}\n",
343
  "# @markdown --------------------------\n",
 
 
 
344
  "from PIL import Image\n",
345
  "import requests\n",
346
  "image_A = \"\"\n",
347
  "#----#\n",
348
- "if(use == '🖼️image_encoding from image'):\n",
349
- " if image_url == \"\":\n",
350
- " import cv2\n",
351
- " from google.colab.patches import cv2_imshow\n",
352
- " # Open the image.\n",
353
- " if colab_image_path == \"\":\n",
354
- " keys = upload_files()\n",
355
- " for key in keys:\n",
356
- " image_A = cv2.imread(\"/content/sd_tokens/\" + key)\n",
357
- " colab_image_path = \"/content/sd_tokens/\" + key\n",
358
- " else:\n",
359
- " image_A = cv2.imread(\"/content/sd_tokens/\" + colab_image_path)\n",
360
  " else:\n",
361
- " image_A = Image.open(requests.get(image_url, stream=True).raw)\n",
 
 
362
  "#------#\n",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
363
  "from transformers import AutoTokenizer\n",
364
  "tokenizer = AutoTokenizer.from_pretrained(\"openai/clip-vit-large-patch14\", clean_up_tokenization_spaces = False)\n",
365
  "from transformers import CLIPProcessor, CLIPModel\n",
@@ -652,8 +651,7 @@
652
  ],
653
  "metadata": {
654
  "collapsed": true,
655
- "id": "fi0jRruI0-tu",
656
- "cellView": "form"
657
  },
658
  "execution_count": null,
659
  "outputs": []
 
41
  "ACTIVE_IMG = ''\n",
42
  "#-----#\n",
43
  "\n",
44
+ "# Define functions/constants\n",
45
+ "NUM_TOKENS = 49407\n",
46
+ "NUM_PREFIX = 13662\n",
47
+ "NUM_SUFFIX = 32901\n",
48
+ "\n",
49
+ "loaded_Image_A = False\n",
50
+ "\n",
51
  "#Import the vocab.json\n",
52
  "import json\n",
53
  "import pandas as pd\n",
54
+ "\n",
55
+ "# Read suffix.json\n",
56
+ "with open('suffix.json', 'r') as f:\n",
57
  " data = json.load(f)\n",
58
+ "_df = pd.DataFrame({'count': data})['count']\n",
59
+ "suffix = {\n",
60
+ " key : value for key, value in _df.items()\n",
61
+ "}\n",
62
+ "# Read prefix json\n",
63
+ "with open('prefix.json', 'r') as f:\n",
64
+ " data = json.load(f)\n",
65
+ "_df = pd.DataFrame({'count': data})['count']\n",
66
+ "prefix = {\n",
67
+ " key : value for key, value in _df.items()\n",
68
+ "}\n",
69
  "\n",
70
+ "# Read to_suffix.json\n",
71
+ "with open('to_suffix.json', 'r') as f:\n",
72
+ " data = json.load(f)\n",
73
  "_df = pd.DataFrame({'count': data})['count']\n",
74
+ "suffix_to_vocab = {\n",
75
+ " key : value for key, value in _df.items()\n",
76
+ "}\n",
77
  "\n",
78
+ "# Read to_prefix.json\n",
79
+ "with open('to_prefix.json', 'r') as f:\n",
80
+ " data = json.load(f)\n",
81
+ "_df = pd.DataFrame({'count': data})['count']\n",
82
+ "prefix_to_vocab = {\n",
83
+ " key : value for key, value in _df.items()\n",
84
  "}\n",
85
+ "\n",
86
  "#-----#\n",
87
  "\n",
 
 
88
  "\n",
89
+ "# Read to_suffix.json (reversing key and value)\n",
90
+ "with open('to_suffix.json', 'r') as f:\n",
91
+ " data = json.load(f)\n",
92
+ "_df = pd.DataFrame({'count': data})['count']\n",
93
+ "vocab_to_suffix = {\n",
94
+ " value : key for key, value in _df.items()\n",
95
+ "}\n",
96
  "\n",
97
+ "# Read to_prefix.json (reversing key and value)\n",
98
+ "with open('to_prefix.json', 'r') as f:\n",
99
+ " data = json.load(f)\n",
100
+ "_df = pd.DataFrame({'count': data})['count']\n",
101
+ "vocab_to_prefix = {\n",
102
+ " value : key for key, value in _df.items()\n",
103
+ "}\n",
104
  "\n",
 
105
  "\n",
106
+ "#-----#\n",
 
 
107
  "\n",
108
+ "#get token from id (excluding tokens with special symbols)\n",
109
+ "def vocab(id):\n",
110
+ " _id = f'{id}'\n",
111
+ " if _id in vocab_to_suffix:\n",
112
+ " _id = vocab_to_suffix[_id]\n",
113
+ " return suffix[_id]\n",
114
+ " if _id in vocab_to_prefix:\n",
115
+ " _id = vocab_to_prefix[_id]\n",
116
+ " return prefix[_id]\n",
117
+ " return ' ' #<---- return whitespace if other id like emojis etc.\n",
118
+ "#--------#\n",
 
 
 
 
119
  "\n",
120
+ "#print(get_token(35894))\n"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
121
  ],
122
  "metadata": {
123
  "id": "Ch9puvwKH1s3",
124
+ "collapsed": true
 
 
 
 
 
125
  },
126
  "execution_count": null,
127
+ "outputs": []
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
128
  },
129
  {
130
  "cell_type": "code",
 
184
  "\n",
185
  "name_A = \"A of random type\"\n",
186
  "if (id_A>-1):\n",
187
+ " name_A = vocab(id_A)\n",
188
  "\n",
189
  "name_C = \"token C of random type\"\n",
190
  "if (id_C>-1):\n",
191
+ " name_C = vocab(id_C)\n",
192
  "\n",
193
  "print(f\"The similarity between A '{name_A}' and C '{name_C}' is {round(sim_AC.item()*100,2)} %\")\n",
194
  "\n",
 
247
  "for index in range(list_size):\n",
248
  " id = indices[index].item()\n",
249
  " if (print_Name):\n",
250
+ " print(f'{vocab(id)}') # vocab item\n",
251
  " if (print_ID):\n",
252
  " print(f'ID = {id}') # IDs\n",
253
  " if (print_Similarity):\n",
 
268
  "#NUM TOKENS == 49407\n",
269
  "for index in range(NUM_TOKENS):\n",
270
  " #print(d[f'{index}']) #<-----Use this to read values from the .db file\n",
271
+ " d[f'{index}']= vocab(indices[index].item()) #<---- write values to .db file\n",
272
  "#----#\n",
273
  "d.close() #close the file\n",
274
  "# See this link for additional stuff to do with shelve: https://docs.python.org/3/library/shelve.html"
275
  ],
276
  "metadata": {
277
+ "id": "iWeFnT1gAx6A"
 
278
  },
279
  "execution_count": null,
280
  "outputs": []
 
297
  {
298
  "cell_type": "code",
299
  "source": [
300
+ "# @title 🖼️ Upload an image\n",
 
 
 
 
 
 
 
 
 
 
 
 
 
301
  "from google.colab import files\n",
302
  "def upload_files():\n",
303
  " from google.colab import files\n",
 
307
  " return list(uploaded.keys())\n",
308
  "#Get image\n",
309
  "# You can use \"http://images.cocodataset.org/val2017/000000039769.jpg\" for testing\n",
310
+ "image_url = \"\" # @param {\"type\":\"string\",\"placeholder\":\"leave empty for local upload (scroll down to see it)\"}\n",
311
  "colab_image_path = \"\" # @param {\"type\":\"string\",\"placeholder\": \"eval. as '/content/sd_tokens/' + **your input**\"}\n",
312
  "# @markdown --------------------------\n",
313
+ "\n",
314
+ "image_path = \"\"\n",
315
+ "\n",
316
  "from PIL import Image\n",
317
  "import requests\n",
318
  "image_A = \"\"\n",
319
  "#----#\n",
320
+ "if image_url == \"\":\n",
321
+ " import cv2\n",
322
+ " from google.colab.patches import cv2_imshow\n",
323
+ " # Open the image.\n",
324
+ " if colab_image_path == \"\":\n",
325
+ " keys = upload_files()\n",
326
+ " for key in keys:\n",
327
+ " image_A = cv2.imread(\"/content/sd_tokens/\" + key)\n",
328
+ " colab_image_path = \"/content/sd_tokens/\" + key\n",
329
+ " image_path = \"/content/sd_tokens/\" + key\n",
 
 
330
  " else:\n",
331
+ " image_A = cv2.imread(\"/content/sd_tokens/\" + colab_image_path)\n",
332
+ "else:\n",
333
+ " image_A = Image.open(requests.get(image_url, stream=True).raw)\n",
334
  "#------#\n",
335
+ "\n"
336
+ ],
337
+ "metadata": {
338
+ "id": "ke6mZ1RZDOeB"
339
+ },
340
+ "execution_count": null,
341
+ "outputs": []
342
+ },
343
+ {
344
+ "cell_type": "code",
345
+ "source": [
346
+ "# @title ⚡+🖼️ -> 📝 Token-Sampling Image interrogator\n",
347
+ "#-----#\n",
348
+ "NUM_TOKENS = 49407\n",
349
+ "import shelve\n",
350
+ "db_vocab = shelve.open(VOCAB_FILENAME)\n",
351
+ "print(f'using the tokens found in {VOCAB_FILENAME}.db as the vocab')\n",
352
+ "# @markdown # What do you want to to mimic?\n",
353
+ "use = '🖼️image_encoding from image' # @param ['📝text_encoding from prompt', '🖼️image_encoding from image']\n",
354
+ "# @markdown --------------------------\n",
355
+ "use_token_padding = True # param {type:\"boolean\"} <---- Enabled by default\n",
356
+ "prompt = \"photo of a banana\" # @param {\"type\":\"string\",\"placeholder\":\"Write a prompt\"}\n",
357
+ "#-----#\n",
358
+ "prompt_A = prompt\n",
359
+ "if(image_path != \"\") : image_A = cv2.imread(\"/content/sd_tokens/\" + image_path)\n",
360
+ "#-----#\n",
361
+ "\n",
362
  "from transformers import AutoTokenizer\n",
363
  "tokenizer = AutoTokenizer.from_pretrained(\"openai/clip-vit-large-patch14\", clean_up_tokenization_spaces = False)\n",
364
  "from transformers import CLIPProcessor, CLIPModel\n",
 
651
  ],
652
  "metadata": {
653
  "collapsed": true,
654
+ "id": "fi0jRruI0-tu"
 
655
  },
656
  "execution_count": null,
657
  "outputs": []
vocab.json ADDED
The diff for this file is too large to render. See raw diff