├── 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 | stim-recon 8 | 9 | 10 | ### Notebooks 11 | 12 |

13 | The following Jupyter notebooks are included in this repository: 14 | 15 |

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 --------------------------------------------------------------------------------