这是OpenVINO工具包的最新版本,点击下面链接进行下载
l_openvino_toolkit_runtime_raspbian_p_2019.3.334.tgz
下载好工具包既可以安装了,可以参考官网教程:Install OpenVINO™ toolkit for Raspbian* OS
我这里命令和官网有些许不同,但是效果是一样的。
下载完后工具包位于/home/pi/Downloads目录下,如果不是,可以创建一个Downloads目录并把工具包放在此目录下
切换至Downloads目录下:
cd ~/Downloads
解压包:
tar -xf l_openvino_toolkit_runtime_raspbian_p_2019.3.334.tgz
安装cmake(后面会用到):
apt install cmake
配置路径与环境:
执行以下命令,会自动对setupvars.sh文件做修改
sed -i "s||$(pwd)/l_openvino_toolkit_runtime_raspbian_p_2019.3.334|" l_openvino_toolkit_runtime_raspbian_p_2019.3.334/bin/setupvars.sh
配置环境(两种做法):
一种临时的,只对该次窗口有效
suorce l_openvino_toolkit_runtime_raspbian_p_2019.3.334/bin/setupvars.sh
另一种永久的
leafpad /home/pi/.bashrc
打开.bashrc文件,在最后一行添加
source /home/pi/Downloads/l_openvino_toolkit_runtime_raspbian_p_2019.3.334/bin/setupvars.sh
[setupvars.sh] OpenVINO environment initialized
就表示成功了
添加USB规则:
将当前Linux用户添加到users组:
sudo usermod -a -G users "$(whoami)"
注:1、"$(whoami)"是用户名,2、这里要说的是我们现在是root用户,如果打开新窗口的话起始用户是pi,所以出现[ setupvars.sh] OpenVINO environment initialized,是对于pi用户来说的。如果在新窗口中用root执行程序,其实并没有成功加载[ setupvars.sh] OpenVINO environment initialized,需要自己再执行一遍
source/home/pi/Downloads/l_openvino_toolkit_runtime_raspbian_p_2019.3.334/bin/setupvars.sh,才能给root用户配置好OpenVINO environment initialized。
接下来配置USB规则,执行:
sh l_openvino_toolkit_runtime_raspbian_p_2019.3.334/install_dependencies/install_NCS_udev_rules.sh
demo测试验证安装是否成功
运行人脸检测的实例
cd l_openvino_toolkit_runtime_raspbian_p_2019.3.334/deployment_tools/inference_engine/samples
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-march=armv7-a"
make -j2 object_detection_sample_ssd
编译完成后,下载网络和权重文件:
wget --no-check-certificate https://download.01.org/opencv/2019/open_model_zoo/R1/models_bin/face-detection-adas-0001/FP16/face-detection-adas-0001.bin
wget --no-check-certificate https://download.01.org/opencv/2019/open_model_zoo/R1/models_bin/face-detection-adas-0001/FP16/face-detection-adas-0001.xml
然后自己在网上找一张人脸的图片,执行
./armv7l/Release/object_detection_sample_ssd -m face-detection-adas-0001.xml -d MYRIAD -i 图片的绝对路径
如果运行成功,会在build文件夹下输出一种观念out_0.bmp图片,即表示计算棒运行成功。
Opencv+python api 调用方法
新建一个文件夹,先建立一个face_detection.py文件,写入:
import cv2 as cv
# Load the model
net = cv.dnn.readNet('face-detection-adas-0001.xml', 'face-detection-adas-0001.bin')
# Specify target device
net.setPreferableTarget(cv.dnn.DNN_TARGET_MYRIAD)
# Read an image
frame = cv.imread('/path/to/image')
# Prepare input blob and perform an inference
blob = cv.dnn.blobFromImage(frame, size=(672, 384), ddepth=cv.CV_8U) net.setInput(blob)
out = net.forward()
# Draw detected faces on the frame
for detection in out.reshape(-1, 7):
confidence = float(detection[2])
xmin = int(detection[3] * frame.shape[1])
ymin = int(detection[4] * frame.shape[0])
xmax = int(detection[5] * frame.shape[1])
ymax = int(detection[6] * frame.shape[0])
if confidence > 0.5:
cv.rectangle(frame, (xmin, ymin), (xmax, ymax), color=(0, 255, 0))
# Save the frame to an image file
cv.imwrite('out.png', frame)
在文件夹中放入刚刚我们下载的那两个文件:face-detection-adas-0001.bin和face-detection-adas-0001.xml还有用于检测用的脸的图片,执行:
python3 face_detection.py
程序运行成功,文件夹看见输出结果,检测成功。测试摄像头就就不写了,有需要的可以和我讨论。
可以进入OpenVINO官网参考官方安装步骤,也可以参考我的安装步骤。
英特尔®分布式OpenVINO™工具包核心组件安装步骤:
如果您尚未下载英特尔®分布式OpenVINO™工具包,请下载最新版本。默认情况下,该文件将保存到Downloads目录w_openvino_toolkit_p_2019.3.379.exe。
转到该Downloads文件夹。
双击w_openvino_toolkit_p_2019.3.379.exe。将打开一个窗口,您可以选择安装目录和组件。默认安装目录是C:\Program Files (x86)\IntelSWTools\openvino_2019.3.379 .为了简便,还会创建 C:\Program Files (x86)\IntelSWTools\openvino安装目录快捷方式。如果选择其他安装目录,安装程序将为您创建目录:
单击下一步。
系统会询问您是否同意收集信息。选择您选择的选项。单击下一步。
如果您缺少外部依赖项,则会看到警告屏幕。记下您缺少的依赖项。**此时您不需要采取任何行动。**安装英特尔®分布式OpenVINO™工具包核心组件后,将向您提供安装缺少的依赖项说明。下面的屏幕表示您缺少两个依赖项:
单击下一步。
单击完成以关闭安装向导。一个新的浏览器窗口将打开到安装指南的下一部分,以设置环境变量。您在同一文档中。如果您在未先打开本安装指南的情况下运行安装,则会打开新窗口。
如果安装指示您必须安装依赖项,请先安装它们。如果没有缺少的依赖项,则可以继续设置环境变量。
这里只介绍免费版Microsoft Visual Studio 2019的安装步骤,2017或2015版本也是可以的,有问题可以看看其他博主或是一起讨论。
注意:如果使用Microsoft Visual Studio 2019,则需要安装CMake 3.14。
转到CMake下载站点
在获取软件标题下,单击第一段中最新稳定的链接。您的屏幕显示最新版本信息。
向下滚动到Windows win64-x64 Installer行。
单击关联的文件名以下载安装程序。文件名将具有扩展名.msi。该文件将保存到您的Downloads文件夹中。
转到该Downloads文件夹。
双击该文件以启动安装程序。
注意:如果安装了以前版本的CMake,系统会提示您将其卸载。在安装新版本之前,必须先卸载以前的版本。按照屏幕上的说明操作,然后再次启动安装程序以安装新版本。
在安装程序中,为所有用户选择“ 将CMake添加到系统PATH ”选项:
单击下一步。
安装完成后单击“ 完成 ”。
官网没有找到CMake3.14的,可以点击CMake3.14 进行下载。
运行模型优化器需要带有pip的python 3.6.5。使用以下步骤安装正确版本的python软件。
1.转到Python 3.6.5下载页面,然后单击Windows x86-64可执行安装程序以下载可执行文件。该文件保存python-3.6.5-amd64.exe在您的Downloads文件夹中。
2.双击该文件以启动安装。
3.确保屏幕顶部显示python 3.6.5(64位)。
4.重要信息:在安装屏幕的底部,选择“ 将Python 3.6添加到PATH”。
5.单击安装屏幕顶部附近的立即安装,然后完成安装。
6.安装完成后,单击“ 关闭”。
在编译和运行OpenVINO™应用程序之前,必须更新多个环境变量。打开命令提示符并运行以下批处理文件以临时设置环境变量:
C:\Program Files(x86)\IntelSWTools\openvino\bin\setupvars.bat
(可选):关闭“命令提示符”窗口时,将删除OpenVINO工具箱环境变量。作为选项,您可以手动永久设置环境变量。
重要信息:这些步骤是必需的。您必须为至少一个框架配置Model Optimizer。如果您未完成本节中的步骤,模型优化程序将失败。
C:\Program Files (x86)\IntelSWTools\openvino\deployment_tools\model_optimizer
您可以一次为所有受支持的框架配置模型优化程序,也可以一次为一个框架配置模型优化程序。选择最适合您需求的选项。如果看到错误消息,请确保已安装所有依赖项。
选项1:同时为所有支持的框架配置Model Optimizer
打开命令提示符,转到Model Optimizer条件目录,执行下列命令以配置Caffe *,TensorFlow *,MXNet *,Kaldi *和ONNX *的模型优化器。
install_prerequisites.bat
选项2:分别为每个框架配置模型优化器
install_prerequisites_caffe.bat
install_prerequisites_tf.bat
install_prerequisites_mxnet.bat
install_prerequisites_onnx.bat
install_prerequisites_kaldi.bat
**注意:**要运行英特尔处理器显卡,英特尔Movidius™神经计算棒,英特尔神经计算棒2,或英特尔®视觉加速器设计与英特尔Movidius的VPU™演示应用程序,请确保您完成了额外的安装步骤第一。
执行下列代码:
cd C:\Program Files (x86)\IntelSWTools\openvino\deployment_tools\demo\
要运行该脚本,请启动该demo_squeezenet_download_convert_run.bat文件:
demo_squeezenet_download_convert_run.bat
demo_security_barrier_camera.bat
您将打开两个窗口:
如果没有现成的,可以从pjreddie网站下载
Yolo V3 COCO weights(237MB),Tiny Yolo V3 COCO weights(34MB), 标签文件 coco.names
OpenVINO不支持直接使用Yolo V3的.weights文件,目前仅支持ONNX、TensorFlow、Caffe和MXNet。需要先把.weights文件转换成TensorFlow的.pb文件。
官方推荐转换工具为: https://github.com/mystic123/tensorflow-yolo-v3
我这边推荐这个仓库:https://github.com/PINTO0309/OpenVINO-YoloV3
自己在桌面新建一个文件夹例如raspberry,将下载的仓库放进新建的文件夹进行解压,并将前面下载的两个权重放进解压的仓库中。
转换yolov3.weights的指令如下:
python convert_weights_pb.py --weights_file yolov3-tiny.weights --tiny True --size 416 --output_graph frozen_darknet_yolov3_tiny_model.pb --data_format NHWC
上面指令是将yolov3-tiny.weights转为pb文件,传的参数:–tiny必须指定True, --data_format 必须是NHWC,否则后面你拿转成功的pb,然后再去转xml和bin,然后做目标检测会遇到此类错误:
[ ERROR ] Cannot infer shapes or values for node "detector/yolo-v3/meshgrid_1/mul_1/YoloRegion".
[ ERROR ] index 2 is out of bounds for axis 0 with size 2
[ ERROR ]
[ ERROR ] It can happen due to bug in custom shape infer function .
[ ERROR ] Or because the node inputs have incorrect values/shapes.
[ ERROR ] Or because input shapes are incorrect (embedded to the model or passed via --input_shape).
[ ERROR ] Run Model Optimizer with --log_level=DEBUG for more information.
[ ERROR ] Stopped shape/value propagation at "detector/yolo-v3/meshgrid_1/mul_1/YoloRegion" node.
For more information please refer to Model Optimizer FAQ (/deployment_tools/documentation/docs/MO_FAQ.html),
错误解析就是数据维度格式不对!参考: https://software.intel.com/en-us/node/802233
所以必须指定数据格式为NHWC (这种格式支持神经计算棒和CPU设备)
转换yolov3.weights的指令如下:
python convert_weights_pb.py --weights_file yolov3.weights --size 416 --data_format NHWC
会在OpenVINO-YoloV3-master目录下生成frozen_darknet_yolov3_tiny_model.pb 和 frozen_darknet_yolov3_model.pb ;
将之前安装好的openvino文件夹里的deployment_tools文件夹拷贝出来。
将拷贝的文件夹粘贴进raspberry文件夹。
切到deploment_tools目录下的model_optimizer并运行以下命令:
转yolov3.pb的指令是:
E:\桌面\raspberry\deployment_tools\model_optimizer>python mo_tf.py --input_model E:\桌面\raspberry\OpenVINO-YoloV3-master\frozen_darknet_yolov3_model.pb --tensorflow_use_custom_operations_config E:\桌面\raspberry\deployment_tools\model_optimizer\extensions\front\tf\yolo_v3.json --input_shape [1,416,416,3] --data_type=FP16
相应文件的路径切换成自己的~需要说明的是树莓派据说支持数据类型是半浮点型的FP16, 官网很多是FP32的是针对PC的。
转yolov3-tiny.pb的指令如下:
E:\桌面\raspberry\deployment_tools\model_optimizer>python mo_tf.py --input_model E:\桌面\raspberry\OpenVINO-YoloV3-master\frozen_darknet_yolov3_tiny_model.pb --tensorflow_use_custom_operations_config E:\桌面\raspberry\deployment_tools\model_optimizer\extensions\front\tf\yolo_v3_tiny.json --input_shape [1,416,416,3] --data_type=FP16
执行完上述指令会生成以下六个文件:
转换过程中,需要你安装了如下依赖项:
1. tensorflow>=1.2.0
2. networkx>=1.11
3. numpy>=1.12.0
4. test-generator==0.1.1
5. defusedxml>=0.5.0
用pip安装就行
打开树莓派,终端激活OpenVINO工具包环境变量,后续操作都在这个终端窗口下执行
source /home/pi/Downloads/l_openvino_toolkit_runtime_raspbian_p_2019.3.334/bin/setupvars.sh
当完成如上操作后,会在终端显示如下:
[setupvars.sh] OpenVINO environment initialized
将上文转换的六个模型文件拷贝到树莓派上的/home/pi/Downloads/yolo_model目录下(可更改成你自己的目录);并将coco.names复制两份,分别重命名为:frozen_darknet_yolov3_model.labels 和frozen_darknet_yolov3_tiny_model.labels ,所以/home/pi/Downloads/yolo_model目录下共有以下8个文件
接着
mkdir build && cd build
编译
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-march=armv7-a" /home/pi/Downloads/l_openvino_toolkit_runtime_raspbian_p_2019.3.334/deployment_tools/inference_engine/samples
编译目标检测例子
make -j2 object_detection_demo_yolov3_async
编译完成后,会在/build/armv 7l/Release下生成可执行文件:object_detection_demo_yolov3_async;接下来就是给执行文件传入模型文件就可以跑深度学习了!
(测摄像头)运行如下指令:
./armv7l/Release/object_detection_demo_yolov3_async -m /home/pi/Downloads/yolo_model/frozen_darknet_yolov3_model.xml -d MYRIAD -i cam
此处-i cam表示读取的是camera;
(测视频文件)运行如下指令:
./armv7l/Release/object_detection_demo_yolov3_async -m /home/pi/Downloads/yolo_model/frozen_darknet_yolov3_model.xml -d MYRIAD -i /path_to_video
测试视频需要给-i指定视频路径;
同样的编译和执行流程,在编译前需要你更改下源cpp文件,我们先找到yolo v3的源文件,我的是在:/home/pi/Downloads/l_openvino_toolkit_runtime_raspbian_p_2019.3.334/deployment_tools/inference_engine/samples/object_detection_demo_yolov3_async/这个目录下;你可以发现这个目录下有
main.cpp
CMakelists.txt
object_detection_demo_yolov3_async.hpp
README.md
我们需要更改main.cpp,更改前先备份一份main.cpp
更改: 第126行左右,注释掉原先yolov3的锚点框尺寸,更改成yolo v3 tiny的(共12个数:10, 14, 23, 27, 37, 58, 81, 82, 135, 169, 344, 319)
更改完保存并退出。
然后重新编译:
make -j2 object_detection_demo_yolov3_async
再编译
./armv7l/Release/object_detection_demo_yolov3_async -m /home/pi/Downloads/yolo_model/frozen_darknet_yolov3_tiny_model.xml -d MYRIAD -i cam
接下来就是优化了,感兴趣的小伙伴欢迎讨论……