MMPose姿态估计+人体关键点识别效果演示
MMPose——开源姿态估计算法库(附人体关键点识别效果演示)
一、简介
1.1 背景
首先姿态估计属于计算机视觉领域的一个基础研究方向。MMPose是基于Pytorch的姿态估计开源算法库,功能全,涵盖的算法多。
1.2 姿态估计的任务分类
维度:预测的是2D还是3D姿态。
输入格式:图片 or 视频
姿态的表示形式:关键点 or 形状等
目标类型:全身 or 人脸 or 人手 or 动物 or 服饰
1.3 关于人体姿态估计任务
Human Pose Estimation是关键点检测任务中最热门的任务,即进行人体骨架和关节的关键点检测。
- 人体姿态估计任务的扩展:包括基于骨架的、基于表面的、基于三维空间立体的。
例如:facebook提出的Dense pose。将整个人体表面进行包络。(伪3D),并没有将3维坐标还原出来。如果要做3D,用三维人体重建的库MMHuman3D。
关于视频理解(MMAction2)与人体姿态估计的关系:视频动作理解的基础就是人体姿态估计。先得把骨骼关键点构建出来,才能根据这些特征判断动作。MMAction2可以参考这篇:关于MMAction2
论文链接:DensePose
1.4 MMPose的相关贡献
(1)2D Human Pose(包括body+hand+face一共133个关键点)
(2)3D Human Pose(先检测人体,再检测2D Human Pose,再检测3D Human Pose)
(3)3D Human Pose(人体网格重建任务——从image中恢复人体网格)
(4)3D Hand Pose(基于RGB图像的2D和3D手势联合估计)
(5)其他还包括脸部关键点,animal pose,目标跟踪等等。
二、MMPose所涉及的算法
★这里先解释一下Regression和Heatmap
- Regression:直接用模型回归预测得到每一个关键点的坐标
- Heatmap: 不直接回归关键点本身的像素坐标,而是生成一张图,表示图中不同区域是该关键点的置信度。例如,人身上有14个关键点,就会生成14张heatmap,每个关键点处就会存在概率分布。
2.1 基于关键点坐标回归(Regression based)
DeepPose就是这一类方法的经典代表。直接回归关键点坐标的方法思路比较简单,预测速度快,但直接预测坐标的精度会受到一定影响。
论文链接:DeepPose
2.2 基于空间概率分布(Heatmap Based)
基于heatmap的方式逐渐成为主流。该方法会去每个位置预测一个分数,来表征该位置是关键点的置信度。根据预测到的heatmap,可以进一步去提取关键点的位置。由于该方法可以更好地保留空间信息,更符合CNN的设计特性,精度也比坐标直接回归更高。
论文链接:Stacked Hourglass
2.3 人体姿态估计算法(2D)
主要分为两种方法:自顶向下、自底向上
自顶向下(TopDown):先检测处图片中的人体,再对每一个人体单独预测关键点。该方法的计算量会随着人数的增多而上升,但对不同尺寸的人体更加鲁棒,精度更高。通俗来说,该方法更准确。
自底向上(BottomUp):先去检测到所有的关键点,再进行关键点聚类,组合成人体。该方法的计算量不会随着人数的增多而上升。通俗来说,该方法更快(人更多的时候越明显)。
2.4 人体姿态估计算法(3D)
主要在3维空间里去预测人的位置,根据输入不同,可以分为以下3种方法
- 基于单目图像从2D Pose预测3D Pose
这种方法的经典代表:SimpleBaseline3D。根据2Dpose和原始图像的特征,直接估计3D Pose。但是基于单目图像会存在遮挡问题。
论文链接:SimpleBaseline3D
- 基于多视角信息
这种方法的经典代表:VoxelPose。解决遮挡问题,例如一个场景有很多人,可以融合多视角的信息去重建3D Pose。
论文链接:VoxelPose
- 基于视频(多帧)信息
在以上两种方法的基础上,引入时间维度,相邻的上下文信息可以辅助更好的预测。例如之前看的ViPNAS就是用上下文信息来辅助更好的预测。
这种方法的经典代表:VideoPose3D。用2D关键点序列(多了时间维度,就是有好几帧)作为输入,然后通过时序的卷积网络去处理信息,最后输出3DPose。
论文链接:VideoPose3D
三、MMPose所用的数据集
3.1 姿态估计关键点数据集(2D)
基于图像:COCO
基于视频:PoseTrack18
3.2 姿态估计关键点数据集(3D)
基于单人:Human3.6M(360万个人体pose的标注)
基于多视角:CMU Panoptic
基于手部:InterHand2.6M
四、MMPose的总体框架
4.1 采用模块化设计
将深度学习拆分成data(数据集)、model(模型)、optimizer(优化器)等组件,先把每一个小模块做好,再注册到registry(注册器)里,注册器里包含了很多功能类似的模块。在需要启动任务时,通过config配置系统,代码就会调用builder,从而构造一整套流程。减少了代码的耦合。
4.2 用户接口
在架构上,mmpose使用了mmcv提供的底层的接口,通过runner去管理模型的训练、测试、推理等。
4.3 核心组件
(1)Dataloader:sample定义 + pipline
(Dataloader文件所在位置:Dataloader)
在dataloader方面,mmpose提供了一些数据集的接口,里面定义了sample和需要经过的pipline
- datasets文件夹:完成数据加载,准备pipline的输入,在evaluate函数里计算metric
- piplines文件夹:pipline是数据预处理的流水线,由一系列的transform组成,每个transform的输入和输出都是字典。例如,LoadImageFromFile就是从文件中读取图像,ToTensor就是将读取的图像转化为pytorch的tensor。
- samplers文件夹:sampler就是采样器。sampler提供dataset里数据的索引,然后dataloader根据索引从dataset里提取出对应的data。然后将data输给网络进行training。
(2)Model:backbone + (neck) + head
(Model文件所在位置:models)
在模型层面,会把模型 分为backbone,neck,head三个部分
- detectors文件夹:pose的检测器。通常由backbone,neck,head组成。例如TopDown。
- backbones文件夹:主干网络。例如ResNet,HRNet,HRFormer等就在这里定义。
- necks文件夹:处理backbone得到的特征
- heads文件夹:预测头,输出最终预测结果。(loss定义在head中)
4.4 其他文件夹
(1)apis(https://github.com/open-mmlab/mmpose/tree/master/mmpose/apis)
封装训练,测试和推理等流程
train.py:准备数据加载,把模型加载到GPU,构建optimizer和runner,注册hooks等
test.py:模型测试。需要输入模型和dataloader,测试模型精度。
inference.py:模型推理,进行可视化等工作。
Webcam API:调用MMpose及其他算法,实现基于摄像头输入视频的交互式应用。
(2)cores:(https://github.com/open-mmlab/mmpose/tree/master/mmpose/core)
前后处理,可视化,定制工具等
(3)tools:(https://github.com/open-mmlab/mmpose/tree/master/tools)
- train.py:启动训练任务的入口,读入config,初始化训练环境,创建模型及数据集等,调用apis/train.py
- test.py:模型推理测试的接口,数据集开启test_mode,加载checkpoint,调用apis/test.py运行测试
- 分布式训练的启动脚本:dist_train.sh——通过pytorch启动分布式 slurm_train.sh——通过slrum(一种集群式管理系统)启动分布式
五、MMPose相关效果演示
5.1 安装配置
本机环境:GPU RTX 2060、CUDA v11.1
Pytorch版本:1.8.0
torchvision版本:0.9.0
编译器版本:MSVC 192930137
mmtracking
mmpose:0.28.1
5.2 对图像中人体的关键点检测
(1)TopDown
这里使用TopDown方法对图像进行预测
先用目标检测把人的框检测出来:faster_rcnn网络
再做框里的人的姿态估计与关键点检测:hrnet网络
效果展示
(2)BottomUp
- 这里不需要目标检测模型,只需要bottom up人体姿态估计模型
- 人体关键点检测模型:hrnet
- 效果精度并不如TopDown,会存在部分关键点之间的错误连接。但是在人更多的情况下速度会比TopDown快。
5.3 对视频中人体的关键点检测
(1)单帧输入模型的视频预测
这里使用TopDown方法对视频进行预测
目标检测与关键点识别的网络依然是faster_rcnn和hrnet
效果展示
MMPose——单帧输入视频预测
- 关于多帧输入模型的视频预测,就是将视频前后多帧画面输入模型用于姿态预测。相比于单帧输入,检测到的会更细,例如橱窗里的模特,广告牌上的人也会被检测到。但是同样,计算量也会大很多。
(2)全图输入模型的视频预测
不提取人体检测框,直接将全图输入至姿态估计模型中。仅适用于单人,并且单人的效果并不好
这里使用TopDown的全图输入方法对视频进行预测
没有目标检测模型
人体关键点检测网络:vipnas
效果展示
MMPose——全图输入模型的视频预测
(3)BottomUp算法的视频预测
同样,精度效果不如TopDown
人体姿态估计模型:hrnet
MMPose——BottomUp算法的视频预测
5.4 对图像和视频中手掌的关键点检测
- Topdown算法
- 目标检测模型:cascade_rcnn
- 手部关键点检测模型:res50
- 效果展示:
在存在少部分遮挡的情况下,会存在部分关键点的误识别,但基本上手部关键点都检测正确
在没有遮挡的情况下,手部关键点全都准确识别。
视频中的手部关键点识别效果也不错
MMPose——手掌关键点检测
5.5 对图像和视频中全身的关键点检测
- Topdown算法
- 目标检测模型:faster_rcnn
- 全身关键点检测模型:hrnet
- 效果展示
视频中关键点检测效果也不错
MMPose——全身关键点检测(人脸+手+肢体)
5.6 MMPose摄像头实时效果
实时的效果一般,目标检测的fps为20左右,人体姿态估计的fps为10左右
六、相关参考链接
- DensePose论文链接:DensePose
- DeepPose论文链接:DeepPose
- Stacked Hourglass论文链接:Stacked Hourglass
- SimpleBaseline3D论文链接:SimpleBaseline3D
- VoxelPose论文链接:VoxelPose
- VideoPose3D论文链接:VideoPose3D
- MMPose中Dataloader位置:Dataloader
- MMPose中Model位置:models
- 项目地址:MMPose
- MMPose官方中文文档:MMPose中文文档
- 数据集的md文档:数据集文档
- 参考视频教程:同济子豪兄MMPose代码实战
- MMPose效果演示的相关参考文档:
2D人体关键点检测
在自己的数据集上训练2D人体关键点检测模型
2D手掌关键点检测
手掌检测模型
摄像头实时webcam
MMPose姿态估计+人体关键点识别效果演示相关推荐
- 人体姿态估计(人体关键点检测)2D Pose训练代码和Android源码
人体姿态估计(人体关键点检测)2D Pose训练代码和Android源码 目录 人体姿态估计(人体关键点检测)2D Pose训练代码和Android源码 1.人体姿态估计2D Pose方法 2.人体姿 ...
- 百度AI攻略:人体关键点识别
第四期[百度大脑新品体验]人体关键点识别 1.功能描述: 检测图像中的人体并返回人体矩形框位置,精准定位21个核心关键点,包含头顶.五官.颈部.四肢主要关节部位,支持多人检测.大动作等复杂场景 2.平 ...
- 【百度大脑新品体验】人体关键点识别
[百度大脑新品体验]人体关键点识别 作者:才能我浪费99 1.功能描述: 检测图像中的人体并返回人体矩形框位置,精准定位21个核心关键点,包含头顶.五官.颈部.四肢主要关节部位,支持多人检测.大动作等 ...
- 快速上手百度大脑人体关键点识别
作者:wangwei8638 人体关键点识别能够检测图像中的人体并返回人体矩形框位置,精准定位21个核心关键点,包含头顶.五官.颈部.四肢主要关节部位,支持多人检测.大动作等复杂场景.本文以瑜伽动作为 ...
- 万物生姿——MMPose 姿态估计创意 Demo 大赛
号外号外!OpenMMLab 姿态估计创意 Demo 大赛震撼来袭!不设任务,不限主题,完全自由发挥!是不是有亿点点心动?快来解锁活动详情吧- 世间万物,千姿百态,异彩纷呈. 令人眼花缭乱的外表下,则 ...
- 人体模型 java代码_【人体分析-人体关键点识别】-Java示例代码
接口说明:http://ai.baidu.com/forum/topic/show/497747 人体关键点识别,即对于输入的一张图片(可正常解码,且长宽比适宜),输出图片中的所有人体的14个关键点, ...
- 调用百度人体关键点识别API
首先在百度智能云上建立对应的应用,生成AppID.API Key和Secret Key(需要申请免费资源,或者购买额度后才能使用).也可以从百度AI开放平台-控制台,找到对应的产品服务进入. 单张调用 ...
- 2D Pose人体关键点实时检测(Python/Android /C++ Demo)
2D Pose人体关键点实时检测(Python/Android /C++ Demo) 目录 2D Pose人体关键点实时检测(Python/Android /C++ Demo) 1.人体关键点数据集 ...
- Python+OpenCV+OpenPose实现人体姿态估计(人体关键点检测)
目录 1.人体姿态估计简介 2.人体姿态估计数据集 3.OpenPose库 4.实现原理 5.实现神经网络 6.实现代码 1.人体姿态估计简介 人体姿态估计(Human Posture Estimat ...
最新文章
- CEPH添加MDS操作
- UITextField 键盘
- qvector 结构体排序_C++结构体的应用_YCOJ
- android sqlite alert table,android sqlite数据库操作
- 升级MariaDB为10.1版本
- GraphQL:验证与授权
- linux 编辑文件vim,linux下通过vim编辑文件的方法
- python永久保存数据_Python学习笔记(四)——文件永久存储
- note4 android8,Note4配三枚麦克风 可同时录制8个声音
- Java中的继承:父类和子类的关系
- Tomcat服务安全加固和优化
- Hadoop原理深度剖析系列1——Hadoop的基本知识
- 【本周上榜!】看雪论坛精华优秀文章分享与点评
- 计算机等级考试oracle,用spt更新ORACLE
- Java方法重载解析
- linux ps3手柄驱动,ps3 DS3 手柄驱动
- pythonpandas入门_pyhton pandas数据分析基础入门(一文看懂pandas)
- Code Runner使用说明(快速运行调试代码,无需配置繁杂的环境)
- 华为机试练习(十二)叠积木
- Numpy tricks