基于 Arm 虚拟硬件实现人脸特征提取模型的部署

基于 Arm 虚拟硬件实现人脸特征提取模型的部署


本实验过程中所显示的优惠价格及费用报销等相关信息仅在【Arm AI 开发体验创造营】体验活动过程中有效,逾期无效,请根据实时价格自行购买和体验。
同时,感谢本次体验活动 Arm 导师 Liliya 对于本博客的指导。
详见活动地址:https://marketing.csdn.net/p/a11ba7c4ee98e52253c8608a085424be

1 实验背景

1.1 Arm 虚拟硬件介绍

在现代嵌入式和物联网开发中,快速迭代和高效测试至关重要。Arm 虚拟硬件(Arm Virtual Hardware, AVH)提供了一个强大的开发环境。基于 Arm 虚拟硬件的百度云服务器内置 Ubuntu Linux 镜像,并包含了丰富的 Arm 开发工具,如 Arm 编译器、FVP 模型和针对 Cortex-M 系列处理器的其他工具。这些工具不仅帮助开发者快速上手,还支持评估 CI/CD、MLOps 和 DevOps 工作流中的自动化测试。订阅访问和使用此版本的 Arm 虚拟硬件,您需同意产品最终用户许可协议中与免费测试版许可相关的条款和协议。

Arm 虚拟硬件产品的技术概览示意图如下所示。开发者也可访问 Arm 虚拟硬件产品介绍页和产品技术文档了解更多关于 Arm 虚拟硬件产品知识。


Arm 虚拟硬件产品概览
图1. Arm 虚拟硬件产品概览

1.2 文章简介

本文将详细介绍如何基于 Arm 虚拟硬件部署一个人脸特征提取模型。通过利用 Arm 虚拟硬件,我们可以在不依赖实际硬件的情况下进行高效开发和测试,从而大大缩短开发周期。本文将涵盖以下内容:

  • 配置 Arm 虚拟硬件开发环境
  • 配置并编译人脸特征提取模型
  • 编译基于 Arm 虚拟硬件实现的人脸特征提取 Demo
  • 在 Arm 虚拟硬件上进行部署和测试

2 实验目标

  1. 了解 Arm 虚拟硬件产品的功能及核心优势。
  2. 熟悉 Arm 虚拟硬件云服务器 BCC 实例的订阅流程及 Arm 虚拟硬件镜像内的主要组件。
  3. 掌握如何使用 Arm 虚拟硬件云服务器 BCC 实例进行嵌入式软件的开发(例如:机器学习、物联网应用等)并熟悉其基本的开发流程,包括:如何搭建开发环境、编译构建应用代码、运行调试工程代码等步骤。

3 实验前准备

3.1 订阅 Arm 虚拟硬件镜像的百度智能云云服务器 BCC 实例

在实验开始前请参考 如何订阅使用 Arm 虚拟硬件镜像的百度智能云云服务器 BCC 实例 来购买并初始化一个基于 Arm 虚拟硬件镜像的百度智能云云服务器 BCC 实例。

3.2 克隆实验代码

首先我们需要将实验代码克隆(下载)至 BCC 服务器实例中,便于后续使用 Arm 虚拟硬件镜像环境中的软件开发工具进行进一步的开发调试。
本实验代码的仓库地址为:https://github.com/Zheng-Bicheng/FacialFeatureComparisonForAVH.git ,通过以下命令可以将代码仓库中的代码克隆下载至服务器中。

git clone https://github.com/Zheng-Bicheng/FacialFeatureComparisonForAVH.git

为了加速大家的下载速度,我们也提供了gitee镜像源,通过以下命令可以使用gitee镜像源将代码仓库中的代码克隆下载至服务器中。

git clone https://gitee.com/bicheng-zheng/FacialFeatureComparisonForAVH.git

命令执行后参考结果示意图如下所示:

克隆实验代码结果演示
图3-2-1. 克隆实验代码结果演示

4 实验步骤

4.1 配置开发环境

该项目基于 使用Arm 架构的百度云服务器 并利用 Arm 虚拟硬件 (Arm Virtual Hardware, AVH) 运行。根据服务器架构的不同,我们需要针对性的对开发环境进行配置。为了简化大家的时间,我们提供了两个脚本文件来帮助大家快速配置环境,如需了解更多细节,请参考脚本文件中的注释:

4.1.1 配置 CMSIS-Toolbox 环境

CMSIS-Toolbox 是作为 Open-CMSIS-Pack 项目的重要组成部分之一。它统一了流行嵌入式工具链(Arm、GCC、IAR 和 LLVM 编译器)的开发流程,是下一代软件工具的重要组成部分。CMSIS-Toolbox 还提供了命令行工具,用于:

  • 利用软件包创建项目并构建嵌入式应用程序,支持使用多种编译工具。
  • 利用 CMSIS-Pack 格式创建、维护和分发软件包。

你可以执行以下代码来快速配置 CMSIS-Toolbox 的开发环境:

cd /path/to/FacialFeatureComparisonForAVH  # 进入项目根目录
sudo bash scripts/config_cmsis_toolbox.sh

命令执行后参考结果示意图如下所示:

配置 CMSIS-Toolbox 开发环境结果演示
图4-1-1. 配置 CMSIS-Toolbox 开发环境结果演示

4.1.2 配置 Python 环境

Python 语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的编程语言,你可以执行以下代码来快速配置 Python 的开发环境:

cd /path/to/FacialFeatureComparisonForAVH  # 进入项目根目录
source scripts/config_python.sh
配置 Python 开发环境结果演示
图4-1-2. 配置 Python 开发环境结果演示

4.1.3 配置 CMSIS-Pack 软件包

本实验项目的开发采用了 Open-CMSIS-Pack 项目的标准形式,我们可以使用 Arm 虚拟硬件镜像中预装的 CMSIS-Toolbox 工具包里的 cbuild 工具来构建本实验项目。
需要注意的是,正常情况下,运行 cbuild 命令在构建工程的过程中会自动下载项目所依赖的 CMSIS Packs 软件包。但由于国内外网络环境的差异,部分 CMSIS Packs 软件包资源的下载速度较慢导致无法自动下载成功。因此,为便于开发者顺利地完成本实验项目的体验,我们提供了脚本文件一键下载和安装 Packs ,你可以执行以下代码来快速配置开发环境:

cd /path/to/FacialFeatureComparisonForAVH  # 进入项目根目录
bash scripts/config_pack.sh
配置 CMSIS-Pack 软件包结果演示
图4-1-3. 配置 CMSIS-Pack 软件包结果演示

4.1.4 更新 FVP 开发环境

由于本项目需要,我们需要手动的更新 FVP模型组件。请参考下面命令进行更新。

cd /path/to/FacialFeatureComparisonForAVH  # 进入项目根目录
sudo bash scripts/config_fvp.sh
更新 FVP 开发环境结果演示
图4-1-4. 更新 FVP 开发环境结果演示

4.2 配置并编译人脸特征提取模型

4.2.1 模型介绍

本项目使用的人脸识别特征提取模型是 Adaface ,你可以在 insightface/recognition/arcface_paddle 中找到它的详细介绍。受限于 MCU 设备极为紧张的内存,我们这里选用了 backbone 为 MobileFaceAdaface 模型,以下是它的详细参数:

Model structure lfw cfp_fp agedb30 CPU time cost GPU time cost Inference model
MobileFace-Paddle 0.9952 0.9280 0.9612 4.3ms 2.3ms download link

4.2.2 使用 TVM 编译模型

本项目参考了 ArmDeveloperEcosystem/Paddle-examples-for-AVH,使用 TVM 来将人脸特征提取模型转换成可以在 MCU 设备上部署的 C 代码,关于 TVM 的更多介绍,你可以参考 apache/tvm

在使用 TVM 转换 PaddlePaddle 模型的过程中,我们较为建议的流程为:

  1. 获取 PaddlePaddle 静态图模型
  2. 使用 Paddle2ONNXPaddlePaddle 模型转换 ONNX 模型
  3. 使用 TVMONNX 模型转换为为可以在 MCU 设备上部署的 C 代码

为了简化大家的时间,我们提供了脚本文件来帮助大家快速利用 TVM ,如需了解更多细节,请参考脚本文件中的注释:

你可以执行以下代码来快速使用 TVM 编译模型(编译可能需要持续较长的时间,请耐心等待)

cd /path/to/FacialFeatureComparisonForAVH  # 进入项目根目录
bash scripts/build_facial_feature_model.sh
使用 TVM 编译模型结果演示
图4-2-2-1. 使用 TVM 编译模型结果演示

运行脚本后,该项目目录下将出现 face_feature 文件夹,文件夹内存放了可以在 MCU 设备上部署模型的 C 代码。

4.3 编译人脸特征提取应用

4.3.1 图片数据预处理

FacialFeatureComparisonForAVH/images 目录下存放了三张人脸图片,其中 face_0.jpgface_1.jpg 为人脸 A ,face_2.jpg 为人脸 B 。通常情况下,将图片转换为模型的输入需要经过以下三个步骤:

  1. 颜色通道转换(BGR2RGB)
  2. 图片缩放(Resize)
  3. 图片归一化(Normalize)

为了简化大家的时间,我们同样提供了 python 脚本来帮大家快速将输入图片转换为输入数据,如果你想要了解更多的细节,请参考脚本文件中的注释:

你可以执行以下代码来快速将输入图片转换为输入数据

cd /path/to/FacialFeatureComparisonForAVH  # 进入项目根目录
python scripts/convert_image.py images/face_0.jpg images/face_1.jpg
将图片转换为输入数据结果演示
图4-3-1. 将图片转换为输入数据结果演示

4.3.2 编译该项目

本项目以 csolution 格式提供,我们使用 CMSIS-Toolbox 中的 cbuild 工具在命令行中构建项目。你可以执行以下代码来快速编译本项目。

cd /path/to/FacialFeatureComparisonForAVH  # 进入项目根目录
rm -rf ./tmp  # 删除编译目录
armlm activate -product KEMDK-COM0 -server https://mdk-preview.keil.arm.com  # 激活 License
cbuild project.csolution.yml  # 编译项目
编译该项目结果演示
图4-3-2. 编译该项目结果演示

5 在 Arm 虚拟硬件上进行部署和测试

接下来我们使用 Arm 虚拟硬件对我们编译出来的应用进行模拟和测试

cd /path/to/FacialFeatureComparisonForAVH  # 进入项目根目录
/opt/VHT/bin/FVP_Corstone_SSE-300 --stat --simlimit 8000 -f FVP_Corstone_SSE-300_Config.txt out/project/V2M-MPS3-SSE-300-FVP/Debug/project.axf
部署和测试结果演示
图5-1. 部署和测试结果演示

其中,该命令部分参数解读如下:

  • /opt/VHT/bin/FVP_Corstone_SSE-300 调用含有 Cortex-M55 处理器的 FVP 模型的名称
  • --stat 表示停止模拟时,打印相关的运行状态信息。
  • --simlimit 8000 表示模拟运行的时间上限为 8000s,即若用户未手动退出,则8000s 后程序会自动退出运行。
  • out/image.axf 即为所执行的应用文件,即本实验项目开发的指纹图像识别应用的可执行文件。
  • -f FVP_Corstone_SSE-300_Config.txt 即指定了 FVP 模型运行时的所依据的配置文件。可以通过 /opt/VHT/bin/FVP_Corstone_SSE-300 -l 命令获取基于 FVP_Corstone_SSE-300 的所有可配置的参数及其默认值(初始值)信息。用户可根据自身需求进行参数调整,获得不同的应用执行效果。

6 参考资料

  1. Arm 虚拟硬件产品简介
  2. Arm 虚拟硬件帮助文档
  3. Arm 虚拟硬件开发者资源
  4. 【中文技术指南】Arm 虚拟硬件实践专题一:产品订阅指南(百度智能云版)
  5. 【中文技术指南】Arm 虚拟硬件实践专题二:Arm 虚拟硬件 FVP 模型入门指南
  6. 【中文视频直播课】加速AI开发,1小时快速入门Arm虚拟硬件
  7. Arm® Keil® Microcontroller Development Kit (MDK) Getting Started Guide
  8. Open-CMSIS-Pack
  9. CMSIS-Toolbox
  10. Github/apache/tvm
  11. Github/deepinsight/insightface
  12. Arm 社区微信公众号
Arm 社区微信公众号

相关推荐

  1. 基于opencvSIFT特征提取

    2024-06-18 18:24:01       27 阅读
  2. ARM开源硬件

    2024-06-18 18:24:01       18 阅读
  3. 特征提取技术实例

    2024-06-18 18:24:01       19 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-18 18:24:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-18 18:24:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-18 18:24:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-18 18:24:01       18 阅读

热门阅读

  1. Github 2024-06-16 php开源项目日报 Top10

    2024-06-18 18:24:01       4 阅读
  2. UE5 发射物目标追踪

    2024-06-18 18:24:01       3 阅读
  3. MYSQL

    MYSQL

    2024-06-18 18:24:01      4 阅读
  4. C#面:请解释C#接口的显式实现有什么意义

    2024-06-18 18:24:01       6 阅读
  5. 联合类型和交叉类型

    2024-06-18 18:24:01       6 阅读
  6. 每天一个项目管理概念之干系人

    2024-06-18 18:24:01       7 阅读
  7. linux常用指令

    2024-06-18 18:24:01       3 阅读
  8. 2024大数据面试题汇总(更新中。。。)

    2024-06-18 18:24:01       8 阅读
  9. mysql中社区版如何杀死锁

    2024-06-18 18:24:01       5 阅读
  10. TypeScript中的枚举

    2024-06-18 18:24:01       7 阅读