0 项目背景

在项目PP-TinyPose:自定义手部关键点检测模型的训练和评估中,我们成功将手部关键点数据集转换为较为通用的COCO格式,并使用针对移动端设备优化的实时关键点检测模型PP-TinyPose完成了训练,为流畅地在移动端设备上实现关键点检测任务做好了准备。

那么,如何最高效地实现上面的模型在移动端设备的部署?

而且,相较于EasyEdge提供的开源手部关键点检测模型,PP-TinyPose到底有多大提升?

读者可以先看下部署效果对比:

在这里插入图片描述

应该说,PP-TinyPose训练的手部关键点检测模型,让我们在实现移动端点读功能的路径上,往前大大迈进了一步。接下来,我们就来看看这个反应超快的手部关键点检测安卓APP是如何炼成的。

0.1 参考资料:点读全系列

1 准备模型文件

相比于一些早期的PaddleDetection移动端部署解决方案需要用到Paddle Lite提供的策略自动优化原始的训练模型,要通过opt工具导出轻量的、最优的可执行模型——也就是通常我们会看到的.nb文件,基于FastDeploy+EasyEdge的移动端部署方案将更加简洁。.nb文件不用转了,直接用python tools/export_model.py命令导出的模型和权重文件就行了。具体做法在PP-TinyPose:自定义手部关键点检测模型的训练和评估的3.1小结有实现。本项目也直接提供了其中两个会用到的导出结果model.pdiparamsmodel.pdmodel

2 FastDeploy解决方案

⚡️FastDeploy
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

⚡️FastDeploy是一款易用高效的推理部署开发套件。覆盖业界🔥热门AI模型并提供📦开箱即用的部署体验,包括图像分类、目标检测、图像分割、人脸检测、人脸识别、人体关键点识别、文字识别、语义理解等多任务,满足开发者多场景多硬件多平台的产业部署需求。

目前,FastDeploy唯一支持的关键点检测模型恰好是PP-TinyPose,并且它也在移动端设备上通过了测试。

任务场景模型大小(MB)LinuxAndroidiOSLinuxLinuxLinux更新中…
ARM CPUARM CPUARM CPU瑞芯微NPU
RV1109
RV1126
RK1808
晶晨NPU
A311D
S905D
C308X
恩智浦NPU
i.MX 8M Plus
更新中…|
Keypoint DetectionPP-TinyPose5.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.pdiparamsmodel.pdmodel分别替换覆盖EasyEdge-Android-PP-TinyPose_128-arm-SDK/app/src/main/assets/infer目录下的paramsmodel文件
在这里插入图片描述

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的快速实现了自定义关键点检测数据集在安卓手机的移动端部署。其效果较初版的开源模型有了极其显著的提升。

后续,我们将对项目代码进行改造,令其实现手机端/平板端随时随地“点读”的效果。

此文章为搬运
原项目链接

Logo

学大模型,用大模型上飞桨星河社区!每天8点V100G算力免费领!免费领取ERNIE 4.0 100w Token >>>

更多推荐