codeShare commited on
Commit
cd1aec4
·
verified ·
1 Parent(s): 7959015

Upload sd_token_similarity_calculator.ipynb

Browse files
Files changed (1) hide show
  1. sd_token_similarity_calculator.ipynb +43 -30
sd_token_similarity_calculator.ipynb CHANGED
@@ -37,6 +37,9 @@
37
  "%cd /content/sd_tokens\n",
38
  "token = torch.load('sd15_tensors.pt', map_location=device, weights_only=True)\n",
39
  "#-----#\n",
 
 
 
40
  "\n",
41
  "#Import the vocab.json\n",
42
  "import json\n",
@@ -130,7 +133,9 @@
130
  "tokenizer = AutoTokenizer.from_pretrained(\"openai/clip-vit-large-patch14\", clean_up_tokenization_spaces = False)\n",
131
  "\n",
132
  "# @markdown Write name of token to match against\n",
133
- "prompt= \"banana\" # @param {type:'string',\"placeholder\":\"leave empty for random value token\"}\n",
 
 
134
  "# @markdown (optional) Mix the token with something else\n",
135
  "mix_with = \"\" # @param {\"type\":\"string\",\"placeholder\":\"leave empty for random value token\"}\n",
136
  "mix_method = \"None\" # @param [\"None\" , \"Average\", \"Subtract\"] {allow-input: true}\n",
@@ -252,10 +257,23 @@
252
  "\n",
253
  "#The prompt will be enclosed with the <|start-of-text|> and <|end-of-text|> tokens, which is why output will be [49406, ... , 49407].\n",
254
  "\n",
255
- "#You can leave the 'prompt' field empty to get a random value tensor. Since the tensor is random value, it will not correspond to any tensor in the vocab.json list , and this it will have no ID."
 
 
 
 
 
 
 
 
 
 
 
 
256
  ],
257
  "metadata": {
258
- "id": "iWeFnT1gAx6A"
 
259
  },
260
  "execution_count": null,
261
  "outputs": []
@@ -268,7 +286,8 @@
268
  "It takes a long while to check all the tokens (too long!) so this cell only samples a range of the 49K available tokens.\n",
269
  "\n",
270
  "You can run this cell, then paste the result into the 'must_contain' box , and then run the cell again.\n",
271
- "\n"
 
272
  ],
273
  "metadata": {
274
  "id": "IUCuV9RtQpBn"
@@ -277,33 +296,12 @@
277
  {
278
  "cell_type": "code",
279
  "source": [
280
- "# @title ⚡💾 Save results as .db file\n",
281
- "import shelve\n",
282
- "d = shelve.open('tokens_most_similiar_to_' + name_A.replace('</w>','').strip())\n",
283
- "#NUM TOKENS == 49407\n",
284
- "for index in range(NUM_TOKENS):\n",
285
- " #print(d[f'{index}']) #<-----Use this to read values from the .db file\n",
286
- " d[f'{index}']= vocab[indices[index].item()] #<---- write values to .db file\n",
287
- "#----#\n",
288
- "d.close() #close the file\n",
289
- "# See this link for additional stuff to do with shelve: https://docs.python.org/3/library/shelve.html"
290
- ],
291
- "metadata": {
292
- "id": "qj888fPEbX8K"
293
- },
294
- "execution_count": 15,
295
- "outputs": []
296
- },
297
- {
298
- "cell_type": "code",
299
- "source": [
300
- "# @title 🪐🖼️ -> 📝 Token-Sampling Image interrogator\n",
301
- "VOCAB_FILENAME = 'tokens_most_similiar_to_girl' #This vocab has been ordered where lowest index has the highest similarity to the reference vector \"girl</w>\". Feel free to create your own .db around a target token in above cells.\n",
302
  "#-----#\n",
303
  "import shelve\n",
304
  "db_vocab = shelve.open(VOCAB_FILENAME)\n",
305
  "# @markdown # What do you want to to mimic?\n",
306
- "use = '📝text_encoding from prompt' # @param ['📝text_encoding from prompt', '🖼️image_encoding from image']\n",
307
  "# @markdown --------------------------\n",
308
  "use_token_padding = True # param {type:\"boolean\"} <---- Enabled by default\n",
309
  "prompt = \"photo of a banana\" # @param {\"type\":\"string\",\"placeholder\":\"Write a prompt\"}\n",
@@ -319,7 +317,7 @@
319
  " return list(uploaded.keys())\n",
320
  "#Get image\n",
321
  "# You can use \"http://images.cocodataset.org/val2017/000000039769.jpg\" for testing\n",
322
- "image_url = \"http://images.cocodataset.org/val2017/000000039769.jpg\" # @param {\"type\":\"string\",\"placeholder\":\"leave empty for local upload (scroll down to see it)\"}\n",
323
  "colab_image_path = \"\" # @param {\"type\":\"string\",\"placeholder\": \"eval. as '/content/sd_tokens/' + **your input**\"}\n",
324
  "# @markdown --------------------------\n",
325
  "from PIL import Image\n",
@@ -368,7 +366,7 @@
368
  "# @markdown -----\n",
369
  "# @markdown # Use a range of tokens from the vocab.json (slow method)\n",
370
  "start_search_at_index = 1700 # @param {type:\"slider\", min:0, max: 49407, step:100}\n",
371
- "# @markdown The lower the start_index, the more similiar the sampled tokens will be to the reference token \"girl\\</w>\"\n",
372
  "start_search_at_ID = start_search_at_index\n",
373
  "search_range = 100 # @param {type:\"slider\", min:100, max: 2000, step:0}\n",
374
  "restrictions = 'None' # @param [\"None\", \"Suffix only\", \"Prefix only\"]\n",
@@ -567,7 +565,22 @@
567
  ],
568
  "metadata": {
569
  "collapsed": true,
570
- "id": "fi0jRruI0-tu"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
571
  },
572
  "execution_count": null,
573
  "outputs": []
 
37
  "%cd /content/sd_tokens\n",
38
  "token = torch.load('sd15_tensors.pt', map_location=device, weights_only=True)\n",
39
  "#-----#\n",
40
+ "VOCAB_FILENAME = 'tokens_most_similiar_to_girl'\n",
41
+ "ACTIVE_IMG = ''\n",
42
+ "#-----#\n",
43
  "\n",
44
  "#Import the vocab.json\n",
45
  "import json\n",
 
133
  "tokenizer = AutoTokenizer.from_pretrained(\"openai/clip-vit-large-patch14\", clean_up_tokenization_spaces = False)\n",
134
  "\n",
135
  "# @markdown Write name of token to match against\n",
136
+ "token_name = \"banana\" # @param {type:'string',\"placeholder\":\"leave empty for random value token\"}\n",
137
+ "\n",
138
+ "prompt = token_name\n",
139
  "# @markdown (optional) Mix the token with something else\n",
140
  "mix_with = \"\" # @param {\"type\":\"string\",\"placeholder\":\"leave empty for random value token\"}\n",
141
  "mix_method = \"None\" # @param [\"None\" , \"Average\", \"Subtract\"] {allow-input: true}\n",
 
257
  "\n",
258
  "#The prompt will be enclosed with the <|start-of-text|> and <|end-of-text|> tokens, which is why output will be [49406, ... , 49407].\n",
259
  "\n",
260
+ "#You can leave the 'prompt' field empty to get a random value tensor. Since the tensor is random value, it will not correspond to any tensor in the vocab.json list , and this it will have no ID.\n",
261
+ "\n",
262
+ "# Save results as .db file\n",
263
+ "import shelve\n",
264
+ "VOCAB_FILENAME = 'tokens_most_similiar_to_' + name_A.replace('</w>','').strip()\n",
265
+ "d = shelve.open(VOCAB_FILENAME)\n",
266
+ "#NUM TOKENS == 49407\n",
267
+ "for index in range(NUM_TOKENS):\n",
268
+ " #print(d[f'{index}']) #<-----Use this to read values from the .db file\n",
269
+ " d[f'{index}']= vocab[indices[index].item()] #<---- write values to .db file\n",
270
+ "#----#\n",
271
+ "d.close() #close the file\n",
272
+ "# See this link for additional stuff to do with shelve: https://docs.python.org/3/library/shelve.html"
273
  ],
274
  "metadata": {
275
+ "id": "iWeFnT1gAx6A",
276
+ "cellView": "form"
277
  },
278
  "execution_count": null,
279
  "outputs": []
 
286
  "It takes a long while to check all the tokens (too long!) so this cell only samples a range of the 49K available tokens.\n",
287
  "\n",
288
  "You can run this cell, then paste the result into the 'must_contain' box , and then run the cell again.\n",
289
+ "\n",
290
+ "Check the sd_tokens folder for stored .db files from running the '⚡ Get similiar tokens' cell. These can be used in the ⚡+🖼️ -> 📝 Token-Sampling Image interrogator cell\n"
291
  ],
292
  "metadata": {
293
  "id": "IUCuV9RtQpBn"
 
296
  {
297
  "cell_type": "code",
298
  "source": [
299
+ "# @title ⚡+🖼️ -> 📝 Token-Sampling Image interrogator\n",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
300
  "#-----#\n",
301
  "import shelve\n",
302
  "db_vocab = shelve.open(VOCAB_FILENAME)\n",
303
  "# @markdown # What do you want to to mimic?\n",
304
+ "use = '🖼️image_encoding from image' # @param ['📝text_encoding from prompt', '🖼️image_encoding from image']\n",
305
  "# @markdown --------------------------\n",
306
  "use_token_padding = True # param {type:\"boolean\"} <---- Enabled by default\n",
307
  "prompt = \"photo of a banana\" # @param {\"type\":\"string\",\"placeholder\":\"Write a prompt\"}\n",
 
317
  " return list(uploaded.keys())\n",
318
  "#Get image\n",
319
  "# You can use \"http://images.cocodataset.org/val2017/000000039769.jpg\" for testing\n",
320
+ "image_url = \"\" # @param {\"type\":\"string\",\"placeholder\":\"leave empty for local upload (scroll down to see it)\"}\n",
321
  "colab_image_path = \"\" # @param {\"type\":\"string\",\"placeholder\": \"eval. as '/content/sd_tokens/' + **your input**\"}\n",
322
  "# @markdown --------------------------\n",
323
  "from PIL import Image\n",
 
366
  "# @markdown -----\n",
367
  "# @markdown # Use a range of tokens from the vocab.json (slow method)\n",
368
  "start_search_at_index = 1700 # @param {type:\"slider\", min:0, max: 49407, step:100}\n",
369
+ "# @markdown The lower the start_index, the more similiar the sampled tokens will be to the target token assigned in the '⚡ Get similiar tokens' cell\"\n",
370
  "start_search_at_ID = start_search_at_index\n",
371
  "search_range = 100 # @param {type:\"slider\", min:100, max: 2000, step:0}\n",
372
  "restrictions = 'None' # @param [\"None\", \"Suffix only\", \"Prefix only\"]\n",
 
565
  ],
566
  "metadata": {
567
  "collapsed": true,
568
+ "id": "fi0jRruI0-tu",
569
+ "cellView": "form"
570
+ },
571
+ "execution_count": null,
572
+ "outputs": []
573
+ },
574
+ {
575
+ "cell_type": "code",
576
+ "source": [
577
+ "# @title (Optional) ⚡Actively set which Vocab list to use for the interrogator\n",
578
+ "token_name = \"\" # @param {\"type\":\"string\",\"placeholder\":\"Write a token_name used earlier\"}\n",
579
+ "VOCAB_FILENAME = 'tokens_most_similiar_to_' + token_name.replace('</w>','').strip()\n",
580
+ "print(f'Using a vocab ordered to most similiar to the token {token_name}')"
581
+ ],
582
+ "metadata": {
583
+ "id": "FYa96UCQuE1U"
584
  },
585
  "execution_count": null,
586
  "outputs": []