\u200E
AVH动手实践 (四) | 在Arm虚拟硬件 (树莓派) 上部署Paddle Lite图像识别模型
发布日期:2022-09-29T03:50:20.000+0000 浏览量:2108次


本期课程将以计算机视觉领域的 图像识别任务 为目标,带领大家动手实现在Arm虚拟硬件 (树莓派) 上部署基于Paddle Lite的图像识别模型,以及学习如何将在Arm虚拟硬件(Arm Virtual Hardware, AVH)上开发测试完成的应用快捷地移植到真实的物理树莓派开发板上。


目标任务:图像识别

图像识别是利用计算机对图像进行处理、分析和理解,以识别各种不同模式的目标和对象的技术,是应用深度学习算法的一种实践应用。图像分类是根据图像的语义信息对不同类别图像进行区分,是计算机视觉的核心,是物体检测、图像分割、物体跟踪、行为分析、人脸识别等其他高层次视觉任务的基础。图像识别与分类在许多领域都有着广泛的应用,包括安防领域的人脸识别和智能视频分析等,交通领域的交通场景识别,互联网领域基于内容的图像检索和相册自动归类,医学领域的图像识别等 [1]

图1:图像识别应用案例 [2]




飞桨轻量化推理引擎

Paddle Lite

Paddle Lite是百度飞桨推出的端侧和边缘侧轻量化推理引擎,可帮助开发者在移动设备、边缘设备和loT设备上运行模型,以便实现设备端机器学习。Paddle Lite支持多语言、多平台运行,并针对移动端和边缘侧设备的机器学习进行了优化,旨在为这些场景的AI应用提供更高效轻量的推理能力,有效解决端侧和边缘侧设备算力和内存限制等问题。开发者可以轻松的通过Paddle Lite opt[3]工具将飞桨模型转换为Paddle Lite模型,更多详细信息,可查看Paddle Lite完整文档[4]


部署平台:Arm虚拟硬件

作为Arm物联网全面解决方案 (Arm Total Solution for IoT [5] ) 的核心技术之一,AVH很好地解决了实体硬件所面临的难扩展、难运维等痛点。AVH提供了简单便捷并且可扩展的途径,让IoT应用的开发摆脱了对实体硬件的依赖并使得云原生开发技术在嵌入式物联网、边缘侧机器学习领域得到了应用。尤其是在芯片供应链紧张的当今时代,使用AVH开发者甚至可以在芯片RTL之前便可接触到最新的处理器IP。
目前AVH提供两种形式供开发者使用。一种是托管在AWS以及AWS China上以亚马逊机器镜像AMI形式存在的Arm Corstone和Cortex CPU的虚拟硬件,另外一种则是由Arm以SaaS平台的形式提供的AVH第三方硬件。本期课程我们将使用第二种由Arm以SaaS平台的形式提供的AVH第三方硬件中的虚拟树莓派4作为硬件部署平台。除树莓派外,该AVH平台目前还提供另外2块开发板的虚拟硬件:恩智浦的i.MX 8M以及意法半导体的STM32U5 Discovery Kit。同时,我们也在持续增加所支持的开发板数量,敬请期待!
图2:AVH第三方硬件列表 
(访问 https://avh.arm.com [6] 了解更多信息)




部署实战


本次图像识别应用部署工程示例代码位于Paddle-Lite-Demo GitHub仓库[7]


虚拟硬件创建与配置


账号审批通过后 (注册方式参考1.3节),访问 https://app.avh.arm.com/login 并使用该邮箱所注册的Arm账号登入AVH第三方硬件SaaS平台。

a. 在设备选项页面,点击创建设备 (CREATE DEVICE) 。

b . 在设备选择页面,选择树莓派设备 ( Raspberry Pi 4 ) 。创建该设备需要消耗4 个CPU核数,可在设备选项页面查看当前可使用CPU核数。
c . 点击下一步 ( NEXT ) 进入设备配置页面。

d. 选择官方提供的Raspberry Pi OS Desktop (11.2.0) 作为操作系统,并点击选择 (SELECT) 进入配置确认页面。

e. 配置确认页面可以自定义设置设备名称以及选择是否需要设置高级启动选项(勾选该选项将进入高级启动项配置页面),本示例无需配置高级启动选项,因此直接点击创建设备 (CREATE DEVICE) 按键进行设备创建。

f-g. 设备创建过程可以实时查看设备创建进程。当提示Device is ready时,说明设备已经创建完成。

h . 点击控制台 ( CONSOLE ) 按键,输入pi作为用户名,raspberry作为密码即可成功登入该设备。可以通过输入 uname -a 查看当前系统基本信息。可选地,也可以直接使用树莓派桌面 (位于左侧显示区) 上的终端完成后续操作。


*友情提示:可以通过红色标记处的符号将显示区域放大便于后续观看和操作



运行环境准备

在创建好的虚拟树莓派控制台终端依次输入以下代码完成相应依赖项 (主要包括gcc、g++、OpenCV、cmake) 的安装与配置。

$ sudo apt-get update
$ sudo apt-get install gcc g++ make wget unzip libopencv-dev pkg-config
$ wget https://www.cmake.org/files/v3.10/cmake-3.10.3.tar.gz
$ tar -zxvf cmake-3.10.3.tar.gz
$ cd cmake-3.10.3
$ ./configure
$ make
$ sudo make install


部署图像分类应用

  • 克隆示例代码并切换到master分支
$ cd ~
$ git clone https://github.com/PaddlePaddle/Paddle-Lite-Demo 
$ cd Paddle-Lite-Demo
$ git checkout master
  • 下载模型和预测库,当提示Download successful!说明已经下载完成

$ cd PaddleLite-armlinux-demo
$ ./download_models_and_libs.sh
  • 编译与运行

为更直观的查看结果,建议直接使用树莓派桌面上的终端来编译和运行代码(可选地,通过右侧控制端中的终端来编译和运行程序)。打开桌面的终端并切换至图像分类应用路径下 (位于Paddle-Lite-Demo/PaddleLite-armlinux-demo/image_classification_demo 目录)。 该图像识别应用旨在识别该目录下images文件夹中的 tabby_cat.jpg 图片。
$ sh run.sh # build and run image classification application
*注意: 由于OpenCV 4.x和3.x版本兼容问题, 若使用OpenCV 4.x版本 (按照上述步骤默认安装),请将image_classification_demo.cc中的以下几处代码进行兼容性修改,确保编译成功。
Line 70: CV_BGRA2RGB 改为 cv::COLOR_ BGRA2RGB
Line 259&260: CV_CAP_PROP_FRAME_WIDTH 改为 cv::CAP_PROP_FRAME_WIDTH
  • 查看运行结果

运行结果示意图如下,该图片成功地被识别为虎斑猫tabby(置信度最高)。

图3:虚拟树莓派上运行结果示意图




虚拟树莓派vs真实树莓派

在2.1-2.3节中,我们完成了在AVH的虚拟树莓派4开发板上完成基于Paddle Lite的图像识别应用的部署。为了让各位开发者更直观地感受在虚拟树莓派4和在真实树莓派4开发板上进行开发部署的差异,我们使用树莓派400开发套件 [8] (键盘内部集成有树莓派4作为真实树莓派硬件平台进行该Paddle Lite图像识别应用的部署。同样地,需要安装Raspberry Pi OS with desktop操作系统(64 位) [9] 。各位开发者可以选用单独的树莓派4开发板进行同样的体验和测试。

各位开发者可以将2.3节中兼容性修改后的代码上传至GitHub等代码仓库并直接在真实树莓派4/400开发板上下载和使用该代码。按照2.1-2.3节中相同的命令操作完成真实树莓派开发板上环境的运行配置以及应用的部署,其结果与虚拟树莓派4上的运行结果一致,对比示意图 (图4) 所示。可见,在确保结果准确性的情况下,在虚拟树莓派上的处理时间更短,其获得推理测试结果的速度更快。

图4:运行对比结果示意图

*注: 虚拟硬件Display显示界面的色差将会在后续版本更新中修复

小结


本期课程带领大家学习了解了如何在AVH的虚拟树莓派4上完成图像识别应用的部署,并将其结果与真实硬件开发板上的运行结果进行了对比。 不难看出,AVH有效地解决了实体硬件所面临的种种痛点问题,开发者无需再受硬件资源的约束,可以随时随地的开始软件开发之旅。 赶快扫描前文二维码或点击“阅读原文”申请试用,即刻体验吧!

拓展阅读

AVH部署实践 (一) | 在Arm虚拟硬件上部署飞桨模型

AVH 动手实践 (二) | 在 Arm 虚拟硬件上部署 PP-OCR 模型

AVH动手实践 (三) | 在Arm虚拟硬件上部署PP-PicoDet模型


参考文献

[1]图像分类任务介绍 

https://github.com/PaddlePaddle/PaddleClas/blob/release/2.5/docs/zh_CN/algorithm_introduction/image_classification.md 

[2] PP-ShiTuV2图像识别系统效果展示

https://github.com/PaddlePaddle/PaddleClas/blob/release/2.5/docs/images/shituv2.gif 

[3] Paddle Lite opt工具

https://paddle-lite.readthedocs.io/zh/develop/user_guides/model_optimize_tool.html 

[4]Paddle Lite完整文档

https://paddle-lite.readthedocs.io/zh/develop/guide/introduction.html#id1 

[5]Arm物联网全面解决方案

https://www.arm.com/solutions/iot/total-solutions-iot 

[6]Arm 虚拟硬件官网

https://avh.arm.com 

[7]图像识别示例代码

https://github.com/PaddlePaddle/Paddle-Lite-Demo/tree/master/PaddleLite-armlinux-demo/image_classification_demo 

[8]Raspberry Pi 400开发套件

https://www.raspberrypi.com/products/raspberry-pi-400/ 

[9]Raspberry Pi OS列表

https://www.raspberrypi.com/software/operating-systems/ 



关注【飞桨PaddlePaddle】公众号

获取更多技术内容~