xcssgzs commited on
Commit
0a8dd97
1 Parent(s): 6f1ae22

Upload 4 files

Browse files
Files changed (4) hide show
  1. class_indices.json +1 -0
  2. model.py +199 -0
  3. resNet101.pth +3 -0
  4. snake_script.py +93 -0
class_indices.json ADDED
@@ -0,0 +1 @@
 
 
1
+ {"0": "Acanthophis_antarcticus", "1": "Acanthophis_cryptamydros", "2": "Acanthophis_laevis", "3": "Acanthophis_praelongus", "4": "Acanthophis_pyrrhus", "5": "Acanthophis_rugosus", "6": "Acanthophis_wellsi", "7": "Achalinus_formosanus", "8": "Achalinus_niger", "9": "Achalinus_rufescens", "10": "Achalinus_spinalis", "11": "Acrantophis_dumerili", "12": "Acrantophis_madagascariensis", "13": "Acrochordus_arafurae", "14": "Acrochordus_granulatus", "15": "Acrochordus_javanicus", "16": "Adelphicos_nigrilatum", "17": "Adelphicos_quadrivirgatum", "18": "Adelphicos_veraepacis", "19": "Adelphicos_visoninum", "20": "Adelphostigma_occipitalis", "21": "Afrotyphlops_bibronii", "22": "Afrotyphlops_lineolatus", "23": "Afrotyphlops_mucruso", "24": "Afrotyphlops_obtusus", "25": "Afrotyphlops_schlegelii", "26": "Afrotyphlops_schmidti", "27": "Agkistrodon_bilineatus", "28": "Agkistrodon_conanti", "29": "Agkistrodon_contortrix", "30": "Agkistrodon_howardgloydi", "31": "Agkistrodon_laticinctus", "32": "Agkistrodon_piscivorus", "33": "Agkistrodon_russeolus", "34": "Agkistrodon_taylori", "35": "Ahaetulla_anomala", "36": "Ahaetulla_borealis", "37": "Ahaetulla_dispar", "38": "Ahaetulla_farnsworthi", "39": "Ahaetulla_fasciolata", "40": "Ahaetulla_fusca", "41": "Ahaetulla_isabellina", "42": "Ahaetulla_malabarica", "43": "Ahaetulla_mycterizans", "44": "Ahaetulla_nasuta", "45": "Ahaetulla_oxyrhynca", "46": "Ahaetulla_oxyrhyncha", "47": "Ahaetulla_prasina", "48": "Ahaetulla_sahyadrensis", "49": "Aipysurus_duboisii", "50": "Aipysurus_laevis", "51": "Alopecion_guttatum", "52": "Alsophis_antiguae", "53": "Alsophis_danforthi", "54": "Alsophis_rijgersmaei", "55": "Alsophis_rufiventris", "56": "Alsophis_sibonius", "57": "Amastridium_sapperi", "58": "Amastridium_veliferum", "59": "Amblyodipsas_concolor", "60": "Amblyodipsas_microphthalma", "61": "Amblyodipsas_polylepis", "62": "Amerotyphlops_brongersmianus", "63": "Amerotyphlops_microstomus", "64": "Amerotyphlops_reticulatus", "65": "Amphiesma_monticola", "66": "Amphiesma_stolatum", "67": "Amplorhinus_multimaculatus", "68": "Anilios_australis", "69": "Anilios_bicolor", "70": "Anilios_bituberculatus", "71": "Anilios_grypus", "72": "Anilios_ligatus", "73": "Anilios_nigrescens", "74": "Anilios_proximus", "75": "Anilios_torresianus", "76": "Anilius_scytale", "77": "Antaresia_childreni", "78": "Antaresia_maculosa", "79": "Antaresia_perthensis", "80": "Aparallactus_capensis", "81": "Aparallactus_guentheri", "82": "Aparallactus_lunulatus", "83": "Aplopeltura_boa", "84": "Apostolepis_assimilis", "85": "Apostolepis_cearensis", "86": "Apostolepis_dimidiata", "87": "Apostolepis_sanctaeritae", "88": "Argyrogena_fasciolata", "89": "Argyrophis_diardii", "90": "Argyrophis_muelleri", "91": "Arizona_elegans", "92": "Arizona_pacata", "93": "Arrhyton_redimitum", "94": "Arrhyton_taeniatum", "95": "Aspidelaps_lubricus", "96": "Aspidelaps_scutatus", "97": "Aspidites_melanocephalus", "98": "Aspidites_ramsayi", "99": "Aspidomorphus_muelleri", "100": "Aspidura_brachyorrhos", "101": "Aspidura_guentheri", "102": "Aspidura_trachyprocta", "103": "Asthenodipsas_borneensis", "104": "Asthenodipsas_laevis", "105": "Asthenodipsas_lasgalenensis", "106": "Asthenodipsas_malaccanus", "107": "Asthenodipsas_tropidonotus", "108": "Asthenodipsas_vertebralis", "109": "Atheris_ceratophora", "110": "Atheris_chlorechis", "111": "Atheris_nitschei", "112": "Atheris_squamigera", "113": "Atractaspis_bibronii", "114": "Atractaspis_irregularis", "115": "Atractus_atratus", "116": "Atractus_badius", "117": "Atractus_bocki", "118": "Atractus_carrioni", "119": "Atractus_chthonius", "120": "Atractus_clarki", "121": "Atractus_crassicaudatus", "122": "Atractus_duboisi", "123": "Atractus_dunni", "124": "Atractus_elaps", "125": "Atractus_flammigerus", "126": "Atractus_fuliginosus", "127": "Atractus_lasallei", "128": "Atractus_latifrons", "129": "Atractus_lehmanni", "130": "Atractus_major", "131": "Atractus_manizalesensis", "132": "Atractus_modestus", "133": "Atractus_nicefori", "134": "Atractus_obesus", "135": "Atractus_occidentalis", "136": "Atractus_occipitoalbus", "137": "Atractus_pantostictus", "138": "Atractus_paraguayensis", "139": "Atractus_reticulatus", "140": "Atractus_sanctaemartae", "141": "Atractus_sanguineus", "142": "Atractus_snethlageae", "143": "Atractus_titanicus", "144": "Atractus_torquatus", "145": "Atractus_trilineatus", "146": "Atractus_wagleri", "147": "Atractus_werneri", "148": "Atractus_zebrinus", "149": "Atretium_schistosum", "150": "Austrelaps_labialis", "151": "Austrelaps_ramsayi", "152": "Austrelaps_superbus", "153": "Azemiops_feae", "154": "Bitis_arietans", "155": "Bitis_armata", "156": "Bitis_atropos", "157": "Bitis_caudalis", "158": "Bitis_cornuta", "159": "Bitis_gabonica", "160": "Bitis_nasicornis", "161": "Bitis_peringueyi", "162": "Bitis_rhinoceros", "163": "Bitis_rubida", "164": "Bitis_schneideri", "165": "Bitis_xeropaga", "166": "Boa_constrictor", "167": "Boa_imperator", "168": "Boa_nebulosa", "169": "Boa_sigma", "170": "Boaedon_bedriagae", "171": "Boaedon_capensis", "172": "Boaedon_fuliginosus", "173": "Boaedon_lineatus", "174": "Boaedon_mendesi", "175": "Boaedon_mentalis", "176": "Bogertophis_rosaliae", "177": "Bogertophis_subocularis", "178": "Boiga_barnesii", "179": "Boiga_beddomei", "180": "Boiga_bengkuluensis", "181": "Boiga_ceylonensis", "182": "Boiga_cyanea", "183": "Boiga_cynodon", "184": "Boiga_dendrophila", "185": "Boiga_drapiezii", "186": "Boiga_flaviviridis", "187": "Boiga_forsteni", "188": "Boiga_guangxiensis", "189": "Boiga_irregularis", "190": "Boiga_jaspidea", "191": "Boiga_kraepelini", "192": "Boiga_melanota", "193": "Boiga_multifasciata", "194": "Boiga_multomaculata", "195": "Boiga_nigriceps", "196": "Boiga_nuchalis", "197": "Boiga_ochracea", "198": "Boiga_siamensis", "199": "Boiga_thackerayi", "200": "Boiga_trigonata", "201": "Boiruna_maculata", "202": "Boiruna_sertaneja", "203": "Borikenophis_portoricensis", "204": "Bothriechis_aurifer", "205": "Bothriechis_bicolor", "206": "Bothriechis_guifarroi", "207": "Bothriechis_lateralis", "208": "Bothriechis_marchi", "209": "Bothriechis_nigroviridis", "210": "Bothriechis_nubestris", "211": "Bothriechis_schlegelii", "212": "Bothriechis_supraciliaris", "213": "Bothriechis_thalassinus", "214": "Bothrocophias_andianus", "215": "Bothrocophias_campbelli", "216": "Bothrocophias_hyoprora", "217": "Bothrocophias_lojanus", "218": "Bothrocophias_microphthalmus", "219": "Bothrocophias_myersi", "220": "Bothrophthalmus_lineatus", "221": "Bothrops_alternatus", "222": "Bothrops_ammodytoides", "223": "Bothrops_asper", "224": "Bothrops_atrox", "225": "Bothrops_bilineatus", "226": "Bothrops_brazili", "227": "Bothrops_cotiara", "228": "Bothrops_diporus", "229": "Bothrops_erythromelas", "230": "Bothrops_fonsecai", "231": "Bothrops_itapetiningae", "232": "Bothrops_jararaca", "233": "Bothrops_jararacussu", "234": "Bothrops_jonathani", "235": "Bothrops_leucurus", "236": "Bothrops_marmoratus", "237": "Bothrops_mattogrossensis", "238": "Bothrops_moojeni", "239": "Bothrops_muriciensis", "240": "Bothrops_neuwiedi", "241": "Bothrops_oligobalius", "242": "Bothrops_osbornei", "243": "Bothrops_pauloensis", "244": "Bothrops_pictus", "245": "Bothrops_pubescens", "246": "Bothrops_pulcher", "247": "Bothrops_punctatus", "248": "Bothrops_taeniatus", "249": "Bothrops_venezuelensis", "250": "Brachyurophis_approximans", "251": "Brachyurophis_australis", "252": "Brachyurophis_fasciolatus", "253": "Brachyurophis_incinctus", "254": "Brachyurophis_roperi", "255": "Brachyurophis_semifasciatus", "256": "Bungarus_caeruleus", "257": "Bungarus_candidus", "258": "Bungarus_ceylonicus", "259": "Bungarus_fasciatus", "260": "Bungarus_flaviceps", "261": "Bungarus_multicinctus", "262": "Bungarus_niger", "263": "Cacophis_churchilli", "264": "Cacophis_harriettae", "265": "Cacophis_krefftii", "266": "Cacophis_squamulosus", "267": "Calabaria_reinhardtii", "268": "Calamaria_bicolor", "269": "Calamaria_gervaisii", "270": "Calamaria_grabowskyi", "271": "Calamaria_griswoldi", "272": "Calamaria_linnaei", "273": "Calamaria_lumbricoidea", "274": "Calamaria_pavimentata", "275": "Calamaria_schlegeli", "276": "Calamaria_schmidti", "277": "Calamaria_septentrionalis", "278": "Calliophis_bibroni", "279": "Calliophis_bivirgatus", "280": "Calliophis_intestinalis", "281": "Calliophis_maculiceps", "282": "Calliophis_melanurus", "283": "Calliophis_nigrescens", "284": "Calliophis_nigrotaeniatus", "285": "Calloselasma_rhodostoma", "286": "Candoia_aspera", "287": "Candoia_bibroni", "288": "Candoia_carinata", "289": "Candoia_paulsoni", "290": "Cantoria_violacea", "291": "Caraiba_andreae", "292": "Carphophis_amoenus", "293": "Carphophis_vermis", "294": "Causus_defilippii", "295": "Causus_lichtensteinii", "296": "Causus_maculatus", "297": "Causus_resimus", "298": "Causus_rhombeatus", "299": "Cemophora_coccinea", "300": "Cemophora_lineri", "301": "Cerastes_cerastes", "302": "Cerastes_gasperettii", "303": "Cerastes_vipera", "304": "Cerberus_australis", "305": "Cerberus_rynchops", "306": "Cerberus_schneiderii", "307": "Cerrophidion_godmani", "308": "Cerrophidion_sasai", "309": "Cerrophidion_tzotzilorum", "310": "Cerrophidion_wilsoni", "311": "Charina_bottae", "312": "Charina_umbratica", "313": "Chersodromus_liebmanni", "314": "Chilabothrus_angulifer", "315": "Chilabothrus_chrysogaster", "316": "Chilabothrus_gracilis", "317": "Chilabothrus_inornatus", "318": "Chilabothrus_striatus", "319": "Chilabothrus_strigilatus", "320": "Chilabothrus_subflavus", "321": "Chilomeniscus_stramineus", "322": "Chionactis_annulata", "323": "Chionactis_occipitalis", "324": "Chironius_bicarinatus", "325": "Chironius_brazili", "326": "Chironius_carinatus", "327": "Chironius_exoletus", "328": "Chironius_flavolineatus", "329": "Chironius_flavopictus", "330": "Chironius_foveatus", "331": "Chironius_fuscus", "332": "Chironius_gouveai", "333": "Chironius_grandisquamis", "334": "Chironius_laevicollis", "335": "Chironius_laurenti", "336": "Chironius_maculoventris", "337": "Chironius_monticola", "338": "Chironius_multiventris", "339": "Chironius_quadricarinatus", "340": "Chironius_scurrulus", "341": "Chironius_septentrionalis", "342": "Chironius_spixii", "343": "Chlorosoma_laticeps", "344": "Chlorosoma_viridissimum", "345": "Chrysopelea_ornata", "346": "Chrysopelea_paradisi", "347": "Chrysopelea_pelias", "348": "Chrysopelea_taprobanica", "349": "Clelia_clelia", "350": "Clelia_equatoriana", "351": "Clelia_scytalina", "352": "Clonophis_kirtlandii", "353": "Coelognathus_erythrurus", "354": "Coelognathus_flavolineatus", "355": "Coelognathus_helena", "356": "Coelognathus_radiatus", "357": "Coelognathus_subradiatus", "358": "Coluber_constrictor", "359": "Compsophis_laphystius", "360": "Coniophanes_alvarezi", "361": "Coniophanes_andresensis", "362": "Coniophanes_bipunctatus", "363": "Coniophanes_dromiciformis", "364": "Coniophanes_fissidens", "365": "Coniophanes_imperialis", "366": "Coniophanes_lateritius", "367": "Coniophanes_meridanus", "368": "Coniophanes_piceivittis", "369": "Coniophanes_quinquevittatus", "370": "Coniophanes_schmidti", "371": "Conophis_lineatus", "372": "Conophis_vittatus", "373": "Conopsis_acuta", "374": "Conopsis_biserialis", "375": "Conopsis_lineata", "376": "Conopsis_megalodon", "377": "Conopsis_nasus", "378": "Contia_longicaudae", "379": "Contia_tenuis", "380": "Corallus_annulatus", "381": "Corallus_batesii", "382": "Corallus_blombergi", "383": "Corallus_caninus", "384": "Corallus_grenadensis", "385": "Corallus_hortulana", "386": "Corallus_ruschenbergerii", "387": "Coronella_austriaca", "388": "Coronella_girondica", "389": "Craspedocephalus_anamallensis", "390": "Craspedocephalus_andalasensis", "391": "Craspedocephalus_borneensis", "392": "Craspedocephalus_gramineus", "393": "Craspedocephalus_macrolepis", "394": "Craspedocephalus_malabaricus", "395": "Craspedocephalus_peltopelor", "396": "Craspedocephalus_puniceus", "397": "Craspedocephalus_rubeus", "398": "Craspedocephalus_travancoricus", "399": "Craspedocephalus_trigonocephalus", "400": "Craspedocephalus_wiroti", "401": "Crisantophis_nevermanni", "402": "Crotalus_adamanteus", "403": "Crotalus_aquilus", "404": "Crotalus_armstrongi", "405": "Crotalus_atrox", "406": "Crotalus_basiliscus", "407": "Crotalus_campbelli", "408": "Crotalus_catalinensis", "409": "Crotalus_cerastes", "410": "Crotalus_cerberus", "411": "Crotalus_culminatus", "412": "Crotalus_durissus", "413": "Crotalus_ehecatl", "414": "Crotalus_enyo", "415": "Crotalus_horridus", "416": "Crotalus_intermedius", "417": "Crotalus_lepidus", "418": "Crotalus_mictlantecuhtli", "419": "Crotalus_mitchellii", "420": "Crotalus_molossus", "421": "Crotalus_morulus", "422": "Crotalus_oreganus", "423": "Crotalus_ornatus", "424": "Crotalus_polystictus", "425": "Crotalus_pricei", "426": "Crotalus_pusillus", "427": "Crotalus_pyrrhus", "428": "Crotalus_ravus", "429": "Crotalus_ruber", "430": "Crotalus_scutulatus", "431": "Crotalus_simus", "432": "Crotalus_stejnegeri", "433": "Crotalus_stephensi", "434": "Crotalus_tigris", "435": "Crotalus_tlaloci", "436": "Crotalus_tortugensis", "437": "Crotalus_totonacus", "438": "Crotalus_transversus", "439": "Crotalus_triseriatus", "440": "Crotalus_tzabcan", "441": "Crotalus_unicolor", "442": "Crotalus_viridis", "443": "Crotalus_willardi", "444": "Crotaphopeltis_hotamboeia", "445": "Crotaphopeltis_tornieri", "446": "Cryophis_hallbergi", "447": "Cryptophis_boschmai", "448": "Cryptophis_nigrescens", "449": "Cryptophis_nigrostriatus", "450": "Cryptophis_pallidiceps", "451": "Cubatyphlops_perimychus", "452": "Cubophis_cantherigerus", "453": "Cubophis_caymanus", "454": "Cubophis_vudii", "455": "Cyclocorus_lineatus", "456": "Cylindrophis_burmanus", "457": "Cylindrophis_jodiae", "458": "Cylindrophis_maculatus", "459": "Cylindrophis_melanotus", "460": "Cylindrophis_opisthorhodus", "461": "Cylindrophis_ruffus", "462": "Daboia_mauritanica", "463": "Daboia_palaestinae", "464": "Daboia_russelii", "465": "Daboia_siamensis", "466": "Dasypeltis_atra", "467": "Dasypeltis_inornata", "468": "Dasypeltis_medici", "469": "Dasypeltis_scabra", "470": "Deinagkistrodon_acutus", "471": "Demansia_angusticeps", "472": "Demansia_calodera", "473": "Demansia_papuensis", "474": "Demansia_psammophis", "475": "Demansia_quaesitor", "476": "Demansia_reticulata", "477": "Demansia_rufescens", "478": "Demansia_torquata", "479": "Demansia_vestigiata", "480": "Dendrelaphis_ashoki", "481": "Dendrelaphis_bifrenalis", "482": "Dendrelaphis_calligaster", "483": "Dendrelaphis_caudolineatus", "484": "Dendrelaphis_caudolineolatus", "485": "Dendrelaphis_chairecacos", "486": "Dendrelaphis_cyanochloris", "487": "Dendrelaphis_formosus", "488": "Dendrelaphis_fuliginosus", "489": "Dendrelaphis_girii", "490": "Dendrelaphis_grandoculis", "491": "Dendrelaphis_haasi", "492": "Dendrelaphis_inornatus", "493": "Dendrelaphis_kopsteini", "494": "Dendrelaphis_marenae", "495": "Dendrelaphis_modestus", "496": "Dendrelaphis_ngansonensis", "497": "Dendrelaphis_nigroserratus", "498": "Dendrelaphis_philippinensis", "499": "Dendrelaphis_pictus", "500": "Dendrelaphis_punctulatus", "501": "Dendrelaphis_schokari", "502": "Dendrelaphis_striatus", "503": "Dendrelaphis_striolatus", "504": "Dendrelaphis_subocularis", "505": "Dendrelaphis_terrificus", "506": "Dendrelaphis_tristis", "507": "Dendrelaphis_underwoodi", "508": "Dendrelaphis_vogeli", "509": "Dendrelaphis_wickrorum", "510": "Dendroaspis_angusticeps", "511": "Dendroaspis_jamesoni", "512": "Dendroaspis_polylepis", "513": "Dendroaspis_viridis", "514": "Dendrophidion_apharocybe", "515": "Dendrophidion_bivittatus", "516": "Dendrophidion_brunneum", "517": "Dendrophidion_clarkii", "518": "Dendrophidion_dendrophis", "519": "Dendrophidion_graciliverpa", "520": "Dendrophidion_paucicarinatum", "521": "Dendrophidion_percarinatum", "522": "Dendrophidion_vinitor", "523": "Denisonia_devisi", "524": "Denisonia_maculata", "525": "Diadophis_punctatus", "526": "Diaphorolepis_wagneri", "527": "Dibernardia_affinis", "528": "Dibernardia_bilineata", "529": "Dibernardia_poecilopogon", "530": "Dieurostus_dussumieri", "531": "Dipsadoboa_aulica", "532": "Dipsadoboa_flavida", "533": "Dipsadoboa_unicolor", "534": "Dipsas_albifrons", "535": "Dipsas_andiana", "536": "Dipsas_articulata", "537": "Dipsas_bicolor", "538": "Dipsas_brevifacies", "539": "Dipsas_bucephala", "540": "Dipsas_catesbyi", "541": "Dipsas_elegans", "542": "Dipsas_ellipsifera", "543": "Dipsas_gaigeae", "544": "Dipsas_georgejetti", "545": "Dipsas_gracilis", "546": "Dipsas_indica", "547": "Dipsas_mikanii", "548": "Dipsas_neuwiedi", "549": "Dipsas_pavonina", "550": "Dipsas_pratti", "551": "Dipsas_sanctijoannis", "552": "Dipsas_sazimai", "553": "Dipsas_temporalis", "554": "Dipsas_tenuissima", "555": "Dipsas_trinitatis", "556": "Dipsas_turgida", "557": "Dipsas_variegata", "558": "Dipsas_ventrimaculata", "559": "Dipsas_vermiculata", "560": "Dipsas_williamsi", "561": "Dipsina_multimaculata", "562": "Dispholidus_typus", "563": "Dolichophis_caspius", "564": "Dolichophis_jugularis", "565": "Dolichophis_schmidti", "566": "Drepanoides_anomalus", "567": "Dromicodryas_bernieri", "568": "Dromicodryas_quadrilineatus", "569": "Drymarchon_corais", "570": "Drymarchon_couperi", "571": "Drymarchon_melanurus", "572": "Drymobius_chloroticus", "573": "Drymobius_margaritiferus", "574": "Drymobius_melanotropis", "575": "Drymobius_rhombifer", "576": "Drymoluber_dichrous", "577": "Dryophiops_philippina", "578": "Dryophiops_rubescens", "579": "Dryophylax_chaquensis", "580": "Dryophylax_gambotensis", "581": "Dryophylax_hypoconia", "582": "Dryophylax_paraguanae", "583": "Dryophylax_phoenix", "584": "Drysdalia_coronoides", "585": "Drysdalia_mastersii", "586": "Drysdalia_rhodogaster", "587": "Duberria_lutrix", "588": "Duberria_rhodesiana", "589": "Duberria_variegata", "590": "Echinanthera_cephalostriata", "591": "Echinanthera_cyanopleura", "592": "Echinanthera_melanostigma", "593": "Echinanthera_undulata", "594": "Echiopsis_curta", "595": "Echis_carinatus", "596": "Echis_coloratus", "597": "Echis_khosatzkii", "598": "Echis_leucogaster", "599": "Echis_ocellatus", "600": "Echis_omanensis", "601": "Echis_pyramidum", "602": "Eirenis_collaris", "603": "Eirenis_decemlineatus", "604": "Eirenis_levantinus", "605": "Eirenis_lineomaculatus", "606": "Eirenis_modestus", "607": "Eirenis_occidentalis", "608": "Eirenis_punctatolineatus", "609": "Eirenis_rothii", "610": "Elaphe_anomala", "611": "Elaphe_cantoris", "612": "Elaphe_carinata", "613": "Elaphe_climacophora", "614": "Elaphe_davidi", "615": "Elaphe_dione", "616": "Elaphe_hodgsoni", "617": "Elaphe_moellendorffi", "618": "Elaphe_quadrivirgata", "619": "Elaphe_quatuorlineata", "620": "Elaphe_sauromates", "621": "Elaphe_schrenckii", "622": "Elaphe_taeniura", "623": "Elaphe_urartica", "624": "Elapognathus_coronatus", "625": "Elapognathus_minor", "626": "Elapoidis_fusca", "627": "Elapomorphus_quinquelineatus", "628": "Elapsoidea_boulengeri", "629": "Elapsoidea_loveridgei", "630": "Elapsoidea_nigra", "631": "Elapsoidea_semiannulata", "632": "Elapsoidea_sundevallii", "633": "Emydocephalus_annulatus", "634": "Emydocephalus_ijimae", "635": "Enhydris_enhydris", "636": "Enhydris_subtaeniata", "637": "Enuliophis_sclateri", "638": "Enulius_flavitorques", "639": "Epicrates_alvarezi", "640": "Epicrates_assisi", "641": "Epicrates_cenchria", "642": "Epicrates_crassus", "643": "Epicrates_maurus", "644": "Epictia_albipuncta", "645": "Epictia_ater", "646": "Epictia_australis", "647": "Epictia_borapeliotes", "648": "Epictia_goudotii", "649": "Epictia_magnamaculata", "650": "Epictia_munoai", "651": "Epictia_phenops", "652": "Epictia_resetari", "653": "Epictia_tenella", "654": "Epictia_tesselata", "655": "Epictia_vindumi", "656": "Erpeton_tentaculatum", "657": "Erythrolamprus_aesculapii", "658": "Erythrolamprus_almadensis", "659": "Erythrolamprus_bizona", "660": "Erythrolamprus_breviceps", "661": "Erythrolamprus_ceii", "662": "Erythrolamprus_cobella", "663": "Erythrolamprus_dorsocorallinus", "664": "Erythrolamprus_epinephalus", "665": "Erythrolamprus_jaegeri", "666": "Erythrolamprus_juliae", "667": "Erythrolamprus_macrosomus", "668": "Erythrolamprus_melanotus", "669": "Erythrolamprus_miliaris", "670": "Erythrolamprus_mimus", "671": "Erythrolamprus_ocellatus", "672": "Erythrolamprus_oligolepis", "673": "Erythrolamprus_poecilogyrus", "674": "Erythrolamprus_pseudocorallus", "675": "Erythrolamprus_pseudoreginae", "676": "Erythrolamprus_pygmaeus", "677": "Erythrolamprus_reginae", "678": "Erythrolamprus_sagittifer", "679": "Erythrolamprus_semiaureus", "680": "Erythrolamprus_taeniogaster", "681": "Erythrolamprus_typhlus", "682": "Erythrolamprus_viridis", "683": "Erythrolamprus_vitti", "684": "Erythrolamprus_zweifeli", "685": "Eryx_colubrinus", "686": "Eryx_conicus", "687": "Eryx_jaculus", "688": "Eryx_jayakari", "689": "Eryx_johnii", "690": "Eryx_miliaris", "691": "Eryx_muelleri", "692": "Eryx_whitakeri", "693": "Eunectes_beniensis", "694": "Eunectes_murinus", "695": "Eunectes_notaeus", "696": "Euprepiophis_conspicillata", "697": "Euprepiophis_mandarinus", "698": "Farancia_abacura", "699": "Farancia_erytrogramma", "700": "Ficimia_hardyi", "701": "Ficimia_olivacea", "702": "Ficimia_publia", "703": "Ficimia_streckeri", "704": "Fordonia_leucobalia", "705": "Fowlea_asperrima", "706": "Fowlea_asperrimus", "707": "Fowlea_flavipunctata", "708": "Fowlea_flavipunctatus", "709": "Fowlea_melanzosta", "710": "Fowlea_melanzostus", "711": "Fowlea_piscator", "712": "Furina_barnardi", "713": "Furina_diadema", "714": "Furina_ornata", "715": "Furina_tristis", "716": "Galvarinus_chilensis", "717": "Garthius_chaseni", "718": "Geagras_redimitus", "719": "Geophis_annuliferus", "720": "Geophis_bellus", "721": "Geophis_bicolor", "722": "Geophis_brachycephalus", "723": "Geophis_dubius", "724": "Geophis_dugesii", "725": "Geophis_hoffmanni", "726": "Geophis_latifrontalis", "727": "Geophis_mutitorques", "728": "Geophis_nephodrymus", "729": "Geophis_petersii", "730": "Geophis_rhodogaster", "731": "Geophis_sanniolus", "732": "Geophis_sartorii", "733": "Geophis_semidoliatus", "734": "Geophis_talamancae", "735": "Gerarda_prevostiana", "736": "Gloydius_blomhoffii", "737": "Gloydius_brevicauda", "738": "Gloydius_changdaoensis", "739": "Gloydius_halys", "740": "Gloydius_himalayanus", "741": "Gloydius_intermedius", "742": "Gloydius_tsushimaensis", "743": "Gloydius_ussuriensis", "744": "Gongylosoma_baliodeira", "745": "Gongylosoma_scriptum", "746": "Gonyosoma_boulengeri", "747": "Gonyosoma_coeruleum", "748": "Gonyosoma_frenatum", "749": "Gonyosoma_jansenii", "750": "Gonyosoma_oxycephalum", "751": "Gracililima_nyassae", "752": "Grayia_ornata", "753": "Grayia_smithii", "754": "Grypotyphlops_acutus", "755": "Gyalopion_canum", "756": "Gyalopion_quadrangulare", "757": "Haldea_striatula", "758": "Hapsidophrys_smaragdinus", "759": "Hebius_beddomei", "760": "Hebius_boulengeri", "761": "Hebius_craspedogaster", "762": "Hebius_deschauenseei", "763": "Hebius_flavifrons", "764": "Hebius_khasiensis", "765": "Hebius_miyajimae", "766": "Hebius_monticola", "767": "Hebius_octolineatus", "768": "Hebius_popei", "769": "Hebius_pryeri", "770": "Hebius_sarawacensis", "771": "Hebius_sauteri", "772": "Hebius_vibakari", "773": "Helicops_angulatus", "774": "Helicops_apiaka", "775": "Helicops_carinicaudus", "776": "Helicops_danieli", "777": "Helicops_infrataeniatus", "778": "Helicops_leopardinus", "779": "Helicops_modestus", "780": "Helicops_pastazae", "781": "Helicops_polylepis", "782": "Helminthophis_frontalis", "783": "Hemachatus_haemachatus", "784": "Hemiaspis_damelii", "785": "Hemiaspis_signata", "786": "Hemibungarus_calligaster", "787": "Hemirhagerrhis_hildebrandtii", "788": "Hemirhagerrhis_nototaenia", "789": "Hemorrhois_algirus", "790": "Hemorrhois_hippocrepis", "791": "Hemorrhois_nummifer", "792": "Hemorrhois_ravergieri", "793": "Herpetoreas_platyceps", "794": "Heterodon_kennerlyi", "795": "Heterodon_nasicus", "796": "Heterodon_platirhinos", "797": "Heterodon_simus", "798": "Hierophis_gemonensis", "799": "Hierophis_viridiflavus", "800": "Homalopsis_buccata", "801": "Homalopsis_mereljcoxi", "802": "Homoroselaps_dorsalis", "803": "Homoroselaps_lacteus", "804": "Hoplocephalus_bitorquatus", "805": "Hoplocephalus_bungaroides", "806": "Hoplocephalus_stephensii", "807": "Hormonotus_modestus", "808": "Hydrelaps_darwiniensis", "809": "Hydrodynastes_bicinctus", "810": "Hydrodynastes_gigas", "811": "Hydromorphus_concolor", "812": "Hydrophis_caerulescens", "813": "Hydrophis_coggeri", "814": "Hydrophis_curtus", "815": "Hydrophis_cyanocinctus", "816": "Hydrophis_elegans", "817": "Hydrophis_lapemoides", "818": "Hydrophis_macdowelli", "819": "Hydrophis_major", "820": "Hydrophis_ornatus", "821": "Hydrophis_peronii", "822": "Hydrophis_platurus", "823": "Hydrophis_schistosus", "824": "Hydrophis_spiralis", "825": "Hydrophis_stokesii", "826": "Hydrops_martii", "827": "Hydrops_triangularis", "828": "Hypnale_hypnale", "829": "Hypnale_nepa", "830": "Hypnale_zara", "831": "Hypsiglena_affinis", "832": "Hypsiglena_chlorophaea", "833": "Hypsiglena_jani", "834": "Hypsiglena_ochrorhynchus", "835": "Hypsiglena_slevini", "836": "Hypsiglena_tanzeri", "837": "Hypsiglena_torquata", "838": "Hypsirhynchus_callilaemus", "839": "Hypsirhynchus_ferox", "840": "Hypsirhynchus_parvifrons", "841": "Hypsiscopus_plumbea", "842": "Imantodes_cenchoa", "843": "Imantodes_chocoensis", "844": "Imantodes_gemmistratus", "845": "Imantodes_inornatus", "846": "Imantodes_lentiferus", "847": "Imantodes_tenuissimus", "848": "Indotyphlops_albiceps", "849": "Indotyphlops_braminus", "850": "Indotyphlops_porrectus", "851": "Inyoka_swazicus", "852": "Ithycyphus_miniatus", "853": "Ithycyphus_oursi", "854": "Ithycyphus_perineti", "855": "Lachesis_acrochorda", "856": "Lachesis_melanocephala", "857": "Lachesis_muta", "858": "Lachesis_stenophrys", "859": "Lampropeltis_abnorma", "860": "Lampropeltis_alterna", "861": "Lampropeltis_annulata", "862": "Lampropeltis_californiae", "863": "Lampropeltis_calligaster", "864": "Lampropeltis_elapsoides", "865": "Lampropeltis_extenuata", "866": "Lampropeltis_gentilis", "867": "Lampropeltis_getula", "868": "Lampropeltis_greeri", "869": "Lampropeltis_holbrooki", "870": "Lampropeltis_knoblochi", "871": "Lampropeltis_leonis", "872": "Lampropeltis_mexicana", "873": "Lampropeltis_micropholis", "874": "Lampropeltis_multifasciata", "875": "Lampropeltis_nigra", "876": "Lampropeltis_polyzona", "877": "Lampropeltis_pyromelana", "878": "Lampropeltis_rhombomaculata", "879": "Lampropeltis_ruthveni", "880": "Lampropeltis_splendida", "881": "Lampropeltis_triangulum", "882": "Lampropeltis_zonata", "883": "Lamprophis_aurora", "884": "Lamprophis_fuscus", "885": "Lamprophis_guttatus", "886": "Langaha_madagascariensis", "887": "Laticauda_colubrina", "888": "Laticauda_frontalis", "889": "Laticauda_laticaudata", "890": "Laticauda_saintgironsi", "891": "Laticauda_semifasciata", "892": "Leioheterodon_geayi", "893": "Leioheterodon_madagascariensis", "894": "Leioheterodon_modestus", "895": "Leiopython_albertisii", "896": "Leptodeira_annulata", "897": "Leptodeira_ashmeadii", "898": "Leptodeira_bakeri", "899": "Leptodeira_frenata", "900": "Leptodeira_maculata", "901": "Leptodeira_nigrofasciata", "902": "Leptodeira_ornata", "903": "Leptodeira_polysticta", "904": "Leptodeira_punctata", "905": "Leptodeira_rhombifera", "906": "Leptodeira_rubricata", "907": "Leptodeira_septentrionalis", "908": "Leptodeira_splendida", "909": "Leptodeira_tarairiu", "910": "Leptodeira_uribei", "911": "Leptodrymus_pulcherrimus", "912": "Leptophis_ahaetulla", "913": "Leptophis_coeruleodorsus", "914": "Leptophis_cupreus", "915": "Leptophis_depressirostris", "916": "Leptophis_diplotropis", "917": "Leptophis_mexicanus", "918": "Leptophis_modestus", "919": "Leptophis_nebulosus", "920": "Leptotyphlops_conjunctus", "921": "Leptotyphlops_incognitus", "922": "Leptotyphlops_nigricans", "923": "Leptotyphlops_scutifrons", "924": "Leptotyphlops_sylvicolus", "925": "Liasis_fuscus", "926": "Liasis_mackloti", "927": "Liasis_olivaceus", "928": "Lichanura_orcutti", "929": "Lichanura_trivirgata", "930": "Limaformosa_capensis", "931": "Limnophis_bangweolicus", "932": "Liodytes_alleni", "933": "Liodytes_pygaea", "934": "Liodytes_rigida", "935": "Liopeltis_calamaria", "936": "Liopeltis_tricolor", "937": "Liophidium_mayottensis", "938": "Liophidium_rhodogaster", "939": "Liophidium_torquatum", "940": "Liopholidophis_dolicocercus", "941": "Liopholidophis_rhadinaea", "942": "Liotyphlops_albirostris", "943": "Liotyphlops_beui", "944": "Liotyphlops_bondensis", "945": "Liotyphlops_ternetzii", "946": "Loxocemus_bicolor", "947": "Lycodon_albofuscus", "948": "Lycodon_anamallensis", "949": "Lycodon_aulicus", "950": "Lycodon_butleri", "951": "Lycodon_capucinus", "952": "Lycodon_carinatus", "953": "Lycodon_davisonii", "954": "Lycodon_effraenis", "955": "Lycodon_fasciatus", "956": "Lycodon_flavozonatus", "957": "Lycodon_futsingensis", "958": "Lycodon_jara", "959": "Lycodon_laoensis", "960": "Lycodon_liuchengchaoi", "961": "Lycodon_meridionalis", "962": "Lycodon_nympha", "963": "Lycodon_orientalis", "964": "Lycodon_rosozonatus", "965": "Lycodon_rufozonatus", "966": "Lycodon_ruhstrati", "967": "Lycodon_semicarinatus", "968": "Lycodon_septentrionalis", "969": "Lycodon_striatus", "970": "Lycodon_subannulatus", "971": "Lycodon_subcinctus", "972": "Lycodon_travancoricus", "973": "Lycodon_tristrigatus", "974": "Lycodonomorphus_bicolor", "975": "Lycodonomorphus_inornatus", "976": "Lycodonomorphus_laevissimus", "977": "Lycodonomorphus_rufulus", "978": "Lycodryas_maculatus", "979": "Lycodryas_pseudogranuliceps", "980": "Lycognathophis_seychellensis", "981": "Lycophidion_albomaculatum", "982": "Lycophidion_capense", "983": "Lycophidion_pygmaeum", "984": "Lycophidion_variegatum", "985": "Lygophis_anomalus", "986": "Lygophis_dilepis", "987": "Lygophis_elegantissimus", "988": "Lygophis_lineatus", "989": "Lygophis_meridionalis", "990": "Lytorhynchus_diadema", "991": "Lytorhynchus_paradoxus", "992": "Lytorhynchus_ridgewayi", "993": "Macrelaps_microlepidotus", "994": "Macrocalamus_chanardi", "995": "Macroprotodon_brevis", "996": "Macroprotodon_cucullatus", "997": "Macroprotodon_mauritanicus", "998": "Macrovipera_lebetinus", "999": "Macrovipera_schweizeri", "1000": "Madagascarophis_colubrinus", "1001": "Madagascarophis_meridionalis", "1002": "Madagascarophis_ocellatus", "1003": "Magliophis_exiguus", "1004": "Malayopython_reticulatus", "1005": "Malayopython_timoriensis", "1006": "Malpolon_insignitus", "1007": "Malpolon_moilensis", "1008": "Malpolon_monspessulanus", "1009": "Manolepis_putnami", "1010": "Masticophis_anthonyi", "1011": "Masticophis_aurigulus", "1012": "Masticophis_bilineatus", "1013": "Masticophis_flagellum", "1014": "Masticophis_fuliginosus", "1015": "Masticophis_lateralis", "1016": "Masticophis_mentovarius", "1017": "Masticophis_schotti", "1018": "Masticophis_taeniatus", "1019": "Mastigodryas_alternatus", "1020": "Mastigodryas_boddaerti", "1021": "Mastigodryas_cliftoni", "1022": "Mastigodryas_danieli", "1023": "Mastigodryas_dorsalis", "1024": "Mastigodryas_heathii", "1025": "Mastigodryas_melanolomus", "1026": "Mastigodryas_pleii", "1027": "Mastigodryas_pulchriceps", "1028": "Mastigodryas_reticulatus", "1029": "Meizodon_semiornatus", "1030": "Melanophidium_khairei", "1031": "Melanophidium_wynaudense", "1032": "Mesotes_strigatus", "1033": "Metlapilcoatlus_indomitus", "1034": "Metlapilcoatlus_mexicanus", "1035": "Metlapilcoatlus_nummifer", "1036": "Metlapilcoatlus_occiduus", "1037": "Metlapilcoatlus_olmec", "1038": "Micrelaps_muelleri", "1039": "Micropechis_ikaheca", "1040": "Micruroides_euryxanthus", "1041": "Micrurus_alleni", "1042": "Micrurus_altirostris", "1043": "Micrurus_ancoralis", "1044": "Micrurus_annellatus", "1045": "Micrurus_bocourti", "1046": "Micrurus_browni", "1047": "Micrurus_camilae", "1048": "Micrurus_circinalis", "1049": "Micrurus_clarki", "1050": "Micrurus_corallinus", "1051": "Micrurus_decoratus", "1052": "Micrurus_diastema", "1053": "Micrurus_dissoleucus", "1054": "Micrurus_distans", "1055": "Micrurus_diutius", "1056": "Micrurus_dumerilii", "1057": "Micrurus_elegans", "1058": "Micrurus_ephippifer", "1059": "Micrurus_frontalis", "1060": "Micrurus_fulvius", "1061": "Micrurus_hemprichii", "1062": "Micrurus_hippocrepis", "1063": "Micrurus_ibiboboca", "1064": "Micrurus_langsdorffi", "1065": "Micrurus_laticollaris", "1066": "Micrurus_lemniscatus", "1067": "Micrurus_medemi", "1068": "Micrurus_mipartitus", "1069": "Micrurus_mosquitensis", "1070": "Micrurus_multifasciatus", "1071": "Micrurus_narduccii", "1072": "Micrurus_nigrocinctus", "1073": "Micrurus_obscurus", "1074": "Micrurus_ornatissimus", "1075": "Micrurus_proximans", "1076": "Micrurus_pyrrhocryptus", "1077": "Micrurus_ruatanus", "1078": "Micrurus_sangilensis", "1079": "Micrurus_spixii", "1080": "Micrurus_steindachneri", "1081": "Micrurus_surinamensis", "1082": "Micrurus_tener", "1083": "Micrurus_tschudii", "1084": "Mimophis_mahfalensis", "1085": "Mimophis_occultus", "1086": "Miralia_alternans", "1087": "Mixcoatlus_browni", "1088": "Mixcoatlus_melanurus", "1089": "Montatheris_hindii", "1090": "Montivipera_bornmuelleri", "1091": "Montivipera_bulgardaghica", "1092": "Montivipera_latifii", "1093": "Montivipera_raddei", "1094": "Montivipera_xanthina", "1095": "Morelia_azurea", "1096": "Morelia_bredli", "1097": "Morelia_imbricata", "1098": "Morelia_spilota", "1099": "Morelia_viridis", "1100": "Mussurana_bicolor", "1101": "Myriopholis_longicauda", "1102": "Myriopholis_macrorhyncha", "1103": "Myron_richardsonii", "1104": "Myrrophis_bennettii", "1105": "Myrrophis_chinensis", "1106": "Naja_anchietae", "1107": "Naja_annulata", "1108": "Naja_annulifera", "1109": "Naja_ashei", "1110": "Naja_atra", "1111": "Naja_fuxi", "1112": "Naja_haje", "1113": "Naja_kaouthia", "1114": "Naja_melanoleuca", "1115": "Naja_mossambica", "1116": "Naja_naja", "1117": "Naja_nigricincta", "1118": "Naja_nigricollis", "1119": "Naja_nivea", "1120": "Naja_oxiana", "1121": "Naja_pallida", "1122": "Naja_peroescobari", "1123": "Naja_philippinensis", "1124": "Naja_samarensis", "1125": "Naja_savannula", "1126": "Naja_siamensis", "1127": "Naja_sputatrix", "1128": "Naja_subfulva", "1129": "Naja_sumatrana", "1130": "Namibiana_gracilior", "1131": "Namibiana_occidentalis", "1132": "Natriciteres_olivacea", "1133": "Natriciteres_variegata", "1134": "Natrix_astreptophora", "1135": "Natrix_helvetica", "1136": "Natrix_maura", "1137": "Natrix_natrix", "1138": "Natrix_tessellata", "1139": "Neelaps_bimaculatus", "1140": "Nerodia_clarkii", "1141": "Nerodia_cyclopion", "1142": "Nerodia_erythrogaster", "1143": "Nerodia_fasciata", "1144": "Nerodia_floridana", "1145": "Nerodia_harteri", "1146": "Nerodia_paucimaculata", "1147": "Nerodia_rhombifer", "1148": "Nerodia_sipedon", "1149": "Nerodia_taxispilota", "1150": "Ninia_atrata", "1151": "Ninia_diademata", "1152": "Ninia_espinali", "1153": "Ninia_hudsoni", "1154": "Ninia_maculata", "1155": "Ninia_psephota", "1156": "Ninia_sebae", "1157": "Ninia_teresitae", "1158": "Notechis_scutatus", "1159": "Nothopsis_rugosus", "1160": "Oligodon_affinis", "1161": "Oligodon_albocinctus", "1162": "Oligodon_ancorus", "1163": "Oligodon_arnensis", "1164": "Oligodon_barroni", "1165": "Oligodon_bitorquatus", "1166": "Oligodon_calamarius", "1167": "Oligodon_chinensis", "1168": "Oligodon_cinereus", "1169": "Oligodon_cyclurus", "1170": "Oligodon_deuvei", "1171": "Oligodon_everetti", "1172": "Oligodon_fasciolatus", "1173": "Oligodon_formosanus", "1174": "Oligodon_mouhoti", "1175": "Oligodon_octolineatus", "1176": "Oligodon_ornatus", "1177": "Oligodon_pseudotaeniatus", "1178": "Oligodon_purpurascens", "1179": "Oligodon_russelius", "1180": "Oligodon_signatus", "1181": "Oligodon_sublineatus", "1182": "Oligodon_taeniatus", "1183": "Oligodon_taeniolatus", "1184": "Oligodon_theobaldi", "1185": "Oligodon_tillacki", "1186": "Omoadiphas_aurula", "1187": "Oocatochus_rufodorsatus", "1188": "Opheodrys_aestivus", "1189": "Opheodrys_vernalis", "1190": "Ophiophagus_hannah", "1191": "Ophryacus_smaragdinus", "1192": "Ophryacus_undulatus", "1193": "Opisthotropis_andersonii", "1194": "Opisthotropis_cheni", "1195": "Opisthotropis_kuatunensis", "1196": "Opisthotropis_lateralis", "1197": "Opisthotropis_latouchii", "1198": "Oreocryptophis_porphyraceus", "1199": "Orientocoluber_spinalis", "1200": "Ovophis_convictus", "1201": "Ovophis_makazayazaya", "1202": "Ovophis_monticola", "1203": "Ovophis_okinavensis", "1204": "Ovophis_tonkinensis", "1205": "Oxybelis_aeneus", "1206": "Oxybelis_brevirostris", "1207": "Oxybelis_fulgidus", "1208": "Oxybelis_koehleri", "1209": "Oxybelis_microphthalmus", "1210": "Oxybelis_potosiensis", "1211": "Oxybelis_rutherfordi", "1212": "Oxybelis_transandinus", "1213": "Oxybelis_vittatus", "1214": "Oxybelis_wilsoni", "1215": "Oxyrhabdium_leporinum", "1216": "Oxyrhabdium_modestum", "1217": "Oxyrhopus_clathratus", "1218": "Oxyrhopus_erdisii", "1219": "Oxyrhopus_fitzingeri", "1220": "Oxyrhopus_formosus", "1221": "Oxyrhopus_guibei", "1222": "Oxyrhopus_leucomelas", "1223": "Oxyrhopus_melanogenys", "1224": "Oxyrhopus_occipitalis", "1225": "Oxyrhopus_petolarius", "1226": "Oxyrhopus_rhombifer", "1227": "Oxyrhopus_trigeminus", "1228": "Oxyrhopus_vanidicus", "1229": "Oxyuranus_microlepidotus", "1230": "Oxyuranus_scutellatus", "1231": "Palusophis_bifossatus", "1232": "Pantherophis_alleghaniensis", "1233": "Pantherophis_bairdi", "1234": "Pantherophis_emoryi", "1235": "Pantherophis_guttatus", "1236": "Pantherophis_obsoletus", "1237": "Pantherophis_ramspotti", "1238": "Pantherophis_slowinskii", "1239": "Pantherophis_spiloides", "1240": "Pantherophis_vulpinus", "1241": "Paraphimophis_rusticus", "1242": "Pareas_atayal", "1243": "Pareas_berdmorei", "1244": "Pareas_boulengeri", "1245": "Pareas_carinatus", "1246": "Pareas_chinensis", "1247": "Pareas_formosensis", "1248": "Pareas_geminatus", "1249": "Pareas_hamptoni", "1250": "Pareas_komaii", "1251": "Pareas_macularius", "1252": "Pareas_margaritophorus", "1253": "Pareas_monticola", "1254": "Pareas_niger", "1255": "Pareas_stanleyi", "1256": "Phalotris_cuyanus", "1257": "Phalotris_lemniscatus", "1258": "Phalotris_mertensi", "1259": "Phalotris_nasutus", "1260": "Phalotris_tricolor", "1261": "Philodryas_aestiva", "1262": "Philodryas_agassizii", "1263": "Philodryas_baroni", "1264": "Philodryas_chamissonis", "1265": "Philodryas_nattereri", "1266": "Philodryas_olfersii", "1267": "Philodryas_patagoniensis", "1268": "Philodryas_psammophidea", "1269": "Philodryas_trilineata", "1270": "Philodryas_varia", "1271": "Philothamnus_angolensis", "1272": "Philothamnus_battersbyi", "1273": "Philothamnus_dorsalis", "1274": "Philothamnus_hoplogaster", "1275": "Philothamnus_irregularis", "1276": "Philothamnus_macrops", "1277": "Philothamnus_natalensis", "1278": "Philothamnus_occidentalis", "1279": "Philothamnus_punctatus", "1280": "Philothamnus_semivariegatus", "1281": "Philothamnus_thomensis", "1282": "Phimophis_guerini", "1283": "Phimophis_guianensis", "1284": "Phimophis_vittatus", "1285": "Phisalixella_variabilis", "1286": "Phrynonax_poecilonotus", "1287": "Phrynonax_polylepis", "1288": "Phrynonax_shropshirei", "1289": "Phyllorhynchus_browni", "1290": "Phyllorhynchus_decurtatus", "1291": "Phytolopsis_punctata", "1292": "Pituophis_catenifer", "1293": "Pituophis_deppei", "1294": "Pituophis_lineaticollis", "1295": "Pituophis_melanoleucus", "1296": "Pituophis_ruthveni", "1297": "Pituophis_vertebralis", "1298": "Plagiopholis_nuchalis", "1299": "Platyceps_bholanathi", "1300": "Platyceps_collaris", "1301": "Platyceps_gracilis", "1302": "Platyceps_karelini", "1303": "Platyceps_najadum", "1304": "Platyceps_plinii", "1305": "Platyceps_rhodorachis", "1306": "Platyceps_rogersi", "1307": "Platyceps_ventromaculatus", "1308": "Platyplectrurus_madurensis", "1309": "Plectrurus_perroteti", "1310": "Pliocercus_elapoides", "1311": "Pliocercus_euryzonus", "1312": "Porthidium_arcosae", "1313": "Porthidium_dunni", "1314": "Porthidium_hespere", "1315": "Porthidium_lansbergii", "1316": "Porthidium_nasutum", "1317": "Porthidium_ophryomegas", "1318": "Porthidium_porrasi", "1319": "Porthidium_yucatanicum", "1320": "Prosymna_bivittata", "1321": "Prosymna_frontalis", "1322": "Prosymna_janii", "1323": "Prosymna_lineata", "1324": "Prosymna_stuhlmanni", "1325": "Prosymna_sundevalli", "1326": "Protobothrops_cornutus", "1327": "Protobothrops_elegans", "1328": "Protobothrops_flavoviridis", "1329": "Protobothrops_jerdonii", "1330": "Protobothrops_mucrosquamatus", "1331": "Protobothrops_sieversorum", "1332": "Protobothrops_tokarensis", "1333": "Psammodynastes_pictus", "1334": "Psammodynastes_pulverulentus", "1335": "Psammophis_aegyptius", "1336": "Psammophis_afroccidentalis", "1337": "Psammophis_angolensis", "1338": "Psammophis_biseriatus", "1339": "Psammophis_brevirostris", "1340": "Psammophis_crucifer", "1341": "Psammophis_elegans", "1342": "Psammophis_leightoni", "1343": "Psammophis_leopardinus", "1344": "Psammophis_lineatus", "1345": "Psammophis_lineolatus", "1346": "Psammophis_mossambicus", "1347": "Psammophis_namibensis", "1348": "Psammophis_notostictus", "1349": "Psammophis_orientalis", "1350": "Psammophis_praeornatus", "1351": "Psammophis_punctulatus", "1352": "Psammophis_schokari", "1353": "Psammophis_subtaeniatus", "1354": "Psammophis_sudanensis", "1355": "Psammophis_tanganicus", "1356": "Psammophis_trigrammus", "1357": "Psammophis_trinasalis", "1358": "Psammophylax_rhombeatus", "1359": "Psammophylax_tritaeniatus", "1360": "Psammophylax_variabilis", "1361": "Pseudagkistrodon_rudis", "1362": "Pseudalsophis_biserialis", "1363": "Pseudalsophis_dorsalis", "1364": "Pseudalsophis_elegans", "1365": "Pseudalsophis_hephaestus", "1366": "Pseudalsophis_hoodensis", "1367": "Pseudalsophis_occidentalis", "1368": "Pseudalsophis_steindachneri", "1369": "Pseudaspis_cana", "1370": "Pseudechis_australis", "1371": "Pseudechis_butleri", "1372": "Pseudechis_colletti", "1373": "Pseudechis_guttatus", "1374": "Pseudechis_pailsei", "1375": "Pseudechis_porphyriacus", "1376": "Pseudechis_weigeli", "1377": "Pseudelaphe_flavirufa", "1378": "Pseudelaphe_phaescens", "1379": "Pseudoboa_coronata", "1380": "Pseudoboa_neuwiedii", "1381": "Pseudoboa_nigra", "1382": "Pseudocerastes_fieldi", "1383": "Pseudocerastes_persicus", "1384": "Pseudocerastes_urarachnoides", "1385": "Pseudoeryx_plicatilis", "1386": "Pseudoferania_polylepis", "1387": "Pseudoficimia_frontalis", "1388": "Pseudoleptodeira_latifasciata", "1389": "Pseudonaja_affinis", "1390": "Pseudonaja_aspidorhyncha", "1391": "Pseudonaja_guttata", "1392": "Pseudonaja_inframacula", "1393": "Pseudonaja_mengdeni", "1394": "Pseudonaja_modesta", "1395": "Pseudonaja_nuchalis", "1396": "Pseudonaja_textilis", "1397": "Pseudorabdion_collaris", "1398": "Pseudorabdion_longiceps", "1399": "Pseudotomodon_trigonatus", "1400": "Pseudoxenodon_bambusicola", "1401": "Pseudoxenodon_inornatus", "1402": "Pseudoxenodon_macrops", "1403": "Pseudoxenodon_stejnegeri", "1404": "Pseudoxyrhopus_tritaeniatus", "1405": "Psomophis_genimaculatus", "1406": "Psomophis_joberti", "1407": "Psomophis_obtusus", "1408": "Ptyas_carinata", "1409": "Ptyas_dhumnades", "1410": "Ptyas_dipsas", "1411": "Ptyas_fusca", "1412": "Ptyas_korros", "1413": "Ptyas_major", "1414": "Ptyas_mucosa", "1415": "Ptyas_multicincta", "1416": "Ptyas_nigromarginata", "1417": "Ptyas_semicarinata", "1418": "Python_bivittatus", "1419": "Python_breitensteini", "1420": "Python_brongersmai", "1421": "Python_molurus", "1422": "Python_natalensis", "1423": "Python_regius", "1424": "Python_sebae", "1425": "Pythonodipsas_carinata", "1426": "Ramphotyphlops_lineatus", "1427": "Regina_grahamii", "1428": "Regina_septemvittata", "1429": "Rena_boettgeri", "1430": "Rena_dissecta", "1431": "Rena_dulcis", "1432": "Rena_humilis", "1433": "Rena_maxima", "1434": "Rena_segrega", "1435": "Rhabdophis_auriculatus", "1436": "Rhabdophis_ceylonensis", "1437": "Rhabdophis_chrysargoides", "1438": "Rhabdophis_chrysargos", "1439": "Rhabdophis_conspicillatus", "1440": "Rhabdophis_flaviceps", "1441": "Rhabdophis_helleri", "1442": "Rhabdophis_himalayanus", "1443": "Rhabdophis_leonardi", "1444": "Rhabdophis_lineatus", "1445": "Rhabdophis_murudensis", "1446": "Rhabdophis_nigrocinctus", "1447": "Rhabdophis_plumbicolor", "1448": "Rhabdophis_rhodomelas", "1449": "Rhabdophis_siamensis", "1450": "Rhabdophis_subminiatus", "1451": "Rhabdophis_swinhonis", "1452": "Rhabdophis_tigrinus", "1453": "Rhabdops_aquaticus", "1454": "Rhabdops_olivaceus", "1455": "Rhachidelus_brazili", "1456": "Rhadinaea_calligaster", "1457": "Rhadinaea_decorata", "1458": "Rhadinaea_flavilata", "1459": "Rhadinaea_gaigeae", "1460": "Rhadinaea_hesperia", "1461": "Rhadinaea_laureata", "1462": "Rhadinaea_marcellae", "1463": "Rhadinaea_montana", "1464": "Rhadinaea_myersi", "1465": "Rhadinaea_taeniata", "1466": "Rhadinella_godmani", "1467": "Rhadinella_kinkelini", "1468": "Rhadinella_montecristi", "1469": "Rhadinella_serperaster", "1470": "Rhamnophis_aethiopissa", "1471": "Rhamphiophis_rostratus", "1472": "Rhamphiophis_rubropunctatus", "1473": "Rhinobothryum_bovallii", "1474": "Rhinobothryum_lentiginosum", "1475": "Rhinocheilus_antonii", "1476": "Rhinocheilus_lecontei", "1477": "Rhinophis_blythii", "1478": "Rhinophis_oxyrhynchus", "1479": "Rhinophis_philippinus", "1480": "Rhinoplocephalus_bicolor", "1481": "Rhinotyphlops_lalandei", "1482": "Rhynchocalamus_melanocephalus", "1483": "Salomonelaps_par", "1484": "Salvadora_bairdi", "1485": "Salvadora_deserticola", "1486": "Salvadora_grahamiae", "1487": "Salvadora_hexalepis", "1488": "Salvadora_intermedia", "1489": "Salvadora_lemniscata", "1490": "Salvadora_lineata", "1491": "Salvadora_mexicana", "1492": "Sanzinia_madagascariensis", "1493": "Sanzinia_volontany", "1494": "Saphenophis_boursieri", "1495": "Scaphiodontophis_annulatus", "1496": "Scaphiophis_albopunctatus", "1497": "Scolecophis_atrocinctus", "1498": "Senticolis_triaspis", "1499": "Sibon_annulatus", "1500": "Sibon_anthracops", "1501": "Sibon_argus", "1502": "Sibon_dimidiatus", "1503": "Sibon_longifrenis", "1504": "Sibon_nebulatus", "1505": "Sibon_sanniolus", "1506": "Sibynophis_chinensis", "1507": "Sibynophis_collaris", "1508": "Sibynophis_geminatus", "1509": "Sibynophis_melanocephalus", "1510": "Sibynophis_subpunctatus", "1511": "Sibynophis_triangularis", "1512": "Simalia_amethistina", "1513": "Simalia_kinghorni", "1514": "Simalia_tracyae", "1515": "Simoselaps_anomalus", "1516": "Simoselaps_bertholdi", "1517": "Simoselaps_littoralis", "1518": "Sinomicrurus_annularis", "1519": "Sinomicrurus_kelloggi", "1520": "Sinomicrurus_macclellandi", "1521": "Sinomicrurus_sauteri", "1522": "Sinomicrurus_swinhoei", "1523": "Siphlophis_cervinus", "1524": "Siphlophis_compressus", "1525": "Siphlophis_longicaudatus", "1526": "Siphlophis_pulcher", "1527": "Siphlophis_worontzowi", "1528": "Sistrurus_catenatus", "1529": "Sistrurus_miliarius", "1530": "Sistrurus_tergeminus", "1531": "Sonora_aemula", "1532": "Sonora_annulata", "1533": "Sonora_cincta", "1534": "Sonora_episcopa", "1535": "Sonora_michoacanensis", "1536": "Sonora_mosaueri", "1537": "Sonora_mutabilis", "1538": "Sonora_occipitalis", "1539": "Sonora_palarostris", "1540": "Sonora_semiannulata", "1541": "Sonora_straminea", "1542": "Sonora_taylori", "1543": "Spalerosophis_diadema", "1544": "Spalerosophis_dolichospilus", "1545": "Spilotes_pullatus", "1546": "Spilotes_sulphureus", "1547": "Stegonotus_australis", "1548": "Stegonotus_batjanensis", "1549": "Stenorrhina_degenhardtii", "1550": "Stenorrhina_freminvillei", "1551": "Storeria_dekayi", "1552": "Storeria_hidalgoensis", "1553": "Storeria_occipitomaculata", "1554": "Storeria_storerioides", "1555": "Storeria_victa", "1556": "Subsessor_bocourti", "1557": "Suta_dwyeri", "1558": "Suta_fasciata", "1559": "Suta_flagellum", "1560": "Suta_gouldii", "1561": "Suta_monachus", "1562": "Suta_nigriceps", "1563": "Suta_punctata", "1564": "Suta_spectabilis", "1565": "Suta_suta", "1566": "Symphimus_leucostomus", "1567": "Symphimus_mayae", "1568": "Sympholis_lippiens", "1569": "Synophis_lasallei", "1570": "Synophis_niceforomariae", "1571": "Tachymenis_chilensis", "1572": "Tachymenis_ocellata", "1573": "Tachymenis_peruviana", "1574": "Tachymenis_trigonatus", "1575": "Taeniophallus_brevirostris", "1576": "Taeniophallus_nicagus", "1577": "Taeniophallus_occipitalis", "1578": "Tantilla_armillata", "1579": "Tantilla_atriceps", "1580": "Tantilla_bocourti", "1581": "Tantilla_boipiranga", "1582": "Tantilla_calamarina", "1583": "Tantilla_capistrata", "1584": "Tantilla_coronata", "1585": "Tantilla_cucullata", "1586": "Tantilla_cuniculator", "1587": "Tantilla_gottei", "1588": "Tantilla_gracilis", "1589": "Tantilla_hobartsmithi", "1590": "Tantilla_melanocephala", "1591": "Tantilla_moesta", "1592": "Tantilla_nigriceps", "1593": "Tantilla_planiceps", "1594": "Tantilla_relicta", "1595": "Tantilla_reticulata", "1596": "Tantilla_rubra", "1597": "Tantilla_ruficeps", "1598": "Tantilla_schistosa", "1599": "Tantilla_semicincta", "1600": "Tantilla_striata", "1601": "Tantilla_supracincta", "1602": "Tantilla_wilcoxi", "1603": "Tantilla_yaquia", "1604": "Tantillita_canula", "1605": "Tantillita_lintoni", "1606": "Telescopus_beetzi", "1607": "Telescopus_dhara", "1608": "Telescopus_fallax", "1609": "Telescopus_semiannulatus", "1610": "Telescopus_tripolitanus", "1611": "Thamnodynastes_gambotensis", "1612": "Thamnodynastes_hypoconia", "1613": "Thamnodynastes_pallidus", "1614": "Thamnodynastes_sertanejo", "1615": "Thamnodynastes_strigatus", "1616": "Thamnophis_atratus", "1617": "Thamnophis_bogerti", "1618": "Thamnophis_brachystoma", "1619": "Thamnophis_butleri", "1620": "Thamnophis_chrysocephalus", "1621": "Thamnophis_conanti", "1622": "Thamnophis_copei", "1623": "Thamnophis_couchii", "1624": "Thamnophis_cyrtopsis", "1625": "Thamnophis_elegans", "1626": "Thamnophis_eques", "1627": "Thamnophis_errans", "1628": "Thamnophis_fulvus", "1629": "Thamnophis_gigas", "1630": "Thamnophis_hammondii", "1631": "Thamnophis_lineri", "1632": "Thamnophis_marcianus", "1633": "Thamnophis_melanogaster", "1634": "Thamnophis_ordinoides", "1635": "Thamnophis_proximus", "1636": "Thamnophis_pulchrilatus", "1637": "Thamnophis_radix", "1638": "Thamnophis_rossmani", "1639": "Thamnophis_rufipunctatus", "1640": "Thamnophis_saurita", "1641": "Thamnophis_scalaris", "1642": "Thamnophis_scaliger", "1643": "Thamnophis_sirtalis", "1644": "Thamnophis_sumichrasti", "1645": "Thamnophis_unilabialis", "1646": "Thamnophis_validus", "1647": "Thamnosophis_epistibes", "1648": "Thamnosophis_infrasignatus", "1649": "Thamnosophis_lateralis", "1650": "Thelotornis_capensis", "1651": "Thelotornis_kirtlandii", "1652": "Thelotornis_mossambicanus", "1653": "Thelotornis_usambaricus", "1654": "Tomodon_dorsatus", "1655": "Toxicodryas_blandingii", "1656": "Toxicodryas_vexator", "1657": "Trachyboa_boulengeri", "1658": "Tretanorhinus_nigroluteus", "1659": "Trilepida_joshuai", "1660": "Trilepida_macrolepis", "1661": "Trilepida_salgueiroi", "1662": "Trimeresurus_albolabris", "1663": "Trimeresurus_andersonii", "1664": "Trimeresurus_cardamomensis", "1665": "Trimeresurus_erythrurus", "1666": "Trimeresurus_flavomaculatus", "1667": "Trimeresurus_gracilis", "1668": "Trimeresurus_gumprechti", "1669": "Trimeresurus_guoi", "1670": "Trimeresurus_hageni", "1671": "Trimeresurus_insularis", "1672": "Trimeresurus_kanburiensis", "1673": "Trimeresurus_kuiburi", "1674": "Trimeresurus_macrops", "1675": "Trimeresurus_malcolmi", "1676": "Trimeresurus_nebularis", "1677": "Trimeresurus_phuketensis", "1678": "Trimeresurus_popeiorum", "1679": "Trimeresurus_purpureomaculatus", "1680": "Trimeresurus_rubeus", "1681": "Trimeresurus_sabahi", "1682": "Trimeresurus_salazar", "1683": "Trimeresurus_schultzei", "1684": "Trimeresurus_septentrionalis", "1685": "Trimeresurus_stejnegeri", "1686": "Trimeresurus_sumatranus", "1687": "Trimeresurus_venustus", "1688": "Trimeresurus_vogeli", "1689": "Trimeresurus_yunnanensis", "1690": "Trimerodytes_aequifasciatus", "1691": "Trimerodytes_annularis", "1692": "Trimerodytes_balteatus", "1693": "Trimerodytes_percarinatus", "1694": "Trimerodytes_yunnanensis", "1695": "Trimetopon_pliolepis", "1696": "Trimorphodon_biscutatus", "1697": "Trimorphodon_lambda", "1698": "Trimorphodon_lyrophanes", "1699": "Trimorphodon_paucimaculatus", "1700": "Trimorphodon_quadruplex", "1701": "Trimorphodon_tau", "1702": "Trimorphodon_vilkinsonii", "1703": "Tropidechis_carinatus", "1704": "Tropidoclonion_lineatum", "1705": "Tropidodipsas_annulifera", "1706": "Tropidodipsas_fasciata", "1707": "Tropidodipsas_fischeri", "1708": "Tropidodipsas_philippii", "1709": "Tropidodipsas_sartorii", "1710": "Tropidodryas_serra", "1711": "Tropidodryas_striaticeps", "1712": "Tropidolaemus_laticinctus", "1713": "Tropidolaemus_subannulatus", "1714": "Tropidolaemus_wagleri", "1715": "Tropidonophis_mairii", "1716": "Tropidophis_caymanensis", "1717": "Tropidophis_greenwayi", "1718": "Tropidophis_haetianus", "1719": "Tropidophis_melanurus", "1720": "Typhlops_jamaicensis", "1721": "Ungaliophis_panamensis", "1722": "Uromacer_catesbyi", "1723": "Uromacer_oxyrhynchus", "1724": "Uropeltis_ceylanica", "1725": "Uropeltis_ellioti", "1726": "Uropeltis_macrolepis", "1727": "Uropeltis_phipsonii", "1728": "Urotheca_decipiens", "1729": "Urotheca_fulviceps", "1730": "Urotheca_guentheri", "1731": "Urotheca_lateristriga", "1732": "Vermicella_annulata", "1733": "Vermicella_intermedia", "1734": "Vipera_ammodytes", "1735": "Vipera_aspis", "1736": "Vipera_berus", "1737": "Vipera_darevskii", "1738": "Vipera_dinniki", "1739": "Vipera_eriwanensis", "1740": "Vipera_graeca", "1741": "Vipera_kaznakovi", "1742": "Vipera_latastei", "1743": "Vipera_lotievi", "1744": "Vipera_monticola", "1745": "Vipera_nikolskii", "1746": "Vipera_renardi", "1747": "Vipera_seoanei", "1748": "Vipera_transcaucasiana", "1749": "Vipera_ursinii", "1750": "Vipera_walser", "1751": "Virginia_valeriae", "1752": "Xenelaphis_hexagonotus", "1753": "Xenocalamus_bicolor", "1754": "Xenocalamus_transvaalensis", "1755": "Xenochrophis_maculatus", "1756": "Xenochrophis_trianguligerus", "1757": "Xenochrophis_vittatus", "1758": "Xenodermus_javanicus", "1759": "Xenodon_dorbignyi", "1760": "Xenodon_guentheri", "1761": "Xenodon_matogrossensis", "1762": "Xenodon_merremii", "1763": "Xenodon_neuwiedii", "1764": "Xenodon_pulcher", "1765": "Xenodon_rabdocephalus", "1766": "Xenodon_semicinctus", "1767": "Xenodon_severus", "1768": "Xenopeltis_hainanensis", "1769": "Xenopeltis_unicolor", "1770": "Xenopholis_scalaris", "1771": "Xenopholis_undulatus", "1772": "Xenoxybelis_argenteus", "1773": "Xenoxybelis_boulengeri", "1774": "Xerotyphlops_syriacus", "1775": "Xerotyphlops_vermicularis", "1776": "Xylophis_captaini", "1777": "Xylophis_perroteti", "1778": "Zamenis_hohenackeri", "1779": "Zamenis_lineatus", "1780": "Zamenis_longissimus", "1781": "Zamenis_persicus", "1782": "Zamenis_scalaris", "1783": "Zamenis_situla"}
model.py ADDED
@@ -0,0 +1,199 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch.nn as nn
2
+ import torch
3
+
4
+
5
+ class BasicBlock(nn.Module):
6
+ expansion = 1
7
+
8
+ def __init__(self, in_channel, out_channel, stride=1, downsample=None, **kwargs):
9
+ super(BasicBlock, self).__init__()
10
+ self.conv1 = nn.Conv2d(in_channels=in_channel, out_channels=out_channel,
11
+ kernel_size=3, stride=stride, padding=1, bias=False)
12
+ self.bn1 = nn.BatchNorm2d(out_channel)
13
+ self.relu = nn.ReLU()
14
+ self.conv2 = nn.Conv2d(in_channels=out_channel, out_channels=out_channel,
15
+ kernel_size=3, stride=1, padding=1, bias=False)
16
+ self.bn2 = nn.BatchNorm2d(out_channel)
17
+ self.downsample = downsample
18
+
19
+ def forward(self, x):
20
+ identity = x
21
+ if self.downsample is not None:
22
+ identity = self.downsample(x)
23
+
24
+ out = self.conv1(x)
25
+ out = self.bn1(out)
26
+ out = self.relu(out)
27
+
28
+ out = self.conv2(out)
29
+ out = self.bn2(out)
30
+
31
+ out += identity
32
+ out = self.relu(out)
33
+
34
+ return out
35
+
36
+
37
+ class Bottleneck(nn.Module):
38
+ """
39
+ 注意:原论文中,在虚线残差结构的主分支上,第一个1x1卷积层的步距是2,第二个3x3卷积层步距是1。
40
+ 但在pytorch官方实现过程中是第一个1x1卷积层的步距是1,第二个3x3卷积层步距是2,
41
+ 这么做的好处是能够在top1上提升大概0.5%的准确率。
42
+ 可参考Resnet v1.5 https://ngc.nvidia.com/catalog/model-scripts/nvidia:resnet_50_v1_5_for_pytorch
43
+ """
44
+ expansion = 4
45
+
46
+ def __init__(self, in_channel, out_channel, stride=1, downsample=None,
47
+ groups=1, width_per_group=64):
48
+ super(Bottleneck, self).__init__()
49
+
50
+ width = int(out_channel * (width_per_group / 64.)) * groups
51
+
52
+ self.conv1 = nn.Conv2d(in_channels=in_channel, out_channels=width,
53
+ kernel_size=1, stride=1, bias=False) # squeeze channels
54
+ self.bn1 = nn.BatchNorm2d(width)
55
+ # -----------------------------------------
56
+ self.conv2 = nn.Conv2d(in_channels=width, out_channels=width, groups=groups,
57
+ kernel_size=3, stride=stride, bias=False, padding=1)
58
+ self.bn2 = nn.BatchNorm2d(width)
59
+ # -----------------------------------------
60
+ self.conv3 = nn.Conv2d(in_channels=width, out_channels=out_channel*self.expansion,
61
+ kernel_size=1, stride=1, bias=False) # unsqueeze channels
62
+ self.bn3 = nn.BatchNorm2d(out_channel*self.expansion)
63
+ self.relu = nn.ReLU(inplace=True)
64
+ self.downsample = downsample
65
+
66
+ def forward(self, x):
67
+ identity = x
68
+ if self.downsample is not None:
69
+ identity = self.downsample(x)
70
+
71
+ out = self.conv1(x)
72
+ out = self.bn1(out)
73
+ out = self.relu(out)
74
+
75
+ out = self.conv2(out)
76
+ out = self.bn2(out)
77
+ out = self.relu(out)
78
+
79
+ out = self.conv3(out)
80
+ out = self.bn3(out)
81
+
82
+ out += identity
83
+ out = self.relu(out)
84
+
85
+ return out
86
+
87
+
88
+ class ResNet(nn.Module):
89
+
90
+ def __init__(self,
91
+ block,
92
+ blocks_num,
93
+ num_classes=1000,
94
+ include_top=True,
95
+ groups=1,
96
+ width_per_group=64):
97
+ super(ResNet, self).__init__()
98
+ self.include_top = include_top
99
+ self.in_channel = 64
100
+
101
+ self.groups = groups
102
+ self.width_per_group = width_per_group
103
+
104
+ self.conv1 = nn.Conv2d(3, self.in_channel, kernel_size=7, stride=2,
105
+ padding=3, bias=False)
106
+ self.bn1 = nn.BatchNorm2d(self.in_channel)
107
+ self.relu = nn.ReLU(inplace=True)
108
+ self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1)
109
+ self.layer1 = self._make_layer(block, 64, blocks_num[0])
110
+ self.layer2 = self._make_layer(block, 128, blocks_num[1], stride=2)
111
+ self.layer3 = self._make_layer(block, 256, blocks_num[2], stride=2)
112
+ self.layer4 = self._make_layer(block, 512, blocks_num[3], stride=2)
113
+ if self.include_top:
114
+ self.avgpool = nn.AdaptiveAvgPool2d((1, 1)) # output size = (1, 1)
115
+ self.fc = nn.Linear(512 * block.expansion, num_classes)
116
+
117
+ for m in self.modules():
118
+ if isinstance(m, nn.Conv2d):
119
+ nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu')
120
+ print()
121
+
122
+ def _make_layer(self, block, channel, block_num, stride=1):
123
+ downsample = None
124
+ if stride != 1 or self.in_channel != channel * block.expansion:
125
+ downsample = nn.Sequential(
126
+ nn.Conv2d(self.in_channel, channel * block.expansion, kernel_size=1, stride=stride, bias=False),
127
+ nn.BatchNorm2d(channel * block.expansion))
128
+
129
+ layers = []
130
+ layers.append(block(self.in_channel,
131
+ channel,
132
+ downsample=downsample,
133
+ stride=stride,
134
+ groups=self.groups,
135
+ width_per_group=self.width_per_group))
136
+ self.in_channel = channel * block.expansion
137
+
138
+ for _ in range(1, block_num):
139
+ layers.append(block(self.in_channel,
140
+ channel,
141
+ groups=self.groups,
142
+ width_per_group=self.width_per_group))
143
+
144
+ return nn.Sequential(*layers)
145
+
146
+ def forward(self, x):
147
+ x = self.conv1(x)
148
+ x = self.bn1(x)
149
+ x = self.relu(x)
150
+ x = self.maxpool(x)
151
+
152
+ x = self.layer1(x)
153
+ x = self.layer2(x)
154
+ x = self.layer3(x)
155
+ x = self.layer4(x)
156
+
157
+ if self.include_top:
158
+ x = self.avgpool(x)
159
+ x = torch.flatten(x, 1)
160
+ x = self.fc(x)
161
+
162
+ return x
163
+
164
+
165
+ def resnet34(num_classes=1000, include_top=True):
166
+ # https://download.pytorch.org/models/resnet34-333f7ec4.pth
167
+ return ResNet(BasicBlock, [3, 4, 6, 3], num_classes=num_classes, include_top=include_top)
168
+
169
+
170
+ def resnet50(num_classes=1000, include_top=True):
171
+ # https://download.pytorch.org/models/resnet50-19c8e357.pth
172
+ return ResNet(Bottleneck, [3, 4, 6, 3], num_classes=num_classes, include_top=include_top)
173
+
174
+
175
+ def resnet101(num_classes=1000, include_top=True):
176
+ # https://download.pytorch.org/models/resnet101-5d3b4d8f.pth
177
+ return ResNet(Bottleneck, [3, 4, 23, 3], num_classes=num_classes, include_top=include_top)
178
+
179
+
180
+ def resnext50_32x4d(num_classes=1000, include_top=True):
181
+ # https://download.pytorch.org/models/resnext50_32x4d-7cdf4587.pth
182
+ groups = 32
183
+ width_per_group = 4
184
+ return ResNet(Bottleneck, [3, 4, 6, 3],
185
+ num_classes=num_classes,
186
+ include_top=include_top,
187
+ groups=groups,
188
+ width_per_group=width_per_group)
189
+
190
+
191
+ def resnext101_32x8d(num_classes=1000, include_top=True):
192
+ # https://download.pytorch.org/models/resnext101_32x8d-8ba56ff5.pth
193
+ groups = 32
194
+ width_per_group = 8
195
+ return ResNet(Bottleneck, [3, 4, 23, 3],
196
+ num_classes=num_classes,
197
+ include_top=include_top,
198
+ groups=groups,
199
+ width_per_group=width_per_group)
resNet101.pth ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:6eccdfc48bdbfb0318dc285d72236fe2f698b7114b20a2410b0fe9dd07a7b592
3
+ size 185250117
snake_script.py ADDED
@@ -0,0 +1,93 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import json
3
+
4
+ import pandas as pd
5
+ import torch
6
+ from PIL import Image
7
+ from torchvision import transforms
8
+ from model import resnet101
9
+
10
+
11
+ def predict(test_metadata, index2class, root_path='/tmp/data/private_testset', output_csv_path='./submission.csv'):
12
+
13
+ data_transform = transforms.Compose(
14
+ [transforms.Resize(256),
15
+ transforms.CenterCrop(224),
16
+ transforms.ToTensor(),
17
+ transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])])
18
+
19
+ # load image
20
+ img_name_list = ["../tulip.jpg", "../rose.jpg"]
21
+ id_list = test_metadata['observation_id'].tolist()
22
+ img_name_list = test_metadata['filename'].tolist()
23
+ img_list = []
24
+ print(os.path.abspath(os.path.dirname(__file__)))
25
+ for img_name in img_name_list:
26
+ img_path = os.path.join(root_path, img_name)
27
+ assert os.path.exists(img_path), "file: '{}' dose not exist.".format(img_path)
28
+ img = Image.open(img_path)
29
+ img = data_transform(img)
30
+ img_list.append(img)
31
+
32
+ # batch img
33
+ batch_img = torch.stack(img_list, dim=0)
34
+
35
+ with torch.no_grad():
36
+ # predict class
37
+ output = model(batch_img.to(device)).cpu()
38
+ predict = torch.softmax(output, dim=1)
39
+ probs, classesId = torch.max(predict, dim=1)
40
+ probs = probs.data.numpy().tolist()
41
+ classesId = classesId.data.numpy().tolist()
42
+ id2classId = dict()
43
+ id2prob = dict()
44
+ for i, id in enumerate(id_list):
45
+ if id not in id2classId.keys():
46
+ id2classId[id] = classesId[i]
47
+ id2prob[id] = probs[i]
48
+ else:
49
+ if probs[i] > id2prob[id]:
50
+ id2classId[id] = classesId[i]
51
+ id2prob[id] = probs[i]
52
+ classes = list()
53
+ for id in id_list:
54
+ classes.append(index2class[str(id2classId[id])])
55
+ test_metadata["class_id"] = classes
56
+
57
+ user_pred_df = test_metadata.drop_duplicates("observation_id", keep="first")
58
+ user_pred_df[["observation_id", "class_id"]].to_csv(output_csv_path, index=None)
59
+
60
+
61
+ if __name__ == '__main__':
62
+
63
+ import zipfile
64
+
65
+ # with zipfile.ZipFile("/tmp/data/private_testset.zip", 'r') as zip_ref:
66
+ # zip_ref.extractall("/tmp/data")
67
+
68
+ root_path = '/tmp/data/private_testset'
69
+ # root_path = "../../data_set/flower_data/val/n1"
70
+
71
+ # read class_indict
72
+ json_path = './class_indices.json'
73
+ assert os.path.exists(json_path), "file: '{}' dose not exist.".format(json_path)
74
+
75
+ json_file = open(json_path, "r")
76
+ index2class = json.load(json_file)
77
+
78
+ device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
79
+ # create model
80
+ model = resnet101(num_classes=1784).to(device)
81
+
82
+ # load model weights
83
+ weights_path = "./resNet101.pth"
84
+ assert os.path.exists(weights_path), "file: '{}' dose not exist.".format(weights_path)
85
+ model.load_state_dict(torch.load(weights_path, map_location=device))
86
+
87
+ # prediction
88
+ model.eval()
89
+
90
+ metadata_file_path = "./SnakeCLEF2024_TestMetadata.csv"
91
+ # metadata_file_path = "./test.csv"
92
+ test_metadata = pd.read_csv(metadata_file_path)
93
+ predict(test_metadata, index2class, root_path)