深度学习之intel NCS2算力棒开发笔记

Posted ZONG_XP

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深度学习之intel NCS2算力棒开发笔记相关的知识,希望对你有一定的参考价值。

参考:https://software.intel.com/zh-cn/articles/OpenVINO-Install-Linux

1 什么是NCS2

我们在训练完深度学习模型之后,需要将其转移到生产中用以识别和分类对象,这被称为推理。将深度学习网络从训练环境部署到嵌入式平台进行推理是一项复杂的任务,存在许多挑战,比如:

  • 多个深度学习框架在行业内广泛应用,如 Caffe*、TensorFlow*、MXNet* 等
  • 深度学习网络的训练通常在数据中心或服务器群内执行,推理通常在面向性能和功耗优化的嵌入式平台内执行。
    这些平台通常受软件的限制:
    • 编程语言
    • 第三方关联组件
    • 内存使用
    • 支持的操作系统
    平台还受到硬件的限制:
    • 不同的数据类型
    • 有限的功耗范围

由于这些限制,一般不建议使用原始训练框架进行推理,有时这也不能实现,作为替代方案,英特尔提出面向特定硬件平台优化的专用推理API,这个时候NCS2出现了(NCS是第一代,NCS2是第二代,性能达到第一代的8倍)

NCS 2设备看起来像标准的USB拇指驱动器,可以插入任何Linux PC或Raspberry Pi。当运行基于神经网络的计算机视觉应用时,复杂的数学计算被卸载到嵌入在NCS 2棒内的特殊芯片。该芯片旨在加速计算,与标准CPU相比,这使得神经网络的执行速度更快。简而言之,NCS 2就像用于推理机器学习模型的微GPU。

 2 环境部署安装

NCS2兼容的操作系统有:Ubuntu* 16.04.3 LTS(64 位)、CentOS* 7.4(64 位)、Windows® 10(64 位),我自己在x86的Ubuntu16.04进行配置安装

2.1 下载安装OpenVINO工具包

需要注册intel账号,然后在下载链接中下载对应的版本

 下载到Downloads路径下,然后解压,并进入目录

tar -zxf l_openvino_toolkit_p_2018.4.420.tgz
cd l_openvino_toolkit_p_2018.4.420

运行安装

sudo ./install_GUI.sh

然后会弹出安装界面,一直默认安装下去就行

2.2 安装依赖

上述步骤完成后,在opt下会生成intel的文件夹,进入如下目录,然后运行安装脚本

cd /opt/intel/computer_vision_sdk/install_dependencies
sudo -E ./install_cv_sdk_dependencies.sh

2.3 设置环境变量

为了永久设置环境变量,在home文件夹中按ctrl+h,会显示隐藏文件,找到.bashrc,在最后一行添加以下代码,然后关闭保存

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

设置成功后,新开一个终端,会在第一行看到如下输出,如果没有,表明环境变量没有设置成功

[setupvars.sh] OpenVINO environment initialized

2.4 配置优化器

cd /opt/intel/computer_vision_sdk/deployment_tools/model_optimizer/install_prerequisites
sudo ./install_prerequisites.sh

3 配置USB驱动

将算力棒插在主机USB接口上,然后更新udev规则,使得工具套件能正常找到算力棒,并与之通信。首先新打开一个终端,运行以下指令

cat <<EOF > 97-usbboot.rules

然后成输入状态,一条一条输入以下语句

SUBSYSTEM=="usb", ATTRSidProduct=="2150", ATTRSidVendor=="03e7", GROUP="users", MODE="0666", ENVID_MM_DEVICE_IGNORE="1"

SUBSYSTEM=="usb", ATTRSidProduct=="2485", ATTRSidVendor=="03e7", GROUP="users", MODE="0666", ENVID_MM_DEVICE_IGNORE="1"

SUBSYSTEM=="usb", ATTRSidProduct=="f63b", ATTRSidVendor=="03e7", GROUP="users", MODE="0666", ENVID_MM_DEVICE_IGNORE="1"

EOF

输入完以后,表示保存生成97-usbboot.rules文件,然后

sudo cp 97-usbboot.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules
sudo udevadm trigger
sudo ldconfig
rm 97-usbboot.rules

执行完以上指令后,把算力棒重新插拔,然后在终端中输入lsusb,可查看是否有算力棒设备(拔下来与插上分别输入lsusb比较区别)

4 模型测试

完成以上步骤之后,就可以正常使用算力棒了,这里举几个例子进行测试

4.1 图像分类

cd /opt/intel/computer_vision_sdk/deployment_tools/demo

sudo ./demo_squeezenet_download_convert_run.sh -d MYRIAD

第一次运行需要一些时间,因为脚本要安装软件依赖并编译所有样本代码,运行完后出现如图所示的结果,就表明环境全部配置完成

4.2 目标检测

在home文件夹下,生成了inference_engine_samples文件夹,在/intel/Release/文件夹下有很多现成的可执行文件,我们可直接运行这些文件,只需要输入配置文件,比如安防摄像头的例子

cd ~/inference_engine_samples/intel64/Release

./security_barrier_camera_demo -i /opt/intel/computer_vision_sdk/deployment_tools/demo/car_1.bmp -d MYRIAD -m /opt/intel/computer_vision_sdk/deployment_tools/intel_models/vehicle-license-plate-detection-barrier-0106/FP16/vehicle-license-plate-detection-barrier-0106.xml -d_va MYRIAD -m_va /opt/intel/computer_vision_sdk/deployment_tools/intel_models/vehicle-attributes-recognition-barrier-0039/FP16/vehicle-attributes-recognition-barrier-0039.xml -d_lpr MYRIAD -m_lpr /opt/intel/computer_vision_sdk/deployment_tools/intel_models/license-plate-recognition-barrier-0001/FP16/license-plate-recognition-barrier-0001.xml

运行后会出现车辆属性、车牌检测与识别,如图所示,其中有一个参数很重要,-d MYRIAD表示在算力棒中运行,可以修改该参数,如-d CPU 表示运行在CPU上,如果不加该参数,默认是跑在CPU上

4.3 人脸检测

cd ~/inference_engine_samples/intel64/Release

./interactive_face_detection_demo -d MYRIAD -m /opt/intel/computer_vision_sdk/deployment_tools/intel_models/face-detection-adas-0001/FP16/face-detection-adas-0001.xml -d_ag MYRIAD -m_ag /opt/intel/computer_vision_sdk/deployment_tools/intel_models/age-gender-recognition-retail-0013/FP16/age-gender-recognition-retail-0013.xml -d_em MYRIAD -m_em /opt/intel/computer_vision_sdk/deployment_tools/intel_models/emotions-recognition-retail-0003/FP16/emotions-recognition-retail-0003.xml -d_hp MYRIAD -m_hp /opt/intel/computer_vision_sdk/deployment_tools/intel_models/head-pose-estimation-adas-0001/FP16/head-pose-estimation-adas-0001.xml

在intel_models下有很多模型,其中index.html文件对这些模型进行了描述,我们在做同一个任务时可以选择不同的模型进行比较。比如在做人脸检测时,上边的模型我用到了-m /opt/intel/computer_vision_sdk/deployment_tools/intel_models/face-detection-adas-0001/FP16/face-detection-adas-0001.xml 这个模型,测试效果是每秒6帧左右,而当我更换了参数-m /opt/intel/computer_vision_sdk/deployment_tools/intel_models/face-detection-retail-0004/FP16/face-detection-retail-0004.xml时,在算力棒上可以跑到50帧左右,有很明显的提升。如果通过index.html文件看这个网络的介绍时,会知道是由于SSD的原因。

5 部署工作流程

以上步骤只是将允许环境配置完成,并成功跑了官方提供的几个历程,我们真正部署时,需要做的不只这些,这里简单介绍一下部署的整体流程,主要步骤如图所示

  • 1 在服务器上训练一个模型
  • 2 运行模型优化器,生成中间表示文件(.xml和.bin)
  • 3 在推理引擎中进行模型测试
  • 4 实际应用

以上是关于深度学习之intel NCS2算力棒开发笔记的主要内容,如果未能解决你的问题,请参考以下文章

深度学习之openvino预训练模型测试

《深度学习之图像识别:核心技术与案例实战》读书笔记

深度学习之win10安装配置openvino

Trying out the Intel Neural Compute Stick 2 – Movidius NCS2

深度学习之无监督训练

分布式深度学习之DC-ASGD