目前openvino在树莓派上的部署形式是和NCS组合在一起使用,树莓派无法单独使用,今年5月Github上开源了openvino在ARM上独立运行的源码编译方法,以实现openvino在树莓派的独立部署。 参考openvino_ARM编译方法 ,折腾一番后,在安装Ubuntu18.04的树莓派4B上实现了openvino加速工具的部署,并基于该加速工具测试了目标检测方法nano_detect,分享给后来之人。
首先给出github的交叉编译教程:Github-openvino交叉编译教程,目前支持的软硬件搭配如下图所示,硬件系统是树莓派4B,操作系统Debian32位和Ubuntu64位。
我选择了Ubuntu18.04作为操作系统进行编译, 编译是在自己的x86-64主机上做的,步骤如下:
(1)安装docker
sudo apt-get install docker
(2)clone代码仓
git clone --recurse-submodules --single-branch --branch=master https://github.com/openvinotoolkit/openvino_contrib.git
(3)创建docker镜像
cd openvino_contrib/modules/arm_plugin
docker image build -t arm-plugin -f Dockerfile.RPi64_bionic .
(4)arm架构openvino交叉编译
mkdir build
docker container run --rm -ti -v $PWD/build:/armcpu_plugin arm-plugin
第四步时间较长,得个把小时,等着就行,直到生成如下所示的文件
编译完成的文件夹如上图所示,除了armcpu_package和OV_ARM压缩包,其他文件夹都是从github上下载下来的,可以独立下载再执行交叉编译,下载方法这里有:Github Project子库git方法。
我们需要的就是OV_ARM压缩包,把这个文件夹拷贝到树莓派4B上进行解压,得到需要的各个库文件,与官方提供的openvino差别不大,至此,交叉编译完成。
(1)树莓派4B配置openvino和主机端配置方法相同,核心就是添加环境变量,添加方法如下:
sudo vi ~/.bashrc
source ../bin/setupvars.sh
source ../opencv/setupvars.sh
配置完成后开始测试nano_detect,nano_det GitHub开源链接如下Github:Nano_Detect,没接触过的去了解一下,令人膜拜的目标检测算法。
在开源代码里添加推理时间获取代码并进行推理,设置推理次数20次,计算平均值,基于openvino的nano_detect推理时间如下所示,平均推理时间330ms。
(2)彩蛋(nuhui大佬yyds)
基于ncnn的nano_det在树莓派4B部署方法如下图所示,平均推理时间147ms。
(1)PC端Intel芯片2.6GHz主频推理速度16ms,但到了ARM上只有330ms,可以看到推理速度掉速比较大,猜测是由于Intel指令集和arm指令集的差异导致的,无法最大程度使用树莓派4B。
(2)后期做一些openvnio自带库的推理,看看速度如何,但官网给的样例推理速度也不快,提速空间不大,整体有点小失落,折腾了两三天速度不尽人意。
(3)nihui大佬,yyds。PC端Intel芯片2.6GHz主频推理速度27ms,树莓派4B达到147ms。