MMPose姿态估计+人体关键点辨认效果演示

[复制链接]
查看1230 | 回复0 | 2023-8-23 11:40:00 | 显示全部楼层 |阅读模式
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

来源:https://blog.csdn.net/weixin_61674495/article/details/126612550
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则