From d3f6a8673186c74db6b50fb10abb7d3e0a7654cc Mon Sep 17 00:00:00 2001 From: Eman Copty Date: Wed, 10 Jan 2018 18:45:23 -0800 Subject: [PATCH 1/1] Changes for 1.12 release --- api/python/mvnc/mvncapi.py | 6 ++++-- api/src/mvnc_api.c | 2 +- api/src/usb_link_vsc.c | 33 ++++++++++++++++++++++++++---- docs/release_notes.md | 30 ++++++++++++--------------- docs/tools/check.md | 3 +-- examples/caffe/AlexNet/Makefile | 2 +- examples/caffe/GoogLeNet/Makefile | 2 +- examples/caffe/SqueezeNet/Makefile | 2 +- examples/tensorflow/inception_v1/Makefile | 2 +- examples/tensorflow/inception_v1/graph | Bin 13254472 -> 13254536 bytes examples/tensorflow/inception_v3/Makefile | 2 +- examples/tensorflow/inception_v3/graph | Bin 54318304 -> 54318368 bytes install.sh | 4 ++-- 13 files changed, 55 insertions(+), 33 deletions(-) diff --git a/api/python/mvnc/mvncapi.py b/api/python/mvnc/mvncapi.py index 523d6fa..cfdcace 100644 --- a/api/python/mvnc/mvncapi.py +++ b/api/python/mvnc/mvncapi.py @@ -187,8 +187,10 @@ class Device: for i in range(40): if v.raw[i * 50] != 0: ss = v.raw[i * 50:] - end = ss.find(0) - l.append(ss[0:end].decode()) + end = ss.find(b'\x00') + val = ss[0:end].decode() + if val: + l.append(val) return l if opt == DeviceOption.THERMAL_STATS: return numpy.frombuffer(v.raw, dtype=numpy.float32) diff --git a/api/src/mvnc_api.c b/api/src/mvnc_api.c index ff98ef0..2975836 100644 --- a/api/src/mvnc_api.c +++ b/api/src/mvnc_api.c @@ -449,7 +449,7 @@ mvncStatus mvncAllocateGraph(void *deviceHandle, void **graphHandle, (nstages - 1) * STAGE_LENGTH) / 2; // A reasonable check on graph correctness - if (nstages > 1024 || noutputs > 64 * 1024 * 1024) + if (noutputs > 64 * 1024 * 1024) return MVNC_UNSUPPORTED_GRAPH_FILE; pthread_mutex_lock(&mm); diff --git a/api/src/usb_link_vsc.c b/api/src/usb_link_vsc.c index f5d267e..d9c8f26 100644 --- a/api/src/usb_link_vsc.c +++ b/api/src/usb_link_vsc.c @@ -42,6 +42,9 @@ #define USB_TIMEOUT 10000 #define USB_MAX_PACKET_SIZE 1024 * 1024 * 10 +#define SLEEP_MS 100 +#define ITERATIONS 50 + static int usb_write(void *f, const void *data, size_t size) { while (size > 0) { @@ -110,7 +113,7 @@ void usblink_resetall() struct libusb_device_descriptor desc; libusb_device_handle *h; size_t i; - int rc, reset = 0; + int rc, iters = 0, cnt_bootrom = 0, cnt_runtime = 0, cnt_after = 0; if ((rc = libusb_get_device_list(NULL, &devs)) < 0) return; @@ -118,8 +121,13 @@ void usblink_resetall() while ((dev = devs[i++]) != NULL) { if (libusb_get_device_descriptor(dev, &desc) < 0) continue; + if (desc.idVendor == DEFAULT_VID && + desc.idProduct == DEFAULT_PID) + cnt_bootrom++; + // If Runtime device found, reset it if (desc.idVendor == DEFAULT_OPEN_VID && desc.idProduct == DEFAULT_OPEN_PID) { + cnt_runtime++; rc = libusb_open(dev, &h); if (rc < -1) continue; @@ -131,11 +139,28 @@ void usblink_resetall() PRINT_DEBUG(stderr, "Found stale device, resetting\n"); usblink_resetmyriad(h); usblink_close(h); - reset = 1; } } - if (reset) - usleep(1000000); + // If some devices needed reset + if(cnt_runtime > 0){ + iters = 0; + // Wait until all devices re-enumerate, or timeout occurs + while((cnt_after < cnt_bootrom + cnt_runtime) && (iters < ITERATIONS)){ + usleep(SLEEP_MS*1000); + cnt_after = 0; + if ((rc = libusb_get_device_list(NULL, &devs)) < 0) + return; + i = 0; + while ((dev = devs[i++]) != NULL) { + if ((rc = libusb_get_device_descriptor(dev, &desc)) < 0) + continue; + if (desc.idVendor == DEFAULT_VID && + desc.idProduct == DEFAULT_PID) + cnt_after++; + } + iters++; + } + } libusb_free_device_list(devs, 1); } diff --git a/docs/release_notes.md b/docs/release_notes.md index 7e3203d..f8987ea 100644 --- a/docs/release_notes.md +++ b/docs/release_notes.md @@ -1,20 +1,15 @@ ============================================================ # Movidius Neural Compute SDK Release Notes -# V1.11.00 2017-12-06 +# V1.12.00 2018-01-10 ============================================================ -As of V1.09.00, SDK has been refactored and contains many new features and structural changes. It is recommended you read the documentation to familiarize with the new features and contents. Please see v1.09.00 release notes, using github tag https://github.com/movidius/ncsdk/tree/v1.09.00.06 - ## SDK Notes: ### New features: -1. Tensorflow 1.4 supported. Tensorflow 1.4 is automatically installed on Ubuntu. -2. SSD supported in Caffe. ssd-caffe is automatically installed with this version. If a previous version of the SDK is installed, Berkeley Caffe is preserved and the symlink at /opt/movidius/caffe is moved to ssd caffe. +1. Improved compiler support for custom networks that use variable batch size via Tensorflow. +2. Improved description on how to use Tensorflow networks that were built for training. Please see "Guidence for Compiling TensorFlow Networks" in the SDK documentation #### Networks: -1. SSD Mobilenet v1 for caffe -2. TinyYolo v2 for Tensorflow via Darkflow transformation of original TinyYolo v2 +1. Facenet based on inception-resnet-v1 (see erratum #12) #### Layers: -1. L2 Normalization -2. Input ## API Notes: 1. No change @@ -32,7 +27,9 @@ Support for the following networks has been tested. 7. TinyYolo v1 8. VGG 16 9. Resnet 50 -10. SSD Mobilenet v1 +10. Resnet-18 +11. SSD Mobilenet v1 + ### Tensorflow r1.3 @@ -60,6 +57,7 @@ Support for the following networks has been tested. - MobileNet_v1_0.25_160 - MobileNet_v1_0.25_128 8. TinyYolo v2 via Darkflow tranformation +9. Facenet based on inception-resnet-v1 (See erratum #12) ## Firmware Features: 1. Convolutions @@ -88,13 +86,11 @@ Support for the following networks has been tested. 19. Batch Normalization 20. L2 Normalization 21. Input Layer - ## Bug Fixes: -1. Fixed: Most recent version of Inception_v4 run fails with FusedBatchNorm not supported error -2. Fixed: Installer deletes installation script, making review of installation process difficult -3. Fixed: Inception Resnet V2 failing with Stage Details Not Supported: FusedBatchNorm error -4. Fixed: Input layer can't be linked to multiple hidden layers +1. Fixed: Tensorflow FusedBatchNorm doesn't support fully connected layer inputs +2. Fixed: Mobilenets on Tensforflow 1.4 provide incorrect classification +3. Fixed: Resnet-18 on Caffe providing NaN results ## Errata: 1. Python 2.7 is fully supported for making user applications, but only the helloworld_py example runs as-is in both python 2.7 and 3.5 due to dependencies on modules. @@ -108,6 +104,6 @@ Support for the following networks has been tested. 9. Depth convolution is tested for 3x3 kernels. 10. A TanH layer’s “top” & “bottom” blobs must have different names.  This is different from a ReLU layer, whose “top” & “bottom” should be named the same as its previous layer. 11. On upgrade from previous versions of SDK, the installer will detect if openCV 3.3.0 was installed, for example from http://github.com/movidius/ncappzoo/apps/stream_ty_gn/install-opencv-from_source.sh. For this release, the installer will prompt to uninstall this specific version of openCV. This is required for ssd-caffe to run correctly. After 1.11 installation is complete, openCV 3.3.0 can be re-installed and the ssd-caffe will continue to function. -12. Resnet 18 is showing unexpected behavior for this release, and is being investigated. To use Resnet 18, please use version 1.10.01 of SDK. +12. Facenet requires L2 Normalization be inserted to be used, please see the support forum for a saver script example. 13. Although mvNCCheck shows per-pixel error for some metrics for mobilenet_v1_224, classification results are not impacted. -14. Initial validation has been done on SSD Mobilenet v1 and TinyYolo v2 but more thorough evaluation is underway. +14. Initial validation has been done on SSD Mobilenet v1 and TinyYolo v2 but more thorough evaluation is underway. diff --git a/docs/tools/check.md b/docs/tools/check.md index 9cc6158..498d6f1 100644 --- a/docs/tools/check.md +++ b/docs/tools/check.md @@ -8,9 +8,8 @@ Revision|1.08 See also| [mvNCCompile](compile.md), [mvNCProfile](profile.md), [TensorFlow™ Info](../TensorFlowUsage.md) ## Overview -This command line tool compiles the provided network, runs the network on the connected Intel® Movidius™ Neural Compute Stick (Intel® Movidius™ NCS), and creates a text/HTML profiling output. The profiling data contains layer-by-layer stats about the performance of the input network. This is very helpful in determining how much time is spent on each layer, and is helpful in determining changes to the network to improve the total inference time for a network on the Intel Movidius NCS. +This command line tool checks the results for an inference on the connected Intel® Movidius™ Neural Compute Stick (Intel® Movidius™ NCS) vs. the caffe results on the host computer for the provided network. -The weights file is not required when profiling a network to determine bottlenecks. ## Syntax diff --git a/examples/caffe/AlexNet/Makefile b/examples/caffe/AlexNet/Makefile index f6b0c26..b738de5 100644 --- a/examples/caffe/AlexNet/Makefile +++ b/examples/caffe/AlexNet/Makefile @@ -83,7 +83,7 @@ compile: prototxt caffemodel check: prototxt caffemodel @echo "\nmaking check" #-${NCCHECK} -w ${CAFFEMODEL_FILENAME} -i ../../data/images/cat.jpg -s 12 -id 281 ${PROTOTXT_FILENAME} -S 255 -M ../../data/ilsvrc12/ilsvrc_2012_mean.npy - -${NCCHECK} -w ${CAFFEMODEL_FILENAME} -i ../../data/images/cat.jpg -s 12 -id 281 ${PROTOTXT_FILENAME} -M 110 -S 255 + -${NCCHECK} -w ${CAFFEMODEL_FILENAME} -i ../../data/images/cat.jpg -s 12 -id 281 ${PROTOTXT_FILENAME} -M 110 -S 255 -metric top1 .PHONY: run run: compile diff --git a/examples/caffe/GoogLeNet/Makefile b/examples/caffe/GoogLeNet/Makefile index 5e2c6fd..8b0b918 100644 --- a/examples/caffe/GoogLeNet/Makefile +++ b/examples/caffe/GoogLeNet/Makefile @@ -84,7 +84,7 @@ compile: prototxt caffemodel check: prototxt caffemodel @echo "\nmaking check" #-${NCCHECK} -w ${CAFFEMODEL_FILENAME} -i ../../data/images/cat.jpg -s 12 -id 281 ${PROTOTXT_FILENAME} -S 255 -M ../../data/ilsvrc12/ilsvrc_2012_mean.npy - ${NCCHECK} -w ${CAFFEMODEL_FILENAME} -i ../../data/images/nps_electric_guitar.png -s 12 -id 546 ${PROTOTXT_FILENAME} -S 255 -M 110 + ${NCCHECK} -w ${CAFFEMODEL_FILENAME} -i ../../data/images/nps_electric_guitar.png -s 12 -id 546 ${PROTOTXT_FILENAME} -S 255 -M 110 -metric top1 .PHONY: run run: compile diff --git a/examples/caffe/SqueezeNet/Makefile b/examples/caffe/SqueezeNet/Makefile index 6aec28b..4d42b16 100644 --- a/examples/caffe/SqueezeNet/Makefile +++ b/examples/caffe/SqueezeNet/Makefile @@ -92,7 +92,7 @@ compile: prototxt caffemodel check: prototxt caffemodel @echo "\nmaking check" #-${NCCHECK} -w ${CAFFEMODEL_FILENAME} -i ../../data/images/cat.jpg -s 12 -id 281 ${PROTOTXT_FILENAME} -S 255 -M ../../data/ilsvrc12/ilsvrc_2012_mean.npy - ${NCCHECK} -w ${CAFFEMODEL_FILENAME} -i ../../data/images/cat.jpg -s 12 -id 281 ${PROTOTXT_FILENAME} -S 255 -M 120 + ${NCCHECK} -w ${CAFFEMODEL_FILENAME} -i ../../data/images/cat.jpg -s 12 -id 281 ${PROTOTXT_FILENAME} -S 255 -M 120 -metric top1 .PHONY: run run: compile diff --git a/examples/tensorflow/inception_v1/Makefile b/examples/tensorflow/inception_v1/Makefile index 79a4ae6..0b9c057 100644 --- a/examples/tensorflow/inception_v1/Makefile +++ b/examples/tensorflow/inception_v1/Makefile @@ -52,7 +52,7 @@ compile: weights .PHONY: check check: weights - -${NCCHECK} -s 12 ${MODEL_FILENAME} ${INPUT_NODE_FLAG} ${OUTPUT_NODE_FLAG} -i ../../data/images/cat.jpg -id 829 -S 2 -M 128 -cs 0,1,2 + -${NCCHECK} -s 12 ${MODEL_FILENAME} ${INPUT_NODE_FLAG} ${OUTPUT_NODE_FLAG} -i ../../data/images/cat.jpg -id 829 -S 2 -M 128 -cs 0,1,2 -metric top1 .PHONY: run run: compile diff --git a/examples/tensorflow/inception_v1/graph b/examples/tensorflow/inception_v1/graph index 3f1850105c4894440ee3d14515f6595c6ab23443..e5d5ae4a9cbbcfb15d2b5683b01fe0025b2267b1 100644 GIT binary patch delta 2674 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 delta 2662 zcmWlbdpOnE8pqE|$xfTJ$t~@6o5ZF_GH$bzgkvNWN-1e8i7u{@+|sghOJ-*z$&^wv zPGd~-9Z6~=8OIop6w@QeNSB$6N1n#1rkr*D_&mRVerrAJUGMk(eplXft;YS2wHhZE zk$1hMz`aC!b_3kgG-#~B-h0z}dfT8pJ(ff#kSwIOIrJ0UjLEN`dXWE`a`H$3oiw%H zSbBkx7i!Hu)XJ(?sH1wtj5moSWM#E8I5SaJt5Ir4!I1r`Q5{L;=yIF2d4!^1A(HbVZG8eKdx<*?_%skcS!Bbsy&6|et##huWp&Mw66^Z@H38ObfgGxGz z)^&Oj>nH){g?eIj`V5{Y^>l;D8X?d0s>i7wZ~OEe^Jp{d!sm~!q6uc8nhyh&!OYDB znEq+dF6L(%6&jky@p`q67rf z(clt(&%S>c$*t&fpx9F2Q#sQtqL39pT9HR%*;-Wj)Vq%6exn>1R}K3E(v z>4~LgynSh6>Oxy!V7{O(kbGEM@&dFaoBCLj2GhA{3Z07!Jyugbf}Sp%e8Jayb%{H} zD3*yV7eQnxkvh;jIEG8=lIUaE=mUxQ|9jIXfmYvQ^*JEYyzOo}k#WsR*hyooFja=aRO`!g$&5MVTf-sW#%m)jMEa18%VFA&#?WOx zJ4heujmvU(Q8kpN%R@xu&4z84W7yUM> zSk8Ac5l(r9^xg5n|Smh0Hk8%U?+2d!x) zRI=6M31oxZ^Q#S3(hsP7u-a*y-_fI1_elwzLFcG@$0e$Rs$h*EmL8$%?V6lS+Q+1+ z9+0N4m1$BI^Uq!j|7_3nV47lG{hsLRU*}*&TcNJ*l}Kcd!!x{0eCRqLmPZnlP08#0^}YPhsekPSp;*8*shct?=UxVun zc{v%A!2xHu+4U5LL@%HgxLgfUCDIY}h(lwS(k95gLsb^E2YvfPC$`fuw0DPISU~q# z%&SnuyxQCoNv3eyu*GNvl_Dg2OXK(aA6=&~nL0gyn`>Cj6Eeq$@z(L}+-!PNw^sd5 z=UKdB8{!q=6Rlhx3d`;KN>W4Gx7+=)=q5VscgPGWh#S-nkp-=0g7_T}#7AHzAF(?r z5xA4G6S2JYho9~2w4vwBQ!f&pdb^}z(nGZUt~=wr-7=}7;ROB2hUyd;s*7sSpp_{7 zE~?v;dJ*|9YH%+p;I7y`A)<@0KfK%WHjQJO)1HPrBIy3O$L$75;eRB0+cb5ty0pEh zON$9QMM{wNKB+bBVdl>JVD22dZH(?B$0Dxs1TBW-+qf7TZmfkvaZOw49DH2&XY|s0 z)}eC%9Xba+KhiGfXdmj;BnynpKeW7^eun7Dp|<0ciGf}5te#s%#QcQ5r94C&jYQB;>2ek44)iBHA{|CX9?xmY<}xmbd&ucap?|j9J^fWVFpoY3!jCmhm(N8BY&O z?6|b6^;2WQ$OOWJsqaInlnH)Hh2W>ODSs{>GCtDyj9y)DN}rPQoM|vicUZ>V=4D{I z_&<~Zf&Ebz5j}+Gx}za0`7~9g9v$`Mu9I{7XoowuS3k83_^D;;r%(oqOwHtEAu=_) zV=3vv=0bK|41I^k+BtGLzZR4AIVJ+KWR4*@a11%7`+;`AXJc;FUOwqBZ{-%wqDmy+ z%k?_XU9KhSc|6XS$8|9>tH%=rtbgDc8e2}R@aUKMu zHm153MLkSw<7sGZEGq}8u^O!}P@`4u9>~w|d|P>y9?wm7sC+D$!jSlTxqTdoa3%Ci z*c&d*nd>Xe#WVm}Y{heJzMtqw#irR@qS41I5Pke?d=cGcgL;)1)I0Z;8Gm;uoz7Xf z(K^&8ol|~Kxp1+mf}B3Zs|2Utar@@BirD1w`2izk!5?9yd_J{rxbm-=*huSyFpjr8zD zOb)+{EmdgJD D$>m9vw~ioZ@=%=IX0P1ZY-IyIe5e; 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 diff --git a/install.sh b/install.sh index aff80c9..9976f01 100644 --- a/install.sh +++ b/install.sh @@ -11,10 +11,10 @@ then cd /tmp else cd /tmp - wget --no-cache http://ncs-forum-uploads.s3.amazonaws.com/ncsdk/ncsdk_01_11/ncsdk_redirector.txt + wget --no-cache http://ncs-forum-uploads.s3.amazonaws.com/ncsdk/ncsdk_01_12/ncsdk_redirector.txt fi -download_filename=NCSDK-1.11.tar.gz +download_filename=NCSDK-1.12.tar.gz # redirector is the url from redirector text file redirector=$(