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

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

文章目录

  • 1 实验背景
    • 1.1 Arm 虚拟硬件介绍
    • 1.2 文章简介
  • 2 实验目标
  • 3 实验前准备
    • 3.1 订阅 Arm 虚拟硬件镜像的百度智能云云服务器 BCC 实例
    • 3.2 克隆实验代码
  • 4 实验步骤
    • 4.1 配置开发环境
      • 4.1.1 配置 CMSIS-Toolbox 环境
      • 4.1.2 配置 Python 环境
      • 4.1.3 配置 CMSIS-Pack 软件包
      • 4.1.4 更新 FVP 开发环境
    • 4.2 配置并编译人脸特征提取模型
      • 4.2.1 模型介绍
      • 4.2.2 使用 TVM 编译模型
    • 4.3 编译人脸特征提取应用
      • 4.3.1 图片数据预处理
      • 4.3.2 编译该项目
  • 5 在 Arm 虚拟硬件上进行部署和测试
  • 6 参考资料


本实验过程中所显示的优惠价格及费用报销等相关信息仅在【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) 运行。根据服务器架构的不同,我们需要针对性的对开发环境进行配置。为了简化大家的时间,我们提供了两个脚本文件来帮助大家快速配置环境,如需了解更多细节,请参考脚本文件中的注释:

  • FacialFeatureComparisonForAVH/scripts/config_cmsis_toolbox.sh
  • FacialFeatureComparisonForAVH/scripts/config_python.sh
  • FacialFeatureComparisonForAVH/scripts/config_pack.sh
  • FacialFeatureComparisonForAVH/scripts/config_fvp.sh

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 structurelfwcfp_fpagedb30CPU time costGPU time costInference model
MobileFace-Paddle0.99520.92800.96124.3ms2.3msdownload 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 ,如需了解更多细节,请参考脚本文件中的注释:

  • FacialFeatureComparisonForAVH/scripts/build_facial_feature_model.sh

你可以执行以下代码来快速使用 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 脚本来帮大家快速将输入图片转换为输入数据,如果你想要了解更多的细节,请参考脚本文件中的注释:

  • FacialFeatureComparisonForAVH/scripts/convert_image.py

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

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 社区微信公众号

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/29486.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

idea2020版本下载及注册

一。准备idea2020和BetterIntelliJ插件和补丁key 二、开始安装。 idea就正常安装,然后打开,选择试用30天打开即可,然后File - settings - plugins 点击 Install Plugin from Disk 然后选择BetterIntelliJ这个,这个后期不可变名称…

推动电子凭证服务革新,加速政务数字化转型

随着“互联网政务”的深入实施,电子凭证已成为政务服务数字化升级的关键要素。电子凭证不仅极大地方便了企业和群众,而且作为国家信息资源的重要组成部分,对于优化政务服务、加强社会治理和行业监管具有深远的影响。然而,由于政务…

SpringMVC系列八: 手动实现SpringMVC底层机制-下

手动实现SpringMVC底层机制-下 实现任务阶段五🍍完成Spring容器对象的自动装配-Autowired 实现任务阶段六🍍完成控制器方法获取参数-RequestParam1.🥦将 方法的 HttpServletRequest 和 HttpServletResponse 参数封装到数组, 进行反射调用2.&a…

计算机跨考现状,两极分化现象很严重

其实我觉得跨考计算机对于一些本科学过高数的同学来说有天然的优势 只要高数能学会,那计算机那几本专业课,也能很轻松的拿下,而对于本科是文科类的专业,如果想跨考计算机,难度就不是一般的大了。 现在跨考计算机呈现…

2024北京智源大会开幕,智源推出大模型全家桶及全栈开源技术基座新版图,大模型先锋集结共探AGI之路

2024年6月14日,第六届“北京智源大会”在中关村展示中心开幕。 北京智源大会是智源研究院主办的“AI内行顶级盛会”,以“全球视野、思想碰撞、前沿引领”为特色,汇聚海内外研究者分享研究成果、探寻前沿知识、交流实践经验。2024北京智源大会…

【学习Docker】

学习Docker可以分为几个步骤和阶段,以下是一个建议的学习路径,适合初学者到进阶用户: ### 1. 理解基本概念 - **容器化与虚拟化**:了解容器化与传统虚拟化之间的区别,容器的轻量级和效率。 - **Docker组件**&#xff…

springboot优雅shutdown时如何保障异步线程的安全

我前面写了一篇springboot优雅shutdown的文章,看起来一切很美好。 https://blog.csdn.net/chenshm/article/details/139640775 那是因为没有进行多线程测试。如果一个请求中包括阻塞线程(主线程)和非阻塞线程(异步线程&#xff09…

Linux安装MySQL以及远程连接

1、Linux安装MySQL 1.1、准备解压包 MySQL5.x解压包 提取码:9y7n 1.2、通过rpm脚本安装 切记安装顺序:common --> libs --> client --> server 因为它们之间存在依赖关系,所以务必按照顺序安装 安装前请确保当前目录/文…

【差分数组】2772. 使数组中的所有元素都等于零

本文涉及知识点 差分数组 LeetCode2772. 使数组中的所有元素都等于零 给你一个下标从 0 开始的整数数组 nums 和一个正整数 k 。 你可以对数组执行下述操作 任意次 : 从数组中选出长度为 k 的 任一 子数组,并将子数组中每个元素都 减去 1 。 如果你可…

【Android】安Android Studio环境搭建注意点

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 目录 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌…

PowerBi 获取指定时间间隔的日期的方法

获取指定时间间隔的日期,比如我们想得到2024年5月31日后的第三天。 网络上的教程一般是使用DATEADD()函数。 但是这个函数返回的是表。假如我们的需求是不做汇总等计算,只是把它作为一个计算列,或者度量值,那么我更推荐用DATE(&…

信息系统项目管理师 | 新一代信息技术

关注WX:CodingTechWork 物联网 定义 The Internet of Things是指通过信息传感设备,按约定的协议,将任何物品与互联网连接,进行信息交互和通信,以实现智能化识别。定位、跟踪、监控和管理的一种网络。物联网主要解决…

Part 4.4 树形动态规划

树形动态规划,即在树上进行的动态规划。 因为树的递归性质,树形动态规划一般都是递归求解的。 没有上司的舞会 题目描述 某大学有 n n n 个职员,编号为 1 … n 1\ldots n 1…n。 他们之间有从属关系,也就是说他们的关系就像…

禅道系统忘记密码-直接更改数据库数据解决

禅道系统很久不用密码忘记了,这里采用直接进数据库修改密码方式解决。 登录到系统,进入禅道安装目录,这里安装在/opt/zbox 基本思路如下: 1.找到数据库账号和密码。 2.使用mysql命令登陆数据库。 3.在禅道数据库对应用户表内更…

鸿蒙原生应用元服务开发-位置服务申请权限

申请位置权限开发指导 场景概述 应用在使用位置服务系统能力前,需要检查是否已经获取用户授权访问设备位置信息。如未获得授权,可以向用户申请需要的位置权限。 系统提供的定位权限有: ohos.permission.LOCATION:用于获取精准位置…

keepalived服务详解与实验 基于centos8

目录 keepalivedHA简介常用的高可用软件keepalived简介 keepalived常用模块keepalived功能简介keepalived常用文件keepalived配置文件详解keepalived实验1-上手环境准备安装服务主配置文件修改启动服务效果查看 keepalived脑裂1. 脑裂现象简介2. 脑裂的原因3. 脑裂的预防和解决…

电商API接口是什么意思?有什么作用?

电商API接口是电子商务领域中一种技术解决方案,它允许不同的软件系统之间进行交互和数据交换。 在电商场景下,电商API接口可以实现的功能非常丰富,例如: 商品管理:获取商品列表、商品详情、搜索商品、上下架商品等&a…

一文详解:什么是小程序SDK?

什么是小程序SDK? 首先来看看概念:小程序SDK(Software Development Kit)是用于开发和扩展小程序的工具集合。可以理解为一套工具箱,专门帮助开发者建立和定制小程序应用程序。这些工具包括了开发小程序所需的各种代码…

【网络编程】多进程服务器端

并发服务器的实现 多进程服务器:通过创建多个进程提供服务多路复用服务器:通过捆绑并统一管理IO对象提供服务。多线程服务器:通过生成与客户端等量的线程提供服务。、 理解进程process 定义:占用内存空间的正在运行的程序。 CPU核和进程数:1个CPU 中…

wegame启动游戏错误代码126,加载x3daudio1_7.dll失败怎么解决

x3daudio1_7.dll是一个重要的动态链接库文件,属于Microsoft DirectX SDK的一部分,主要服务于音频处理领域,特别是在游戏和多媒体应用程序中提供高级的3D音频效果。 基本属性与功能 文件名称:x3daudio1_7.dll 类型:动…