OpenVINO诞生至今,其功能越来越强,模块也越来越多。为了保证发布版本的稳定性,Github上新增了openvino_contrib
代码库用来开发扩展模块,功能稳定后再合并到OpenVINO库中。扩展模块中的每个模块都是解耦的,可以独立编译使用。主要包括三部分:arm_plugin、java_api、mo_pytorch。本文主要介绍 arm_plugin 模块的使用。arm_plugin
使用 OpenVINO API 在 ARM CPU 上启用深度神经网络推理。该插件使用 ARM Compute Library 作为后端。
OpenVINO ARM CPU 插件在以下平台上受支持和验证:
硬件 | 系统 |
---|---|
树莓派4B | Debian 10.3 (32-bit) |
树莓派4B | Ubuntu 18.04 (64-bit) |
编译方法和使用环境:
github 文档提供了三种方法(文档链接见文章末尾Q&A
)。我这里使用了第一种交叉编译的方式,在 ubuntu18.04 系统上 Build Dockerfile 来构建 OpenVINO、OpenCV 和 ARM CPU Plugin。
克隆 openvino_contrib 存储库
git clone --recurse-submodules --single-branch --branch=master https://github.com/openvinotoolkit/openvino_contrib.git
转到 ARM_Plugin 目录
cd openvino_contrib/modules/arm_plugin
Build Docker Image
Build 过程由/armplg_build.sh
在 armcpu_plugin 路径执行脚本,共有15步。
docker image build -t arm-plugin -f Dockerfile.RPi32 .
Build the plugin in Docker container
所有的中间结果和 build artifacts 都保存在工作路径下, 因此,我们可以挂载整个工作目录以将所有结果存储在容器外部。
mkdir build
docker container run --rm -ti -v $PWD/build:/armcpu_plugin arm-plugin
完成后如图所示
查看目录包含哪些文件
上述操作耗时近2小时,生成的 build 文件2.4GB。我们可以只导出带有 artifacts 的归档文件OV_ARM_package.tar.gz
,比较节约时间,只有108MB,即执行下面命令:
docker container run --rm -ti --tmpfs /armcpu_plugin:rw -v $PWD:/remote \
arm-plugin sh -c "sh /armplg_build.sh && cp ./OV_ARM_package.tar.gz /remote"
vehicle-license-plate-detection-barrier-0106.xml
vehicle-license-plate-detection-barrier-0106.bin
转到推理引擎bin目录
cd /home/pi/deployment_tools/inference_engine/bin/armv7l
下载车辆图像
wget https://raw.githubusercontent.com/openvinotoolkit/openvino/master/scripts/demo/car_1.bmp
将 OpenCV 和 OpenVINO 库目录添加到 LD_LIBRARY_PATH
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/opencv/lib/:~/deployment_tools/inference_engine/lib/armv7l/
在ARM平台上运行对象检测demo
./object_detection_sample_ssd -m ~/FP32/vehicle-license-plate-detection-barrier-0106.xml -i car_1.bmp -d CPU
查看使用ARM CPU加速推理后的输出图像
1.请问项目在哪里可以看到?
项目地址:
推荐使用Gitee开源版下载:
https://gitee.com/openvinotoolkit-prc/openvino
https://gitee.com/openvinotoolkit-prc/openvino_contrib
Github链接:
https://github.com/openvinotoolkit/openvino_contrib/tree/master/modules/arm_plugin
2.请问编译阶段可以在ARM平台执行吗?
由于文档没有详细说明,编译阶段我尝试在树莓派4B上build,但是发现各种莫名其妙的问题,在此建议编译在x86架构的硬件上进行。
3.请问文章所用的IR文件和编译生成的tar包哪里可以下载,可以跳过编译阶段直接用tar包进行推理吗?
IR文件和tar包我已经上传到百度云网盘,可以扫码获取。可以跳过编译阶段,直接把tar包拷贝到ARM平台加载模型进行推理。