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

news2024/11/26 1:45:44
基于 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.coloradmin.cn/o/1835289.html

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

相关文章

Log4j2(CVE-2021-44228)远程代码执行漏洞

目录 介绍 log4j2介绍: JNDI介绍 LDAP介绍 RMI介绍 log4j2漏洞 漏洞复现 漏洞的(触发)流程 利用log4j2漏洞反弹shell 最近打算学习一下JAVA中几个经典的漏洞,这里还是参考别的师傅总结的好文章进行学习 JAVA的几个经典漏…

【价值主张画布】以产品思维,将自己打造成“爆款”

经营自己等于经营公司: 1.客户细分:我能帮助谁?谁是我们最重要的客户? 2. 客户关系:怎样和对方打交道?一次交付还是持续交付? 3.渠道通路:怎样宣传自己和服务? 4. 价值主…

请查收2024年小朋友的暑假计划日程表

2024年盛夏将至,孩子们的暑假即将拉开帷幕,是时候为他们精心策划一份丰富多彩的暑期日程表,让他们的假期充实而难忘! 具体时间规划 07:30-08:00 清晨准备 独立完成穿衣、如厕和洗漱 打开窗户通风 测量体温,关注健康…

少儿编程启蒙新篇章:Scratch引领图形化编程的奇妙之旅

随着信息技术的飞速发展,编程教育已不再是专业领域的专属,而是逐渐走进千家万户,成为孩子们成长过程中不可或缺的一部分。特别是在少儿编程领域,图形化编程工具如Scratch的普及,为孩子们打开了编程启蒙的大门&#xff…

Vulnhub——AI: WEB: 2

渗透复现 (1)平台框架存在目录穿越漏洞,利用该漏洞读取敏感信息 (2)Ping功能点绕过,进行命令执行操作,反弹shell无果后,利用目录穿越漏洞遍历敏感API,读取到用户SSH登录…

第三方仓库WMS仓储管理系统智能库存预警解决方案

在当今竞争激烈的物流市场中,第三方仓库扮演着连接供应链各环节的关键角色。面对不断变化的客户需求和日益严格的市场要求,如何提升仓库管理水平、优化库存结构、降低运营成本,成为了第三方仓库管理者必须面对的重要课题。在这一背景下&#…

pdfFactory虚拟打印机软件下载-pdfFactory虚拟打印机官方最新版下载附加详细安装步骤

pdffactory是一款办公软件,帮助用户更好的进行文件处理,轻松查询使用,不用担心故障的问题,而且打印速度快,效率高,保障用户日常打印轻松。 安 装 包 获 取 地 址: FinePrint-安装包 &#xff1…

006 spring事务支持

文章目录 事务回顾事务介绍事务并发问题(隔离性导致)事务隔离级别 Spring框架事务管理相关接口Spring框架事务管理的分类编程式事务管理(了解)声明式事务管理(重点) 事务管理之XML方式业务层持久层单元测试代码配置事务管理的AOP 事务管理之混合方式事务管理之基于AspectJ的纯注…

前沿技术丨实车测试必须注意的3个方面

在汽车网络通信中,ECU零部件测试、域/系统测试在测试条件上存在局限性,往往由于无法完全仿真工作环境、无法排除特殊干扰因素、异常场景预估不充分,导致在集成到整车后才新暴露出一些功能、性能、兼容性问题。 实车通信测试是作为测试验证的…

【数据分析】线性及逻辑回归模型和Python实现

各位大佬好 ,这里是阿川的博客,祝您变得更强 个人主页:在线OJ的阿川 大佬的支持和鼓励,将是我成长路上最大的动力 阿川水平有限,如有错误,欢迎大佬指正 Python 初阶 Python–语言基础与由来介绍 Python–…

FUANC机器人教程:速度倍率级数与倍率增量设定方法

目录 机器人速度倍率介绍 机器人运行速度倍率切换操作 快速切换速度倍率有效与无效设定 速度倍率级数与增量自定义 速度倍率级数与增量自定义举例 机器人速度倍率介绍 在机器人手动或自动运行时都离不开速度设定,机器人的运行速度由多个要素共同决定&#xff…

【毕业设计】Django 校园二手交易平台(有源码+mysql数据)

此项目有完整实现源码,有需要请联系博主 Django 校园二手交易平台开发项目 项目选择动机 本项目旨在开发一个基于Django的校园二手交易平台,为大学生提供一个安全便捷的二手物品买卖平台。该平台将提供用户注册和认证、物品发布和搜索、交易信息管理等…

如何使用Vue3和ApexCharts创建交互式热力图?

本文由ScriptEcho平台提供技术支持 项目地址:传送门 热力图:可视化数据分布 应用场景介绍 热力图是一种数据可视化技术,它使用颜色来表示数据点的值。热力图常用于可视化分布数据,例如人口密度、温度变化或网站流量。 代码基…

视频太长了,想要剪切掉一节怎么操作?

如果你想为你的视频制作一个具有一定客观性的短视频,并在一些平台上发布,那么剪辑视频片段是不可避免的。通过剪辑视频片段的操作,提出视频中多余的视频内容,将自己需要的内容单独提取出来。但问题是如何操作它。对于新手来说&…

【分布式事务】分布式事务其他解决方案——2PC

目录 2PC解释例子分析回到IT系统中 XA 方案执行流程DTP 模型交互模式 总结 2PC 解释 2PC 即两阶段提交协议,是将整个事务流程分为两个阶段,准备阶段(Prepare phase)、提交阶段(commit phase),…

探索AgentUniverse:蚂蚁集团发布的多体Agent构建工厂

在迅速发展的AI领域,多体智能系统因其通过协调工作处理复杂任务的能力而受到广泛关注。最近,蚂蚁集团发布了一款名为AgentUniverse的开源框架,旨在构建各种智能体,包括法律咨询智能体、事件解读智能体、行业分析智能体和财报生成智…

从零到一:Python自动化测试的详细指南!

引言: Python是一种功能强大且易于学习和使用的编程语言,它非常适合用于自动化测试。本文将从零开始,通过详细的步骤和规范,介绍如何在Python中实施高质量的自动化测试。我们将探讨测试策略的制定、测试框架的选择、测试用例的编…

表达式的格式化

表达式:一条具有明确结果的代码语句 在字符串前面加上前缀f,表示这是一个格式化字符串,可以在字符串中直接引用变量,并使用{}来表示这些变量的位置。例如: name "Alice" age 30 print(f"My name is …

30. 光纤耦合器

导论: 物理光学传播(POP)可用于计算光纤耦合效率。 设计流程: 光束建模和聚焦 在系统选项中选择系统孔径,在系统孔径下选择“入瞳直径”,并输入“4”。 设置0视场,选择角度。 加入1um波长。…

使用 Mask R-CNN 进行血细胞分割

介绍 血细胞分析是诊断各种医学疾病的重要步骤,从感染和贫血到更严重的疾病如白血病。传统上,这一过程是通过老方法进行的——实验室技术员通过显微镜查看血涂片玻片,花费几个小时。这一过程不仅令人乏味,还容易出现人为错误&…