【7班】【笔记】人体姿态估计与MMPose-卢策吾
人体姿态估计的介绍与应用
- 概念:从给定的图像中识别人脸、手部、身体等关键点
人脸68关键点、手势21关键点、人体18关键点- 3D姿态估计:预测人体关键点在三维空间中的 坐标,可以在3D空间中还原人体的姿态
- 人体参数化模型:从图像或视频中恢复出运动的3D人体模型
- 下游任务:行为识别PoseC3D CG、动画 人机交互:手势识别 动物行为分析
2D姿态估计
任务:在图像上定位人体关键点(主要关节)的坐标
基于回归:将关键点检测建模为回归问题,模型直接回归关键点坐标
- 深度模型直接回归坐标有些困难,精度不是最优
( x 1 , y 1 , . . . , x J , y J ) = f θ ( I ) (x_1,y_1,...,x_J,y_J)=f_{\theta}(I) (x1,y1,...,xJ,yJ)=fθ(I)
基于热力图:预测关键点在每个位置的概率
所有关键点的热力图按通道展开
H可以基于原始关键点坐标生成,作为训练网络的监督信息
网络预测的H可以通过求极大值等方法得到关键点坐标
模型预测H比直接回归坐标相对容易(符合NN的结构),精度相对更高。
主流算法多基于H,但是预测H的计算消耗更大H 1... J = f θ ( I ) H j ( x j , y j ) = 1 表示关键点 j 位于( x j , y j ) 的概率为 1 ; 热力图 H 与原图 I 相同或按比例缩小 H_{1...J}=f_{\theta}(I)\\H_j(x_j,y_j)=1表示关键点j位于(x_j,y_j)的概率为1;\\热力图H与原图I相同或按比例缩小 H1...J=fθ(I)Hj(xj,yj)=1表示关键点j位于(xj,yj)的概率为1;热力图H与原图I相同或按比例缩小
从标注数据生产H:
第 j 个关键点( x j , y j ) 对应的热力图 H j ( x , j ) = e x p ( − ( x − x j ) 2 + ( y − y j ) 2 σ 2 ) 第j个关键点(x_j,y_j)对应的热力图\\H_j(x,j)=exp(-\frac{(x-x_j)^2+(y-y_j)^2}{{\sigma}^2}) 第j个关键点(xj,yj)对应的热力图Hj(x,j)=exp(−σ2(x−xj)2+(y−yj)2)
- 训练模型
- 从热力图Hj还原(xj,yj)的位置
朴素方法:求热力图最大值位置
问题:极大值点不止一个?( x j , y j ) = a r g max x , y H j ( x , y ) (x_j,y_j)=arg\max_{x,y}Hj(x,y) (xj,yj)=argx,ymaxHj(x,y)
整体人体姿势回归:归一化热力图形成点位于不同位置的概率,计算位置期望
优点:可微分,连续没有量化误差x j = ∑ x , y x P j ( x , y ) y j = ∑ x , y y P j ( x , y ) P j 为 H j 生成的概率图: P j ( x , y ) = e H j ( x , y ) ∑ x , y e H j ( x , y ) x_j=\sum_{x,y}{xP_j(x,y)}\\y_j=\sum_{x,y}{yP_j(x,y)}\\P_j为H_j生成的概率图:P_j(x,y)=\frac{e^{H_j(x,y)}}{\sum_{x,y}{e^{H_j(x,y)}}} xj=x,y∑xPj(x,y)yj=x,y∑yPj(x,y)Pj为Hj生成的概率图:Pj(x,y)=∑x,yeHj(x,y)eHj(x,y)
自顶向下方法-多人姿态估计
- 步骤:
人体检测:使用目标检测算法检测出每个人体
**单人姿态估计:**基于单人图像估计每个人的姿态 - 缺点:整体精度受限于检测器的精度(拥抱怎么办???),速度和计算量正比于人数
部分新工作(SPM)聚合为一个阶段 - 基于回归的自顶向下方法:DeepPose、RLE
DeepPose(2014)以分类网络为基础,将最后一层分类改为回归,一次性预测所有J个关键点的坐标,然后通过最小平方误差训练网络
P ^ = ( x 1 , y 1 , x 2 , y 2 , . . . , x J , y J ) = f θ ( X ) min θ ∑ ( X , Y ) ∈ D ∣ ∣ P ^ − P ∣ ∣ 2 2 \hat{P}=(x_1,y_1,x_2,y_2,...,x_J,y_J)=f_{\theta}(X)\\\min_{\theta}{\sum_{(X,Y)\in D}{||\hat{P}-P||_2^2}} P^=(x1,y1,x2,y2,...,xJ,yJ)=fθ(X)θmin(X,Y)∈D∑∣∣P^−P∣∣22
- 很长时间主要基于热力图
- 论文:AlexNet主干+回归头 主干可为ResNet等新结构
- 级联提升精度
- 第一级:输入全身图,预测所有关键点坐标,位置精度较低- 第二级:输入每个预测点为中心裁剪得到的局部图像,回归该点坐标,提升精度- 第三级。。。- 优势:回归模型理论上可达到无限精度 H受限于特征图的空间分辨率不需要维持高分辨率特征图,计算高效 H计算和存储高分辨率的H和特征图,计算成本高- 劣势:图像到关键点坐标的映射高度非线性→回归坐标比回归H困难、精度弱于H
- RLE(2021)对关键点位置进行更准确的概率建模从而提升预测精度
目标:建模关键点位置的概率分布,给定图像I,给出关键点x的位置分布
分布可以基于标准化流构建,RLE降低模型模拟真实分布的难度(1)重参数化(2)残差似然函数 - 回归与最大似然估计:基于二范数误差的回归和基于高斯似然的最大似估计是等价的[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z4BKkJtH-1685714402113)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/50014203-6d1d-4c8d-b595-1beb7f6169ae/Untitled.png)]- 标准化流:一种生成建模,通过一系列可学习的可逆的影视,将标准分布的随机变量映射到复杂分布的随机变量,用于建模复杂的概率分布- 重参数化设计:假设所有关键点分布属于同一个位置尺度族(所有分布由某个零均值的基础分布平移缩放得到)- 残差似然函数:
- 基于H的自顶向下方法:Hourglass、Simple Baseline、HRNet
Hourglass(2016)准确的姿态估计需要结合局部信息和全局信息
局部信息检测不同身体组件
全局信息建模组件的关系,在大尺度变形、遮挡时准确推断姿态可以级联形成更强的模型,每个模块分支输出H,和GT热力图比较计算损失
不同的级联和监督方式:短模块级联+在中间添加监督信号效果更好
HRNet(2020)在下采样时通过保留原分辨率分支来保持网络全过程特征图的高分辨率与空间位置信息,并设计独特的网络结构实现不同分辨率的多尺度特征融合
自底向上方法-多人姿态估计 OpenPose
- 步骤:
关键点检测:关键点模型检测所有人体关键点
关键点聚类:基于位置关系或其他辅助将关键点组合成不同的人 - 优点:推理速度与人数无关
但是聚类合成时与人数有关 - Part Affinity & OpenPose(2016)基于图像同时预测关节位置和四肢走向,利用肢体走向辅助关键点聚类(若两个关键点由某个肢体相连,亲和度高,则很有可能属于同一人)
- 类似Convolutional Pose Machine的级联结构,同时预测所有人的关键点和肢体
- 基于亲和度匹配关键点
单阶段方法-多人姿态估计SPM
SPM:直接从2D图像扩展到3D图像的人体态势估计
SPR:引入辅助关节-根关节(统一人体实例和身体关节的位置信息,解决多人姿势估计的单阶段解决方案)表示人员实例位置,唯一关节标识
层级SPR:根据自由度和变形程度将根关节和身体关节划分为四个层次
基于Transformer方法:PRTP、TokenPose
3D姿态估计
- 直接预测:Coarsse-to-Fine、Simple Baseline 3D
- 利用视频信息:VideoPose3D(2018)基于单帧图像预测2D关键点,基于多帧2D关键点结果预测3D关键点位置
- 利用多角度图像:VoxelPose
人体姿态估计的评估方法
PCP:肢体的检出率作
PDJ:关节点的位置精度
PCK:关键点的检测精度
OKS based mAP:以关键点相似度OKS作为评价指标计算mAP
DensePose
- 人体表面参数化:将人体表面分为24个部分,将每个部分参数化到同样大小256*256的UV平面
网络结构
基本:Mask-RCNN + DenseReg = DensePose-RCNN
先预测前景与背景,在进行人体每部分的精确回归改进:与辅助任务(关键点、mask)交叉级联
训练Teacher Network实现基于蒸馏的ground truth插值,产生更密集的监督信号
身体表面网格Body mesh:由多边形(三/四边形)网格组成构建的人体表面模型,通常由最具有3D位置坐标的顶点定义
- 优势:有人体先验
- 混合蒙皮技术:是身体表面网格随内在骨骼结构形变的方法。
骨骼结构变化时,特点关节点位置变化对人体表面不同顶点的变化影响不同
影响有不同的权重实现LBS线性混合蒙皮:人体形变后顶点的坐标是顶点随每个骨骼进行空间变换后坐标的加权平均
权重稀疏:每个顶点需要分给给若干特定骨骼点
骨骼绑定:确定顶点与骨骼的对应关系与权重系数DQBS双四元数混合蒙皮
人体参数化模型:SMPL 、SMPL ify、HMR
SMPL:针对构建人体参数化模型,将人体建模从N=6890个顶点和K=23个关节点为基础的身体表面网格,并设计形态参数beta和姿态参数theta控制人体变化
- 形态参数beta:10个维度
每个维度解释人体形态特征的某个指标(高矮、胖瘦) - 姿态参数theta:23(关键点)*3(三维)+1(根节点)*3(三维)=72个维度
描述某时刻人体的动作姿态
节点树:根节点和23个关键点
三维空间坐标:表示该节点对于父节点的旋转角度的轴角式表达 - 基本设计逻辑:顶点被两个参数控制直接获得
底层逻辑与其他蒙皮函数一直,将参数影响建模到基础蒙皮函数内
- 形态参数beta:10个维度
SMPLify:基于SMPL从三张图像估计人体3D网格
关键点投影损失人体姿态约束
用CMU数据集训练得到的姿态先验
用于惩罚肘部和膝部的不自然弯曲
“胶囊”近似带来的穿模误差的惩罚
问题:通常的3D姿态估计方法出现人体部位之间互相穿模
思路:3D形状模型可以进行有些检测并防止穿模
新问题:人体表面非凸且复杂,计算穿模复杂且昂贵
解决:人体表面近似为胶囊简化计算
人体形态约束
基于SMPL的形态先验
HMR:基于DL模型,从图像直接估计SMPL参数从而重建人体表面网格
在只有2D标注的情况下训练- 判别器:K+2=23个判别器,每个输出0-1(theta来自真实人体数据的概率)
【7班】【笔记】人体姿态估计与MMPose-卢策吾相关推荐
- 人体姿态估计研究文集
人体姿态估计研究文集 3D人体姿态估计笔记 人体姿态估计的过去,现在,未来 重新思考人体姿态估计 人体姿态估计(Human Pose Estimation)经典方法整理 A 2019 guide to ...
- 论文阅读笔记--Monocular Human Pose Estimation: A Survey of Deep Learning-based Methods 人体姿态估计综述
趁着寒假有时间,把之前的论文补完,另外做了一点点笔记,也算是对论文的翻译,尝试探索一条适合自己的论文阅读方法. 这篇笔记基本按照原文的格式来,但是有些地方翻译成中文读起来不太顺,因此添加了一些自己的理 ...
- 看完这篇AI算法和笔记,跟面试官扯皮没问题了 | 基于深度学习和传统算法的人体姿态估计
点击蓝色"AI专栏"关注我哟 重磅干货,第一时间送达 这是站长的第 41 篇原创优质长文 前几天站长写的一篇的文章[基于深度学习算法和传统立体匹配算法的双目立体视觉]大受好评.这次 ...
- 看完这篇AI算法和笔记,跟面试官扯皮没问题了 | 基于深度学习和传统算法的人体姿态估计...
点击蓝色"AI专栏"关注我哟 重磅干货,第一时间送达 这是站长的第 41 篇原创优质长文 前几天站长写的一篇的文章[基于深度学习算法和传统立体匹配算法的双目立体视觉]大受好评.这次 ...
- 看完这篇AI算法和笔记,让面试官刮目相看没问题了 | 基于深度学习和传统算法的人体姿态估计...
点击蓝色"AI专栏"关注我哟 重磅干货,第一时间送达 这是站长的第 41 篇原创优质长文 前几天站长写的一篇的文章[基于深度学习算法和传统立体匹配算法的双目立体视觉]大受好评.这次 ...
- AI算法和笔记 | 基于深度学习和传统算法的人体姿态估计
点击蓝色"AI专栏"关注我哟 选择"星标",重磅干货,第一时间送达 这是站长的第 41 篇原创优质长文, 前几天站长写的一篇的文章[基于深度学习算法和传统立体匹 ...
- 3D人体姿态估计(介绍及论文归纳)
推荐镜子大佬的知乎 2D 多人姿态估计论文汇总.分类与简介 2D多人姿态估计指南:热图回归与坐标回归流程指南 openmmlab微信公众号里的3DHPE综述 opemmlab框架下的MMPose库,有 ...
- 基于深度学习和传统算法的人体姿态估计,技术细节都讲清楚了
作者 | 站长 pursueYfuture 来源 | AI专栏(ID: pursue-Y-future) 计算机视觉的一大研究热点是人体姿态估计,还有很多问题急需解决,比如遮挡,交互等等.在最近的CV ...
- 告别Heatmap!人体姿态估计表征新方法SimDR
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨Tau 编辑丨极市平台 导读 本文提出了一种姿态估计的解耦坐标表征:SimDR,将关键点坐标(x ...
最新文章
- 索引的工作原理及其优缺点
- 【转】 onNewIntent调用时机
- oracle+中子分类账,【勇猛精进】Oracle EBS R12 总帐和子分类账关系详解
- 三层架构与设计模式思想部署企业级数据库业务系统开发
- 深度学习目标检测系列:faster RCNN实现|附python源码
- Jmeter吞吐量控制器详解
- 写给萌新们的Python安装及环境配置(anaconda,pycharm,GPU)教程
- struts入门的ognl
- [4/10]指定结进程名称的命令taskkill.exe
- iOS开发之二维码生成(错误问题小记,微信扫描,长按不识别)
- webstormjs文件全部报错_springboot启动报错org.yaml.snakeyaml.error.YAMLException...
- Android实现文字和图片混排(文字环绕图片)效果
- 真好玩python教孩子学编程_Python真好玩:教孩子学编程(全彩印刷))简介,目录书摘...
- 微信为什么不能下载apk以及微信下载APK的解决办法
- ps怎么做油漆喷溅画效果
- VR系列——Oculus Audio sdk文档:一、虚拟现实音频技术简介(5)——环境建模
- 企业微信和个人微信的区别
- amoeba主从复制
- ​说了你可能不信,这是一份王者荣耀接口文档
- 远程登陆服务器跑深度学习程序