FastDeploy+EasyEdge:手部关键点检测模型的安卓部署
基于FastDeploy快速部署自定义COCO格式手部关键点检测任务。数据:https://gitcode.net/EricLee/hand_x
0 项目背景
在项目PP-TinyPose:自定义手部关键点检测模型的训练和评估中,我们成功将手部关键点数据集转换为较为通用的COCO格式,并使用针对移动端设备优化的实时关键点检测模型PP-TinyPose完成了训练,为流畅地在移动端设备上实现关键点检测任务做好了准备。
那么,如何最高效地实现上面的模型在移动端设备的部署?
而且,相较于EasyEdge提供的开源手部关键点检测模型,PP-TinyPose到底有多大提升?
读者可以先看下部署效果对比:
应该说,PP-TinyPose训练的手部关键点检测模型,让我们在实现移动端点读功能的路径上,往前大大迈进了一步。接下来,我们就来看看这个反应超快的手部关键点检测安卓APP是如何炼成的。
0.1 参考资料:点读全系列
- 【PaddlePaddle+OpenVINO】AI“朗读机”诞生记
- 【PaddlePaddle+OpenVINO】电表检测识别模型的部署
- 【PaddlePaddle+OpenVINO】打造一个指哪读哪的AI“点读机”
- 手把手教你快速打造一个AI识物点读机
- PaddleSpeech:基于流式语音合成的电表点读系统
- PaddleDetection:手部关键点检测模型训练与Top-Down联合部署
- 【AI达人创造营三期】手势识别“框啥读啥”——AI点读机再升级
- PP-TinyPose:自定义手部关键点检测模型的训练和评估
1 准备模型文件
相比于一些早期的PaddleDetection移动端部署解决方案需要用到Paddle Lite提供的策略自动优化原始的训练模型,要通过opt工具导出轻量的、最优的可执行模型——也就是通常我们会看到的.nb
文件,基于FastDeploy+EasyEdge的移动端部署方案将更加简洁。.nb
文件不用转了,直接用python tools/export_model.py
命令导出的模型和权重文件就行了。具体做法在PP-TinyPose:自定义手部关键点检测模型的训练和评估的3.1小结有实现。本项目也直接提供了其中两个会用到的导出结果model.pdiparams
和model.pdmodel
。
2 FastDeploy解决方案
⚡️FastDeploy是一款易用高效的推理部署开发套件。覆盖业界🔥热门AI模型并提供📦开箱即用的部署体验,包括图像分类、目标检测、图像分割、人脸检测、人脸识别、人体关键点识别、文字识别、语义理解等多任务,满足开发者多场景,多硬件、多平台的产业部署需求。
目前,FastDeploy唯一支持的关键点检测模型恰好是PP-TinyPose,并且它也在移动端设备上通过了测试。
任务场景 | 模型 | 大小(MB) | Linux | Android | iOS | Linux | Linux | Linux | 更新中… |
---|---|---|---|---|---|---|---|---|---|
— | — | — | ARM CPU | ARM CPU | ARM CPU | 瑞芯微NPU RV1109 RV1126 RK1808 | 晶晨NPU A311D S905D C308X | 恩智浦NPU i.MX 8M Plus | 更新中…| |
Keypoint Detection | PP-TinyPose | 5.5 | ✅ | ✅ | ✅ | ❔ | ❔ | ❔ | ❔ |
因此,我们可以放心大胆地来试试看了。
2.1 下载SDK示例
FastDeploy中SDK生成和下载使用了EasyEdge中的免费开放能力,我们可以在飞桨开源模型中找到PP-TinyPose的SDK:
不过,这里建议读者把上面的手部关键点检测SDK也顺便下载下来。因为PP-TinyPose原始的SDK是基于人体关键点检测预训练模型的,里面的关键点数量和手部关键点检测数量并不一致。那么如何处理这个问题?答案就在手部关键点检测SDK的源代码里!
因为笔者手上的设备是安卓手机,因此下载的都是安卓SDK。
2.2 准备Android Studio开发环境
安装过程可以参考手把手教你部署移动端迁移学习模型(PaddleX、Paddle-Lite)项目的准备Android Studio开发环境章节,导入我们刚才下载的SDK源码。
笔者因为手上的设备是鸿蒙系统,下载SDK和NDK的时候可以参考FastDeploy:电表检测模型在安卓设备的部署项目对照配置好。
这里需要注意的是,涉及到手机USB调试的选项也要勾起来。
2.3 模型、权重、标签文件替换
这也是前面很多移动端部署解决方案的老套路了,在导入的PP-TinyPose项目构建后,用model.pdiparams
和model.pdmodel
分别替换覆盖EasyEdge-Android-PP-TinyPose_128-arm-SDK/app/src/main/assets/infer
目录下的params
和model
文件
2.4 修改infer_cfg.json
文件
这一步是实现手部关键点检测模型部署的重中之重,否则权重不能加载,debug
会出现关键点识别结果索引溢出的报错。
在EasyEdge中,对关键点检测任务的不同数据集后处理过程进行了封装,并在model_info
用不同的n_type
设置予以了区分。
手部关键点检测的n_type
在对应的开源项目
中可以找到,因此务必要改过来。
修改后的infer_cfg.json
文件如下:
{
"version": 1,
"framework": "fluid",
"model_info": {
"n_type": 20041,
"best_threshold": 0.7,
"model_kind": 402
},
"pre_process": {
"skip_norm": false,
"mean": [123.675, 116.28, 103.53],
"scale":[
0.0171247538317, 0.0175070028011, 0.0174291938998
],
"color_format": "RGB",
"channel_order": "CHW",
"resize": [256, 256],
"rescale_mode": "keep_size"
},
"post_process": {
}
}
2.5 构建APK并部署
手机连接后,使用build
构建,可以在EasyEdge-Android-PP-TinyPose_128-arm-SDK/app/build/outputs/apk/debug
目录下找到成功生成的APK文件。当然,如果要省事,也可以直接run
部署程序到连接的手机上。
本项目也提供了成功构建的APK文件demo,读者可以自行下载试用。
3 效果展示
4 小结
在本项目中,我们基于FastDeploy+EasyEdge的快速实现了自定义关键点检测数据集在安卓手机的移动端部署。其效果较初版的开源模型有了极其显著的提升。
后续,我们将对项目代码进行改造,令其实现手机端/平板端随时随地“点读”的效果。
此文章为搬运
原项目链接
更多推荐
所有评论(0)