OpenVINO™是英特尔推出的一套免费的开发套件,旨在帮助开发者和数据科学家们加速他们在视觉计算以及深度学习的推理和部署方面的工作。OpenVINO™通过异构计算可以充分发挥英特尔硬件平台(包括CPU,GPU,Intel® FPGA以及Intel® Movidius™ VPU)的强大性能,在深度学习推理方面可以带来多大19倍的性能提升。OpenVINO™自带的推理引擎(IE)通过一套统一的API,支持多达100多个开源的以及定制的深度学习模型(涵盖了Caffe,Tensorflow,MxNet,Kaldi,ONNX等主流深度学习框架),除此之外,OpenVINO™还内置了20个预先训练好的模型。另外,OpenVINO™中的OpenVX和OpenCV库也能够让图像/视频处理,计算机视觉追踪,以及特征提取等传统的计算机图形相关的开发工作变得更快速和高效。开发平台方面,Linux版本的OpenVINO™支持64位的Ubuntu 16.04以及CentOS* 7.4,支持的处理器包括6代及以上的Core™,Xeon® v5及以上的服务器处理器。对于目标设备,操作系统上还支持64位的Yocto Project* Poky Jethro v2.0.3,硬件平台则还支持集成了HD Graphic的Pentium® (包括N4200/5, N3350/5, N3450/5)。有关OpenVINO™更多的信息可以在参考文献一OpenVINO™官方网站中获得。
Docker是一个开源的应用容器引擎,他可以让开发者打包自己的应用及其所有的依赖到一个Docker镜像中,这个镜像完全独立于宿主操作系统,因此可以被快速的部署到其他的Linux机器/发行版上,而且Docker运行环境非常高效,可以获得几乎等同于宿主操作系统的性能。Docker容器则是Docker镜像的运行实例。有关Docker更多的信息可以在参考文献二Docker官方网站中获得。
接下来本文将介绍如何在Docker中搭建OpenVINO™开发环境。这里我们假定我们手上已经有一台安装了Ubuntu 16.04的Linux开发机,其配备了6代或以上的Core™处理器,芯片中集成了英特尔的集成显卡,与此同时开发机没有装备任何其他的独立显卡(OpenVINO™只支持英特尔的集成显卡)。
$ sudo apt-get update $ sudo apt-get install apt-transport-https
ca-certificates curl software-properties-common $ curl -fsSL
https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - $
sudo add-apt-repository “deb [arch=amd64]
https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable”
$ sudo apt-get update $ sudo apt-get install docker-ce
为Docker守护进程设置代理(如有需要):
$ sudo mkdir -p /etc/systemd/system/docker.service.d
[Service]
Environment=“HTTP_PROXY=http://proxy.example.com:80/”
如果你用的是https代理,则创建/etc/systemd/system/docker.service.d/https-proxy.conf并对应的填入如下内容:
[Service]
Environment=“HTTPS_PROXY=https://proxy.example.com:443/”
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
为了避免每次运行docker命令都加上sudo,我们在终端下运行如下命令并重启机器:
$ sudo groupadd docker
$ sudo usermod -aG docker $USER
$ docker pull ubuntu:16.04
注意:基于OpenVINO™开发的应用可能会用到CPU/GPU/Intel® Movidius™ VPU等各种物理设备,如果应用需要显示输出结果,例如输出视频和图像等,还需要通过宿主操作系统的x-server,因此在创建Docker容器的时候,我们额外指定了一些参数。Docker容器的网络方面我们直接借用宿主操作系统的网络。
$ docker create --name [容器名称] --net=host -it -e DISPLAY=$DISPLAY
–privileged -v /dev:/dev ubuntu:16.04
$ docker start [容器名称]
$ docker attach [容器名称]
# exit # 退出容器,将会切换到开发机的终端 $
# export http_proxy=”http://proxy.example.com:80/” # export https_proxy=" https://proxy.example.com:443/"
至此我们就可以在我们的Docker容器中按照官方网站介绍的步骤来安装OpenVINO™开发工具包了。详细的安装步骤也可以参阅参考文献三中的官方网站链接。
在开发机的浏览器中打开这里的链接(https://software.intel.com/en-us/openvino-toolkit/choose-download/free-download-linux
),并按照网页上的说明注册并下载最新的离线版本(目前是2018 R3版)安装包(l_openvino_toolkit_p_2018.3.343.tgz),然后把安装包拷贝到开发机的/dev/目录下,随后我们在Docker容器的终端中就可以在/dev/目录看到安装包了(因为我们在前文中创建Docker容器的时候用-v命令把开发机的/dev/目录映射到了Docker容器的对应目录,虽然我们的初衷是借用开发机的x-server,以及访问GPU以及Movidius™ VPU设备)。
# mv /dev/*.tgz ~/ # cd ~/ # tar -zxf l_openvino_toolkit_p_2018.3.343.tgz # cd l_openvino_toolkit_p_
# apt update # apt install sudo pciutils usbutils cpio lsb-release # ./install_cv_sdk_dependencies.sh # ./install.sh #此处按照屏幕显示的流程来完成安装过程
# source /opt/intel/computer_vision_sdk/bin/setupvars.sh
# cd /opt/intel/computer_vision_sdk/deployment_tools/model_optimizer/install_prerequisites # ./install_prerequisites.sh
# cd /opt/intel/computer_vision_sdk/install_dependencies/ # ./install_NEO_OCL_driver.sh
运行内置的示例代码验证安装:
# source /opt/intel/computer_vision_sdk/bin/setupvars.sh # cd /opt/intel/computer_vision_sdk/deployment_tools/inference_engine/samples/ # mkdir build && cd build # cmake -DCMAKE_BUILD_TYPE=Release .. # make
# cd /opt/intel/computer_vision_sdk/deployment_tools/ # ./inference_engine/samples/build/intel64/Release/security_barrier_camera_sample
-d MYRIAD -d_va CPU -d_lpr GPU -i ./demo/car.png -m ./intel_models/vehicle-license-plate-detection-barrier-0106/FP16/vehicle-license-plate-detection-barrier-0106.xml
-m_va ./intel_models/vehicle-attributes-recognition-barrier-0039/FP32/vehicle-attributes-recognition-barrier-0039.xml
-m_lpr ./intel_models/license-plate-recognition-barrier-0001/FP16/license-plate-recognition-barrier-0001.xml
参数说明:
-d:对vehicle-license-plate-detection-barrier-0106模型做推理要用的计算设备,这里指定的是MYRIAD(
Intel® Movidius™ VPU),如果你的开发机并没有配备这个设备,请替换成GPU
-d_va:对vehicle-attributes-recognition-barrier-0039模型做推理要用的计算设备,这里我们用CPU
-d_lpr:对license-plate-recognition-barrier-0001模型做推理要用的计算设备,这里我们用GPU
-i:推理工作的输入,这里我们用OpenVINO™自带的图片
补充说明:
我们的Docker容器是基于Docker官方的Ubuntu 6.04版本创建,它为了保持比较精简的尺寸,其中裁减了一些模块,导致mediasdk相关的环境变量设置无法自动设置完成。因此我们需要做一下手动配置(建议将此命令行添加到~/.bashrc最后一行,否则每次进入Docker容器终端都必须再次运行此命令行),这样mediasdk就可以正常使用了:
# source /etc/profile.d/intel-mediasdk.sh
$ sudo groupadd docker
$ sudo usermod -aG docker $USER
如果运行示例代码遇到“cannot open display”的问题,可以排查以下情况:
$ xhost +local:docker
Docker容器网络问题(运行某些命令超时,例如install_xxx.sh,或者出现连接错误):
如果你的开发机是通过代理访问网络的,请确保Docker容器中已经正确设置了代理,可以通过“env | grep
proxy”命令来查看当前的代理设置
运行示例代码时出现“Cannot find plugin”的错误 -
请确保Docker容器中已经正确设置了OpenVINO™环境变量(建议将命令添加到~/.bashrc最后一行,这样每次进入Docker容器,环境变量就会自动设置):
# source /opt/intel/computer_vision_sdk/bin/setupvars.sh
至此我们完成了在Ubuntu系统中基于Docker的OpenVINO™开发环境搭建,这篇文章中所创建的Docker容器具有非常强的可移植性,经过我们验证,在打包成Docker镜像(Docker Image)之后,可以通过Docker在当前主流的Linux发行版上(包括Ubuntu 18.04/CentOS 7.5/Fedora 28)直接加载并复制出新的可用的OpenVINO™开发环境(即Docker容器)。而这些移植过来的Docker容器,也具有几乎等同于开发机原生操作系统的性能,因此具有极佳的实用价值。
OpenVINO™官方网站:https://software.intel.com/en-us/openvino-toolkit
Docker官方网站:https://www.docker.com/
OpenVINO™ Linux版官方安装指南:https://software.intel.com/en-us/articles/OpenVINO-Install-Linux
OpenVINO™ 内置模型介绍:https://software.intel.com/en-us/openvino-toolkit/documentation/pretrained-models
Intel® Movidius™ VPU:https://software.intel.com/en-us/neural-compute-stick
Intel® 视觉计算论坛:https://software.intel.com/en-us/forums/computer-vision
Docker代理设置:https://docs.docker.com/network/proxy/
英特尔(亚太)技术研发公司 资深软件应用工程师 裴凡江
裴凡江是英特尔软件与服务事业部的一名应用软件工程师,专注于在英特尔平台上与开发者的合作和业务拓展。力求将英特尔卓越的软硬件平台与开发者的软硬件产品完美结合,提供最优客户体验。