使用面向 32 位 Debian* OS 的预配置 Dockerfile 进行交叉编译OpenVINO™工具套件和 NCS2 插件
笔记 |
|
OpenVINO™工具套件可以快速部署模拟人类视觉的应用程序和解决方案。该工具套件在基于卷积神经网络 (CNN) 的英特尔®硬件中扩展计算机视觉 (CV) 工作负载,以尽可能提高性能。这些步骤通常遵循 如何构建可用的 ARM CPU 插件 。但是,在 Raspberry Pi 4* 上运行所有设备都需要进行特定的更改。本指南提供如何使用交叉编译方法为 Raspbian* 32 位操作系统构建 OpenVINO™ 工具套件的开源分发。
单击主题上的 了解详细信息:
系统要求
注意 | 本指南假定您的 Raspberry Pi* 主板已在下面列出的操作系统上启动并运行。 |
硬件
- Raspberry Pi* 4(Raspberry Pi* 3 B+ 型号应该正常工作。)
- 至少 16 GB microSD 卡
- 英特尔® 神经电脑棒 2
- 以太网互联网连接或兼容的无线网络
- 安装了装有 Docker 容器的主机机器
目标操作系统
- Raspbian* Buster,32 位
设置您的构建环境
注意 | 本指南包含需要作为根或 sudo 访问正确安装才能执行的命令。 |
确保您的设备软件是最新的:
sudo apt update && sudo apt upgrade -y
安装 Docker 容器
注意 | 您可以按照基于 docker 官方文档的安装说明 https://docs.docker.com/engine/install |
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo groupadd docker
sudo usermod -aG docker ${USER}
sudo systemctl restart docker
克隆openvino_contrib存储库
注意 | 本文的openvino_contrib版和OpenVINO工具套件版本基于 2022.1 |
下载源代码并修改配置文件:
git clone --recurse-submodules --single-branch --branch=2022.1 https://github.com/openvinotoolkit/openvino_contrib.git
转到arm_plugin目录:
cd openvino_contrib/modules/arm_plugin
使用编辑工具修改下面Dockerfile.RPi32_buster文件的内容:
vim dockerfiles/Dockerfile.RPi32_buster
在第 114 行中添加 “RUN pip install protobuf==3.20.0”,如下图所示。
保存已编辑的文件。
使用编辑工具修改 arm_cpu_plugin_build.sh 文件的内容如下:
vim scripts/arm_cpu_plugin_build.sh
编辑 77、78、79 和 136 行,并添加更改,如下所示:
77 checkSrcTree $OPENCV_HOME https://github.com/opencv/opencv.git 4.5.5-openvino-2022.1 4.x
78 checkSrcTree $OPENVINO_HOME https://github.com/openvinotoolkit/openvino.git 2022.1.0 releases/2022/1
81 checkSrcTree $OMZ_HOME https://github.com/openvinotoolkit/open_model_zoo.git 2022.1.0 releases/2022/1
136 -DENABLE_INTEL_MYRIAD=ON -DCMAKE_BUILD_TYPE=$BUILD_TYPE \
保存已编辑的文件。
Docker 容器环境中的交叉编译OpenVINO™工具套件
在本步骤中,我们将运行脚本,以在 Docker 容器环境中下载和交叉编译OpenVINO™工具套件和其他组件,如 OpenCV* :
转到 ARM CPU 插件目录:
cd openvino_contrib/modules/arm_plugin
构建 Docker* 映像:
docker image build -t arm-plugin -f dockerfiles/Dockerfile.RPi32_buster .
在 Docker* 容器中构建插件:
该构建过程由在/arm_cpu_plugin目录内执行的/arm_cpu_plugin_build.sh脚本执行(用于执行的默认容器命令)。所有中间结果和构建假象都存储在工作目录中。
因此,可以加装整个工作目录,以将所有结果存储在容器外:
mkdir build
docker container run --rm -ti -v $PWD/build:/arm_cpu_plugin arm-plugin
注意 | 有一些环境变量可控制 /arm_cpu_plugin_build.sh 脚本执行。
|
在构建文件夹中,生成 OV_ARM_package.tar.gz
ls build
将 OV_ARM_package.tar.gz 传输到目标设备 (Raspberry Pi 4* 32 位 Buster)
有多种方法可将包裹转移至目标设备 (Raspberry Pi 4*),直接将副本安全复制到目标设备,将包裹复制到 USB 拇指驱动器并将其传输。
本文将展示如何在主机机器中安装 USB 拇指驱动器,并将构建包复制到安装的拇指驱动器。
将 USB 拇指驱动器插入系统 USB 端口,然后使用以下命令检查设备启动;
sudo fdisk -l
验证了设备启动后,将设备引导(例如 /dev/sda)安装到 /mnt中;
sudo mount /dev/sda /mnt
然后将OpenVINO程序包复制到 USB 拇指驱动器;
sudo cp -rf build/OV_ARM_package.tar.gz /mnt/
验证构建包
完成交叉编译后,成功地将 OV_ARM_package.tar.gz 复制到目标设备 (Raspberry Pi 4*)。
安装编译工具
sudo apt update
sudo apt 安装 cmake -y
解压 OV_ARM_package.tar.gzpackage
mkdir ~/openvino_dist/
tar -xvzf OV_ARM_package.tar.gz -C ~/openvino_dist/
支持设置变量
source ~/openvino_dist/setupvars.sh
编译示例代码
cd ~/openvino_dist/samples/cpp
./build_samples.sh
要验证该工具套件与英特尔® 神经电脑棒 2和 ARM* 插件在您的设备上的工作,请完成以下步骤:
- 运行 示例应用程序 hello_query_device 以确认所有库是否正确加载。
- 下载 预先训练的模型。
- 为 神经网络选择一个输入(即图像文件)。
- 配置 英特尔® 神经电脑棒 2 Linux* USB 驱动程序。
- 使用所选的模型和输入运行benchmark_app。
示例应用
英特尔® OpenVINO™ 工具套件包括利用推理引擎和英特尔® 神经电脑棒 2的示例应用程序。其中一个应用程序hello_query_device,可在以下目录中找到:
~/inference_engine_cpp_samples_build/armv7l/Release
运行以下命令以测试 hello_query_device:
cd ~/inference_engine_cpp_samples_build/armv7l/Release
./hello_query_device
它应该打印一个对话框,描述系统上用于推理的可用设备。
下载一个模型
应用程序需要一个模型来传递输入。您可以通过以下方式获取面向 IR 格式的英特尔® OpenVINO™工具套件的型号:
- 使用模型优化器将现有模型从受支持的框架之一转换为推断引擎的 IR 格式。请注意,模型优化器软件包对 Raspberry Pi* 不可用。
- 使用模型下载器工具从 Open Model Zoo 下载。只有公共预先训练的模型。
- 直接从 storage.openvinotookit.org 下载 IR 文件
出于我们的目的,直接下载是最简单的方法。使用下列命令来获取人车单车检测模型:
wget https://storage.openvinotoolkit.org/repositories/open_model_zoo/2022.1/models_bin/3/person-vehicle-bike-detection-crossroad-0078/FP16/person-vehicle-bike-detection-crossroad-0078.bin -O ~/Downloads/person-vehicle-bike-detection-crossroad-0078.bin
wget https://storage.openvinotoolkit.org/repositories/open_model_zoo/2022.1/models_bin/3/person-vehicle-bike-detection-crossroad-0078/FP16/person-vehicle-bike-detection-crossroad-0078.xml -O ~/Downloads/person-vehicle-bike-detection-crossroad-0078.xml
注意 | 英特尔® 神经电脑棒 2需要针对 16 位浮点格式(称为 FP16)进行优化的模型。如果与示例不同,您的模型可能需要在单独的机器上使用模型优化器转换为 FP16,因为 Raspberry Pi* 上不支持模型优化器。 |
神经网络输入
最后一个项目是神经网络的输入。对于我们下载的型号,您需要一个带有三个颜色通道的图像。将必要的文件下载到主板上:
wget https://cdn.pixabay.com/photo/2018/07/06/00/33/person-3519503_960_720.jpg -O ~/Downloads/person.jpg
配置英特尔® 神经电脑棒 2 Linux USB 驱动程序
必须添加一些 udev 规则,以使系统能够识别英特尔® NCS2 USB 设备。
注意 | 如果当前用户不是用户组的成员,请运行以下命令并重启设备。 |
sudo usermod -a -G users "$(whoami)"
设置OpenVINO™环境:
source /home/pi/openvino_dist/setupvars.sh
要在英特尔® 神经电脑棒 2上执行推理,通过运行 install_NCS_udev_rules.sh 脚本安装 USB 规则:
sh /home/pi/openvino_dist/install_dependencies/install_NCS_udev_rules.sh
USB 驱动程序现在应该可以正确安装了。如果在运行演示时找不到英特尔® 神经电脑棒 2,重新启动设备并重试。
运行 benchmark_app
下载模型时,提供输入映像,并将英特尔® 神经电脑棒 2插入 USB 端口,使用以下命令来运行 benchmark_app:
cd ~/inference_engine_cpp_samples_build/armv7l/Release
./benchmark_app -i ~/Downloads/person.jpg -m ~/Downloads/person-vehicle-bike-detection-crossroad-0078.xml -d MYRIAD
这将以选定的选项运行应用程序。 -d 标记会告诉程序使用哪个设备进行推理。指定 MYRIAD 可激活 MYRIAD 插件,利用该英特尔® 神经电脑棒 2。命令成功执行后,终端将显示推理统计信息。您还可以使用 CPU 插件在 Raspberry Pi 4* 设备的 ARM CPU 上运行推理,参阅 适用于操作支持的 ARM* 插件操作集规范, 因为本示例中使用的模型不受 ARM* 插件的支持。
[ INFO ] First inference took 410.75 ms
[Step 11/11] Dumping statistics report
[ INFO ] Count: 388 iterations
[ INFO ] Duration: 60681.72 ms
[ INFO ] Latency:
[ INFO ] Median: 622.99 ms
[ INFO ] Average: 623.40 ms
[ INFO ] Min: 444.03 ms
[ INFO ] Max: 868.18 ms
[ INFO ] Throughput: 6.39 FPS
如果应用程序在您的英特尔® NCS2上成功运行,OpenVINO™工具套件和英特尔® 神经电脑棒 2正确设置,以便在您的设备上使用。
环境变量
在编译和运行OpenVINO工具包应用程序之前,您必须更新多个环境变量。运行以下脚本以临时设置环境变量:
source /home/pi/openvino_dist/setupvars.sh
**(可选)** 您关闭 shell 时,会删除OpenVINO™环境变量。作为一个选项,您可以永久设置环境变量,如下所示:
echo "source /home/pi/openvino_dist/setupvars.sh" >> ~/.bashrc
要测试您的更改 , 请打开新的终端。您将看到以下内容:
[setupvars.sh] OpenVINO environment initialized
这完成了对 Raspbian* OS 的 OpenVINO™ 工具套件的开源分发,以及使用 英特尔® 神经电脑棒 2 和 ARM* 插件的交叉编译和构建过程。
相关主题 |
在 Raspberry Pi* 上构建 Open Model Zoo 演示 |
OpenVINO™工具套件 Open Model Zoo |
社区论坛和技术支持 |