人体姿态估计(人体关键点检测)2D Pose训练代码和Android源码
目录
人体姿态估计(人体关键点检测)2D Pose训练代码和Android源码
1.人体姿态估计2D Pose方法
2.人体姿态估计数据集
(1)COCO数据集
(2)MPII数据集
(3)关键点示意图(ID序号)
3.人体(行人)检测
4.人体姿态估计训练Training Pipeline
(1)Environment
(2)数据准备:COCO和MPII数据集
(3)模型训练
(4) 测试Demo
(5) 检测效果展示
5.人体姿态估计模型Android部署
(1) 将Pytorch模型转换ONNX模型
(2) 将ONNX模型转换为TNN模型
(3) Android端上部署人体关键点检测
6.项目源码下载
人体关键点检测(Human Keypoints Detection)又称为人体姿态估计2D Pose,是计算机视觉中一个相对基础的任务,是人体动作识别、行为分析、人机交互等的前置任务。一般情况下可以将人体关键点检测细分为单人/多人关键点检测、2D/3D关键点检测,同时有算法在完成关键点检测之后还会进行关键点的跟踪,也被称为人体姿态跟踪。
来,先看个Android Demo的效果图:
视频测试 | 图片测试 | 图片测试 |
整套项目,支持的主要内容主要有: 人体姿态估计(人体关键点检测)2D Pose训练代码和Android源码
- 2D Pose人体关键点检测的训练和测试代码(Pytorch版本)
- 支持COCO数据集训练
- 支持MPII数据集训练
- 支持轻量化模型mobilenet-v2
- 支持高精度模型HRNet
- 人体关键点检测C++版本:https://github.com/PanJinquan/Human-Pose-Estimation-Lite-cpp
- 人体关键点检测Android Demo源码,已经集成了轻量化版本的
人体检测模型
和人体姿态估计模型
,在普通手机可实时检测
一些项目推荐:
- 个人Repo(Python版,不含有训练代码): https://github.com/PanJinquan/Human-Keypoints-Detection
- 个人Repo(C++版):https://github.com/PanJinquan/Human-Pose-Estimation-Lite-cpp
- 2D Pose人体关键点检测Android Demo APP体检(支持CPU多线程和GPU加速,可实时检测)
- 2D Pose人体关键点检测(Human Keypoints Detection)训练代码和Android源码:人体姿态估计(人体关键点检测)2D Pose训练代码和Android源码
1.人体姿态估计2D Pose方法
目前,人体姿态估计的主流框架,主要有两个方法
(1)Top-Down(自上而下)方法
将人体检测和关键点检测分离,在图像上首先进行人体检测,找到所有的人体框,对每个人体框图再使用关键点检测,这类方法往往比较慢,但姿态估计准确度较高。目前的主流是CPN,Hourglass,CPM,Alpha Pose等。
(2)Bottom-Up(自下而上)方法
先检测图像中人体部件,然后将图像中多人人体的部件分别组合成人体,因此这类方法在测试推断的时候往往更快速,准确度稍低。典型就是COCO2016年人体关键点检测冠军Open Pose。
就目前调研而言, Top-Down的方法研究较多,精度也比Bottom-Up(自下而上)方法好。本项目也主要分享基于Top-Down(自上而下)的方法。
2.人体姿态估计数据集
(1)COCO数据集
下载地址:http://cocodataset.org/
COCO人体关键点标注,最多标注全身的17个关键点,平均一幅图像2个人,最多有13个人;
人体关键点标注,每个人体关键点个数的分布情况,其中11-15这个范围的人体是最多的,有接近70000人,6-10其次,超过40000人,后面依次为16-17,2-5,1.
(2)MPII数据集
下载地址:http://human-pose.mpi-inf.mpg.de/#download
人体关键点标注了全身16个关键点及其是否可见的信息,人数:train有28821,test有11701,有409种人类活动;使用mat的struct格式;行人框使用center和scale标注,人体尺度关于200像素高度。也就是除过了200
(3)关键点示意图(ID序号)
数据集 | 关键点示意图 | 关键点说明 |
COCO | ||
MPII | ||
human3.6M | ||
kinect |
3.人体(行人)检测
基于Top-Down(自上而下)人体关键点检测方法,将人体检测和关键点检测分离;首先在图像上进行人体检测,找到所有的人体框,然后对每个人体框区域进行关键点检测,这类方法往往比较慢,但姿态估计准确度较高。目前的主流是CPN,Hourglass,CPM,Alpha Pose等。
人脸检测的方法很多,你可以基于YOLO,SSD模型训练一个通用人体检测模型即可,本篇博客不做重点介绍,感兴趣的话,可以看一下我的另一篇博客《人检测(人体检测)和人脸检测和人脸关键点检测(C++/Android)》
4.人体姿态估计训练Training Pipeline
人体姿态估计训练Pipeline,整套工程项目,基本结构如下:
(1)Environment
python依赖包,可参考[requirements.txt]
(2)数据准备:COCO和MPII数据集
COCO数据集
- 下载地址: COCO - Common Objects in Context
- 解压后,并保存如下的文件结构
- 修改配置文件的数据根目录,如train_model_mbv2_penson.yaml
- 其他配置文件,也可以如下修改
MPII数据集
- 下载地址: MPII Human Pose Database
- 原始数据集的标注是Matlab格式,使用前需要转换json格式: 下载地址: GoogleDrive
- 解压后,并保存如下的文件结构
- 修改配置文件的数据根目录,如train_model_mbv2_penson.yaml
- 其他配置文件,也可以如下修改
(3)模型训练
修改配置文件的数据根目录后,就可以开始训练,训练的基本命令如下
训练COCO人体关键点:
训练MPII人体关键点:
(4) 测试Demo
运行Demo测试效果
- 可根据自己的需要,修改demo.sh
- Demo参数说明如下
参数 | 类型 | 参考值 | 说明 |
c,config_file | str | 配置文件 | |
m,model_file | str | 模型文件 | |
skeleton | str,list | mpii | 骨骼点类型,如mpii,coco |
image_dir | str | data/test_image | 测试图片的路径 |
save_dir | str | data/result_image | 保存结果,为空不保存 |
video_path | str | 测试的视频文件 | |
video_save | str | 保存视频文件路径 | |
detect_person | bool | True | 是否检测人体检测,默认True |
threshhold | float | 0.3 | 关键点检测置信度 |
device | str | cuda:0 | GPU ID |
(5) 检测效果展示
5.人体姿态估计模型Android部署
(1) 将Pytorch模型转换ONNX模型
训练好Pytorch模型后,你可以将模型转换为ONNX模型,方便后续模型部署
(2) 将ONNX模型转换为TNN模型
目前CNN模型有多种部署方式,可以采用TNN,MNN,NCNN,以及TensorRT等部署工具,鄙人采用TNN进行Android端上部署:
将ONNX模型转换为TNN模型,请参考TNN官方说明:
(3) Android端上部署人体关键点检测
项目实现了Android版本的2D Pose人体关键点检测Demo,部署框架采用TNN,支持多线程CPU和GPU加速推理,在普通手机上可以实时处理。2D Pose人体关键点检测Android源码,核心算法均采用C++实现,上层通过JNI接口调用.
如果你想在这个Android Demo部署你自己训练的分类模型,你可将训练好的Pytorch模型转换ONNX ,再转换成TNN模型,然后把TNN模型代替你模型即可。
6.项目源码下载
整套项目源码《人体姿态估计(人体关键点检测)2D Pose训练代码和Android源码》,主要内容包含有:
- 2D Pose人体关键点检测的训练和测试代码(Pytorch版本)
- 支持COCO数据集训练
- 支持MPII数据集训练
- 支持轻量化模型mobilenet-v2
- 支持高精度模型HRNet
- 人体关键点检测C++版本:https://github.com/PanJinquan/Human-Pose-Estimation-Lite-cpp
- 人体关键点检测Android Demo源码,已经集成了轻量化版本的
人体检测模型
和人体姿态估计模型
,在普通手机可实时检测
如果,你不需要Python训练代码,仅考虑C++和Android Demo,可参考《2D Pose人体关键点实时检测(Python/Android /C++ Demo)》: