From db4ff2172a492021aa0b00b218617533258bfd7c Mon Sep 17 00:00:00 2001 From: Vitaliy Lyudvichenko Date: Sat, 25 Jul 2015 22:26:29 +0300 Subject: [PATCH] Updated classification example --- modules/dnn/include/opencv2/dnn/blob.hpp | 2 +- modules/dnn/include/opencv2/dnn/dict.hpp | 2 +- modules/dnn/samples/bvlc_alexnet.prototxt | 281 ----- ...lexnet.cpp => classify_with_googlenet.cpp} | 27 +- modules/dnn/samples/space_shuttle.jpg | Bin 0 -> 27598 bytes modules/dnn/samples/synset_words.txt | 1000 +++++++++++++++++ modules/dnn/scripts/download_model.py | 18 +- modules/dnn/src/caffe_importer.cpp | 6 +- modules/dnn/src/dnn.cpp | 6 +- modules/dnn/src/layers/concat_layer.cpp | 2 +- modules/dnn/src/layers/convolution_layer.cpp | 2 +- modules/dnn/src/layers/elementwise_layers.cpp | 2 +- modules/dnn/src/layers/reshape_layer.cpp | 4 +- modules/dnn/src/layers/slice_layer.cpp | 2 +- modules/dnn/test/cnpy.cpp | 23 +- modules/dnn/test/cnpy.h | 12 +- modules/dnn/test/test_layers.cpp | 2 +- 17 files changed, 1053 insertions(+), 338 deletions(-) delete mode 100644 modules/dnn/samples/bvlc_alexnet.prototxt rename modules/dnn/samples/{alexnet.cpp => classify_with_googlenet.cpp} (70%) create mode 100644 modules/dnn/samples/space_shuttle.jpg create mode 100644 modules/dnn/samples/synset_words.txt diff --git a/modules/dnn/include/opencv2/dnn/blob.hpp b/modules/dnn/include/opencv2/dnn/blob.hpp index 4a4a70597..d830f3c78 100644 --- a/modules/dnn/include/opencv2/dnn/blob.hpp +++ b/modules/dnn/include/opencv2/dnn/blob.hpp @@ -83,7 +83,7 @@ namespace dnn @note Unlike ::xsize, if \p axis points to non-existing dimension then an error will be generated. */ int size(int axis) const; - + /** @brief returns number of elements @param startAxis starting axis (inverse indexing can be used) @param endAxis ending (excluded) axis diff --git a/modules/dnn/include/opencv2/dnn/dict.hpp b/modules/dnn/include/opencv2/dnn/dict.hpp index 3a58d990d..bdfe5e9ba 100644 --- a/modules/dnn/include/opencv2/dnn/dict.hpp +++ b/modules/dnn/include/opencv2/dnn/dict.hpp @@ -16,7 +16,7 @@ struct DictValue DictValue(unsigned p) : type(Param::INT), pi(new AutoBuffer) { (*pi)[0] = p; } DictValue(double p) : type(Param::REAL), pd(new AutoBuffer) { (*pd)[0] = p; } DictValue(const String &p) : type(Param::STRING), ps(new AutoBuffer) { (*ps)[0] = p; } - + template static DictValue arrayInt(TypeIter begin, int size); template diff --git a/modules/dnn/samples/bvlc_alexnet.prototxt b/modules/dnn/samples/bvlc_alexnet.prototxt deleted file mode 100644 index 83424f374..000000000 --- a/modules/dnn/samples/bvlc_alexnet.prototxt +++ /dev/null @@ -1,281 +0,0 @@ -name: "AlexNet" -input: "data" -input_dim: 10 -input_dim: 3 -input_dim: 227 -input_dim: 227 - -layer { - name: "conv1" - type: "Convolution" - bottom: "data" - top: "conv1" - param { - lr_mult: 1 - decay_mult: 1 - } - param { - lr_mult: 2 - decay_mult: 0 - } - convolution_param { - num_output: 96 - kernel_size: 11 - stride: 4 - } -} -layer { - name: "relu1" - type: "ReLU" - bottom: "conv1" - top: "conv1" -} -layer { - name: "norm1" - type: "LRN" - bottom: "conv1" - top: "norm1" - lrn_param { - local_size: 5 - alpha: 0.0001 - beta: 0.75 - } -} -layer { - name: "pool1" - type: "Pooling" - bottom: "norm1" - top: "pool1" - pooling_param { - pool: MAX - kernel_size: 3 - stride: 2 - } -} - -layer { - name: "conv2" - type: "Convolution" - bottom: "pool1" - top: "conv2" - param { - lr_mult: 1 - decay_mult: 1 - } - param { - lr_mult: 2 - decay_mult: 0 - } - convolution_param { - num_output: 256 - pad: 2 - kernel_size: 5 - group: 2 - } -} -layer { - name: "relu2" - type: "ReLU" - bottom: "conv2" - top: "conv2" -} -layer { - name: "norm2" - type: "LRN" - bottom: "conv2" - top: "norm2" - lrn_param { - local_size: 5 - alpha: 0.0001 - beta: 0.75 - } -} -layer { - name: "pool2" - type: "Pooling" - bottom: "norm2" - top: "pool2" - pooling_param { - pool: MAX - kernel_size: 3 - stride: 2 - } -} - -layer { - name: "conv3" - type: "Convolution" - bottom: "pool2" - top: "conv3" - param { - lr_mult: 1 - decay_mult: 1 - } - param { - lr_mult: 2 - decay_mult: 0 - } - convolution_param { - num_output: 384 - pad: 1 - kernel_size: 3 - } -} -layer { - name: "relu3" - type: "ReLU" - bottom: "conv3" - top: "conv3" -} - -layer { - name: "conv4" - type: "Convolution" - bottom: "conv3" - top: "conv4" - param { - lr_mult: 1 - decay_mult: 1 - } - param { - lr_mult: 2 - decay_mult: 0 - } - convolution_param { - num_output: 384 - pad: 1 - kernel_size: 3 - group: 2 - } -} -layer { - name: "relu4" - type: "ReLU" - bottom: "conv4" - top: "conv4" -} - -layer { - name: "conv5" - type: "Convolution" - bottom: "conv4" - top: "conv5" - param { - lr_mult: 1 - decay_mult: 1 - } - param { - lr_mult: 2 - decay_mult: 0 - } - convolution_param { - num_output: 256 - pad: 1 - kernel_size: 3 - group: 2 - } -} -layer { - name: "relu5" - type: "ReLU" - bottom: "conv5" - top: "conv5" -} -layer { - name: "pool5" - type: "Pooling" - bottom: "conv5" - top: "pool5" - pooling_param { - pool: MAX - kernel_size: 3 - stride: 2 - } -} -layer { - name: "fc6" - type: "InnerProduct" - bottom: "pool5" - top: "fc6" - param { - lr_mult: 1 - decay_mult: 1 - } - param { - lr_mult: 2 - decay_mult: 0 - } - inner_product_param { - num_output: 4096 - } -} -layer { - name: "relu6" - type: "ReLU" - bottom: "fc6" - top: "fc6" -} -layer { - name: "drop6" - type: "Dropout" - bottom: "fc6" - top: "fc61" - dropout_param { - dropout_ratio: 0.5 - } -} -layer { - name: "fc7" - type: "InnerProduct" - bottom: "fc61" - top: "fc7" - param { - lr_mult: 1 - decay_mult: 1 - } - param { - lr_mult: 2 - decay_mult: 0 - } - inner_product_param { - num_output: 4096 - } -} -layer { - name: "relu7" - type: "ReLU" - bottom: "fc7" - top: "fc7" -} -layer { - name: "drop7" - type: "Dropout" - bottom: "fc7" - top: "fc71" - dropout_param { - dropout_ratio: 0.5 - } -} -layer { - name: "fc8" - type: "InnerProduct" - bottom: "fc71" - top: "fc8" - param { - lr_mult: 1 - decay_mult: 1 - } - param { - lr_mult: 2 - decay_mult: 0 - } - inner_product_param { - num_output: 1000 - } -} -layer { - name: "prob" - type: "Softmax" - bottom: "fc8" - top: "prob" -} diff --git a/modules/dnn/samples/alexnet.cpp b/modules/dnn/samples/classify_with_googlenet.cpp similarity index 70% rename from modules/dnn/samples/alexnet.cpp rename to modules/dnn/samples/classify_with_googlenet.cpp index 1b55de253..9915f5a79 100644 --- a/modules/dnn/samples/alexnet.cpp +++ b/modules/dnn/samples/classify_with_googlenet.cpp @@ -25,53 +25,52 @@ std::vector CLASES_NAMES; void initClassesNames() { - std::ifstream fp("ILSVRC2012_synsets.txt"); + std::ifstream fp("synset_words.txt"); CV_Assert(fp.is_open()); std::string name; while (!fp.eof()) { std::getline(fp, name); - CLASES_NAMES.push_back(name); + if (name.length()) + CLASES_NAMES.push_back( name.substr(name.find(' ')+1) ); } - CV_Assert(CLASES_NAMES.size() == 1000); - fp.close(); } -int main(void) +int main(int argc, char **argv) { Net net; { - Ptr importer = createCaffeImporter("bvlc_alexnet.prototxt", "bvlc_alexnet.caffemodel"); + Ptr importer = createCaffeImporter("bvlc_googlenet.prototxt", "bvlc_googlenet.caffemodel"); importer->populateNet(net); } - Mat img = imread("zebra.jpg"); + String filename = (argc > 1) ? argv[1] : "space_shuttle.jpg"; + + Mat img = imread(filename); CV_Assert(!img.empty()); cvtColor(img, img, COLOR_BGR2RGB); - img.convertTo(img, CV_32F); resize(img, img, Size(227, 227)); - subtract(img, cv::mean(img), img); Blob imgBlob(img); - net.setBlob("data", imgBlob); + net.setBlob(".data", imgBlob); net.forward(); - Blob probBlob = net.getBlob("prob"); - ClassProb bc = getMaxClass(probBlob); + Blob prob = net.getBlob("prob"); + ClassProb bc = getMaxClass(prob); initClassesNames(); std::string className = (bc.first < (int)CLASES_NAMES.size()) ? CLASES_NAMES[bc.first] : "unnamed"; std::cout << "Best class:"; std::cout << " #" << bc.first; - std::cout << " (from " << probBlob.total(1) << ")"; + std::cout << " (from " << prob.total(1) << ")"; std::cout << " \"" + className << "\""; std::cout << std::endl; std::cout << "Prob: " << bc.second * 100 << "%" << std::endl; return 0; -} \ No newline at end of file +} diff --git a/modules/dnn/samples/space_shuttle.jpg b/modules/dnn/samples/space_shuttle.jpg new file mode 100644 index 0000000000000000000000000000000000000000..412a919694c0b0141ba0fa7003fbfc800dd1040d GIT binary patch literal 27598 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 literal 0 HcmV?d00001 diff --git a/modules/dnn/samples/synset_words.txt b/modules/dnn/samples/synset_words.txt new file mode 100644 index 000000000..a9e8c7f50 --- /dev/null +++ b/modules/dnn/samples/synset_words.txt @@ -0,0 +1,1000 @@ +n01440764 tench, Tinca tinca +n01443537 goldfish, Carassius auratus +n01484850 great white shark, white shark, man-eater, man-eating shark, Carcharodon carcharias +n01491361 tiger shark, Galeocerdo cuvieri +n01494475 hammerhead, hammerhead shark +n01496331 electric ray, crampfish, numbfish, torpedo +n01498041 stingray +n01514668 cock +n01514859 hen +n01518878 ostrich, Struthio camelus +n01530575 brambling, Fringilla montifringilla +n01531178 goldfinch, Carduelis carduelis +n01532829 house finch, linnet, Carpodacus mexicanus +n01534433 junco, snowbird +n01537544 indigo bunting, indigo finch, indigo bird, Passerina cyanea +n01558993 robin, American robin, Turdus migratorius +n01560419 bulbul +n01580077 jay +n01582220 magpie +n01592084 chickadee +n01601694 water ouzel, dipper +n01608432 kite +n01614925 bald eagle, American eagle, Haliaeetus leucocephalus +n01616318 vulture +n01622779 great grey owl, great gray owl, Strix nebulosa +n01629819 European fire salamander, Salamandra salamandra +n01630670 common newt, Triturus vulgaris +n01631663 eft +n01632458 spotted salamander, Ambystoma maculatum +n01632777 axolotl, mud puppy, Ambystoma mexicanum +n01641577 bullfrog, Rana catesbeiana +n01644373 tree frog, tree-frog +n01644900 tailed frog, bell toad, ribbed toad, tailed toad, Ascaphus trui +n01664065 loggerhead, loggerhead turtle, Caretta caretta +n01665541 leatherback turtle, leatherback, leathery turtle, Dermochelys coriacea +n01667114 mud turtle +n01667778 terrapin +n01669191 box turtle, box tortoise +n01675722 banded gecko +n01677366 common iguana, iguana, Iguana iguana +n01682714 American chameleon, anole, Anolis carolinensis +n01685808 whiptail, whiptail lizard +n01687978 agama +n01688243 frilled lizard, Chlamydosaurus kingi +n01689811 alligator lizard +n01692333 Gila monster, Heloderma suspectum +n01693334 green lizard, Lacerta viridis +n01694178 African chameleon, Chamaeleo chamaeleon +n01695060 Komodo dragon, Komodo lizard, dragon lizard, giant lizard, Varanus komodoensis +n01697457 African crocodile, Nile crocodile, Crocodylus niloticus +n01698640 American alligator, Alligator mississipiensis +n01704323 triceratops +n01728572 thunder snake, worm snake, Carphophis amoenus +n01728920 ringneck snake, ring-necked snake, ring snake +n01729322 hognose snake, puff adder, sand viper +n01729977 green snake, grass snake +n01734418 king snake, kingsnake +n01735189 garter snake, grass snake +n01737021 water snake +n01739381 vine snake +n01740131 night snake, Hypsiglena torquata +n01742172 boa constrictor, Constrictor constrictor +n01744401 rock python, rock snake, Python sebae +n01748264 Indian cobra, Naja naja +n01749939 green mamba +n01751748 sea snake +n01753488 horned viper, cerastes, sand viper, horned asp, Cerastes cornutus +n01755581 diamondback, diamondback rattlesnake, Crotalus adamanteus +n01756291 sidewinder, horned rattlesnake, Crotalus cerastes +n01768244 trilobite +n01770081 harvestman, daddy longlegs, Phalangium opilio +n01770393 scorpion +n01773157 black and gold garden spider, Argiope aurantia +n01773549 barn spider, Araneus cavaticus +n01773797 garden spider, Aranea diademata +n01774384 black widow, Latrodectus mactans +n01774750 tarantula +n01775062 wolf spider, hunting spider +n01776313 tick +n01784675 centipede +n01795545 black grouse +n01796340 ptarmigan +n01797886 ruffed grouse, partridge, Bonasa umbellus +n01798484 prairie chicken, prairie grouse, prairie fowl +n01806143 peacock +n01806567 quail +n01807496 partridge +n01817953 African grey, African gray, Psittacus erithacus +n01818515 macaw +n01819313 sulphur-crested cockatoo, Kakatoe galerita, Cacatua galerita +n01820546 lorikeet +n01824575 coucal +n01828970 bee eater +n01829413 hornbill +n01833805 hummingbird +n01843065 jacamar +n01843383 toucan +n01847000 drake +n01855032 red-breasted merganser, Mergus serrator +n01855672 goose +n01860187 black swan, Cygnus atratus +n01871265 tusker +n01872401 echidna, spiny anteater, anteater +n01873310 platypus, duckbill, duckbilled platypus, duck-billed platypus, Ornithorhynchus anatinus +n01877812 wallaby, brush kangaroo +n01882714 koala, koala bear, kangaroo bear, native bear, Phascolarctos cinereus +n01883070 wombat +n01910747 jellyfish +n01914609 sea anemone, anemone +n01917289 brain coral +n01924916 flatworm, platyhelminth +n01930112 nematode, nematode worm, roundworm +n01943899 conch +n01944390 snail +n01945685 slug +n01950731 sea slug, nudibranch +n01955084 chiton, coat-of-mail shell, sea cradle, polyplacophore +n01968897 chambered nautilus, pearly nautilus, nautilus +n01978287 Dungeness crab, Cancer magister +n01978455 rock crab, Cancer irroratus +n01980166 fiddler crab +n01981276 king crab, Alaska crab, Alaskan king crab, Alaska king crab, Paralithodes camtschatica +n01983481 American lobster, Northern lobster, Maine lobster, Homarus americanus +n01984695 spiny lobster, langouste, rock lobster, crawfish, crayfish, sea crawfish +n01985128 crayfish, crawfish, crawdad, crawdaddy +n01986214 hermit crab +n01990800 isopod +n02002556 white stork, Ciconia ciconia +n02002724 black stork, Ciconia nigra +n02006656 spoonbill +n02007558 flamingo +n02009229 little blue heron, Egretta caerulea +n02009912 American egret, great white heron, Egretta albus +n02011460 bittern +n02012849 crane +n02013706 limpkin, Aramus pictus +n02017213 European gallinule, Porphyrio porphyrio +n02018207 American coot, marsh hen, mud hen, water hen, Fulica americana +n02018795 bustard +n02025239 ruddy turnstone, Arenaria interpres +n02027492 red-backed sandpiper, dunlin, Erolia alpina +n02028035 redshank, Tringa totanus +n02033041 dowitcher +n02037110 oystercatcher, oyster catcher +n02051845 pelican +n02056570 king penguin, Aptenodytes patagonica +n02058221 albatross, mollymawk +n02066245 grey whale, gray whale, devilfish, Eschrichtius gibbosus, Eschrichtius robustus +n02071294 killer whale, killer, orca, grampus, sea wolf, Orcinus orca +n02074367 dugong, Dugong dugon +n02077923 sea lion +n02085620 Chihuahua +n02085782 Japanese spaniel +n02085936 Maltese dog, Maltese terrier, Maltese +n02086079 Pekinese, Pekingese, Peke +n02086240 Shih-Tzu +n02086646 Blenheim spaniel +n02086910 papillon +n02087046 toy terrier +n02087394 Rhodesian ridgeback +n02088094 Afghan hound, Afghan +n02088238 basset, basset hound +n02088364 beagle +n02088466 bloodhound, sleuthhound +n02088632 bluetick +n02089078 black-and-tan coonhound +n02089867 Walker hound, Walker foxhound +n02089973 English foxhound +n02090379 redbone +n02090622 borzoi, Russian wolfhound +n02090721 Irish wolfhound +n02091032 Italian greyhound +n02091134 whippet +n02091244 Ibizan hound, Ibizan Podenco +n02091467 Norwegian elkhound, elkhound +n02091635 otterhound, otter hound +n02091831 Saluki, gazelle hound +n02092002 Scottish deerhound, deerhound +n02092339 Weimaraner +n02093256 Staffordshire bullterrier, Staffordshire bull terrier +n02093428 American Staffordshire terrier, Staffordshire terrier, American pit bull terrier, pit bull terrier +n02093647 Bedlington terrier +n02093754 Border terrier +n02093859 Kerry blue terrier +n02093991 Irish terrier +n02094114 Norfolk terrier +n02094258 Norwich terrier +n02094433 Yorkshire terrier +n02095314 wire-haired fox terrier +n02095570 Lakeland terrier +n02095889 Sealyham terrier, Sealyham +n02096051 Airedale, Airedale terrier +n02096177 cairn, cairn terrier +n02096294 Australian terrier +n02096437 Dandie Dinmont, Dandie Dinmont terrier +n02096585 Boston bull, Boston terrier +n02097047 miniature schnauzer +n02097130 giant schnauzer +n02097209 standard schnauzer +n02097298 Scotch terrier, Scottish terrier, Scottie +n02097474 Tibetan terrier, chrysanthemum dog +n02097658 silky terrier, Sydney silky +n02098105 soft-coated wheaten terrier +n02098286 West Highland white terrier +n02098413 Lhasa, Lhasa apso +n02099267 flat-coated retriever +n02099429 curly-coated retriever +n02099601 golden retriever +n02099712 Labrador retriever +n02099849 Chesapeake Bay retriever +n02100236 German short-haired pointer +n02100583 vizsla, Hungarian pointer +n02100735 English setter +n02100877 Irish setter, red setter +n02101006 Gordon setter +n02101388 Brittany spaniel +n02101556 clumber, clumber spaniel +n02102040 English springer, English springer spaniel +n02102177 Welsh springer spaniel +n02102318 cocker spaniel, English cocker spaniel, cocker +n02102480 Sussex spaniel +n02102973 Irish water spaniel +n02104029 kuvasz +n02104365 schipperke +n02105056 groenendael +n02105162 malinois +n02105251 briard +n02105412 kelpie +n02105505 komondor +n02105641 Old English sheepdog, bobtail +n02105855 Shetland sheepdog, Shetland sheep dog, Shetland +n02106030 collie +n02106166 Border collie +n02106382 Bouvier des Flandres, Bouviers des Flandres +n02106550 Rottweiler +n02106662 German shepherd, German shepherd dog, German police dog, alsatian +n02107142 Doberman, Doberman pinscher +n02107312 miniature pinscher +n02107574 Greater Swiss Mountain dog +n02107683 Bernese mountain dog +n02107908 Appenzeller +n02108000 EntleBucher +n02108089 boxer +n02108422 bull mastiff +n02108551 Tibetan mastiff +n02108915 French bulldog +n02109047 Great Dane +n02109525 Saint Bernard, St Bernard +n02109961 Eskimo dog, husky +n02110063 malamute, malemute, Alaskan malamute +n02110185 Siberian husky +n02110341 dalmatian, coach dog, carriage dog +n02110627 affenpinscher, monkey pinscher, monkey dog +n02110806 basenji +n02110958 pug, pug-dog +n02111129 Leonberg +n02111277 Newfoundland, Newfoundland dog +n02111500 Great Pyrenees +n02111889 Samoyed, Samoyede +n02112018 Pomeranian +n02112137 chow, chow chow +n02112350 keeshond +n02112706 Brabancon griffon +n02113023 Pembroke, Pembroke Welsh corgi +n02113186 Cardigan, Cardigan Welsh corgi +n02113624 toy poodle +n02113712 miniature poodle +n02113799 standard poodle +n02113978 Mexican hairless +n02114367 timber wolf, grey wolf, gray wolf, Canis lupus +n02114548 white wolf, Arctic wolf, Canis lupus tundrarum +n02114712 red wolf, maned wolf, Canis rufus, Canis niger +n02114855 coyote, prairie wolf, brush wolf, Canis latrans +n02115641 dingo, warrigal, warragal, Canis dingo +n02115913 dhole, Cuon alpinus +n02116738 African hunting dog, hyena dog, Cape hunting dog, Lycaon pictus +n02117135 hyena, hyaena +n02119022 red fox, Vulpes vulpes +n02119789 kit fox, Vulpes macrotis +n02120079 Arctic fox, white fox, Alopex lagopus +n02120505 grey fox, gray fox, Urocyon cinereoargenteus +n02123045 tabby, tabby cat +n02123159 tiger cat +n02123394 Persian cat +n02123597 Siamese cat, Siamese +n02124075 Egyptian cat +n02125311 cougar, puma, catamount, mountain lion, painter, panther, Felis concolor +n02127052 lynx, catamount +n02128385 leopard, Panthera pardus +n02128757 snow leopard, ounce, Panthera uncia +n02128925 jaguar, panther, Panthera onca, Felis onca +n02129165 lion, king of beasts, Panthera leo +n02129604 tiger, Panthera tigris +n02130308 cheetah, chetah, Acinonyx jubatus +n02132136 brown bear, bruin, Ursus arctos +n02133161 American black bear, black bear, Ursus americanus, Euarctos americanus +n02134084 ice bear, polar bear, Ursus Maritimus, Thalarctos maritimus +n02134418 sloth bear, Melursus ursinus, Ursus ursinus +n02137549 mongoose +n02138441 meerkat, mierkat +n02165105 tiger beetle +n02165456 ladybug, ladybeetle, lady beetle, ladybird, ladybird beetle +n02167151 ground beetle, carabid beetle +n02168699 long-horned beetle, longicorn, longicorn beetle +n02169497 leaf beetle, chrysomelid +n02172182 dung beetle +n02174001 rhinoceros beetle +n02177972 weevil +n02190166 fly +n02206856 bee +n02219486 ant, emmet, pismire +n02226429 grasshopper, hopper +n02229544 cricket +n02231487 walking stick, walkingstick, stick insect +n02233338 cockroach, roach +n02236044 mantis, mantid +n02256656 cicada, cicala +n02259212 leafhopper +n02264363 lacewing, lacewing fly +n02268443 dragonfly, darning needle, devil's darning needle, sewing needle, snake feeder, snake doctor, mosquito hawk, skeeter hawk +n02268853 damselfly +n02276258 admiral +n02277742 ringlet, ringlet butterfly +n02279972 monarch, monarch butterfly, milkweed butterfly, Danaus plexippus +n02280649 cabbage butterfly +n02281406 sulphur butterfly, sulfur butterfly +n02281787 lycaenid, lycaenid butterfly +n02317335 starfish, sea star +n02319095 sea urchin +n02321529 sea cucumber, holothurian +n02325366 wood rabbit, cottontail, cottontail rabbit +n02326432 hare +n02328150 Angora, Angora rabbit +n02342885 hamster +n02346627 porcupine, hedgehog +n02356798 fox squirrel, eastern fox squirrel, Sciurus niger +n02361337 marmot +n02363005 beaver +n02364673 guinea pig, Cavia cobaya +n02389026 sorrel +n02391049 zebra +n02395406 hog, pig, grunter, squealer, Sus scrofa +n02396427 wild boar, boar, Sus scrofa +n02397096 warthog +n02398521 hippopotamus, hippo, river horse, Hippopotamus amphibius +n02403003 ox +n02408429 water buffalo, water ox, Asiatic buffalo, Bubalus bubalis +n02410509 bison +n02412080 ram, tup +n02415577 bighorn, bighorn sheep, cimarron, Rocky Mountain bighorn, Rocky Mountain sheep, Ovis canadensis +n02417914 ibex, Capra ibex +n02422106 hartebeest +n02422699 impala, Aepyceros melampus +n02423022 gazelle +n02437312 Arabian camel, dromedary, Camelus dromedarius +n02437616 llama +n02441942 weasel +n02442845 mink +n02443114 polecat, fitch, foulmart, foumart, Mustela putorius +n02443484 black-footed ferret, ferret, Mustela nigripes +n02444819 otter +n02445715 skunk, polecat, wood pussy +n02447366 badger +n02454379 armadillo +n02457408 three-toed sloth, ai, Bradypus tridactylus +n02480495 orangutan, orang, orangutang, Pongo pygmaeus +n02480855 gorilla, Gorilla gorilla +n02481823 chimpanzee, chimp, Pan troglodytes +n02483362 gibbon, Hylobates lar +n02483708 siamang, Hylobates syndactylus, Symphalangus syndactylus +n02484975 guenon, guenon monkey +n02486261 patas, hussar monkey, Erythrocebus patas +n02486410 baboon +n02487347 macaque +n02488291 langur +n02488702 colobus, colobus monkey +n02489166 proboscis monkey, Nasalis larvatus +n02490219 marmoset +n02492035 capuchin, ringtail, Cebus capucinus +n02492660 howler monkey, howler +n02493509 titi, titi monkey +n02493793 spider monkey, Ateles geoffroyi +n02494079 squirrel monkey, Saimiri sciureus +n02497673 Madagascar cat, ring-tailed lemur, Lemur catta +n02500267 indri, indris, Indri indri, Indri brevicaudatus +n02504013 Indian elephant, Elephas maximus +n02504458 African elephant, Loxodonta africana +n02509815 lesser panda, red panda, panda, bear cat, cat bear, Ailurus fulgens +n02510455 giant panda, panda, panda bear, coon bear, Ailuropoda melanoleuca +n02514041 barracouta, snoek +n02526121 eel +n02536864 coho, cohoe, coho salmon, blue jack, silver salmon, Oncorhynchus kisutch +n02606052 rock beauty, Holocanthus tricolor +n02607072 anemone fish +n02640242 sturgeon +n02641379 gar, garfish, garpike, billfish, Lepisosteus osseus +n02643566 lionfish +n02655020 puffer, pufferfish, blowfish, globefish +n02666196 abacus +n02667093 abaya +n02669723 academic gown, academic robe, judge's robe +n02672831 accordion, piano accordion, squeeze box +n02676566 acoustic guitar +n02687172 aircraft carrier, carrier, flattop, attack aircraft carrier +n02690373 airliner +n02692877 airship, dirigible +n02699494 altar +n02701002 ambulance +n02704792 amphibian, amphibious vehicle +n02708093 analog clock +n02727426 apiary, bee house +n02730930 apron +n02747177 ashcan, trash can, garbage can, wastebin, ash bin, ash-bin, ashbin, dustbin, trash barrel, trash bin +n02749479 assault rifle, assault gun +n02769748 backpack, back pack, knapsack, packsack, rucksack, haversack +n02776631 bakery, bakeshop, bakehouse +n02777292 balance beam, beam +n02782093 balloon +n02783161 ballpoint, ballpoint pen, ballpen, Biro +n02786058 Band Aid +n02787622 banjo +n02788148 bannister, banister, balustrade, balusters, handrail +n02790996 barbell +n02791124 barber chair +n02791270 barbershop +n02793495 barn +n02794156 barometer +n02795169 barrel, cask +n02797295 barrow, garden cart, lawn cart, wheelbarrow +n02799071 baseball +n02802426 basketball +n02804414 bassinet +n02804610 bassoon +n02807133 bathing cap, swimming cap +n02808304 bath towel +n02808440 bathtub, bathing tub, bath, tub +n02814533 beach wagon, station wagon, wagon, estate car, beach waggon, station waggon, waggon +n02814860 beacon, lighthouse, beacon light, pharos +n02815834 beaker +n02817516 bearskin, busby, shako +n02823428 beer bottle +n02823750 beer glass +n02825657 bell cote, bell cot +n02834397 bib +n02835271 bicycle-built-for-two, tandem bicycle, tandem +n02837789 bikini, two-piece +n02840245 binder, ring-binder +n02841315 binoculars, field glasses, opera glasses +n02843684 birdhouse +n02859443 boathouse +n02860847 bobsled, bobsleigh, bob +n02865351 bolo tie, bolo, bola tie, bola +n02869837 bonnet, poke bonnet +n02870880 bookcase +n02871525 bookshop, bookstore, bookstall +n02877765 bottlecap +n02879718 bow +n02883205 bow tie, bow-tie, bowtie +n02892201 brass, memorial tablet, plaque +n02892767 brassiere, bra, bandeau +n02894605 breakwater, groin, groyne, mole, bulwark, seawall, jetty +n02895154 breastplate, aegis, egis +n02906734 broom +n02909870 bucket, pail +n02910353 buckle +n02916936 bulletproof vest +n02917067 bullet train, bullet +n02927161 butcher shop, meat market +n02930766 cab, hack, taxi, taxicab +n02939185 caldron, cauldron +n02948072 candle, taper, wax light +n02950826 cannon +n02951358 canoe +n02951585 can opener, tin opener +n02963159 cardigan +n02965783 car mirror +n02966193 carousel, carrousel, merry-go-round, roundabout, whirligig +n02966687 carpenter's kit, tool kit +n02971356 carton +n02974003 car wheel +n02977058 cash machine, cash dispenser, automated teller machine, automatic teller machine, automated teller, automatic teller, ATM +n02978881 cassette +n02979186 cassette player +n02980441 castle +n02981792 catamaran +n02988304 CD player +n02992211 cello, violoncello +n02992529 cellular telephone, cellular phone, cellphone, cell, mobile phone +n02999410 chain +n03000134 chainlink fence +n03000247 chain mail, ring mail, mail, chain armor, chain armour, ring armor, ring armour +n03000684 chain saw, chainsaw +n03014705 chest +n03016953 chiffonier, commode +n03017168 chime, bell, gong +n03018349 china cabinet, china closet +n03026506 Christmas stocking +n03028079 church, church building +n03032252 cinema, movie theater, movie theatre, movie house, picture palace +n03041632 cleaver, meat cleaver, chopper +n03042490 cliff dwelling +n03045698 cloak +n03047690 clog, geta, patten, sabot +n03062245 cocktail shaker +n03063599 coffee mug +n03063689 coffeepot +n03065424 coil, spiral, volute, whorl, helix +n03075370 combination lock +n03085013 computer keyboard, keypad +n03089624 confectionery, confectionary, candy store +n03095699 container ship, containership, container vessel +n03100240 convertible +n03109150 corkscrew, bottle screw +n03110669 cornet, horn, trumpet, trump +n03124043 cowboy boot +n03124170 cowboy hat, ten-gallon hat +n03125729 cradle +n03126707 crane +n03127747 crash helmet +n03127925 crate +n03131574 crib, cot +n03133878 Crock Pot +n03134739 croquet ball +n03141823 crutch +n03146219 cuirass +n03160309 dam, dike, dyke +n03179701 desk +n03180011 desktop computer +n03187595 dial telephone, dial phone +n03188531 diaper, nappy, napkin +n03196217 digital clock +n03197337 digital watch +n03201208 dining table, board +n03207743 dishrag, dishcloth +n03207941 dishwasher, dish washer, dishwashing machine +n03208938 disk brake, disc brake +n03216828 dock, dockage, docking facility +n03218198 dogsled, dog sled, dog sleigh +n03220513 dome +n03223299 doormat, welcome mat +n03240683 drilling platform, offshore rig +n03249569 drum, membranophone, tympan +n03250847 drumstick +n03255030 dumbbell +n03259280 Dutch oven +n03271574 electric fan, blower +n03272010 electric guitar +n03272562 electric locomotive +n03290653 entertainment center +n03291819 envelope +n03297495 espresso maker +n03314780 face powder +n03325584 feather boa, boa +n03337140 file, file cabinet, filing cabinet +n03344393 fireboat +n03345487 fire engine, fire truck +n03347037 fire screen, fireguard +n03355925 flagpole, flagstaff +n03372029 flute, transverse flute +n03376595 folding chair +n03379051 football helmet +n03384352 forklift +n03388043 fountain +n03388183 fountain pen +n03388549 four-poster +n03393912 freight car +n03394916 French horn, horn +n03400231 frying pan, frypan, skillet +n03404251 fur coat +n03417042 garbage truck, dustcart +n03424325 gasmask, respirator, gas helmet +n03425413 gas pump, gasoline pump, petrol pump, island dispenser +n03443371 goblet +n03444034 go-kart +n03445777 golf ball +n03445924 golfcart, golf cart +n03447447 gondola +n03447721 gong, tam-tam +n03450230 gown +n03452741 grand piano, grand +n03457902 greenhouse, nursery, glasshouse +n03459775 grille, radiator grille +n03461385 grocery store, grocery, food market, market +n03467068 guillotine +n03476684 hair slide +n03476991 hair spray +n03478589 half track +n03481172 hammer +n03482405 hamper +n03483316 hand blower, blow dryer, blow drier, hair dryer, hair drier +n03485407 hand-held computer, hand-held microcomputer +n03485794 handkerchief, hankie, hanky, hankey +n03492542 hard disc, hard disk, fixed disk +n03494278 harmonica, mouth organ, harp, mouth harp +n03495258 harp +n03496892 harvester, reaper +n03498962 hatchet +n03527444 holster +n03529860 home theater, home theatre +n03530642 honeycomb +n03532672 hook, claw +n03534580 hoopskirt, crinoline +n03535780 horizontal bar, high bar +n03538406 horse cart, horse-cart +n03544143 hourglass +n03584254 iPod +n03584829 iron, smoothing iron +n03590841 jack-o'-lantern +n03594734 jean, blue jean, denim +n03594945 jeep, landrover +n03595614 jersey, T-shirt, tee shirt +n03598930 jigsaw puzzle +n03599486 jinrikisha, ricksha, rickshaw +n03602883 joystick +n03617480 kimono +n03623198 knee pad +n03627232 knot +n03630383 lab coat, laboratory coat +n03633091 ladle +n03637318 lampshade, lamp shade +n03642806 laptop, laptop computer +n03649909 lawn mower, mower +n03657121 lens cap, lens cover +n03658185 letter opener, paper knife, paperknife +n03661043 library +n03662601 lifeboat +n03666591 lighter, light, igniter, ignitor +n03670208 limousine, limo +n03673027 liner, ocean liner +n03676483 lipstick, lip rouge +n03680355 Loafer +n03690938 lotion +n03691459 loudspeaker, speaker, speaker unit, loudspeaker system, speaker system +n03692522 loupe, jeweler's loupe +n03697007 lumbermill, sawmill +n03706229 magnetic compass +n03709823 mailbag, postbag +n03710193 mailbox, letter box +n03710637 maillot +n03710721 maillot, tank suit +n03717622 manhole cover +n03720891 maraca +n03721384 marimba, xylophone +n03724870 mask +n03729826 matchstick +n03733131 maypole +n03733281 maze, labyrinth +n03733805 measuring cup +n03742115 medicine chest, medicine cabinet +n03743016 megalith, megalithic structure +n03759954 microphone, mike +n03761084 microwave, microwave oven +n03763968 military uniform +n03764736 milk can +n03769881 minibus +n03770439 miniskirt, mini +n03770679 minivan +n03773504 missile +n03775071 mitten +n03775546 mixing bowl +n03776460 mobile home, manufactured home +n03777568 Model T +n03777754 modem +n03781244 monastery +n03782006 monitor +n03785016 moped +n03786901 mortar +n03787032 mortarboard +n03788195 mosque +n03788365 mosquito net +n03791053 motor scooter, scooter +n03792782 mountain bike, all-terrain bike, off-roader +n03792972 mountain tent +n03793489 mouse, computer mouse +n03794056 mousetrap +n03796401 moving van +n03803284 muzzle +n03804744 nail +n03814639 neck brace +n03814906 necklace +n03825788 nipple +n03832673 notebook, notebook computer +n03837869 obelisk +n03838899 oboe, hautboy, hautbois +n03840681 ocarina, sweet potato +n03841143 odometer, hodometer, mileometer, milometer +n03843555 oil filter +n03854065 organ, pipe organ +n03857828 oscilloscope, scope, cathode-ray oscilloscope, CRO +n03866082 overskirt +n03868242 oxcart +n03868863 oxygen mask +n03871628 packet +n03873416 paddle, boat paddle +n03874293 paddlewheel, paddle wheel +n03874599 padlock +n03876231 paintbrush +n03877472 pajama, pyjama, pj's, jammies +n03877845 palace +n03884397 panpipe, pandean pipe, syrinx +n03887697 paper towel +n03888257 parachute, chute +n03888605 parallel bars, bars +n03891251 park bench +n03891332 parking meter +n03895866 passenger car, coach, carriage +n03899768 patio, terrace +n03902125 pay-phone, pay-station +n03903868 pedestal, plinth, footstall +n03908618 pencil box, pencil case +n03908714 pencil sharpener +n03916031 perfume, essence +n03920288 Petri dish +n03924679 photocopier +n03929660 pick, plectrum, plectron +n03929855 pickelhaube +n03930313 picket fence, paling +n03930630 pickup, pickup truck +n03933933 pier +n03935335 piggy bank, penny bank +n03937543 pill bottle +n03938244 pillow +n03942813 ping-pong ball +n03944341 pinwheel +n03947888 pirate, pirate ship +n03950228 pitcher, ewer +n03954731 plane, carpenter's plane, woodworking plane +n03956157 planetarium +n03958227 plastic bag +n03961711 plate rack +n03967562 plow, plough +n03970156 plunger, plumber's helper +n03976467 Polaroid camera, Polaroid Land camera +n03976657 pole +n03977966 police van, police wagon, paddy wagon, patrol wagon, wagon, black Maria +n03980874 poncho +n03982430 pool table, billiard table, snooker table +n03983396 pop bottle, soda bottle +n03991062 pot, flowerpot +n03992509 potter's wheel +n03995372 power drill +n03998194 prayer rug, prayer mat +n04004767 printer +n04005630 prison, prison house +n04008634 projectile, missile +n04009552 projector +n04019541 puck, hockey puck +n04023962 punching bag, punch bag, punching ball, punchball +n04026417 purse +n04033901 quill, quill pen +n04033995 quilt, comforter, comfort, puff +n04037443 racer, race car, racing car +n04039381 racket, racquet +n04040759 radiator +n04041544 radio, wireless +n04044716 radio telescope, radio reflector +n04049303 rain barrel +n04065272 recreational vehicle, RV, R.V. +n04067472 reel +n04069434 reflex camera +n04070727 refrigerator, icebox +n04074963 remote control, remote +n04081281 restaurant, eating house, eating place, eatery +n04086273 revolver, six-gun, six-shooter +n04090263 rifle +n04099969 rocking chair, rocker +n04111531 rotisserie +n04116512 rubber eraser, rubber, pencil eraser +n04118538 rugby ball +n04118776 rule, ruler +n04120489 running shoe +n04125021 safe +n04127249 safety pin +n04131690 saltshaker, salt shaker +n04133789 sandal +n04136333 sarong +n04141076 sax, saxophone +n04141327 scabbard +n04141975 scale, weighing machine +n04146614 school bus +n04147183 schooner +n04149813 scoreboard +n04152593 screen, CRT screen +n04153751 screw +n04154565 screwdriver +n04162706 seat belt, seatbelt +n04179913 sewing machine +n04192698 shield, buckler +n04200800 shoe shop, shoe-shop, shoe store +n04201297 shoji +n04204238 shopping basket +n04204347 shopping cart +n04208210 shovel +n04209133 shower cap +n04209239 shower curtain +n04228054 ski +n04229816 ski mask +n04235860 sleeping bag +n04238763 slide rule, slipstick +n04239074 sliding door +n04243546 slot, one-armed bandit +n04251144 snorkel +n04252077 snowmobile +n04252225 snowplow, snowplough +n04254120 soap dispenser +n04254680 soccer ball +n04254777 sock +n04258138 solar dish, solar collector, solar furnace +n04259630 sombrero +n04263257 soup bowl +n04264628 space bar +n04265275 space heater +n04266014 space shuttle +n04270147 spatula +n04273569 speedboat +n04275548 spider web, spider's web +n04277352 spindle +n04285008 sports car, sport car +n04286575 spotlight, spot +n04296562 stage +n04310018 steam locomotive +n04311004 steel arch bridge +n04311174 steel drum +n04317175 stethoscope +n04325704 stole +n04326547 stone wall +n04328186 stopwatch, stop watch +n04330267 stove +n04332243 strainer +n04335435 streetcar, tram, tramcar, trolley, trolley car +n04336792 stretcher +n04344873 studio couch, day bed +n04346328 stupa, tope +n04347754 submarine, pigboat, sub, U-boat +n04350905 suit, suit of clothes +n04355338 sundial +n04355933 sunglass +n04356056 sunglasses, dark glasses, shades +n04357314 sunscreen, sunblock, sun blocker +n04366367 suspension bridge +n04367480 swab, swob, mop +n04370456 sweatshirt +n04371430 swimming trunks, bathing trunks +n04371774 swing +n04372370 switch, electric switch, electrical switch +n04376876 syringe +n04380533 table lamp +n04389033 tank, army tank, armored combat vehicle, armoured combat vehicle +n04392985 tape player +n04398044 teapot +n04399382 teddy, teddy bear +n04404412 television, television system +n04409515 tennis ball +n04417672 thatch, thatched roof +n04418357 theater curtain, theatre curtain +n04423845 thimble +n04428191 thresher, thrasher, threshing machine +n04429376 throne +n04435653 tile roof +n04442312 toaster +n04443257 tobacco shop, tobacconist shop, tobacconist +n04447861 toilet seat +n04456115 torch +n04458633 totem pole +n04461696 tow truck, tow car, wrecker +n04462240 toyshop +n04465501 tractor +n04467665 trailer truck, tractor trailer, trucking rig, rig, articulated lorry, semi +n04476259 tray +n04479046 trench coat +n04482393 tricycle, trike, velocipede +n04483307 trimaran +n04485082 tripod +n04486054 triumphal arch +n04487081 trolleybus, trolley coach, trackless trolley +n04487394 trombone +n04493381 tub, vat +n04501370 turnstile +n04505470 typewriter keyboard +n04507155 umbrella +n04509417 unicycle, monocycle +n04515003 upright, upright piano +n04517823 vacuum, vacuum cleaner +n04522168 vase +n04523525 vault +n04525038 velvet +n04525305 vending machine +n04532106 vestment +n04532670 viaduct +n04536866 violin, fiddle +n04540053 volleyball +n04542943 waffle iron +n04548280 wall clock +n04548362 wallet, billfold, notecase, pocketbook +n04550184 wardrobe, closet, press +n04552348 warplane, military plane +n04553703 washbasin, handbasin, washbowl, lavabo, wash-hand basin +n04554684 washer, automatic washer, washing machine +n04557648 water bottle +n04560804 water jug +n04562935 water tower +n04579145 whiskey jug +n04579432 whistle +n04584207 wig +n04589890 window screen +n04590129 window shade +n04591157 Windsor tie +n04591713 wine bottle +n04592741 wing +n04596742 wok +n04597913 wooden spoon +n04599235 wool, woolen, woollen +n04604644 worm fence, snake fence, snake-rail fence, Virginia fence +n04606251 wreck +n04612504 yawl +n04613696 yurt +n06359193 web site, website, internet site, site +n06596364 comic book +n06785654 crossword puzzle, crossword +n06794110 street sign +n06874185 traffic light, traffic signal, stoplight +n07248320 book jacket, dust cover, dust jacket, dust wrapper +n07565083 menu +n07579787 plate +n07583066 guacamole +n07584110 consomme +n07590611 hot pot, hotpot +n07613480 trifle +n07614500 ice cream, icecream +n07615774 ice lolly, lolly, lollipop, popsicle +n07684084 French loaf +n07693725 bagel, beigel +n07695742 pretzel +n07697313 cheeseburger +n07697537 hotdog, hot dog, red hot +n07711569 mashed potato +n07714571 head cabbage +n07714990 broccoli +n07715103 cauliflower +n07716358 zucchini, courgette +n07716906 spaghetti squash +n07717410 acorn squash +n07717556 butternut squash +n07718472 cucumber, cuke +n07718747 artichoke, globe artichoke +n07720875 bell pepper +n07730033 cardoon +n07734744 mushroom +n07742313 Granny Smith +n07745940 strawberry +n07747607 orange +n07749582 lemon +n07753113 fig +n07753275 pineapple, ananas +n07753592 banana +n07754684 jackfruit, jak, jack +n07760859 custard apple +n07768694 pomegranate +n07802026 hay +n07831146 carbonara +n07836838 chocolate sauce, chocolate syrup +n07860988 dough +n07871810 meat loaf, meatloaf +n07873807 pizza, pizza pie +n07875152 potpie +n07880968 burrito +n07892512 red wine +n07920052 espresso +n07930864 cup +n07932039 eggnog +n09193705 alp +n09229709 bubble +n09246464 cliff, drop, drop-off +n09256479 coral reef +n09288635 geyser +n09332890 lakeside, lakeshore +n09399592 promontory, headland, head, foreland +n09421951 sandbar, sand bar +n09428293 seashore, coast, seacoast, sea-coast +n09468604 valley, vale +n09472597 volcano +n09835506 ballplayer, baseball player +n10148035 groom, bridegroom +n10565667 scuba diver +n11879895 rapeseed +n11939491 daisy +n12057211 yellow lady's slipper, yellow lady-slipper, Cypripedium calceolus, Cypripedium parviflorum +n12144580 corn +n12267677 acorn +n12620546 hip, rose hip, rosehip +n12768682 buckeye, horse chestnut, conker +n12985857 coral fungus +n12998815 agaric +n13037406 gyromitra +n13040303 stinkhorn, carrion fungus +n13044778 earthstar +n13052670 hen-of-the-woods, hen of the woods, Polyporus frondosus, Grifola frondosa +n13054560 bolete +n13133613 ear, spike, capitulum +n15075141 toilet tissue, toilet paper, bathroom tissue diff --git a/modules/dnn/scripts/download_model.py b/modules/dnn/scripts/download_model.py index 723aae414..d2951f5ea 100644 --- a/modules/dnn/scripts/download_model.py +++ b/modules/dnn/scripts/download_model.py @@ -21,15 +21,15 @@ def reporthook(count, block_size, total_size): duration = max(1, time.time() - start_time) if int(duration) == int(prev_duration): return - + progress_size = int(count * block_size) speed = int(progress_size / (1024 * duration)) percent = int(count * block_size * 100 / total_size) - sys.stdout.write("\r...%d%%, %d MB, %d KB/s, %d seconds passed" % + sys.stdout.write("\r...%d%%, %d MB, %d KB/s, %d seconds passed" % (percent, progress_size / (1024 * 1024), speed, duration)) sys.stdout.flush() prev_duration = duration - + # Function for checking SHA1. def model_checks_out(filename, sha1): @@ -41,14 +41,14 @@ def model_download(filename, url, sha1): if os.path.exists(filename) and model_checks_out(filename, sha1): print("Model {} already exists.".format(filename)) return - + # Download and verify model. urllib.urlretrieve(url, filename, reporthook) print model_checks_out(filename, sha1) if not model_checks_out(filename, sha1): print("ERROR: model {} did not download correctly!".format(url)) sys.exit(1) - + if __name__ == '__main__': parser = argparse.ArgumentParser(description="Downloading trained model binaries.") parser.add_argument("download_list") @@ -58,22 +58,22 @@ if __name__ == '__main__': if not test_dir: print "ERROR: OPENCV_TEST_DATA_PATH environment not specified" sys.exit(1) - + try: with open(args.download_list, 'r') as f: models_to_download = json.load(f) except: print "ERROR: Can't pasrse {}".format(args.download_list) sys.exit(1) - + for model_name in models_to_download: model = models_to_download[model_name] - + dst_dir = os.path.join(test_dir, os.path.dirname(model['file'])) dst_file = os.path.join(test_dir, model['file']) if not os.path.exists(dst_dir): print "ERROR: Can't find module testdata path '{}'".format(dst_dir) sys.exit(1) - + print "Downloading model '{}' to {} from {} ...".format(model_name, dst_file, model['url']) model_download(dst_file, model['url'], model['sha1']) \ No newline at end of file diff --git a/modules/dnn/src/caffe_importer.cpp b/modules/dnn/src/caffe_importer.cpp index 5542b7e03..a91bde284 100644 --- a/modules/dnn/src/caffe_importer.cpp +++ b/modules/dnn/src/caffe_importer.cpp @@ -202,7 +202,7 @@ namespace struct BlobNote { - BlobNote(const std::string &_name, int _layerId, int _outNum) : + BlobNote(const std::string &_name, int _layerId, int _outNum) : name(_name.c_str()), layerId(_layerId), outNum(_outNum) {} const char *name; @@ -237,7 +237,7 @@ namespace extractBinaryLayerParms(layer, layerParams); int id = dstNet.addLayer(name, type, layerParams); - + for (int inNum = 0; inNum < layer.bottom_size(); inNum++) addInput(layer.bottom(inNum), id, inNum, dstNet, addedBlobs); @@ -249,7 +249,7 @@ namespace void addOutput(const caffe::LayerParameter &layer, int layerId, int outNum, std::vector &addedBlobs) { const std::string &name = layer.top(outNum); - + bool haveDups = false; for (int idx = (int)addedBlobs.size() - 1; idx >= 0; idx--) { diff --git a/modules/dnn/src/dnn.cpp b/modules/dnn/src/dnn.cpp index 68ec61d01..f0750464f 100644 --- a/modules/dnn/src/dnn.cpp +++ b/modules/dnn/src/dnn.cpp @@ -32,7 +32,7 @@ struct LayerPin LayerPin(int layerId = -1, int outputId = -1) : lid(layerId), oid(outputId) {} - + bool valid() const { return (lid >= 0 && oid >= 0); @@ -104,7 +104,7 @@ private: struct Net::Impl { Impl() - { + { //allocate fake net input layer netInputLayer = Ptr(new NetInputLayer()); LayerData &inpl = layers.insert( make_pair(0, LayerData()) ).first->second; @@ -171,7 +171,7 @@ struct Net::Impl LayerData& getLayerData(int id) { MapIdToLayerData::iterator it = layers.find(id); - + if (it == layers.end()) CV_Error(Error::StsError, "Layer with requested id=" + toString(id) + " not found"); diff --git a/modules/dnn/src/layers/concat_layer.cpp b/modules/dnn/src/layers/concat_layer.cpp index 3dc3267be..dfa45a5be 100644 --- a/modules/dnn/src/layers/concat_layer.cpp +++ b/modules/dnn/src/layers/concat_layer.cpp @@ -28,7 +28,7 @@ namespace dnn void ConcatLayer::allocate(const std::vector &inputs, std::vector &outputs) { CV_Assert(inputs.size() > 0); - + int refType = inputs[0]->type(); BlobShape refShape = inputs[0]->shape(); CV_Assert(axis < refShape.dims()); diff --git a/modules/dnn/src/layers/convolution_layer.cpp b/modules/dnn/src/layers/convolution_layer.cpp index f8468ac43..65fa9d43f 100644 --- a/modules/dnn/src/layers/convolution_layer.cpp +++ b/modules/dnn/src/layers/convolution_layer.cpp @@ -197,7 +197,7 @@ namespace dnn for (int g = 0; g < group; g++) { Mat dstMat(inpGroupCn, inpH*inpW, decnBlob.type(), decnBlob.ptrRaw(n, g*inpGroupCn)); - + if (is1x1()) colMat = dstMat; diff --git a/modules/dnn/src/layers/elementwise_layers.cpp b/modules/dnn/src/layers/elementwise_layers.cpp index 02e63a23e..7d7869989 100644 --- a/modules/dnn/src/layers/elementwise_layers.cpp +++ b/modules/dnn/src/layers/elementwise_layers.cpp @@ -84,7 +84,7 @@ namespace dnn return tanh(x); } }; - + struct SigmoidFunctor { SigmoidFunctor(LayerParams&) {} diff --git a/modules/dnn/src/layers/reshape_layer.cpp b/modules/dnn/src/layers/reshape_layer.cpp index 2c7ba862d..1a6363746 100644 --- a/modules/dnn/src/layers/reshape_layer.cpp +++ b/modules/dnn/src/layers/reshape_layer.cpp @@ -8,7 +8,7 @@ namespace dnn //TODO: Extend cv::Mat::reshape method class ReshapeLayer : public Layer -{ +{ public: ReshapeLayer(LayerParams ¶ms); @@ -121,7 +121,7 @@ void ReshapeLayer::computeOutputShape(int startAxis, int endAxis, BlobShape &inp Ptr createFlattenLayer(LayerParams&) { LayerParams params; - + int shapeDesc[] = {0, -1}; params.set("dim", DictValue::arrayInt(shapeDesc, 2)); diff --git a/modules/dnn/src/layers/slice_layer.cpp b/modules/dnn/src/layers/slice_layer.cpp index fcd1d1f9d..7be41602c 100644 --- a/modules/dnn/src/layers/slice_layer.cpp +++ b/modules/dnn/src/layers/slice_layer.cpp @@ -45,7 +45,7 @@ void SliceLayer::allocate(const std::vector &inputs, std::vector &o int axis = inpBlob.canonicalAxis(inAxis); int axisSize = inpBlob.size(axis); BlobShape inpShape = inpBlob.shape(); - + if (slicePoints.size()) //divide blob with respect to passed parameters { std::vector outAxisSize; diff --git a/modules/dnn/test/cnpy.cpp b/modules/dnn/test/cnpy.cpp index 45abec6a4..bd5aaddd8 100644 --- a/modules/dnn/test/cnpy.cpp +++ b/modules/dnn/test/cnpy.cpp @@ -57,9 +57,9 @@ template<> std::vector& cnpy::operator+=(std::vector& lhs, const cha return lhs; } -void cnpy::parse_npy_header(FILE* fp, unsigned int& word_size, unsigned int*& shape, unsigned int& ndims, bool& fortran_order) { +void cnpy::parse_npy_header(FILE* fp, unsigned int& word_size, unsigned int*& shape, unsigned int& ndims, bool& fortran_order) { char buffer[256]; - size_t res = fread(buffer,sizeof(char),11,fp); + size_t res = fread(buffer,sizeof(char),11,fp); if(res != 11) throw std::runtime_error("parse_npy_header: failed fread"); std::string header = fgets(buffer,256,fp); @@ -85,7 +85,7 @@ void cnpy::parse_npy_header(FILE* fp, unsigned int& word_size, unsigned int*& sh } //endian, word size, data type - //byte order code | stands for not applicable. + //byte order code | stands for not applicable. //not sure when this applies except for byte array loc1 = header.find("descr")+9; bool littleEndian = (header[loc1] == '<' || header[loc1] == '|' ? true : false); @@ -134,7 +134,7 @@ cnpy::NpyArray load_the_npy_file(FILE* fp) { arr.word_size = word_size; arr.shape = std::vector(shape,shape+ndims); delete[] shape; - arr.data = new char[size*word_size]; + arr.data = new char[size*word_size]; arr.fortran_order = fortran_order; size_t nread = fread(arr.data,word_size,size,fp); if(nread != size) @@ -148,7 +148,7 @@ cnpy::npz_t cnpy::npz_load(std::string fname) { if(!fp) printf("npz_load: Error! Unable to open file %s!\n",fname.c_str()); assert(fp); - cnpy::npz_t arrays; + cnpy::npz_t arrays; while(1) { std::vector local_header(30); @@ -166,7 +166,7 @@ cnpy::npz_t cnpy::npz_load(std::string fname) { if(vname_res != name_len) throw std::runtime_error("npz_load: failed fread"); - //erase the lagging .npy + //erase the lagging .npy varname.erase(varname.end()-4,varname.end()); //read in the extra field @@ -182,7 +182,7 @@ cnpy::npz_t cnpy::npz_load(std::string fname) { } fclose(fp); - return arrays; + return arrays; } cnpy::NpyArray cnpy::npz_load(std::string fname, std::string varname) { @@ -191,7 +191,7 @@ cnpy::NpyArray cnpy::npz_load(std::string fname, std::string varname) { if(!fp) { printf("npz_load: Error! Unable to open file %s!\n",fname.c_str()); abort(); - } + } while(1) { std::vector local_header(30); @@ -205,7 +205,7 @@ cnpy::NpyArray cnpy::npz_load(std::string fname, std::string varname) { //read in the variable name unsigned short name_len = *(unsigned short*) &local_header[26]; std::string vname(name_len,' '); - size_t vname_res = fread(&vname[0],sizeof(char),name_len,fp); + size_t vname_res = fread(&vname[0],sizeof(char),name_len,fp); if(vname_res != name_len) throw std::runtime_error("npz_load: failed fread"); vname.erase(vname.end()-4,vname.end()); //erase the lagging .npy @@ -237,7 +237,7 @@ cnpy::NpyArray cnpy::npy_load(std::string fname) { if(!fp) { printf("npy_load: Error! Unable to open file %s!\n",fname.c_str()); - abort(); + abort(); } NpyArray arr = load_the_npy_file(fp); @@ -245,6 +245,3 @@ cnpy::NpyArray cnpy::npy_load(std::string fname) { fclose(fp); return arr; } - - - diff --git a/modules/dnn/test/cnpy.h b/modules/dnn/test/cnpy.h index 90006adb9..dfddde7e4 100644 --- a/modules/dnn/test/cnpy.h +++ b/modules/dnn/test/cnpy.h @@ -27,7 +27,7 @@ namespace cnpy { bool fortran_order; void destruct() {delete[] data;} }; - + struct npz_t : public std::map { void destruct() @@ -49,14 +49,14 @@ namespace cnpy { template std::vector& operator+=(std::vector& lhs, const T rhs) { //write in little endian for(char byte = 0; byte < sizeof(T); byte++) { - char val = *((char*)&rhs+byte); + char val = *((char*)&rhs+byte); lhs.push_back(val); } return lhs; } - template<> std::vector& operator+=(std::vector& lhs, const std::string rhs); - template<> std::vector& operator+=(std::vector& lhs, const char* rhs); + template<> std::vector& operator+=(std::vector& lhs, const std::string rhs); + template<> std::vector& operator+=(std::vector& lhs, const char* rhs); template std::string tostring(T i, int = 0, char = ' ') { @@ -131,7 +131,7 @@ namespace cnpy { if(fp) { //zip file exists. we need to add a new npy file to it. //first read the footer. this gives us the offset and size of the global header - //then read and store the global header. + //then read and store the global header. //below, we will write the the new data at the start of the global header then append the global header and footer below it unsigned int global_header_size; parse_zip_footer(fp,nrecs,global_header_size,global_header_offset); @@ -201,7 +201,7 @@ namespace cnpy { footer += (unsigned int) (global_header_offset + nbytes + local_header.size()); //offset of start of global headers, since global header now starts after newly written array footer += (unsigned short) 0; //zip file comment length - //write everything + //write everything fwrite(&local_header[0],sizeof(char),local_header.size(),fp); fwrite(&npy_header[0],sizeof(char),npy_header.size(),fp); fwrite(data,sizeof(T),nels,fp); diff --git a/modules/dnn/test/test_layers.cpp b/modules/dnn/test/test_layers.cpp index 9aafc10bd..a2dd72998 100644 --- a/modules/dnn/test/test_layers.cpp +++ b/modules/dnn/test/test_layers.cpp @@ -95,7 +95,7 @@ TEST(Layer_Reshape_Split_Slice_Test, Accuracy) net.setBlob(".input", input); net.forward(); Blob output = net.getBlob("output"); - + input.fill(shape, CV_32F, inputMat.data); normAssert(input, output); }