Ubuntu系统中基于Docker的OpenVINO™开发环境搭建指南

2023-05-16

概要

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™只支持英特尔的集成显卡)。

Docker的安装和配置

  • 在Ubuntu的终端中,运行如下命令来安装最新版本的docker-ce:

$ 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守护进程设置代理(如有需要):

    1. 在Ubuntu终端中,运行命令创建新文件夹:

    $ sudo mkdir -p /etc/systemd/system/docker.service.d

    1. 创建新文件/etc/systemd/system/docker.service.d/http-proxy.conf并按照如下格式填写文件内容:

    [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/”

    1. 最后,使我们的更改生效,并重启Docker守护进程;

    $ sudo systemctl daemon-reload
    $ sudo systemctl restart docker

  • 为了避免每次运行docker命令都加上sudo,我们在终端下运行如下命令并重启机器:

$ sudo groupadd docker
$ sudo usermod -aG docker $USER

创建包含Ubuntu 16.04的Docker容器

  • 拉取docker官方的ubuntu 16.04镜像到开发机:

$ docker pull ubuntu:16.04

  • 基于官方的ubuntu:16.04镜像创建用于安装OpenVINO™的Docker容器:

注意:基于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

  • 启动我们创建的容器,然后attach到容器:

$ docker start [容器名称]
$ docker attach [容器名称]

  • 运行上面attach命令之后,再按一下回车键,我们就进入了Docker容器的终端,此时我们的身份是root,如果有需要,我们可以新建其他用户(组),并切换成其他的用户。
  • 如果我们想要退出Docker容器,只需要在Docker容器的终端下运行exit命令。后续重新进入Docker容器则需要重新运行start和attach命令并多按一次回车键。
# exit # 退出容器,将会切换到开发机的终端
$
  • 如果你的网络访问需要通过代理来进行,那么需要在Docker容器的终端运行export命令来设置,也可以将命令加入~/.bashrc文件的最后一行,这样下次进入容器的时候就会自动设置(否则退出容器之后设置就会失效)。需要注意的是这里我们需要同时设置http/https代理,因为后续某些命令会走https流量:
# export http_proxy=”http://proxy.example.com:80/”
# export https_proxy=" https://proxy.example.com:443/"

在Docker容器中安装OpenVINO™

至此我们就可以在我们的Docker容器中按照官方网站介绍的步骤来安装OpenVINO™开发工具包了。详细的安装步骤也可以参阅参考文献三中的官方网站链接。

  • 下载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设备)。

  • 安装OpenVINO™核心组件(必须以root身份来安装,否则不会安装mediasdk组件):
# mv /dev/*.tgz ~/ 
# cd ~/
# tar -zxf l_openvino_toolkit_p_2018.3.343.tgz
# cd l_openvino_toolkit_p_<version>
# apt update
# apt install sudo pciutils usbutils cpio lsb-release
# ./install_cv_sdk_dependencies.sh
# ./install.sh #此处按照屏幕显示的流程来完成安装过程
  • 运行脚本设置OpenVINO™环境变量 (建议将这个命令也加到~/.bashrc文件结尾,否则退出容器之后设置就会失效):

# source /opt/intel/computer_vision_sdk/bin/setupvars.sh

  • 配置OpenVINO™中的Model
    Optimizer(这里我们选择为所有支持的机器学习框架都做配置,包括TensorFlow,Caffe,MxNet,Kaldi,ONNX),也可以选择只配置某些框架,更详细的信息可以参考参考文献三中的相关步骤:
# cd /opt/intel/computer_vision_sdk/deployment_tools/model_optimizer/install_prerequisites
# ./install_prerequisites.sh
  • 增加对GPU运算的支持(可选步骤,如果不做这个步骤,那么OpenVINO™将无法调用GPU作为运算资源,执行机器学习的推理,图像视频的处理等任务):
# cd /opt/intel/computer_vision_sdk/install_dependencies/
# ./install_NEO_OCL_driver.sh
  • 运行内置的示例代码验证安装:

    1. 在开发机的终端运行如下命令,来允许Docker容器通过开发机的x-server显示内容到开发机的显示器上(如果开发机重启,此命令需要重新运行):
      $ xhost +local:docker
    2. 在Docker容器中编译示例代码
    # 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
    
    1. 在编译完成之后,我们就可以运行示例代码(security_barrier_camera_sample)来验证我们刚才安装好的开发环境了:
    # 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™自带的图片

补充说明:

  • 在这个示例代码中我们故意将不同的模型交给不同的计算设备进行推理,目的在于验证我们的开发环境是否完备(各个计算设备是否正常工作),并非出于计算效率的考虑。
  • vehicle-license-plate-detection-barrier-0106,vehicle-attributes-recognition-barrier-0039,license-plate-recognition-barrier-0001
    是OpenVINO™内置的神经网络模型,关于这些模型的更详细的信息见参考文献四。

以下是示例代码的输出结果:
在这里插入图片描述

Mediasdk的支持与设置

我们的Docker容器是基于Docker官方的Ubuntu 6.04版本创建,它为了保持比较精简的尺寸,其中裁减了一些模块,导致mediasdk相关的环境变量设置无法自动设置完成。因此我们需要做一下手动配置(建议将此命令行添加到~/.bashrc最后一行,否则每次进入Docker容器终端都必须再次运行此命令行),这样mediasdk就可以正常使用了:

# source /etc/profile.d/intel-mediasdk.sh

错误排查

  • 如果运行docker命令时遇到权限问题(“permission denied”),请确保当前用户已经加入docker用户组:

$ sudo groupadd docker
$ sudo usermod -aG docker $USER

  • 如果运行示例代码遇到“cannot open display”的问题,可以排查以下情况:

    1. 创建Docker容器的命令是否是通过远程会话执行的(例如通过ssh远程连接),如果是,请直接在开发机的终端里运行。
    2. 开发机的x-server是否已经允许Docker容器访问(通过如下命令),需要额外注意的是这个设置在关机之后会失效,重新开机之后需要再次运行:

    $ 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/

关于作者

英特尔(亚太)技术研发公司 资深软件应用工程师 裴凡江

裴凡江是英特尔软件与服务事业部的一名应用软件工程师,专注于在英特尔平台上与开发者的合作和业务拓展。力求将英特尔卓越的软硬件平台与开发者的软硬件产品完美结合,提供最优客户体验。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ubuntu系统中基于Docker的OpenVINO™开发环境搭建指南 的相关文章

  • strchr()函数

    如果需要对字符串中的单个字符进行查找 xff0c 那么应该使用 strchr 或 strrchr 函数 其中 xff0c strchr 函数原型的一般格式如下 xff1a char strchr const char s int c 它表示
  • MapReduce之Map阶段

    MapReduce阶段分为map xff0c shuffle xff0c reduce map进行数据的映射 xff0c 就是数据结构的转换 xff0c shuffle是一种内存缓冲 xff0c 同时对map后的数据分区 排序 reduce
  • 嵌入式开发常用的三种通信协议串口通信、SPI和IIC

    常用的三种通信协议串口通信 SPI和IIC 文章目录 常用的三种通信协议串口通信 SPI和IIC一 通信分类1 1 同步通信和异步通信1 2 单工通信 半双工通信和全双工通信1 3 串行通信与并行通信 二 串口通信2 1 UART2 2 R
  • HTML 解决css缓存

    span class token operator lt span link rel span class token operator 61 span span class token string 34 stylesheet 34 sp
  • Ubuntu18.04安装Nvidia显卡驱动教程

    0 前期准备 禁用BIOS的secure boot xff0c 即disable它 xff0c 如果不关闭 xff0c 使用第三方源安装显卡驱动会安装后不能使用 1 禁用nouveau 1 创建文件 xff0c 如果没有下载vim编辑器 x
  • VINS之estimator节点小结

    VINS的核心节点 xff0c 包括VIO的初始化过程 紧耦合的非线性化过程 边缘化处理过程 主要流程步骤 1 主函数线程 订阅了四个topic xff0c 分别调用回调函数 xff1b 创建了13个话题发布器 xff1b 开辟了一个VIO
  • 基于布谷鸟搜索算法的函数寻优算法

    文章目录 一 理论基础1 算法原理2 算法流程图 二 Matlab代码三 参考文献 一 理论基础 1 算法原理 布谷鸟采用一种特殊的寄生宿主巢穴的方式孕育繁殖 它将孵育的蛋置入寄生宿主的巢穴 xff0c 让寄生宿主孵化布谷鸟蛋 由于布谷鸟幼
  • 基于逐维反向学习的动态适应布谷鸟算法

    文章目录 一 理论基础1 布谷鸟搜索算法2 DA DOCS算法 xff08 1 xff09 逐维反向学习策略 xff08 2 xff09 动态适应 xff08 3 xff09 DA DOCS算法流程 二 实验与结果分析三 参考文献 一 理论
  • SMPL学习笔记

    文章目录 前言一 SMPL概述1 形状参数 beta 2 姿态参数
  • 多协议BGP-----MPBGP

    MPBGP是在BGP 4 基础上的扩展 xff0c 分为三种 xff1a ipv4 ipv4 ipv6 ipv6 ipv6 ipv4 ipv4 ipv6 本文主要介绍 xff1a ipv6 ipv4 xff08 在 建立ipv6 的BGP邻
  • __asm void MSR_MSP(uint32_t addr) 提示:error:expected '(' after 'asm'

    SYSTEM sys sys c 33 7 error expected 39 39 before 39 void 39 ASM void MSR MSP u32 addr 在STM32中的sys c文件编译报出这个错误时 xff1a AS
  • LTL线性时序逻辑

    https blog csdn net yuniruchujian article details 106213848https www docin com p 506137477 html
  • 强化学习资料

    强化学习资料 莫烦学习资料 莫烦学习资料 https mofanpy com bilibili视频资料 xff1a https www bilibili com video BV13W411Y75P from 61 search amp s
  • apollo学习

    知乎王方浩 https zhuanlan zhihu com p 52521739 csdn https blog csdn net u013914471 type 61 blog bilibili 忠厚老实的老王 https space
  • 求解离散黎卡提矩阵代数方程

    离散代数黎卡提方程求解 1 黎卡提方程 在LQR最优控制中 xff0c 有连续时间最优控制 xff0c 即LQR xff0c 也有离散时间最优控制DLQR xff0c 则在求解中一定会遇到解连续时间黎卡提方程和离散时间黎卡提方程的问题 xf
  • 基于运动学模型的无人机模型预测控制(MPC)-2

    基于无人机自身模型的模型预测控制 无约束情况 1 模型建立 无人机运动学模型 xff1a x
  • 一阶低通滤波器-连续转离散

    一阶低通滤波器 1 一阶连续低通滤波器 y s r
  • 汽车动力学模型

    1 动力学模型 在纵向时 xff0c 可能还会受到纵向空气阻力 xff0c 前轮滚动阻力 xff0c 后轮滚动阻力 xff0c 坡道重力分量等
  • PX4飞控源码及解析

    源码地址 xff1a https github com 987419640 Firmware 解析 xff1a https dev px4 io zh concept architecture html
  • Hadoop:简介和安装

    Hadoop简介 Hadoop项目由多个子项目组成 与其他项目不同 xff0c 这个项目更像一个生态系统 其中 xff0c 核心项目包括HDFS MapReduce框架 YARN和ZooKeeper HDFS是一个符合Hadoop要求的分布

随机推荐

  • centos6.x如何安装docker

    1 curl Lks https yum spaceduck org kernel ml aufs kernel ml aufs repo gt etc yum repos d kernel ml aufs repo 2 yum remov
  • c#开发Windows桌面程序,支持触摸屏

    这是一段由new bing聊天机器人提供的代码 xff0c 我没有测试是否能正常运行 xff0c 请谨慎使用 我是这样提问的 xff1a 我想用c 开发一款Windows桌面程序 xff0c 这个程序支持触摸屏 xff0c 这个程序打开后要
  • 七. (《Java核心技术》读书笔记+重点整理系列)异常处理、断言和日志

    目录 异常分类抛出异常捕获异常断言记录日志调试技巧PS 异常分类
  • IAR for ARM 无法烧写

    一直用的IDE都是Keil xff0c 最近需要用到的一款芯片只有IAR这一种环境可以从Demo里直接用 xff0c 所以用到了IAR xff0c 但发现自己装好了IAR xff08 版本8 32 1 xff09 并破解后 xff0c 编绎
  • ADC采集的数据通过串口进行发送 (2)

    1 xff09 在RIDE板子上调通的基础上 xff0c 硬件替代成CJ 575板 在后面步骤中并开始将代码中的硬件配置部分给对应成CJ 575板子的ARM9芯片的配置 2 xff09 将ADC CHANNEL和ADC CHANNEL MO
  • 相机成像模型、内参矩阵、外参矩阵

    相机针孔成像模型 基本的小孔成像过程 xff1a X坐标系是针孔所在坐标系 xff0c Y坐标系为成像平面坐标系 xff0c P为空间一点 xff0c 小孔成像使得P点在图像平面上呈现了一个倒立的像 xff0c 俯视图如下 xff1a 由三
  • YUM安装nginx

    想在 Alibaba Cloud Linux 3 2104 64位 CentOS 系统上安装 Nginx xff0c 你得先去添加一个资源库 xff0c 像这样 xff1a vim etc yum repos d nginx repo 使用
  • PX4固件在Gazebo下进行SITL仿真自己的包时遇到MODE: Unsupported FCU问题

    在运行别人的的px4代码时 xff0c 比如一个包Base control中 xff0c 终端提示了MODE Unsupported FCU xff0c 该错误主要是因为端口不正确 xff0c mavros没能正确的连接到px4固件 xff
  • 学习OpenCV在SFM系统的使用

    文章目录 OpenCV构建SFM模型SFM的概念从一对图像估计相机运动使用丰富特征描述符的点匹配利用光流进行点匹配寻找相机矩阵场景重建从多个场景重建重构的细化使用PCL可视化3D点云使用实例代码 本文是翻译自经典书籍Mastering OP
  • ROS无人机自主飞行(数传与串口)与PX4配置问题

    ROS无人机自主飞行与PX4配置问题 文中引用均为参考 xff0c 部分内容转载 xff01 特感谢提供了参考 xff01 PX4的配置 首先需要对PX4烧写固件 xff0c 版本问题上其实没有很多区别 xff0c 目前我所用的最新版本 1
  • js 如何删除对象整的key值

    采用delete进行删除 js 的delete可以根据key删除对象中的元素 var obj 61 定义一个对象 obj a 61 1 obj b 61 2 delete obj 39 a 39 打印obj b 2 delete a b 打
  • MSCKF-VIO源码框架及C++知识点总结

    MSCKF VIO源码框架及C 43 43 知识点总结 摘要MSCKF VIO程序架构前端前端流程图函数功能解读前端各主要函数模块耗时分析 后端后端流程图函数功能解读后端各主要函数模块耗时分析 运行过程分析 ROS里的信息流图C 43 43
  • 基于CNN(LeNet)的垃圾分类(C语言实现)

    基于CNN xff08 LeNet xff09 的垃圾分类 xff08 C语言实现CNN算子 xff09 一 先使用python训练模型二 提取参数提取模型参数提取图片 三 编写CNN算子在windows中实现在FPGA中实现 xff0c
  • Zigzag (最长交替子序列)

    Zigzag xff08 最长交替子序列 xff09 Your Ph D thesis on properties of integer sequences is coming along nicely Each chapter is on
  • educoder Git入门之本地版本库

    第1关 xff1a 本地版本库创建 创建gitTraining文件夹 mkdir gitTraining 进入gitTraining文件夹 cd gitTraining 请添加初始化本地Git仓库的命令 Begin git init End
  • Docker进阶之Dockerfile

    Dockerfile是一个文本格式的配置文件 xff0c 我们可以使用Dockerfile来快速创建自定义的镜像 Dockerfile内部包含了一条条的指令 xff0c 每一条指令构建一层 xff0c 因此每一条指令应当描述该层如何构建 层
  • 论激光雷达在无人车领域的作用和前景

    激光雷达 xff0c 是以发射激光束探测目标的位置 速度等特征量的雷达系统 其工作原理是向目标发射探测信号 激光束 然后将接收到的从目标反射回来的信号与发射信号进行比较 作适当处理后 就可获得目标的有关信息 如目标距离 方位 高度 速度 姿
  • Docker(三):镜像的使用

    镜像使用 当运行容器时 xff0c 使用的镜像如果在本地中不存在 xff0c docker 就会自动从 docker 镜像仓库中下载 xff0c 默认是从 Docker Hub 公共镜像源下载 操作命令说明检索docker search 关
  • TypeError: Expected Ptr<cv::UMat> for argument ‘img‘

    我创建了一个numpy矩阵并使用轴对换来对多个维度进行变换 xff0c 然后在上面画圆 xff1a import cv2 import numpy as np image 61 np zeros 3 255 255 dtype 61 np
  • Ubuntu系统中基于Docker的OpenVINO™开发环境搭建指南

    概要 OpenVINO 是英特尔推出的一套免费的开发套件 xff0c 旨在帮助开发者和数据科学家们加速他们在视觉计算以及深度学习的推理和部署方面的工作 OpenVINO 通过异构计算可以充分发挥英特尔硬件平台 xff08 包括CPU xff