├── README.md
├── all_imagenet.txt
├── feature_extraction.ipynb
├── figs_manuscript
├── Fig1.png
├── Fig10.png
├── Fig11.png
├── Fig12.png
├── Fig2.png
├── Fig3.png
├── Fig4.png
├── Fig5.png
├── Fig6.png
├── Fig7.png
├── Fig8.png
└── Fig9.png
├── figs_supplementary
├── Fig1.png
├── Fig10.png
├── Fig11.png
├── Fig12.png
├── Fig13.png
├── Fig14.png
├── Fig15.png
├── Fig2.png
├── Fig3.png
├── Fig4.png
├── Fig5.png
├── Fig6.png
├── Fig7.png
└── Fig8.png
├── media
├── 0001.gif
├── 0001.png
├── 0018.gif
├── 0018.png
├── 0038.gif
├── 0038.png
├── 0093.gif
├── 0093.png
├── _0038.gif
├── _0081.gif
├── _0081.png
├── _0094.gif
├── _0094.png
├── _0114.gif
├── _0114.png
├── _0197.gif
├── _0197.png
└── img.png
├── neural_decoding_faces.ipynb
├── neural_decoding_images.ipynb
├── neural_encoding.ipynb
├── poster.pdf
├── synthesis_faces.ipynb
├── synthesis_images.ipynb
└── tiny_imagenet.txt
/README.md:
--------------------------------------------------------------------------------
1 | # Brain2GAN
2 |
3 |
This repo accompanies the paper "Brain2GAN: Feature-disentangled neural coding of visual perception in the primate brain" where we aimed to characterize the high-level neural representations as recorded via cortical implants in a macaque. Our results show that feature-disentangled GAN latents outperform other candidate representations of the visual data in predicting high-level brain activity (i.e., neural encoding ). We then used these feature-disentangled representations to reconstruct the perceived stimuli from brain activity with state-of-the-art quality (i.e., neural decoding ). You can find our implementations of neural encoding and -decoding in the provided Jupyter notebooks. The brain recordings to achieve these results will be made available upon publication of the paper.
4 |
5 |
6 |
7 |
8 |
9 |
10 | ### Notebooks
11 |
12 |
13 | The following Jupyter notebooks are included in this repository:
14 |
15 |
16 | `synthesis_faces.ipynb `: This notebook contains the code used to generate the stimulus dataset of face images.
17 | `synthesis_images.ipynb `: This notebook contains the code used to generate the stimulus dataset of natural images.
18 | `feature_extraction.ipynb `: This notebook contains the code used to extract intermediate feature activations from VGG16 pretrained on face and object recognition for faces and natural images, respectively, as well as language-regularized CLIP latents.
19 | `neural_encoding.ipynb `: This notebook contains the code used to predict brain activity from feature representations of recent deep neural networks with different properties such as feature disentanglement and language regularization.
20 | `neural_decoding_faces.ipynb `: This notebook contains the code used to reconstruct perceived faces from brain activity.
21 | `neural_decoding_images.ipynb `: This notebook contains the code used to reconstruct perceived natural images from brain activity.
22 |
23 |
24 |
25 | ### Time-based neural decoding
26 | The use of intracranial recordings provided for spatiotemporal analysis of brain activity in unprecedented detail. The gifs illustrate how meaningful information gets extracted from the stimulus-evoked brain responses in time. Per trial, neural responses were recorded for 300 ms with stimulus onset at 100 ms. Prior to stimulus onset, the reconstruction is an average-looking image, after which it starts to take on an appearance that closely resembles the originally perceived stimulus.
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/all_imagenet.txt:
--------------------------------------------------------------------------------
1 | n02119789 1 kit_fox
2 | n02100735 2 English_setter
3 | n02110185 3 Siberian_husky
4 | n02096294 4 Australian_terrier
5 | n02102040 5 English_springer
6 | n02066245 6 grey_whale
7 | n02509815 7 lesser_panda
8 | n02124075 8 Egyptian_cat
9 | n02417914 9 ibex
10 | n02123394 10 Persian_cat
11 | n02125311 11 cougar
12 | n02423022 12 gazelle
13 | n02346627 13 porcupine
14 | n02077923 14 sea_lion
15 | n02110063 15 malamute
16 | n02447366 16 badger
17 | n02109047 17 Great_Dane
18 | n02089867 18 Walker_hound
19 | n02102177 19 Welsh_springer_spaniel
20 | n02091134 20 whippet
21 | n02092002 21 Scottish_deerhound
22 | n02071294 22 killer_whale
23 | n02442845 23 mink
24 | n02504458 24 African_elephant
25 | n02092339 25 Weimaraner
26 | n02098105 26 soft-coated_wheaten_terrier
27 | n02096437 27 Dandie_Dinmont
28 | n02114712 28 red_wolf
29 | n02105641 29 Old_English_sheepdog
30 | n02128925 30 jaguar
31 | n02091635 31 otterhound
32 | n02088466 32 bloodhound
33 | n02096051 33 Airedale
34 | n02117135 34 hyena
35 | n02138441 35 meerkat
36 | n02097130 36 giant_schnauzer
37 | n02493509 37 titi
38 | n02457408 38 three-toed_sloth
39 | n02389026 39 sorrel
40 | n02443484 40 black-footed_ferret
41 | n02110341 41 dalmatian
42 | n02089078 42 black-and-tan_coonhound
43 | n02086910 43 papillon
44 | n02445715 44 skunk
45 | n02093256 45 Staffordshire_bullterrier
46 | n02113978 46 Mexican_hairless
47 | n02106382 47 Bouvier_des_Flandres
48 | n02441942 48 weasel
49 | n02113712 49 miniature_poodle
50 | n02113186 50 Cardigan
51 | n02105162 51 malinois
52 | n02415577 52 bighorn
53 | n02356798 53 fox_squirrel
54 | n02488702 54 colobus
55 | n02123159 55 tiger_cat
56 | n02098413 56 Lhasa
57 | n02422699 57 impala
58 | n02114855 58 coyote
59 | n02094433 59 Yorkshire_terrier
60 | n02111277 60 Newfoundland
61 | n02132136 61 brown_bear
62 | n02119022 62 red_fox
63 | n02091467 63 Norwegian_elkhound
64 | n02106550 64 Rottweiler
65 | n02422106 65 hartebeest
66 | n02091831 66 Saluki
67 | n02120505 67 grey_fox
68 | n02104365 68 schipperke
69 | n02086079 69 Pekinese
70 | n02112706 70 Brabancon_griffon
71 | n02098286 71 West_Highland_white_terrier
72 | n02095889 72 Sealyham_terrier
73 | n02484975 73 guenon
74 | n02137549 74 mongoose
75 | n02500267 75 indri
76 | n02129604 76 tiger
77 | n02090721 77 Irish_wolfhound
78 | n02396427 78 wild_boar
79 | n02108000 79 EntleBucher
80 | n02391049 80 zebra
81 | n02412080 81 ram
82 | n02108915 82 French_bulldog
83 | n02480495 83 orangutan
84 | n02110806 84 basenji
85 | n02128385 85 leopard
86 | n02107683 86 Bernese_mountain_dog
87 | n02085936 87 Maltese_dog
88 | n02094114 88 Norfolk_terrier
89 | n02087046 89 toy_terrier
90 | n02100583 90 vizsla
91 | n02096177 91 cairn
92 | n02494079 92 squirrel_monkey
93 | n02105056 93 groenendael
94 | n02101556 94 clumber
95 | n02123597 95 Siamese_cat
96 | n02481823 96 chimpanzee
97 | n02105505 97 komondor
98 | n02088094 98 Afghan_hound
99 | n02085782 99 Japanese_spaniel
100 | n02489166 100 proboscis_monkey
101 | n02364673 101 guinea_pig
102 | n02114548 102 white_wolf
103 | n02134084 103 ice_bear
104 | n02480855 104 gorilla
105 | n02090622 105 borzoi
106 | n02113624 106 toy_poodle
107 | n02093859 107 Kerry_blue_terrier
108 | n02403003 108 ox
109 | n02097298 109 Scotch_terrier
110 | n02108551 110 Tibetan_mastiff
111 | n02493793 111 spider_monkey
112 | n02107142 112 Doberman
113 | n02096585 113 Boston_bull
114 | n02107574 114 Greater_Swiss_Mountain_dog
115 | n02107908 115 Appenzeller
116 | n02086240 116 Shih-Tzu
117 | n02102973 117 Irish_water_spaniel
118 | n02112018 118 Pomeranian
119 | n02093647 119 Bedlington_terrier
120 | n02397096 120 warthog
121 | n02437312 121 Arabian_camel
122 | n02483708 122 siamang
123 | n02097047 123 miniature_schnauzer
124 | n02106030 124 collie
125 | n02099601 125 golden_retriever
126 | n02093991 126 Irish_terrier
127 | n02110627 127 affenpinscher
128 | n02106166 128 Border_collie
129 | n02326432 129 hare
130 | n02108089 130 boxer
131 | n02097658 131 silky_terrier
132 | n02088364 132 beagle
133 | n02111129 133 Leonberg
134 | n02100236 134 German_short-haired_pointer
135 | n02486261 135 patas
136 | n02115913 136 dhole
137 | n02486410 137 baboon
138 | n02487347 138 macaque
139 | n02099849 139 Chesapeake_Bay_retriever
140 | n02108422 140 bull_mastiff
141 | n02104029 141 kuvasz
142 | n02492035 142 capuchin
143 | n02110958 143 pug
144 | n02099429 144 curly-coated_retriever
145 | n02094258 145 Norwich_terrier
146 | n02099267 146 flat-coated_retriever
147 | n02395406 147 hog
148 | n02112350 148 keeshond
149 | n02109961 149 Eskimo_dog
150 | n02101388 150 Brittany_spaniel
151 | n02113799 151 standard_poodle
152 | n02095570 152 Lakeland_terrier
153 | n02128757 153 snow_leopard
154 | n02101006 154 Gordon_setter
155 | n02115641 155 dingo
156 | n02097209 156 standard_schnauzer
157 | n02342885 157 hamster
158 | n02097474 158 Tibetan_terrier
159 | n02120079 159 Arctic_fox
160 | n02095314 160 wire-haired_fox_terrier
161 | n02088238 161 basset
162 | n02408429 162 water_buffalo
163 | n02133161 163 American_black_bear
164 | n02328150 164 Angora
165 | n02410509 165 bison
166 | n02492660 166 howler_monkey
167 | n02398521 167 hippopotamus
168 | n02112137 168 chow
169 | n02510455 169 giant_panda
170 | n02093428 170 American_Staffordshire_terrier
171 | n02105855 171 Shetland_sheepdog
172 | n02111500 172 Great_Pyrenees
173 | n02085620 173 Chihuahua
174 | n02123045 174 tabby
175 | n02490219 175 marmoset
176 | n02099712 176 Labrador_retriever
177 | n02109525 177 Saint_Bernard
178 | n02454379 178 armadillo
179 | n02111889 179 Samoyed
180 | n02088632 180 bluetick
181 | n02090379 181 redbone
182 | n02443114 182 polecat
183 | n02361337 183 marmot
184 | n02105412 184 kelpie
185 | n02483362 185 gibbon
186 | n02437616 186 llama
187 | n02107312 187 miniature_pinscher
188 | n02325366 188 wood_rabbit
189 | n02091032 189 Italian_greyhound
190 | n02129165 190 lion
191 | n02102318 191 cocker_spaniel
192 | n02100877 192 Irish_setter
193 | n02074367 193 dugong
194 | n02504013 194 Indian_elephant
195 | n02363005 195 beaver
196 | n02102480 196 Sussex_spaniel
197 | n02113023 197 Pembroke
198 | n02086646 198 Blenheim_spaniel
199 | n02497673 199 Madagascar_cat
200 | n02087394 200 Rhodesian_ridgeback
201 | n02127052 201 lynx
202 | n02116738 202 African_hunting_dog
203 | n02488291 203 langur
204 | n02091244 204 Ibizan_hound
205 | n02114367 205 timber_wolf
206 | n02130308 206 cheetah
207 | n02089973 207 English_foxhound
208 | n02105251 208 briard
209 | n02134418 209 sloth_bear
210 | n02093754 210 Border_terrier
211 | n02106662 211 German_shepherd
212 | n02444819 212 otter
213 | n01882714 213 koala
214 | n01871265 214 tusker
215 | n01872401 215 echidna
216 | n01877812 216 wallaby
217 | n01873310 217 platypus
218 | n01883070 218 wombat
219 | n04086273 219 revolver
220 | n04507155 220 umbrella
221 | n04147183 221 schooner
222 | n04254680 222 soccer_ball
223 | n02672831 223 accordion
224 | n02219486 224 ant
225 | n02317335 225 starfish
226 | n01968897 226 chambered_nautilus
227 | n03452741 227 grand_piano
228 | n03642806 228 laptop
229 | n07745940 229 strawberry
230 | n02690373 230 airliner
231 | n04552348 231 warplane
232 | n02692877 232 airship
233 | n02782093 233 balloon
234 | n04266014 234 space_shuttle
235 | n03344393 235 fireboat
236 | n03447447 236 gondola
237 | n04273569 237 speedboat
238 | n03662601 238 lifeboat
239 | n02951358 239 canoe
240 | n04612504 240 yawl
241 | n02981792 241 catamaran
242 | n04483307 242 trimaran
243 | n03095699 243 container_ship
244 | n03673027 244 liner
245 | n03947888 245 pirate
246 | n02687172 246 aircraft_carrier
247 | n04347754 247 submarine
248 | n04606251 248 wreck
249 | n03478589 249 half_track
250 | n04389033 250 tank
251 | n03773504 251 missile
252 | n02860847 252 bobsled
253 | n03218198 253 dogsled
254 | n02835271 254 bicycle-built-for-two
255 | n03792782 255 mountain_bike
256 | n03393912 256 freight_car
257 | n03895866 257 passenger_car
258 | n02797295 258 barrow
259 | n04204347 259 shopping_cart
260 | n03791053 260 motor_scooter
261 | n03384352 261 forklift
262 | n03272562 262 electric_locomotive
263 | n04310018 263 steam_locomotive
264 | n02704792 264 amphibian
265 | n02701002 265 ambulance
266 | n02814533 266 beach_wagon
267 | n02930766 267 cab
268 | n03100240 268 convertible
269 | n03594945 269 jeep
270 | n03670208 270 limousine
271 | n03770679 271 minivan
272 | n03777568 272 Model_T
273 | n04037443 273 racer
274 | n04285008 274 sports_car
275 | n03444034 275 go-kart
276 | n03445924 276 golfcart
277 | n03785016 277 moped
278 | n04252225 278 snowplow
279 | n03345487 279 fire_engine
280 | n03417042 280 garbage_truck
281 | n03930630 281 pickup
282 | n04461696 282 tow_truck
283 | n04467665 283 trailer_truck
284 | n03796401 284 moving_van
285 | n03977966 285 police_van
286 | n04065272 286 recreational_vehicle
287 | n04335435 287 streetcar
288 | n04252077 288 snowmobile
289 | n04465501 289 tractor
290 | n03776460 290 mobile_home
291 | n04482393 291 tricycle
292 | n04509417 292 unicycle
293 | n03538406 293 horse_cart
294 | n03599486 294 jinrikisha
295 | n03868242 295 oxcart
296 | n02804414 296 bassinet
297 | n03125729 297 cradle
298 | n03131574 298 crib
299 | n03388549 299 four-poster
300 | n02870880 300 bookcase
301 | n03018349 301 china_cabinet
302 | n03742115 302 medicine_chest
303 | n03016953 303 chiffonier
304 | n04380533 304 table_lamp
305 | n03337140 305 file
306 | n03891251 306 park_bench
307 | n02791124 307 barber_chair
308 | n04429376 308 throne
309 | n03376595 309 folding_chair
310 | n04099969 310 rocking_chair
311 | n04344873 311 studio_couch
312 | n04447861 312 toilet_seat
313 | n03179701 313 desk
314 | n03982430 314 pool_table
315 | n03201208 315 dining_table
316 | n03290653 316 entertainment_center
317 | n04550184 317 wardrobe
318 | n07742313 318 Granny_Smith
319 | n07747607 319 orange
320 | n07749582 320 lemon
321 | n07753113 321 fig
322 | n07753275 322 pineapple
323 | n07753592 323 banana
324 | n07754684 324 jackfruit
325 | n07760859 325 custard_apple
326 | n07768694 326 pomegranate
327 | n12267677 327 acorn
328 | n12620546 328 hip
329 | n13133613 329 ear
330 | n11879895 330 rapeseed
331 | n12144580 331 corn
332 | n12768682 332 buckeye
333 | n03854065 333 organ
334 | n04515003 334 upright
335 | n03017168 335 chime
336 | n03249569 336 drum
337 | n03447721 337 gong
338 | n03720891 338 maraca
339 | n03721384 339 marimba
340 | n04311174 340 steel_drum
341 | n02787622 341 banjo
342 | n02992211 342 cello
343 | n04536866 343 violin
344 | n03495258 344 harp
345 | n02676566 345 acoustic_guitar
346 | n03272010 346 electric_guitar
347 | n03110669 347 cornet
348 | n03394916 348 French_horn
349 | n04487394 349 trombone
350 | n03494278 350 harmonica
351 | n03840681 351 ocarina
352 | n03884397 352 panpipe
353 | n02804610 353 bassoon
354 | n03838899 354 oboe
355 | n04141076 355 sax
356 | n03372029 356 flute
357 | n11939491 357 daisy
358 | n12057211 358 yellow_lady's_slipper
359 | n09246464 359 cliff
360 | n09468604 360 valley
361 | n09193705 361 alp
362 | n09472597 362 volcano
363 | n09399592 363 promontory
364 | n09421951 364 sandbar
365 | n09256479 365 coral_reef
366 | n09332890 366 lakeside
367 | n09428293 367 seashore
368 | n09288635 368 geyser
369 | n03498962 369 hatchet
370 | n03041632 370 cleaver
371 | n03658185 371 letter_opener
372 | n03954731 372 plane
373 | n03995372 373 power_drill
374 | n03649909 374 lawn_mower
375 | n03481172 375 hammer
376 | n03109150 376 corkscrew
377 | n02951585 377 can_opener
378 | n03970156 378 plunger
379 | n04154565 379 screwdriver
380 | n04208210 380 shovel
381 | n03967562 381 plow
382 | n03000684 382 chain_saw
383 | n01514668 383 cock
384 | n01514859 384 hen
385 | n01518878 385 ostrich
386 | n01530575 386 brambling
387 | n01531178 387 goldfinch
388 | n01532829 388 house_finch
389 | n01534433 389 junco
390 | n01537544 390 indigo_bunting
391 | n01558993 391 robin
392 | n01560419 392 bulbul
393 | n01580077 393 jay
394 | n01582220 394 magpie
395 | n01592084 395 chickadee
396 | n01601694 396 water_ouzel
397 | n01608432 397 kite
398 | n01614925 398 bald_eagle
399 | n01616318 399 vulture
400 | n01622779 400 great_grey_owl
401 | n01795545 401 black_grouse
402 | n01796340 402 ptarmigan
403 | n01797886 403 ruffed_grouse
404 | n01798484 404 prairie_chicken
405 | n01806143 405 peacock
406 | n01806567 406 quail
407 | n01807496 407 partridge
408 | n01817953 408 African_grey
409 | n01818515 409 macaw
410 | n01819313 410 sulphur-crested_cockatoo
411 | n01820546 411 lorikeet
412 | n01824575 412 coucal
413 | n01828970 413 bee_eater
414 | n01829413 414 hornbill
415 | n01833805 415 hummingbird
416 | n01843065 416 jacamar
417 | n01843383 417 toucan
418 | n01847000 418 drake
419 | n01855032 419 red-breasted_merganser
420 | n01855672 420 goose
421 | n01860187 421 black_swan
422 | n02002556 422 white_stork
423 | n02002724 423 black_stork
424 | n02006656 424 spoonbill
425 | n02007558 425 flamingo
426 | n02009912 426 American_egret
427 | n02009229 427 little_blue_heron
428 | n02011460 428 bittern
429 | n02012849 429 crane
430 | n02013706 430 limpkin
431 | n02018207 431 American_coot
432 | n02018795 432 bustard
433 | n02025239 433 ruddy_turnstone
434 | n02027492 434 red-backed_sandpiper
435 | n02028035 435 redshank
436 | n02033041 436 dowitcher
437 | n02037110 437 oystercatcher
438 | n02017213 438 European_gallinule
439 | n02051845 439 pelican
440 | n02056570 440 king_penguin
441 | n02058221 441 albatross
442 | n01484850 442 great_white_shark
443 | n01491361 443 tiger_shark
444 | n01494475 444 hammerhead
445 | n01496331 445 electric_ray
446 | n01498041 446 stingray
447 | n02514041 447 barracouta
448 | n02536864 448 coho
449 | n01440764 449 tench
450 | n01443537 450 goldfish
451 | n02526121 451 eel
452 | n02606052 452 rock_beauty
453 | n02607072 453 anemone_fish
454 | n02643566 454 lionfish
455 | n02655020 455 puffer
456 | n02640242 456 sturgeon
457 | n02641379 457 gar
458 | n01664065 458 loggerhead
459 | n01665541 459 leatherback_turtle
460 | n01667114 460 mud_turtle
461 | n01667778 461 terrapin
462 | n01669191 462 box_turtle
463 | n01675722 463 banded_gecko
464 | n01677366 464 common_iguana
465 | n01682714 465 American_chameleon
466 | n01685808 466 whiptail
467 | n01687978 467 agama
468 | n01688243 468 frilled_lizard
469 | n01689811 469 alligator_lizard
470 | n01692333 470 Gila_monster
471 | n01693334 471 green_lizard
472 | n01694178 472 African_chameleon
473 | n01695060 473 Komodo_dragon
474 | n01704323 474 triceratops
475 | n01697457 475 African_crocodile
476 | n01698640 476 American_alligator
477 | n01728572 477 thunder_snake
478 | n01728920 478 ringneck_snake
479 | n01729322 479 hognose_snake
480 | n01729977 480 green_snake
481 | n01734418 481 king_snake
482 | n01735189 482 garter_snake
483 | n01737021 483 water_snake
484 | n01739381 484 vine_snake
485 | n01740131 485 night_snake
486 | n01742172 486 boa_constrictor
487 | n01744401 487 rock_python
488 | n01748264 488 Indian_cobra
489 | n01749939 489 green_mamba
490 | n01751748 490 sea_snake
491 | n01753488 491 horned_viper
492 | n01755581 492 diamondback
493 | n01756291 493 sidewinder
494 | n01629819 494 European_fire_salamander
495 | n01630670 495 common_newt
496 | n01631663 496 eft
497 | n01632458 497 spotted_salamander
498 | n01632777 498 axolotl
499 | n01641577 499 bullfrog
500 | n01644373 500 tree_frog
501 | n01644900 501 tailed_frog
502 | n04579432 502 whistle
503 | n04592741 503 wing
504 | n03876231 504 paintbrush
505 | n03483316 505 hand_blower
506 | n03868863 506 oxygen_mask
507 | n04251144 507 snorkel
508 | n03691459 508 loudspeaker
509 | n03759954 509 microphone
510 | n04152593 510 screen
511 | n03793489 511 mouse
512 | n03271574 512 electric_fan
513 | n03843555 513 oil_filter
514 | n04332243 514 strainer
515 | n04265275 515 space_heater
516 | n04330267 516 stove
517 | n03467068 517 guillotine
518 | n02794156 518 barometer
519 | n04118776 519 rule
520 | n03841143 520 odometer
521 | n04141975 521 scale
522 | n02708093 522 analog_clock
523 | n03196217 523 digital_clock
524 | n04548280 524 wall_clock
525 | n03544143 525 hourglass
526 | n04355338 526 sundial
527 | n03891332 527 parking_meter
528 | n04328186 528 stopwatch
529 | n03197337 529 digital_watch
530 | n04317175 530 stethoscope
531 | n04376876 531 syringe
532 | n03706229 532 magnetic_compass
533 | n02841315 533 binoculars
534 | n04009552 534 projector
535 | n04356056 535 sunglasses
536 | n03692522 536 loupe
537 | n04044716 537 radio_telescope
538 | n02879718 538 bow
539 | n02950826 539 cannon
540 | n02749479 540 assault_rifle
541 | n04090263 541 rifle
542 | n04008634 542 projectile
543 | n03085013 543 computer_keyboard
544 | n04505470 544 typewriter_keyboard
545 | n03126707 545 crane
546 | n03666591 546 lighter
547 | n02666196 547 abacus
548 | n02977058 548 cash_machine
549 | n04238763 549 slide_rule
550 | n03180011 550 desktop_computer
551 | n03485407 551 hand-held_computer
552 | n03832673 552 notebook
553 | n06359193 553 web_site
554 | n03496892 554 harvester
555 | n04428191 555 thresher
556 | n04004767 556 printer
557 | n04243546 557 slot
558 | n04525305 558 vending_machine
559 | n04179913 559 sewing_machine
560 | n03602883 560 joystick
561 | n04372370 561 switch
562 | n03532672 562 hook
563 | n02974003 563 car_wheel
564 | n03874293 564 paddlewheel
565 | n03944341 565 pinwheel
566 | n03992509 566 potter's_wheel
567 | n03425413 567 gas_pump
568 | n02966193 568 carousel
569 | n04371774 569 swing
570 | n04067472 570 reel
571 | n04040759 571 radiator
572 | n04019541 572 puck
573 | n03492542 573 hard_disc
574 | n04355933 574 sunglass
575 | n03929660 575 pick
576 | n02965783 576 car_mirror
577 | n04258138 577 solar_dish
578 | n04074963 578 remote_control
579 | n03208938 579 disk_brake
580 | n02910353 580 buckle
581 | n03476684 581 hair_slide
582 | n03627232 582 knot
583 | n03075370 583 combination_lock
584 | n03874599 584 padlock
585 | n03804744 585 nail
586 | n04127249 586 safety_pin
587 | n04153751 587 screw
588 | n03803284 588 muzzle
589 | n04162706 589 seat_belt
590 | n04228054 590 ski
591 | n02948072 591 candle
592 | n03590841 592 jack-o'-lantern
593 | n04286575 593 spotlight
594 | n04456115 594 torch
595 | n03814639 595 neck_brace
596 | n03933933 596 pier
597 | n04485082 597 tripod
598 | n03733131 598 maypole
599 | n03794056 599 mousetrap
600 | n04275548 600 spider_web
601 | n01768244 601 trilobite
602 | n01770081 602 harvestman
603 | n01770393 603 scorpion
604 | n01773157 604 black_and_gold_garden_spider
605 | n01773549 605 barn_spider
606 | n01773797 606 garden_spider
607 | n01774384 607 black_widow
608 | n01774750 608 tarantula
609 | n01775062 609 wolf_spider
610 | n01776313 610 tick
611 | n01784675 611 centipede
612 | n01990800 612 isopod
613 | n01978287 613 Dungeness_crab
614 | n01978455 614 rock_crab
615 | n01980166 615 fiddler_crab
616 | n01981276 616 king_crab
617 | n01983481 617 American_lobster
618 | n01984695 618 spiny_lobster
619 | n01985128 619 crayfish
620 | n01986214 620 hermit_crab
621 | n02165105 621 tiger_beetle
622 | n02165456 622 ladybug
623 | n02167151 623 ground_beetle
624 | n02168699 624 long-horned_beetle
625 | n02169497 625 leaf_beetle
626 | n02172182 626 dung_beetle
627 | n02174001 627 rhinoceros_beetle
628 | n02177972 628 weevil
629 | n02190166 629 fly
630 | n02206856 630 bee
631 | n02226429 631 grasshopper
632 | n02229544 632 cricket
633 | n02231487 633 walking_stick
634 | n02233338 634 cockroach
635 | n02236044 635 mantis
636 | n02256656 636 cicada
637 | n02259212 637 leafhopper
638 | n02264363 638 lacewing
639 | n02268443 639 dragonfly
640 | n02268853 640 damselfly
641 | n02276258 641 admiral
642 | n02277742 642 ringlet
643 | n02279972 643 monarch
644 | n02280649 644 cabbage_butterfly
645 | n02281406 645 sulphur_butterfly
646 | n02281787 646 lycaenid
647 | n01910747 647 jellyfish
648 | n01914609 648 sea_anemone
649 | n01917289 649 brain_coral
650 | n01924916 650 flatworm
651 | n01930112 651 nematode
652 | n01943899 652 conch
653 | n01944390 653 snail
654 | n01945685 654 slug
655 | n01950731 655 sea_slug
656 | n01955084 656 chiton
657 | n02319095 657 sea_urchin
658 | n02321529 658 sea_cucumber
659 | n03584829 659 iron
660 | n03297495 660 espresso_maker
661 | n03761084 661 microwave
662 | n03259280 662 Dutch_oven
663 | n04111531 663 rotisserie
664 | n04442312 664 toaster
665 | n04542943 665 waffle_iron
666 | n04517823 666 vacuum
667 | n03207941 667 dishwasher
668 | n04070727 668 refrigerator
669 | n04554684 669 washer
670 | n03133878 670 Crock_Pot
671 | n03400231 671 frying_pan
672 | n04596742 672 wok
673 | n02939185 673 caldron
674 | n03063689 674 coffeepot
675 | n04398044 675 teapot
676 | n04270147 676 spatula
677 | n02699494 677 altar
678 | n04486054 678 triumphal_arch
679 | n03899768 679 patio
680 | n04311004 680 steel_arch_bridge
681 | n04366367 681 suspension_bridge
682 | n04532670 682 viaduct
683 | n02793495 683 barn
684 | n03457902 684 greenhouse
685 | n03877845 685 palace
686 | n03781244 686 monastery
687 | n03661043 687 library
688 | n02727426 688 apiary
689 | n02859443 689 boathouse
690 | n03028079 690 church
691 | n03788195 691 mosque
692 | n04346328 692 stupa
693 | n03956157 693 planetarium
694 | n04081281 694 restaurant
695 | n03032252 695 cinema
696 | n03529860 696 home_theater
697 | n03697007 697 lumbermill
698 | n03065424 698 coil
699 | n03837869 699 obelisk
700 | n04458633 700 totem_pole
701 | n02980441 701 castle
702 | n04005630 702 prison
703 | n03461385 703 grocery_store
704 | n02776631 704 bakery
705 | n02791270 705 barbershop
706 | n02871525 706 bookshop
707 | n02927161 707 butcher_shop
708 | n03089624 708 confectionery
709 | n04200800 709 shoe_shop
710 | n04443257 710 tobacco_shop
711 | n04462240 711 toyshop
712 | n03388043 712 fountain
713 | n03042490 713 cliff_dwelling
714 | n04613696 714 yurt
715 | n03216828 715 dock
716 | n02892201 716 brass
717 | n03743016 717 megalith
718 | n02788148 718 bannister
719 | n02894605 719 breakwater
720 | n03160309 720 dam
721 | n03000134 721 chainlink_fence
722 | n03930313 722 picket_fence
723 | n04604644 723 worm_fence
724 | n04326547 724 stone_wall
725 | n03459775 725 grille
726 | n04239074 726 sliding_door
727 | n04501370 727 turnstile
728 | n03792972 728 mountain_tent
729 | n04149813 729 scoreboard
730 | n03530642 730 honeycomb
731 | n03961711 731 plate_rack
732 | n03903868 732 pedestal
733 | n02814860 733 beacon
734 | n07711569 734 mashed_potato
735 | n07720875 735 bell_pepper
736 | n07714571 736 head_cabbage
737 | n07714990 737 broccoli
738 | n07715103 738 cauliflower
739 | n07716358 739 zucchini
740 | n07716906 740 spaghetti_squash
741 | n07717410 741 acorn_squash
742 | n07717556 742 butternut_squash
743 | n07718472 743 cucumber
744 | n07718747 744 artichoke
745 | n07730033 745 cardoon
746 | n07734744 746 mushroom
747 | n04209239 747 shower_curtain
748 | n03594734 748 jean
749 | n02971356 749 carton
750 | n03485794 750 handkerchief
751 | n04133789 751 sandal
752 | n02747177 752 ashcan
753 | n04125021 753 safe
754 | n07579787 754 plate
755 | n03814906 755 necklace
756 | n03134739 756 croquet_ball
757 | n03404251 757 fur_coat
758 | n04423845 758 thimble
759 | n03877472 759 pajama
760 | n04120489 760 running_shoe
761 | n03062245 761 cocktail_shaker
762 | n03014705 762 chest
763 | n03717622 763 manhole_cover
764 | n03777754 764 modem
765 | n04493381 765 tub
766 | n04476259 766 tray
767 | n02777292 767 balance_beam
768 | n07693725 768 bagel
769 | n03998194 769 prayer_rug
770 | n03617480 770 kimono
771 | n07590611 771 hot_pot
772 | n04579145 772 whiskey_jug
773 | n03623198 773 knee_pad
774 | n07248320 774 book_jacket
775 | n04277352 775 spindle
776 | n04229816 776 ski_mask
777 | n02823428 777 beer_bottle
778 | n03127747 778 crash_helmet
779 | n02877765 779 bottlecap
780 | n04435653 780 tile_roof
781 | n03724870 781 mask
782 | n03710637 782 maillot
783 | n03920288 783 Petri_dish
784 | n03379051 784 football_helmet
785 | n02807133 785 bathing_cap
786 | n04399382 786 teddy
787 | n03527444 787 holster
788 | n03983396 788 pop_bottle
789 | n03924679 789 photocopier
790 | n04532106 790 vestment
791 | n06785654 791 crossword_puzzle
792 | n03445777 792 golf_ball
793 | n07613480 793 trifle
794 | n04350905 794 suit
795 | n04562935 795 water_tower
796 | n03325584 796 feather_boa
797 | n03045698 797 cloak
798 | n07892512 798 red_wine
799 | n03250847 799 drumstick
800 | n04192698 800 shield
801 | n03026506 801 Christmas_stocking
802 | n03534580 802 hoopskirt
803 | n07565083 803 menu
804 | n04296562 804 stage
805 | n02869837 805 bonnet
806 | n07871810 806 meat_loaf
807 | n02799071 807 baseball
808 | n03314780 808 face_powder
809 | n04141327 809 scabbard
810 | n04357314 810 sunscreen
811 | n02823750 811 beer_glass
812 | n13052670 812 hen-of-the-woods
813 | n07583066 813 guacamole
814 | n03637318 814 lampshade
815 | n04599235 815 wool
816 | n07802026 816 hay
817 | n02883205 817 bow_tie
818 | n03709823 818 mailbag
819 | n04560804 819 water_jug
820 | n02909870 820 bucket
821 | n03207743 821 dishrag
822 | n04263257 822 soup_bowl
823 | n07932039 823 eggnog
824 | n03786901 824 mortar
825 | n04479046 825 trench_coat
826 | n03873416 826 paddle
827 | n02999410 827 chain
828 | n04367480 828 swab
829 | n03775546 829 mixing_bowl
830 | n07875152 830 potpie
831 | n04591713 831 wine_bottle
832 | n04201297 832 shoji
833 | n02916936 833 bulletproof_vest
834 | n03240683 834 drilling_platform
835 | n02840245 835 binder
836 | n02963159 836 cardigan
837 | n04370456 837 sweatshirt
838 | n03991062 838 pot
839 | n02843684 839 birdhouse
840 | n03482405 840 hamper
841 | n03942813 841 ping-pong_ball
842 | n03908618 842 pencil_box
843 | n03902125 843 pay-phone
844 | n07584110 844 consomme
845 | n02730930 845 apron
846 | n04023962 846 punching_bag
847 | n02769748 847 backpack
848 | n10148035 848 groom
849 | n02817516 849 bearskin
850 | n03908714 850 pencil_sharpener
851 | n02906734 851 broom
852 | n03788365 852 mosquito_net
853 | n02667093 853 abaya
854 | n03787032 854 mortarboard
855 | n03980874 855 poncho
856 | n03141823 856 crutch
857 | n03976467 857 Polaroid_camera
858 | n04264628 858 space_bar
859 | n07930864 859 cup
860 | n04039381 860 racket
861 | n06874185 861 traffic_light
862 | n04033901 862 quill
863 | n04041544 863 radio
864 | n07860988 864 dough
865 | n03146219 865 cuirass
866 | n03763968 866 military_uniform
867 | n03676483 867 lipstick
868 | n04209133 868 shower_cap
869 | n03782006 869 monitor
870 | n03857828 870 oscilloscope
871 | n03775071 871 mitten
872 | n02892767 872 brassiere
873 | n07684084 873 French_loaf
874 | n04522168 874 vase
875 | n03764736 875 milk_can
876 | n04118538 876 rugby_ball
877 | n03887697 877 paper_towel
878 | n13044778 878 earthstar
879 | n03291819 879 envelope
880 | n03770439 880 miniskirt
881 | n03124170 881 cowboy_hat
882 | n04487081 882 trolleybus
883 | n03916031 883 perfume
884 | n02808440 884 bathtub
885 | n07697537 885 hotdog
886 | n12985857 886 coral_fungus
887 | n02917067 887 bullet_train
888 | n03938244 888 pillow
889 | n15075141 889 toilet_tissue
890 | n02978881 890 cassette
891 | n02966687 891 carpenter's_kit
892 | n03633091 892 ladle
893 | n13040303 893 stinkhorn
894 | n03690938 894 lotion
895 | n03476991 895 hair_spray
896 | n02669723 896 academic_gown
897 | n03220513 897 dome
898 | n03127925 898 crate
899 | n04584207 899 wig
900 | n07880968 900 burrito
901 | n03937543 901 pill_bottle
902 | n03000247 902 chain_mail
903 | n04418357 903 theater_curtain
904 | n04590129 904 window_shade
905 | n02795169 905 barrel
906 | n04553703 906 washbasin
907 | n02783161 907 ballpoint
908 | n02802426 908 basketball
909 | n02808304 909 bath_towel
910 | n03124043 910 cowboy_boot
911 | n03450230 911 gown
912 | n04589890 912 window_screen
913 | n12998815 913 agaric
914 | n02992529 914 cellular_telephone
915 | n03825788 915 nipple
916 | n02790996 916 barbell
917 | n03710193 917 mailbox
918 | n03630383 918 lab_coat
919 | n03347037 919 fire_screen
920 | n03769881 920 minibus
921 | n03871628 921 packet
922 | n03733281 922 maze
923 | n03976657 923 pole
924 | n03535780 924 horizontal_bar
925 | n04259630 925 sombrero
926 | n03929855 926 pickelhaube
927 | n04049303 927 rain_barrel
928 | n04548362 928 wallet
929 | n02979186 929 cassette_player
930 | n06596364 930 comic_book
931 | n03935335 931 piggy_bank
932 | n06794110 932 street_sign
933 | n02825657 933 bell_cote
934 | n03388183 934 fountain_pen
935 | n04591157 935 Windsor_tie
936 | n04540053 936 volleyball
937 | n03866082 937 overskirt
938 | n04136333 938 sarong
939 | n04026417 939 purse
940 | n02865351 940 bolo_tie
941 | n02834397 941 bib
942 | n03888257 942 parachute
943 | n04235860 943 sleeping_bag
944 | n04404412 944 television
945 | n04371430 945 swimming_trunks
946 | n03733805 946 measuring_cup
947 | n07920052 947 espresso
948 | n07873807 948 pizza
949 | n02895154 949 breastplate
950 | n04204238 950 shopping_basket
951 | n04597913 951 wooden_spoon
952 | n04131690 952 saltshaker
953 | n07836838 953 chocolate_sauce
954 | n09835506 954 ballplayer
955 | n03443371 955 goblet
956 | n13037406 956 gyromitra
957 | n04336792 957 stretcher
958 | n04557648 958 water_bottle
959 | n03187595 959 dial_telephone
960 | n04254120 960 soap_dispenser
961 | n03595614 961 jersey
962 | n04146614 962 school_bus
963 | n03598930 963 jigsaw_puzzle
964 | n03958227 964 plastic_bag
965 | n04069434 965 reflex_camera
966 | n03188531 966 diaper
967 | n02786058 967 Band_Aid
968 | n07615774 968 ice_lolly
969 | n04525038 969 velvet
970 | n04409515 970 tennis_ball
971 | n03424325 971 gasmask
972 | n03223299 972 doormat
973 | n03680355 973 Loafer
974 | n07614500 974 ice_cream
975 | n07695742 975 pretzel
976 | n04033995 976 quilt
977 | n03710721 977 maillot
978 | n04392985 978 tape_player
979 | n03047690 979 clog
980 | n03584254 980 iPod
981 | n13054560 981 bolete
982 | n10565667 982 scuba_diver
983 | n03950228 983 pitcher
984 | n03729826 984 matchstick
985 | n02837789 985 bikini
986 | n04254777 986 sock
987 | n02988304 987 CD_player
988 | n03657121 988 lens_cap
989 | n04417672 989 thatch
990 | n04523525 990 vault
991 | n02815834 991 beaker
992 | n09229709 992 bubble
993 | n07697313 993 cheeseburger
994 | n03888605 994 parallel_bars
995 | n03355925 995 flagpole
996 | n03063599 996 coffee_mug
997 | n04116512 997 rubber_eraser
998 | n04325704 998 stole
999 | n07831146 999 carbonara
1000 | n03255030 1000 dumbbell
--------------------------------------------------------------------------------
/feature_extraction.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "nbformat": 4,
3 | "nbformat_minor": 0,
4 | "metadata": {
5 | "colab": {
6 | "provenance": []
7 | },
8 | "kernelspec": {
9 | "name": "python3",
10 | "display_name": "Python 3"
11 | },
12 | "language_info": {
13 | "name": "python"
14 | }
15 | },
16 | "cells": [
17 | {
18 | "cell_type": "code",
19 | "execution_count": null,
20 | "metadata": {
21 | "id": "d_aRYpLUgc5X"
22 | },
23 | "outputs": [],
24 | "source": [
25 | "from google.colab import drive\n",
26 | "drive.mount('/content/drive')"
27 | ]
28 | },
29 | {
30 | "cell_type": "code",
31 | "source": [
32 | "! wget http://www.robots.ox.ac.uk/~vgg/software/vgg_face/src/vgg_face_torch.tar.gz\n",
33 | "! tar -xvf vgg_face_torch.tar.gz\n",
34 | "! pip install torchfile\n",
35 | "! pip install ftfy regex tqdm\n",
36 | "! pip install git+https://github.com/openai/CLIP.git"
37 | ],
38 | "metadata": {
39 | "id": "xHoci5A0gvMe"
40 | },
41 | "execution_count": null,
42 | "outputs": []
43 | },
44 | {
45 | "cell_type": "code",
46 | "source": [
47 | "import torch\n",
48 | "from torchvision import transforms\n",
49 | "import numpy as np\n",
50 | "from PIL import Image\n",
51 | "import torch.nn as nn\n",
52 | "import torch.nn.functional as F\n",
53 | "import torchfile\n",
54 | "from PIL import Image\n",
55 | "from scipy import signal"
56 | ],
57 | "metadata": {
58 | "id": "PMTzEYw3ghyk"
59 | },
60 | "execution_count": null,
61 | "outputs": []
62 | },
63 | {
64 | "cell_type": "code",
65 | "source": [
66 | "def kernel(n):\n",
67 | " x, y = np.meshgrid(np.linspace(-1, 1, n), np.linspace(-1, 1, n))\n",
68 | " dst = np.sqrt(x*x + y*y)\n",
69 | " sigma = 1\n",
70 | " muu = 0.000\n",
71 | " return np.exp(-((dst-muu) ** 2 / ( 2.0 * sigma**2)))\n",
72 | "\n",
73 | "\n",
74 | "def downsample(filters, layer):\n",
75 | " ds = [56, 28]\n",
76 | " result = np.zeros((filters.shape[1], ds[layer], ds[layer]))\n",
77 | " for filter in range(filters.shape[1]):\n",
78 | " result[filter] = signal.convolve(filters[0, filter], kernel(2), mode=\"same\")[::2, ::2]\n",
79 | " return result[None]"
80 | ],
81 | "metadata": {
82 | "id": "35QLdY0MCaZG"
83 | },
84 | "execution_count": null,
85 | "outputs": []
86 | },
87 | {
88 | "cell_type": "markdown",
89 | "source": [
90 | "# Faces (StyleGAN3)"
91 | ],
92 | "metadata": {
93 | "id": "P0FDBqefgrsK"
94 | }
95 | },
96 | {
97 | "cell_type": "markdown",
98 | "source": [
99 | "### VGG16 for face recognition"
100 | ],
101 | "metadata": {
102 | "id": "XbcmKtZ2me9A"
103 | }
104 | },
105 | {
106 | "cell_type": "code",
107 | "source": [
108 | "class VGG_16(nn.Module):\n",
109 | " def __init__(self):\n",
110 | " super().__init__()\n",
111 | " self.block_size = [2, 2, 3, 3, 3]\n",
112 | " self.conv_1_1 = nn.Conv2d(3, 64, 3, stride=1, padding=1)\n",
113 | " self.conv_1_2 = nn.Conv2d(64, 64, 3, stride=1, padding=1)\n",
114 | " self.conv_2_1 = nn.Conv2d(64, 128, 3, stride=1, padding=1)\n",
115 | " self.conv_2_2 = nn.Conv2d(128, 128, 3, stride=1, padding=1)\n",
116 | " self.conv_3_1 = nn.Conv2d(128, 256, 3, stride=1, padding=1)\n",
117 | " self.conv_3_2 = nn.Conv2d(256, 256, 3, stride=1, padding=1)\n",
118 | " self.conv_3_3 = nn.Conv2d(256, 256, 3, stride=1, padding=1)\n",
119 | " self.conv_4_1 = nn.Conv2d(256, 512, 3, stride=1, padding=1)\n",
120 | " self.conv_4_2 = nn.Conv2d(512, 512, 3, stride=1, padding=1)\n",
121 | " self.conv_4_3 = nn.Conv2d(512, 512, 3, stride=1, padding=1)\n",
122 | " self.conv_5_1 = nn.Conv2d(512, 512, 3, stride=1, padding=1)\n",
123 | " self.conv_5_2 = nn.Conv2d(512, 512, 3, stride=1, padding=1)\n",
124 | " self.conv_5_3 = nn.Conv2d(512, 512, 3, stride=1, padding=1)\n",
125 | " self.fc6 = nn.Linear(512 * 7 * 7, 4096)\n",
126 | " self.fc7 = nn.Linear(4096, 4096)\n",
127 | " self.fc8 = nn.Linear(4096, 2622)\n",
128 | "\n",
129 | " def load_weights(self, path=\"/content/vgg_face_torch/VGG_FACE.t7\"):\n",
130 | " model = torchfile.load(path)\n",
131 | " counter = 1\n",
132 | " block = 1\n",
133 | " for i, layer in enumerate(model.modules):\n",
134 | " if layer.weight is not None:\n",
135 | " if block <= 5:\n",
136 | " self_layer = getattr(self, \"conv_%d_%d\" % (block, counter))\n",
137 | " counter += 1\n",
138 | " if counter > self.block_size[block - 1]:\n",
139 | " counter = 1\n",
140 | " block += 1\n",
141 | " self_layer.weight.data[...] = torch.tensor(layer.weight).view_as(self_layer.weight)[...]\n",
142 | " self_layer.bias.data[...] = torch.tensor(layer.bias).view_as(self_layer.bias)[...]\n",
143 | " else:\n",
144 | " self_layer = getattr(self, \"fc%d\" % (block))\n",
145 | " block += 1\n",
146 | " self_layer.weight.data[...] = torch.tensor(layer.weight).view_as(self_layer.weight)[...]\n",
147 | " self_layer.bias.data[...] = torch.tensor(layer.bias).view_as(self_layer.bias)[...]\n",
148 | "\n",
149 | " def forward(self, x, layer):\n",
150 | " \"\"\" Pytorch forward\n",
151 | " Args:\n",
152 | " x: input image (224x224)\n",
153 | " Returns: class logits\n",
154 | " \"\"\"\n",
155 | " x = F.relu(self.conv_1_1(x))\n",
156 | " x = F.relu(self.conv_1_2(x))\n",
157 | " x = F.max_pool2d(x, 2, 2)\n",
158 | " if layer == 1:\n",
159 | " return x\n",
160 | " x = F.relu(self.conv_2_1(x))\n",
161 | " x = F.relu(self.conv_2_2(x))\n",
162 | " x = F.max_pool2d(x, 2, 2)\n",
163 | " if layer == 2:\n",
164 | " return x\n",
165 | " x = F.relu(self.conv_3_1(x))\n",
166 | " x = F.relu(self.conv_3_2(x))\n",
167 | " x = F.relu(self.conv_3_3(x))\n",
168 | " x = F.max_pool2d(x, 2, 2)\n",
169 | " if layer == 3:\n",
170 | " return x\n",
171 | " x = F.relu(self.conv_4_1(x))\n",
172 | " x = F.relu(self.conv_4_2(x))\n",
173 | " x = F.relu(self.conv_4_3(x))\n",
174 | " x = F.max_pool2d(x, 2, 2)\n",
175 | " if layer == 4:\n",
176 | " return x\n",
177 | " x = F.relu(self.conv_5_1(x))\n",
178 | " x = F.relu(self.conv_5_2(x))\n",
179 | " x = F.relu(self.conv_5_3(x))\n",
180 | " x = F.max_pool2d(x, 2, 2)\n",
181 | " if layer == 5:\n",
182 | " return x\n",
183 | " # x = x.view(x.size(0), -1)\n",
184 | " # x = F.relu(self.fc6(x))\n",
185 | " # x = F.dropout(x, 0.5, self.training)\n",
186 | " # if layer == 6:\n",
187 | " # return x\n",
188 | " # x = F.relu(self.fc7(x))\n",
189 | " # x = F.dropout(x, 0.5, self.training)\n",
190 | " # if layer == 7:\n",
191 | " # return x\n",
192 | " # return self.fc8(x)"
193 | ],
194 | "metadata": {
195 | "id": "zOY2xgyhgvUS"
196 | },
197 | "execution_count": null,
198 | "outputs": []
199 | },
200 | {
201 | "cell_type": "code",
202 | "source": [
203 | "class ModelFace:\n",
204 | " def __init__(self):\n",
205 | " self.model = VGG_16().double()\n",
206 | " self.model.load_weights()\n",
207 | " self.model.eval().to('cuda')\n",
208 | " self.ds = [56, 28]\n",
209 | " \n",
210 | " def preprocess(self, folder, split, n, start=0):\n",
211 | " images = torch.zeros((split, 3, 224, 224))\n",
212 | " for index, i in enumerate(range(split * n + start, split * (n + 1) + start)):\n",
213 | " x = Image.open(\"/content/drive/My Drive/faces/%s/%s.png\" % (folder, str(i+1).zfill(4)))\n",
214 | " x = np.asarray(x.resize((224, 224), resample=Image.LANCZOS)).astype(\"float32\")\n",
215 | " x = torch.Tensor(x).permute(2, 0, 1).view(1, 3, 224, 224).double()\n",
216 | " x -= torch.Tensor(np.array([93.5940, 104.7624, 129.1863])).double().view(1, 3, 1, 1)\n",
217 | " images[index] = x\n",
218 | " return images.to('cuda')\n",
219 | "\n",
220 | " def get_features(self, layer, folder, split, n, start=0):\n",
221 | " xs = self.preprocess(folder, split, n, start)\n",
222 | " with torch.no_grad():\n",
223 | " _out = self.model(xs.double(), layer).detach().cpu().numpy()\n",
224 | " if index < 2:\n",
225 | " ds = np.zeros((split, _out.shape[1], self.ds[layer-1], self.ds[layer-1]))\n",
226 | " for i in range(_out.shape[0]):\n",
227 | " ds[i] = downsample(_out[i][None], layer-1).squeeze()\n",
228 | " _out = ds\n",
229 | " return _out"
230 | ],
231 | "metadata": {
232 | "id": "U7j4DQEDgvWp"
233 | },
234 | "execution_count": null,
235 | "outputs": []
236 | },
237 | {
238 | "cell_type": "code",
239 | "source": [
240 | "# VGG16 for face recognition\n",
241 | "vgg_face = ModelFace()\n",
242 | "layers = np.arange(1, 6)\n",
243 | "split = 50\n",
244 | "\n",
245 | "# test set features\n",
246 | "vgg_t1 = np.zeros((100, 64, 56, 56))\n",
247 | "vgg_t2 = np.zeros((100, 128, 56, 56))\n",
248 | "vgg_t3 = np.zeros((100, 256, 28, 28))\n",
249 | "vgg_t4 = np.zeros((100, 512, 14, 14))\n",
250 | "vgg_t5 = np.zeros((100, 512, 7, 7))\n",
251 | "vgg_faces = [vgg_t1, vgg_t2, vgg_t3, vgg_t4, vgg_t5]\n",
252 | "for i, layer in enumerate(layers):\n",
253 | " for n in range(2):\n",
254 | " vgg_faces[i][n*split:(n+1)*split] = vgg_face.get_features(layer, \"test\", split, n)\n",
255 | " np.save(\"/content/drive/My Drive/faces/vggface_te_%i.npy\" % i, vgg_faces[i])\n",
256 | "\n",
257 | "# training set features\n",
258 | "vgg_t1 = np.zeros((4000, 64, 56, 56)) # ds: 112 -> 56\n",
259 | "vgg_t2 = np.zeros((4000, 128, 56, 56)) # ds: 56 -> 28\n",
260 | "vgg_t3 = np.zeros((4000, 256, 28, 28))\n",
261 | "vgg_t4 = np.zeros((4000, 512, 14, 14))\n",
262 | "vgg_t5 = np.zeros((4000, 512, 7, 7))\n",
263 | "vgg_faces = [vgg_t1, vgg_t2, vgg_t3, vgg_t4, vgg_t5]\n",
264 | "for i, layer in enumerate(layers):\n",
265 | " for n in range(80):\n",
266 | " vgg_faces[i][n*split:(n+1)*split] = vgg_face.get_features(layer, \"training\", split, n, 100)\n",
267 | " np.save(\"/content/drive/My Drive/faces/vggface_tr_%i.npy\" % i, vgg_faces[i])"
268 | ],
269 | "metadata": {
270 | "id": "ox4vWC7jhCHU"
271 | },
272 | "execution_count": null,
273 | "outputs": []
274 | },
275 | {
276 | "cell_type": "markdown",
277 | "source": [
278 | "### CLIP (ViT-L/14@336px)"
279 | ],
280 | "metadata": {
281 | "id": "0vSL0T9amkk0"
282 | }
283 | },
284 | {
285 | "cell_type": "code",
286 | "source": [
287 | "model, preprocess = clip.load(\"ViT-L/14@336px\")\n",
288 | "model.cuda().eval()\n",
289 | "input_resolution = model.visual.input_resolution\n",
290 | "context_length = model.context_length\n",
291 | "vocab_size = model.vocab_size\n",
292 | "\n",
293 | "print(\"Model parameters:\", f\"{np.sum([int(np.prod(p.shape)) for p in model.parameters()]):,}\")\n",
294 | "print(\"Input resolution:\", input_resolution)\n",
295 | "print(\"Context length:\", context_length)\n",
296 | "print(\"Vocab size:\", vocab_size)\n",
297 | "\n",
298 | "# test set\n",
299 | "images = []\n",
300 | "for i in range(100):\n",
301 | " image = Image.open(\"/content/drive/My Drive/faces/test/%s.png\" % str(i+1).zfill(4))\n",
302 | " images.append(preprocess(image))\n",
303 | "image_input = torch.tensor(np.stack(images)).cuda()\n",
304 | "with torch.no_grad():\n",
305 | " image_features = model.encode_image(image_input).float()\n",
306 | "np.save(\"/content/drive/My Drive/faces/clip_te.npy\", image_features.cpu().detach().numpy())\n",
307 | "\n",
308 | "# training set\n",
309 | "images = []\n",
310 | "for i in range(4000): \n",
311 | " image = Image.open(\"/content/drive/My Drive/faces/training/%s.png\" % str(i+101).zfill(4))\n",
312 | " images.append(preprocess(image))\n",
313 | "image_input = torch.tensor(np.stack(images)).cuda()\n",
314 | "with torch.no_grad():\n",
315 | " image_features = model.encode_image(image_input).float()\n",
316 | "np.save(\"/content/drive/My Drive/faces/clip_tr.npy\", image_features.cpu().detach().numpy())"
317 | ],
318 | "metadata": {
319 | "id": "vNaBvgW8hCM7"
320 | },
321 | "execution_count": null,
322 | "outputs": []
323 | },
324 | {
325 | "cell_type": "markdown",
326 | "source": [
327 | "# StyleGAN-XL (natural images)"
328 | ],
329 | "metadata": {
330 | "id": "svT-fEfFgmnJ"
331 | }
332 | },
333 | {
334 | "cell_type": "markdown",
335 | "source": [
336 | "### VGG16 for object recognition"
337 | ],
338 | "metadata": {
339 | "id": "_zEK4gsGnsix"
340 | }
341 | },
342 | {
343 | "cell_type": "code",
344 | "source": [
345 | "class Model:\n",
346 | " def __init__(self, model, weights):\n",
347 | " self.model = torch.hub.load('pytorch/vision:v0.10.0', model, weights=weights).eval().to('cuda')\n",
348 | " self.preprocess = transforms.Compose([\n",
349 | " transforms.Resize(224),\n",
350 | " transforms.ToTensor(),\n",
351 | " transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),\n",
352 | " ])\n",
353 | "\n",
354 | " def get_features(self, index, layer, folder, split, n, start=0):\n",
355 | " output = []\n",
356 | " for i in range(start + split * n, start + split * (n + 1)):\n",
357 | " input_image = Image.open(\"/content/drive/My Drive/images/%s/%s.png\" % (folder, str(i+1).zfill(4)))\n",
358 | " input_tensor = self.preprocess(input_image).unsqueeze(0).to('cuda')\n",
359 | " _out = self.model.features[:layer](input_tensor).detach().cpu().numpy()\n",
360 | " if index < 2:\n",
361 | " _out = downsample(_out, index)\n",
362 | " output.append(_out)\n",
363 | " return np.array(output).squeeze()"
364 | ],
365 | "metadata": {
366 | "id": "MU0Is3d8gh0n"
367 | },
368 | "execution_count": null,
369 | "outputs": []
370 | },
371 | {
372 | "cell_type": "code",
373 | "source": [
374 | "# VGG16 for object recognition\n",
375 | "vgg = Model(\"vgg16\", \"VGG16_Weights.DEFAULT\")\n",
376 | "layers = [5, 10, 17, 24, 31]\n",
377 | "split = 50\n",
378 | "\n",
379 | "# test set features\n",
380 | "vgg_t1 = np.zeros((200, 64, 56, 56)) # ds: 112 -> 56\n",
381 | "vgg_t2 = np.zeros((200, 128, 28, 28)) # ds: 56 -> 28\n",
382 | "vgg_t3 = np.zeros((200, 256, 28, 28))\n",
383 | "vgg_t4 = np.zeros((200, 512, 14, 14))\n",
384 | "vgg_t5 = np.zeros((200, 512, 7, 7))\n",
385 | "vgg = [vgg_t1, vgg_t2, vgg_t3, vgg_t4, vgg_t5]\n",
386 | "for i, layer in enumerate(layers):\n",
387 | " for n in range(4):\n",
388 | " vgg[i][n*split:(n+1)*split] = vgg.get_features(i, layer, \"test\", split=split, n=n)\n",
389 | " np.save(\"/content/drive/My Drive/images/put/vgg_te_%i.npy\" % i, vgg[i])\n",
390 | "\n",
391 | "# training set features\n",
392 | "vgg_t1 = np.zeros((4000, 64, 56, 56))\n",
393 | "vgg_t2 = np.zeros((4000, 128, 28, 28))\n",
394 | "vgg_t3 = np.zeros((4000, 256, 28, 28))\n",
395 | "vgg_t4 = np.zeros((4000, 512, 14, 14))\n",
396 | "vgg_t5 = np.zeros((4000, 512, 7, 7))\n",
397 | "vgg = [vgg_t1, vgg_t2, vgg_t3, vgg_t4, vgg_t5]\n",
398 | "for i, layer in enumerate(layers):\n",
399 | " for n in range(80):\n",
400 | " vgg[i][n*split:(n+1)*split] = vgg.get_features(i, layer, \"training\", split=split, n=n, start=100)\n",
401 | " np.save(\"/content/drive/My Drive/images/vgg_tr_%i.npy\" % i, vgg[i])"
402 | ],
403 | "metadata": {
404 | "id": "n3IkzRxlgh29"
405 | },
406 | "execution_count": null,
407 | "outputs": []
408 | },
409 | {
410 | "cell_type": "markdown",
411 | "source": [
412 | "### CLIP (ViT-L/14@336px)"
413 | ],
414 | "metadata": {
415 | "id": "blACoM1qnpTO"
416 | }
417 | },
418 | {
419 | "cell_type": "code",
420 | "source": [
421 | "model, preprocess = clip.load(\"ViT-L/14@336px\")\n",
422 | "model.cuda().eval()\n",
423 | "input_resolution = model.visual.input_resolution\n",
424 | "context_length = model.context_length\n",
425 | "vocab_size = model.vocab_size\n",
426 | "\n",
427 | "print(\"Model parameters:\", f\"{np.sum([int(np.prod(p.shape)) for p in model.parameters()]):,}\")\n",
428 | "print(\"Input resolution:\", input_resolution)\n",
429 | "print(\"Context length:\", context_length)\n",
430 | "print(\"Vocab size:\", vocab_size)\n",
431 | "\n",
432 | "# test set\n",
433 | "images = []\n",
434 | "for i in range(200):\n",
435 | " image = Image.open(\"/content/drive/My Drive/images/test/%s.png\" % str(i+1).zfill(4))\n",
436 | " images.append(preprocess(image))\n",
437 | "image_input = torch.tensor(np.stack(images)).cuda()\n",
438 | "with torch.no_grad():\n",
439 | " image_features = model.encode_image(image_input).float()\n",
440 | "np.save(\"/content/drive/My Drive/images/clip_te.npy\", image_features.cpu().detach().numpy())\n",
441 | "\n",
442 | "# training set\n",
443 | "images = []\n",
444 | "for i in range(4000): \n",
445 | " image = Image.open(\"/content/drive/My Drive/images/training/%s.png\" % str(i+101).zfill(4))\n",
446 | " images.append(preprocess(image))\n",
447 | "image_input = torch.tensor(np.stack(images)).cuda()\n",
448 | "with torch.no_grad():\n",
449 | " image_features = model.encode_image(image_input).float()\n",
450 | "np.save(\"/content/drive/My Drive/images/clip_tr.npy\", image_features.cpu().detach().numpy())"
451 | ],
452 | "metadata": {
453 | "id": "nPxT44MMgh5P"
454 | },
455 | "execution_count": null,
456 | "outputs": []
457 | }
458 | ]
459 | }
--------------------------------------------------------------------------------
/figs_manuscript/Fig1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neuralcodinglab/brain2gan/4a474023430147d60134a6c09cf51c28357631e2/figs_manuscript/Fig1.png
--------------------------------------------------------------------------------
/figs_manuscript/Fig10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neuralcodinglab/brain2gan/4a474023430147d60134a6c09cf51c28357631e2/figs_manuscript/Fig10.png
--------------------------------------------------------------------------------
/figs_manuscript/Fig11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neuralcodinglab/brain2gan/4a474023430147d60134a6c09cf51c28357631e2/figs_manuscript/Fig11.png
--------------------------------------------------------------------------------
/figs_manuscript/Fig12.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neuralcodinglab/brain2gan/4a474023430147d60134a6c09cf51c28357631e2/figs_manuscript/Fig12.png
--------------------------------------------------------------------------------
/figs_manuscript/Fig2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neuralcodinglab/brain2gan/4a474023430147d60134a6c09cf51c28357631e2/figs_manuscript/Fig2.png
--------------------------------------------------------------------------------
/figs_manuscript/Fig3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neuralcodinglab/brain2gan/4a474023430147d60134a6c09cf51c28357631e2/figs_manuscript/Fig3.png
--------------------------------------------------------------------------------
/figs_manuscript/Fig4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neuralcodinglab/brain2gan/4a474023430147d60134a6c09cf51c28357631e2/figs_manuscript/Fig4.png
--------------------------------------------------------------------------------
/figs_manuscript/Fig5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neuralcodinglab/brain2gan/4a474023430147d60134a6c09cf51c28357631e2/figs_manuscript/Fig5.png
--------------------------------------------------------------------------------
/figs_manuscript/Fig6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neuralcodinglab/brain2gan/4a474023430147d60134a6c09cf51c28357631e2/figs_manuscript/Fig6.png
--------------------------------------------------------------------------------
/figs_manuscript/Fig7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neuralcodinglab/brain2gan/4a474023430147d60134a6c09cf51c28357631e2/figs_manuscript/Fig7.png
--------------------------------------------------------------------------------
/figs_manuscript/Fig8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neuralcodinglab/brain2gan/4a474023430147d60134a6c09cf51c28357631e2/figs_manuscript/Fig8.png
--------------------------------------------------------------------------------
/figs_manuscript/Fig9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neuralcodinglab/brain2gan/4a474023430147d60134a6c09cf51c28357631e2/figs_manuscript/Fig9.png
--------------------------------------------------------------------------------
/figs_supplementary/Fig1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neuralcodinglab/brain2gan/4a474023430147d60134a6c09cf51c28357631e2/figs_supplementary/Fig1.png
--------------------------------------------------------------------------------
/figs_supplementary/Fig10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neuralcodinglab/brain2gan/4a474023430147d60134a6c09cf51c28357631e2/figs_supplementary/Fig10.png
--------------------------------------------------------------------------------
/figs_supplementary/Fig11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neuralcodinglab/brain2gan/4a474023430147d60134a6c09cf51c28357631e2/figs_supplementary/Fig11.png
--------------------------------------------------------------------------------
/figs_supplementary/Fig12.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neuralcodinglab/brain2gan/4a474023430147d60134a6c09cf51c28357631e2/figs_supplementary/Fig12.png
--------------------------------------------------------------------------------
/figs_supplementary/Fig13.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neuralcodinglab/brain2gan/4a474023430147d60134a6c09cf51c28357631e2/figs_supplementary/Fig13.png
--------------------------------------------------------------------------------
/figs_supplementary/Fig14.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neuralcodinglab/brain2gan/4a474023430147d60134a6c09cf51c28357631e2/figs_supplementary/Fig14.png
--------------------------------------------------------------------------------
/figs_supplementary/Fig15.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neuralcodinglab/brain2gan/4a474023430147d60134a6c09cf51c28357631e2/figs_supplementary/Fig15.png
--------------------------------------------------------------------------------
/figs_supplementary/Fig2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neuralcodinglab/brain2gan/4a474023430147d60134a6c09cf51c28357631e2/figs_supplementary/Fig2.png
--------------------------------------------------------------------------------
/figs_supplementary/Fig3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neuralcodinglab/brain2gan/4a474023430147d60134a6c09cf51c28357631e2/figs_supplementary/Fig3.png
--------------------------------------------------------------------------------
/figs_supplementary/Fig4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neuralcodinglab/brain2gan/4a474023430147d60134a6c09cf51c28357631e2/figs_supplementary/Fig4.png
--------------------------------------------------------------------------------
/figs_supplementary/Fig5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neuralcodinglab/brain2gan/4a474023430147d60134a6c09cf51c28357631e2/figs_supplementary/Fig5.png
--------------------------------------------------------------------------------
/figs_supplementary/Fig6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neuralcodinglab/brain2gan/4a474023430147d60134a6c09cf51c28357631e2/figs_supplementary/Fig6.png
--------------------------------------------------------------------------------
/figs_supplementary/Fig7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neuralcodinglab/brain2gan/4a474023430147d60134a6c09cf51c28357631e2/figs_supplementary/Fig7.png
--------------------------------------------------------------------------------
/figs_supplementary/Fig8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neuralcodinglab/brain2gan/4a474023430147d60134a6c09cf51c28357631e2/figs_supplementary/Fig8.png
--------------------------------------------------------------------------------
/media/0001.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neuralcodinglab/brain2gan/4a474023430147d60134a6c09cf51c28357631e2/media/0001.gif
--------------------------------------------------------------------------------
/media/0001.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neuralcodinglab/brain2gan/4a474023430147d60134a6c09cf51c28357631e2/media/0001.png
--------------------------------------------------------------------------------
/media/0018.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neuralcodinglab/brain2gan/4a474023430147d60134a6c09cf51c28357631e2/media/0018.gif
--------------------------------------------------------------------------------
/media/0018.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neuralcodinglab/brain2gan/4a474023430147d60134a6c09cf51c28357631e2/media/0018.png
--------------------------------------------------------------------------------
/media/0038.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neuralcodinglab/brain2gan/4a474023430147d60134a6c09cf51c28357631e2/media/0038.gif
--------------------------------------------------------------------------------
/media/0038.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neuralcodinglab/brain2gan/4a474023430147d60134a6c09cf51c28357631e2/media/0038.png
--------------------------------------------------------------------------------
/media/0093.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neuralcodinglab/brain2gan/4a474023430147d60134a6c09cf51c28357631e2/media/0093.gif
--------------------------------------------------------------------------------
/media/0093.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neuralcodinglab/brain2gan/4a474023430147d60134a6c09cf51c28357631e2/media/0093.png
--------------------------------------------------------------------------------
/media/_0038.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neuralcodinglab/brain2gan/4a474023430147d60134a6c09cf51c28357631e2/media/_0038.gif
--------------------------------------------------------------------------------
/media/_0081.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neuralcodinglab/brain2gan/4a474023430147d60134a6c09cf51c28357631e2/media/_0081.gif
--------------------------------------------------------------------------------
/media/_0081.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neuralcodinglab/brain2gan/4a474023430147d60134a6c09cf51c28357631e2/media/_0081.png
--------------------------------------------------------------------------------
/media/_0094.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neuralcodinglab/brain2gan/4a474023430147d60134a6c09cf51c28357631e2/media/_0094.gif
--------------------------------------------------------------------------------
/media/_0094.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neuralcodinglab/brain2gan/4a474023430147d60134a6c09cf51c28357631e2/media/_0094.png
--------------------------------------------------------------------------------
/media/_0114.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neuralcodinglab/brain2gan/4a474023430147d60134a6c09cf51c28357631e2/media/_0114.gif
--------------------------------------------------------------------------------
/media/_0114.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neuralcodinglab/brain2gan/4a474023430147d60134a6c09cf51c28357631e2/media/_0114.png
--------------------------------------------------------------------------------
/media/_0197.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neuralcodinglab/brain2gan/4a474023430147d60134a6c09cf51c28357631e2/media/_0197.gif
--------------------------------------------------------------------------------
/media/_0197.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neuralcodinglab/brain2gan/4a474023430147d60134a6c09cf51c28357631e2/media/_0197.png
--------------------------------------------------------------------------------
/media/img.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neuralcodinglab/brain2gan/4a474023430147d60134a6c09cf51c28357631e2/media/img.png
--------------------------------------------------------------------------------
/neural_encoding.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "nbformat": 4,
3 | "nbformat_minor": 0,
4 | "metadata": {
5 | "colab": {
6 | "provenance": []
7 | },
8 | "kernelspec": {
9 | "name": "python3",
10 | "display_name": "Python 3"
11 | },
12 | "language_info": {
13 | "name": "python"
14 | }
15 | },
16 | "cells": [
17 | {
18 | "cell_type": "code",
19 | "execution_count": null,
20 | "metadata": {
21 | "id": "V9ajP9exadLN",
22 | "colab": {
23 | "base_uri": "https://localhost:8080/"
24 | },
25 | "outputId": "c7559bcc-3d48-41d8-989b-60d62cdbb3fa"
26 | },
27 | "outputs": [
28 | {
29 | "output_type": "stream",
30 | "name": "stdout",
31 | "text": [
32 | "Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount(\"/content/drive\", force_remount=True).\n"
33 | ]
34 | }
35 | ],
36 | "source": [
37 | "from google.colab import drive\n",
38 | "drive.mount('/content/drive')"
39 | ]
40 | },
41 | {
42 | "cell_type": "code",
43 | "source": [
44 | "from sklearn.kernel_ridge import KernelRidge\n",
45 | "from numpy.linalg import svd\n",
46 | "from scipy import signal, stats\n",
47 | "from scipy.stats import t\n",
48 | "import h5py\n",
49 | "import PIL\n",
50 | "import matplotlib.pyplot as plt\n",
51 | "import numpy as np\n",
52 | "from matplotlib import colors"
53 | ],
54 | "metadata": {
55 | "id": "Oa-Pnj9jahoY"
56 | },
57 | "execution_count": null,
58 | "outputs": []
59 | },
60 | {
61 | "cell_type": "code",
62 | "source": [
63 | "def pearson_correlation_coefficient(x: np.ndarray, y: np.ndarray, axis: int) -> np.ndarray:\n",
64 | " r = (np.nan_to_num(stats.zscore(x)) * np.nan_to_num(stats.zscore(y))).mean(axis)\n",
65 | " p = 2 * t.sf(np.abs(r / np.sqrt((1 - r ** 2) / (x.shape[0] - 2))), x.shape[0] - 2)\n",
66 | " return r, p"
67 | ],
68 | "metadata": {
69 | "id": "Vz63RxRPahvI"
70 | },
71 | "execution_count": null,
72 | "outputs": []
73 | },
74 | {
75 | "cell_type": "code",
76 | "source": [
77 | "class KernelRidgeCV:\n",
78 | " def __init__(self, kernel, target, n_lambdas):\n",
79 | " self.kernel = kernel\n",
80 | " self.target = target\n",
81 | " self.n_lambdas = n_lambdas\n",
82 | " self._lambdas = None\n",
83 | " self._df = None\n",
84 | "\n",
85 | " @property\n",
86 | " def lambdas(self):\n",
87 | " if self._lambdas is not None: \n",
88 | " return self._lambdas\n",
89 | "\n",
90 | " # Singular value decomposition\n",
91 | " s = svd(self.kernel)[1]\n",
92 | " s = s[s > 0]\n",
93 | " \n",
94 | " self._lambdas = np.full((self.n_lambdas), np.nan)\n",
95 | " length = s.shape[0]\n",
96 | " self._df = np.linspace(length, 1, self.n_lambdas)\n",
97 | " mean = np.mean(1/s)\n",
98 | " f = lambda df, lamb: df - np.sum(s / (s + lamb))\n",
99 | " f_prime = lambda lamb: np.sum(s / (s + lamb)**2)\n",
100 | "\n",
101 | " # Get all the lambdas\n",
102 | " for i in range(1, self.n_lambdas):\n",
103 | " if i == 1:\n",
104 | " self._lambdas[i] = 0\n",
105 | " else:\n",
106 | " self._lambdas[i] = self._lambdas[i-1]\n",
107 | " self._lambdas[i] = max(self._lambdas[i], (length / self._df[i] - 1) / mean)\n",
108 | " temp = f(self._df[i], self._lambdas[i])\n",
109 | " while abs(temp) > 1e-10:\n",
110 | " self._lambdas[i] = max(0, self._lambdas[i] - temp / f_prime(self._lambdas[i]))\n",
111 | " temp = f(self._df[i], self._lambdas[i])\n",
112 | " return self._lambdas[1:]\n",
113 | "\n",
114 | "\n",
115 | " def train(self, X):\n",
116 | " best_model, best_error = None, np.inf\n",
117 | "\n",
118 | " # CV over all the lambdas\n",
119 | " for lambda_, df_ in zip(self.lambdas, self._df):\n",
120 | " kernel_ridge = KernelRidge(alpha=lambda_)\n",
121 | " kernel_ridge.fit(X, self.target)\n",
122 | " y = kernel_ridge.predict(X)\n",
123 | " error = np.sum(((self.target - y) / (1 - df_ / self.kernel.shape[0])) ** 2)\n",
124 | " if error < best_error:\n",
125 | " best_error = error\n",
126 | " best_model = kernel_ridge\n",
127 | " print(\"Best error:\", best_error, \"Alpha: \", best_model.alpha)\n",
128 | " return best_model"
129 | ],
130 | "metadata": {
131 | "id": "1K8DjwPnbDB2"
132 | },
133 | "execution_count": null,
134 | "outputs": []
135 | },
136 | {
137 | "cell_type": "code",
138 | "source": [
139 | "def features2responses(x_tr, f_te, f_tr, file_name):\n",
140 | "\n",
141 | " # n x n kernel matrix of pairwise similarity comparisons\n",
142 | " kernel = f_tr @ f_tr.T\n",
143 | " kernel = kernel.astype(float)\n",
144 | "\n",
145 | " y = np.zeros((100, 960))\n",
146 | " for roi in range(3):\n",
147 | " ridge_cv = KernelRidgeCV(kernel, x_tr[:, dims[roi]:dims[roi+1]], 5)\n",
148 | " model = ridge_cv.train(f_tr)\n",
149 | " y[:, dims[roi]:dims[roi+1]] = model.predict(f_te)\n",
150 | " np.save(\"/content/drive/My Drive/y_%s.npy\" % file_name, y)"
151 | ],
152 | "metadata": {
153 | "id": "FVmbyX2d96Mc"
154 | },
155 | "execution_count": null,
156 | "outputs": []
157 | },
158 | {
159 | "cell_type": "markdown",
160 | "source": [
161 | "# Faces (StyleGAN3)"
162 | ],
163 | "metadata": {
164 | "id": "StV_MybRanZD"
165 | }
166 | },
167 | {
168 | "cell_type": "code",
169 | "source": [
170 | "f1 = h5py.File(\"/content/drive/My Drive/faces/GANs_StyleGAN3_normMUA.mat\", \"r\")\n",
171 | "\n",
172 | "# Delete broken microelectrode array\n",
173 | "x_te = np.delete(np.array(f1[\"test_MUA\"]), np.arange(320, 384), axis=1)\n",
174 | "x_tr = np.delete(np.array(f1[\"train_MUA\"]), np.arange(320, 384), axis=1)\n",
175 | "\n",
176 | "# E.g., encoding from w-latents\n",
177 | "w_te = np.load(\"/content/drive/My Drive/faces/w_te.npy\")[:, 0]\n",
178 | "w_tr = np.load(\"/content/drive/My Drive/faces/w_tr.npy\")[:, 0]\n",
179 | "features2responses(x_tr, w_te, w_tr, \"faces_w_latents\")\n",
180 | "\n",
181 | "# E.g., encoding from CLIP latents\n",
182 | "clip_te = np.load(\"/content/drive/My Drive/faces/clip_te.npy\")\n",
183 | "clip_tr = np.load(\"/content/drive/My Drive/faces/clip_tr.npy\")\n",
184 | "features2responses(x_tr, clip_te, clip_tr, \"faces_clip_latents\")"
185 | ],
186 | "metadata": {
187 | "id": "yF6gUrpaahze"
188 | },
189 | "execution_count": null,
190 | "outputs": []
191 | },
192 | {
193 | "cell_type": "markdown",
194 | "source": [
195 | "# Natural images (StyleGAN-XL)"
196 | ],
197 | "metadata": {
198 | "id": "e4q1uEbzdQ6r"
199 | }
200 | },
201 | {
202 | "cell_type": "code",
203 | "source": [
204 | "f1 = h5py.File(\"/content/drive/My Drive/images/GANs_StyleGAN_XL_normMUA.mat\", \"r\")\n",
205 | "dims = [0, 448, 704, 960]\n",
206 | "\n",
207 | "# Delete broken microelectrode array\n",
208 | "x_te = np.delete(np.array(f1[\"test_MUA\"]), np.arange(320, 384), axis=1)\n",
209 | "x_tr = np.delete(np.array(f1[\"train_MUA\"]), np.arange(320, 384), axis=1)\n",
210 | "\n",
211 | "# E.g., encoding from w-latents\n",
212 | "w_te = np.load(\"/content/drive/My Drive/images/w_te.npy\")[:, 0]\n",
213 | "w_tr = np.load(\"/content/drive/My Drive/images/w_tr.npy\")[:, 0]\n",
214 | "features2responses(x_tr, w_te, w_tr, \"images_w_latents\")\n",
215 | "\n",
216 | "# E.g., encoding from CLIP latents\n",
217 | "clip_te = np.load(\"/content/drive/My Drive/images/clip_te.npy\")\n",
218 | "clip_tr = np.load(\"/content/drive/My Drive/images/clip_tr.npy\")\n",
219 | "features2responses(x_tr, clip_te, clip_tr, \"images_clip_latents\")"
220 | ],
221 | "metadata": {
222 | "id": "gsv0XRNaah96"
223 | },
224 | "execution_count": null,
225 | "outputs": []
226 | },
227 | {
228 | "cell_type": "markdown",
229 | "source": [
230 | "# Analysis"
231 | ],
232 | "metadata": {
233 | "id": "sQaucbhvAPS_"
234 | }
235 | },
236 | {
237 | "cell_type": "code",
238 | "source": [
239 | "# E.g., for natural images\n",
240 | "y1 = np.load(\"/content/drive/My Drive/y_images_vgg16_1.npy\")\n",
241 | "y2 = np.load(\"/content/drive/My Drive/y_images_vgg16_3.npy\")\n",
242 | "y3 = np.load(\"/content/drive/My Drive/y_images_z_latents.npy\")\n",
243 | "y4 = np.load(\"/content/drive/My Drive/y_images_w_latents.npy\")\n",
244 | "y5 = np.load(\"/content/drive/My Drive/y_images_clip_latents.npy\")\n",
245 | "features = [y1, y2, y3, y4, y5]\n",
246 | "\n",
247 | "rs_v1 = np.zeros((2, len(ys), 448))\n",
248 | "rs_v4 = np.zeros((2, len(ys), 256))\n",
249 | "rs_it = np.zeros((2, len(ys), 256))\n",
250 | "_rs = [rs_v1, rs_v4, rs_it]\n",
251 | "dims = [0, 448, 704, 960]\n",
252 | "for index, y in enumerate(features):\n",
253 | " for roi in range(3):\n",
254 | " r, p = pearson_correlation_coefficient(y[:, dims[roi]:dims[roi+1]], x_te[:, dims[roi]:dims[roi+1]], 0)\n",
255 | " _rs[roi][0, index] = r\n",
256 | " _rs[roi][1, index] = p"
257 | ],
258 | "metadata": {
259 | "id": "Idpl8i2c_5Ed"
260 | },
261 | "execution_count": null,
262 | "outputs": []
263 | },
264 | {
265 | "cell_type": "code",
266 | "source": [
267 | "# Layer assignment: bar plot\n",
268 | "norm = [448, 256, 256]\n",
269 | "rois = [\"all\", \"v1\", \"v4\", \"it\"]\n",
270 | "fig, axs = plt.subplots(1, 3, figsize=(15, 2))\n",
271 | "for roi in range(3):\n",
272 | " values, counts = np.unique(np.argmax(_rs[roi][0], axis=0), return_counts=True)\n",
273 | " _values = np.zeros(len(features))\n",
274 | " _values[values] = counts\n",
275 | " print(roi, np.round(_values / norm[roi] * 100, 2))\n",
276 | " axs[roi].bar(range(len(_values)), _values / norm[roi] * 100)\n",
277 | " axs[roi].set_title(rois[roi+1])\n",
278 | "plt.show()"
279 | ],
280 | "metadata": {
281 | "id": "A5blAGgBATNb",
282 | "colab": {
283 | "base_uri": "https://localhost:8080/",
284 | "height": 292
285 | },
286 | "outputId": "4675c0dd-bdd5-45a0-f399-5b8be4cb4256"
287 | },
288 | "execution_count": null,
289 | "outputs": [
290 | {
291 | "output_type": "stream",
292 | "name": "stdout",
293 | "text": [
294 | "0 [54.91 43.53 0.22 0.45 0.89]\n",
295 | "1 [ 1.17 87.89 9.38 1.17 0.39]\n",
296 | "2 [ 3.91 3.12 12.89 59.77 20.31]\n"
297 | ]
298 | },
299 | {
300 | "output_type": "display_data",
301 | "data": {
302 | "text/plain": [
303 | ""
304 | ],
305 | "image/png": "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\n"
306 | },
307 | "metadata": {}
308 | }
309 | ]
310 | },
311 | {
312 | "cell_type": "code",
313 | "source": [
314 | "def plot_electrodes_sign(roi, n):\n",
315 | " fig, axs = plt.subplots(1, n, figsize=(n+3, 3))\n",
316 | " for i in range(n):\n",
317 | " _layer = np.argmax(_rs[roi][0], axis=0)[i*64:(i+1)*64].reshape(8, 8)\n",
318 | " _alpha = np.min((1-_rs[roi][1]), axis=0)[i*64:(i+1)*64].reshape(8, 8)\n",
319 | " im = axs[i].imshow(_layer, cmap=cmap, vmin=0, vmax=5, alpha=_alpha)\n",
320 | " axs[i].axis(\"off\")\n",
321 | " plt.tight_layout()\n",
322 | " plt.show()\n",
323 | "\n",
324 | "\n",
325 | "# Make a color map of fixed colors\n",
326 | "my_colors = [\"#577590\", \"#43AA8B\", \"#F9C74F\", \"#F8961E\", \"#F94144\"]\n",
327 | "cmap = colors.ListedColormap(my_colors)\n",
328 | "bounds = np.arange(len(my_colors))\n",
329 | "plot_electrodes_sign(0, 7)\n",
330 | "plot_electrodes_sign(1, 4)\n",
331 | "plot_electrodes_sign(2, 4)"
332 | ],
333 | "metadata": {
334 | "id": "mE0cwQsFATZQ",
335 | "colab": {
336 | "base_uri": "https://localhost:8080/",
337 | "height": 514
338 | },
339 | "outputId": "56a980c9-867b-466d-ccf4-74de0faa8fa3"
340 | },
341 | "execution_count": null,
342 | "outputs": [
343 | {
344 | "output_type": "display_data",
345 | "data": {
346 | "text/plain": [
347 | ""
348 | ],
349 | "image/png": "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\n"
350 | },
351 | "metadata": {}
352 | },
353 | {
354 | "output_type": "display_data",
355 | "data": {
356 | "text/plain": [
357 | ""
358 | ],
359 | "image/png": "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\n"
360 | },
361 | "metadata": {}
362 | },
363 | {
364 | "output_type": "display_data",
365 | "data": {
366 | "text/plain": [
367 | ""
368 | ],
369 | "image/png": "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\n"
370 | },
371 | "metadata": {}
372 | }
373 | ]
374 | }
375 | ]
376 | }
--------------------------------------------------------------------------------
/poster.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neuralcodinglab/brain2gan/4a474023430147d60134a6c09cf51c28357631e2/poster.pdf
--------------------------------------------------------------------------------
/tiny_imagenet.txt:
--------------------------------------------------------------------------------
1 | n02124075
2 | n04067472
3 | n04540053
4 | n04099969
5 | n07749582
6 | n01641577
7 | n02802426
8 | n09246464
9 | n07920052
10 | n03970156
11 | n03891332
12 | n02106662
13 | n03201208
14 | n02279972
15 | n02132136
16 | n04146614
17 | n07873807
18 | n02364673
19 | n04507155
20 | n03854065
21 | n03838899
22 | n03733131
23 | n01443537
24 | n07875152
25 | n03544143
26 | n09428293
27 | n03085013
28 | n02437312
29 | n07614500
30 | n03804744
31 | n04265275
32 | n02963159
33 | n02486410
34 | n01944390
35 | n09256479
36 | n02058221
37 | n04275548
38 | n02321529
39 | n02769748
40 | n02099712
41 | n07695742
42 | n02056570
43 | n02281406
44 | n01774750
45 | n02509815
46 | n03983396
47 | n07753592
48 | n04254777
49 | n02233338
50 | n04008634
51 | n02823428
52 | n02236044
53 | n03393912
54 | n07583066
55 | n04074963
56 | n01629819
57 | n09332890
58 | n02481823
59 | n03902125
60 | n03404251
61 | n09193705
62 | n03637318
63 | n04456115
64 | n02666196
65 | n03796401
66 | n02795169
67 | n02123045
68 | n01855672
69 | n01882714
70 | n02917067
71 | n02988304
72 | n04398044
73 | n02843684
74 | n02423022
75 | n02669723
76 | n04465501
77 | n02165456
78 | n03770439
79 | n02099601
80 | n04486054
81 | n02950826
82 | n03814639
83 | n04259630
84 | n03424325
85 | n02948072
86 | n03179701
87 | n03400231
88 | n02206856
89 | n03160309
90 | n01984695
91 | n03977966
92 | n03584254
93 | n04023962
94 | n02814860
95 | n01910747
96 | n04596742
97 | n03992509
98 | n04133789
99 | n03937543
100 | n02927161
101 | n01945685
102 | n02395406
103 | n02125311
104 | n03126707
105 | n04532106
106 | n02268443
107 | n02977058
108 | n07734744
109 | n03599486
110 | n04562935
111 | n03014705
112 | n04251144
113 | n04356056
114 | n02190166
115 | n03670208
116 | n02002724
117 | n02074367
118 | n04285008
119 | n04560804
120 | n04366367
121 | n02403003
122 | n07615774
123 | n04501370
124 | n03026506
125 | n02906734
126 | n01770393
127 | n04597913
128 | n03930313
129 | n04118538
130 | n04179913
131 | n04311004
132 | n02123394
133 | n04070727
134 | n02793495
135 | n02730930
136 | n02094433
137 | n04371430
138 | n04328186
139 | n03649909
140 | n04417672
141 | n03388043
142 | n01774384
143 | n02837789
144 | n07579787
145 | n04399382
146 | n02791270
147 | n03089624
148 | n02814533
149 | n04149813
150 | n07747607
151 | n03355925
152 | n01983481
153 | n04487081
154 | n03250847
155 | n03255030
156 | n02892201
157 | n02883205
158 | n03100240
159 | n02415577
160 | n02480495
161 | n01698640
162 | n01784675
163 | n04376876
164 | n03444034
165 | n01917289
166 | n01950731
167 | n03042490
168 | n07711569
169 | n04532670
170 | n03763968
171 | n07768694
172 | n02999410
173 | n03617480
174 | n06596364
175 | n01768244
176 | n02410509
177 | n03976657
178 | n01742172
179 | n03980874
180 | n02808440
181 | n02226429
182 | n02231487
183 | n02085620
184 | n01644900
185 | n02129165
186 | n02699494
187 | n03837869
188 | n02815834
189 | n07720875
190 | n02788148
191 | n02909870
192 | n03706229
193 | n07871810
194 | n03447447
195 | n02113799
196 | n12267677
197 | n03662601
198 | n02841315
199 | n07715103
200 | n02504458
--------------------------------------------------------------------------------