赞
踩
OpenVINO是intel的深度学习工具框架,本质是一个支持intel各种硬件(CPU、集显、FPGA和Movidius VPU)的推理机。
这个工具本身不做训练,但是可以把其它深度学习框架(如 Caffe, TensorFlow, MXNet)训练的模型文件转化为自己支持的格式。
所以OpenVINO分为两部分(github上源码也分为这么两个目录):
经过了解,本工具支持的操作系统有Ubuntu*, CentOS*, Yocto* OS、windows,甚至还有树莓派的官方系统。预计在树莓派上安装Ubuntu也是可以用Neural Compute Stick1/2的。
我觉得OpenVINO的最大优势是提供了很多预训练的模型,要求不高的直接就用了。预训练模型链接 Pretrained Models。
本文介绍主要从github上安装方法。
Model Optimizer用于执行模型格式转换,并做一些优化,支持的输入格式文件有:
Model Optimizer有两个目的:
具体的优化的技术描述:
有些优化可以在转换的时候调用相关选项关闭掉。具体见转换脚本的参数文档。
准备一个干净的64bit的ubuntu16.04系统。后面所有的操作都是在root下执行的.
升级源目录:
$ apt-get upgrade
$ apt-get install git
git clone https://github.com/opencv/dldt.git
cd dldt/model-optimizer/install_prerequisites/
去掉install_prerequisites.sh里所有的‘sudo -E’(不是删除整行,只需去掉‘sudo -E’),然后执行:
./install_prerequisites.sh
这个脚本会安装依赖的各种东西,包括python、tensorflow、caffe、onnx等。
执行结果:
Installing collected packages: six, protobuf, numpy, markdown, werkzeug, tensorboard, astor, gast, absl-py, grpcio, termcolor, tensorflow, graphviz, idna, certifi, chardet, urllib3, requests, mxnet, decorator, networkx, typing, typing-extensions, onnx
Successfully installed absl-py-0.7.0 astor-0.7.1 certifi-2018.11.29 chardet-3.0.4 decorator-4.3.0 gast-0.2.2 graphviz-0.10.1 grpcio-1.18.0 idna-2.8 markdown-3.0.1 mxnet-1.0.0 networkx-2.2 numpy-1.16.0 onnx-1.3.0 protobuf-3.5.1 requests-2.21.0 six-1.12.0 tensorboard-1.9.0 tensorflow-1.9.0 termcolor-1.1.0 typing-3.6.6 typing-extensions-3.7.2 urllib3-1.24.1 werkzeug-0.14.1
用之前《tensorflow 20:搭网络、导出模型、运行模型》这篇博客生成的模型测试一下(下面命令二选一):
#普通转换
$ python3 ./mo.py --input_model ./model/frozen_graph.pb --input_shape [1,28,28,1]
# 把fp32模型量化为fp16,模型大小减小一半
python3 ./mo.py --input_model ./model/frozen_graph.pb --input_shape [1,28,28,1] --data_type FP16
以上命令执行完毕,在当前目录下生成frozen_graph.xml和frozen_graph.bin两个文件。这两个文件拿给推理器使用。
下载关联的git子项目:
$ cd dldt/inference-engine/
$ git submodule init #初始化子模块
$ git submodule update --recursive #更新子模块
执行install_dependencies.sh:
$ ./install_dependencies.sh
如果提示没有sudo命令,把install_dependencies.sh里面的sudo去掉即可。
从这里下载优化的MKL-ML* GEMM实现。
解压文件。在我的机子上,解压后的目录是/home/user/mklml_lnx_2019.0.1.20180928。
$ mkdir build
$ cd build
下列编译方式二选一。
不编译python:
$ cmake -DCMAKE_BUILD_TYPE=Release -DGEMM=MKL -DMKLROOT=/home/user/mklml_lnx_2019.0.1.20180928 ..
$ make -j8
编译python:
$ pip3 install -r ../ie_bridges/python/requirements.txt
$ cmake -DCMAKE_BUILD_TYPE=Release -DGEMM=MKL -DMKLROOT=/home/user/mklml_lnx_2019.0.1.20180928 -DENABLE_PYTHON=ON -DPYTHON_EXECUTABLE=`which python3.5` -DPYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.5m.so -DPYTHON_INCLUDE_DIR=/usr/include/python3.5 ..
$ make -j8
编译完成的的文件放在dldt/inference-engine/bin/intel64/Release/目录下:
# ls dldt/inference-engine/bin/intel64/Release/ InferenceEngineUnitTests hello_classification benchmark_app hello_request_classification calibration_tool hello_shape_infer_ssd classification_sample lib classification_sample_async object_detection_sample_ssd hello_autoresize_classification style_transfer_sample # ls dldt/inference-engine/bin/intel64/Release/lib/ cldnn_global_custom_kernels libformat_reader.so libinference_engine.so libHeteroPlugin.so libgflags_nothreads.a libinference_engine_s.a libMKLDNNPlugin.so libgmock.a libmkldnn.a libclDNN64.so libgmock_main.a libmock_engine.so libclDNNPlugin.so libgtest.a libpugixml.a libcldnn_kernel_selector64.a libgtest_main.a libstb_image.a libcpu_extension.so libhelpers.a libtest_MKLDNNPlugin.a
到这基本就编译完了,但是貌似啥也永不起来呢。别着急,后面下载model-zoo.
编译过程生成的opencv目录在/home/user/dldt/inference-engine/temp/opencv_4.0.0_ubuntu/,这个目录要用到。
$ export PYTHONPATH=$PYTHONPATH:/home/user/dldt/inference-engine/bin/intel64/Release/lib/python_api/python3.5/openvino
这样就可以在python中import openvino了。可以调用open_model_zoo/demos下的python脚本来测试了。
$ git clone https://github.com/opencv/open_model_zoo
$ cd open_model_zoo/demos
这里需要再环境变量里指定推理机和opencv的位置。
$ mkdir build
$ export InferenceEngine_DIR=/home/user/dldt/inference-engine/build
$ export OpenCV_DIR=/home/user/dldt/inference-engine/temp/opencv_4.0.0_ubuntu/cmake
$ cd build
$ cmake -DCMAKE_BUILD_TYPE=Release ../
$ make
编译完成,所有的二进制文件在当前目录的intel64/Release目录下:
# ls /home/user/open_model_zoo/demos/build/intel64/Release
crossroad_camera_demo object_detection_demo
end2end_video_analytics_ie object_detection_demo_ssd_async
end2end_video_analytics_opencv object_detection_demo_yolov3_async
human_pose_estimation_demo pedestrian_tracker_demo
interactive_face_detection_demo security_barrier_camera_demo
lib segmentation_demo
mask_rcnn_demo smart_classroom_demo
multi-channel-demo super_resolution_demo
先准备需要的python包:
$ cd ../../model_downloader/
$ pip3 install pyyaml requests
先打印看看支持的模型:
# ./downloader.py --print_all Please choose either "--all" or "--name" usage: downloader.py [-h] [-c CONFIG] [--name NAME] [--all] [--print_all] [-o OUTPUT_DIR] optional arguments: -h, --help show this help message and exit -c CONFIG, --config CONFIG path to YML configuration file --name NAME names of topologies for downloading with comma separation --all download all topologies from the configuration file --print_all print all available topologies -o OUTPUT_DIR, --output_dir OUTPUT_DIR path where to save topologies list_topologies.yml - default configuration file ========== All available topologies ========== densenet-121 densenet-161 densenet-169 densenet-201 squeezenet1.0 squeezenet1.1 mtcnn-p mtcnn-r mtcnn-o mobilenet-ssd vgg19 vgg16 ssd512 ssd300 inception-resnet-v2 dilation googlenet-v1 googlenet-v2 googlenet-v4 alexnet ssd_mobilenet_v2_coco resnet-50 resnet-101 resnet-152 googlenet-v3 se-inception se-resnet-101 se-resnet-152 se-resnet-50 se-resnext-50 se-resnext-101 Sphereface license-plate-recognition-barrier-0007 age-gender-recognition-retail-0013 age-gender-recognition-retail-0013-fp16 emotions-recognition-retail-0003 emotions-recognition-retail-0003-fp16 face-detection-adas-0001 face-detection-adas-0001-fp16 face-detection-retail-0004 face-detection-retail-0004-fp16 face-person-detection-retail-0002 face-person-detection-retail-0002-fp16 face-reidentification-retail-0095 face-reidentification-retail-0095-fp16 facial-landmarks-35-adas-0001 facial-landmarks-35-adas-0001-fp16 head-pose-estimation-adas-0001 head-pose-estimation-adas-0001-fp16 human-pose-estimation-0001 human-pose-estimation-0001-fp16 landmarks-regression-retail-0009 landmarks-regression-retail-0009-fp16 license-plate-recognition-barrier-0001 license-plate-recognition-barrier-0001-fp16 pedestrian-and-vehicle-detector-adas-0001 pedestrian-and-vehicle-detector-adas-0001-fp16 pedestrian-detection-adas-0002 pedestrian-detection-adas-0002-fp16 person-attributes-recognition-crossroad-0200 person-attributes-recognition-crossroad-0200-fp16 person-detection-action-recognition-0004 person-detection-action-recognition-0004-fp16 person-detection-retail-0002 person-detection-retail-0002-fp16 person-detection-retail-0013 person-detection-retail-0013-fp16 person-reidentification-retail-0031 person-reidentification-retail-0031-fp16 person-reidentification-retail-0076 person-reidentification-retail-0076-fp16 person-reidentification-retail-0079 person-reidentification-retail-0079-fp16 person-vehicle-bike-detection-crossroad-0078 person-vehicle-bike-detection-crossroad-0078-fp16 road-segmentation-adas-0001 road-segmentation-adas-0001-fp16 semantic-segmentation-adas-0001 semantic-segmentation-adas-0001-fp16 single-image-super-resolution-0063 single-image-super-resolution-0063-fp16 single-image-super-resolution-1011 single-image-super-resolution-1011-fp16 single-image-super-resolution-1021 single-image-super-resolution-1021-fp16 text-detection-0001 text-detection-0001-fp16 vehicle-attributes-recognition-barrier-0039 vehicle-attributes-recognition-barrier-0039-fp16 vehicle-detection-adas-0002 vehicle-detection-adas-0002-fp16 vehicle-license-plate-detection-barrier-0106 vehicle-license-plate-detection-barrier-0106-fp16
也可以选择一个网络模型的,这里一股脑全部下载下来
$ ./downloader.py -o ../pretrained_models --all
不翻墙的情况下肯定会下载失败的。具体的url都在list_topologies.yml这个文件里。我把里面从谷歌网站下载的都删掉了,生成了一个新的文件china_list.yml。重新执行:
$ ./downloader.py -o ../pretrained_models --all -c china_list.yml
或者指定下载配置文件:
$ ./downloader.py -o ../pretrained_models --name facial-landmarks-35-adas-0001
目前为止,所有下载的模型文件在/home/user/open_model_zoo/pretrained_models。编译的例子和可执行程序在/home/user/dldt/inference-engine/bin/intel64/Release/和/home/user/open_model_zoo/demos/build/intel64/Release/这两个目录下。使用方法请参考《Intel® Distribution of OpenVINO™ Toolkit Documentation
例子文档》
比如我的测试:
$ ./dldt/inference-engine/bin/intel64/Release/object_detection_sample_ssd -i ./test/1.jpg -m ./open_model_zoo/pretrained_models/Retail/object_detection/pedestrian/rmnet_ssd/0013/dldt/person-detection-retail-0013.xml -d CPU
[ INFO ] Image out_0.bmp created!
total inference time: 49.4939
Average running time of one iteration: 49.4939 ms
Throughput: 20.2045 FPS
$ ./open_model_zoo/demos/build/intel64/Release/interactive_face_detection_demo -i ./test/right.avi -m ./open_model_zoo/pretrained_models/Transportation/object_detection/face/pruned_mobilenet_reduced_ssd_shared_weights/dldt/face-detection-adas-0001.xml -m_ag ./open_model_zoo/pretrained_models/Retail/object_attributes/age_gender/dldt/age-gender-recognition-retail-0013.xml -m_hp ./open_model_zoo/pretrained_models/Transportation/object_attributes/headpose/vanilla_cnn/dldt/head-pose-estimation-adas-0001.xml -m_em ./open_model_zoo/pretrained_models/Retail/object_attributes/emotions_recognition/0003/dldt/emotions-recognition-retail-0003.xml -m_lm ./open_model_zoo/pretrained_models/Transportation/object_attributes/facial_landmarks/custom-35-facial-landmarks/dldt/facial-landmarks-35-adas-0001.xml -d CPU -pc -no_show -r
行人检测效果图(框还是很紧凑的):
Install the Intel® Distribution of OpenVINO™ toolkit for Linux*
Model Optimizer Developer Guide
Inference Engine Developer Guide
Intel® Distribution of OpenVINO™ Toolkit Documentation
例子文档
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。