AI实战训练营&人体关键点检测与MMPose
一 什么是姿态估计
从给定的图像中识别人脸、收不、身体等关键点
输入:图像I
输出:所有关键点的像素坐标(x1,y1),(x2,y2)…
姿态估计是一种计算机视觉技术,可以从图像或视频中检测人体的形象,并确定人体的各个部位或关节的位置。姿态估计可以分为2D和3D,单人和多人,自上而下和自下而上等不同的类型。姿态估计可以用于行为识别、动作捕捉、虚拟现实、增强现实等应用场景。
通常是一些关节的位置
3D姿态估计
预测人体关键点在三维空间中的坐标,可以在三维空间还原人体的姿态
下游任务中可以做行为识别|CG动画|人机交互|动物行为分析
PoseC3D:基于人体姿态识别行为动作
CG\动画
动物行为分析
二 2D姿态估计
2D人体姿态估计:在图像上定位人体关键点(通常为人体主要关节)的坐标
基本思路:基于回归|基于热力图
基于回归
将关键点检测问题建模成一个回归问题,让模型直接回归关键点的坐标
例如:是用卷机网络,以图像作为输入,最后一层通过线性回归预测关键点的坐标
主要存在的问题:深度模型直接回归坐标有些困难,精度不是最优。
基于热力图
并不直接回归关键点的坐标,而是预测关键点位于每个位置的概率。
- 热力图可以基于原始坐标点坐标生成,作为训练网络的监督信息
- 网络预测的热力图也可以通过求极大值等方法得到关键点的坐标
- 模型预测热力图比直接回归坐标相对容易,模型精度相对更高,因此主流算法更多基于热力图,但预测热力图的计算消耗大于直接回归
从数据标注生成热力图
姿态估计中,从数据标注到生成热力图的做法公式是这样的:
- 数据标注:对于每个人体关键点,给定其二维坐标 (x_i,y_i) ,其中 i\in\ {1,2,…,k\} ,k 是关键点的个数。
- 生成热力图:对于每个关键点,生成一个与原始图像大小相同的热力图,热力图上的像素值按照以下公式计算:
h e a t m a p ( x , y ) = e − f r a c ( x − m u x ) 2 + ( y − m u y ) 2 2 s i g m a 2 heatmap (x,y)=e^ {-\\frac { { (x-\\mu_x)}^2+ { (y-\\mu_y)}^2} {2\\sigma^2}} heatmap(x,y)=e−frac(x−mux)2+(y−muy)22sigma2
其中, (\mu_x,\mu_y) 是关键点的坐标, \sigma 是高斯核的大小,一般是一个超参数。这样,热力图上的最大值处就对应了关键点的位置³¹。
使用热力图训练模型
问题:如何从第j个关键点的热力图中还原出关键点的位置
- 朴素方法:求热力图最大位置 如果多个点怎么办?
更稳定的方法: 取数学期望 这样会更加鲁棒
2.1 基于回归|基于热力图 自顶向下方法
- 首先 是用目标检测检测出每个人体
- 然后 基于单人图像估计每个人的姿态
- 整体精度受限于检测器的精度
- 速度和计算量会正比于人数
- 一些新工作(如SPM)会考虑将两个阶段聚合成一个阶段
通常来说 top-down 具有更高的精度 (如果两个人拥抱?)
DeepPose(2014)
以分类网络为基础,将最后一层分类改为回归,一次性预测所有坐标
通过最小化平方误差训练网络
以全身图像输入,预测所有坐标点,位置精度较底
以每个预测点为中心,剪裁局部图像送入第二级网络,再次回归该点坐标,提升精度。可及联多级
优势:
- 回归模型理论上可以达到无限精度,热力图方法的精度受限于特征图的空间分辨率
- 回归模型不需要维持高分辨率特征图,计算层面更高效,相比之下,热力图方法需要计算和存储高分辨率的热力图和特征图,计算成本更高
劣势: - 图像到关键点坐标的映射高度非线性,导致回归坐标比回归热力图更难,回归方法的精度也弱于热力图方法,因此DeepPose提出之后的很长一段时间内,2D关键点预测算法主要基于热力图
Residual Log-likelihood Estimation(RLE)(2021)
核心思路:对关键点的位置进行更准确的建模,从而提高位置预测的精度
经典的回归范式:模型预测关键点位置,与其真值计算误差作为损失,背后隐含了高斯分布的假设,但不一定符合数据的实际分布。
RLE范式:显示建模关键点的概率分布,通过最大似然拟合最优的位置分布
RLE的思路是将简单的高斯分布替换为一个可学习的、表达能力更强的分布,更好拟合关键点位置的实际分布。
RLE模型是一种用于人体姿态估计的回归方法,它的全称是残差对数似然估计(Residual Log-likelihood Estimation)¹²。它的主要思想是通过flow方法,估计出模型输出关节的分布概率密度,并利用最大似然估计来构建动态的损失函数,从而提高回归的精度和效率¹²。
RLE模型的做法公式如下:
- 数据标注:对于每个人体关键点,给定其二维坐标 (x_i,y_i) ,其中 i\in\ {1,2,…,k\} ,k 是关键点的个数。
- 生成热力图:对于每个关键点,生成一个与原始图像大小相同的热力图,热力图上的像素值按照以下公式计算:
h e a t m a p ( x , y ) = e − f r a c ( x − m u x ) 2 + ( y − m u y ) 2 2 s i g m a 2 heatmap (x,y)=e^ {-\\frac { { (x-\\mu_x)}^2+ { (y-\\mu_y)}^2} {2\\sigma^2}} heatmap(x,y)=e−frac(x−mux)2+(y−muy)22sigma2
其中, (\mu_x,\mu_y) 是关键点的坐标, \sigma 是高斯核的大小,一般是一个超参数。这样,热力图上的最大值处就对应了关键点的位置³¹。
- 估计概率密度分布:假设关键点 y 的真实分布为 \epsilon (y) ,而我们只能观测到带有噪声的标注 y_ {annotation} ,那么我们可以用一个简单分布 z\sim N (0,1) 作为输入,通过一个神经网络 f_ {\theta} 来映射到目标分布 \epsilon (y) ,即 \epsilon (y)=f_ {\theta} (z) 。这样,我们就可以用最大似然估计来优化神经网络的参数 \theta ,使得 \epsilon (y) 和 y_ {annotation} 尽可能接近¹²。具体地,我们可以最大化以下对数似然函数:
L R L E ( t h e t a ) = E y a n n o t a t i o n s i m D [ l o g p t h e t a ( y a n n o t a t i o n ) ] L_ {RLE} (\\theta)=E_ {y_ {annotation}\\sim D} [log p_ {\\theta} (y_ {annotation})] LRLE(theta)=EyannotationsimD[logptheta(yannotation)]
其中, p_ {\theta} (y_ {annotation}) 是由 f_ {\theta} 生成的目标分布 \epsilon (y) 在 y_ {annotation} 处的概率密度值,可以由以下公式计算:
p t h e t a ( y a n n o t a t i o n ) = p z ( f t h e t a − 1 ( y a n n o t a t i o n ) ) ∣ d e t J f t h e t a − 1 ∣ p_ {\\theta} (y_ {annotation})=p_z (f_ {\\theta}^{-1} (y_ {annotation}))|det J_{f_ {\\theta}}^{-1}| ptheta(yannotation)=pz(ftheta−1(yannotation))∣detJftheta−1∣
其中, p_z 是简单分布 z 的概率密度函数, J_{f_ {\theta}}^{-1} 是 f_ {\theta} 的逆映射的雅可比矩阵¹²。
- 构建损失函数:由于我们已经估计出了目标分布 \epsilon (y) ,我们可以利用它来构建一个动态的损失函数,来指导模型回归关键点 y 。具体地,我们可以定义以下损失函数:
L = ∣ ∣ y − f p h i ( x ) ∣ ∣ p t h e t a = E p t h e t a [ ∣ ∣ y − f p h i ( x ) ∣ ∣ ] L=||y-f_ {\\phi} (x)||_{p_ {\\theta}}=E_{p_ {\\theta}} [||y-f_ {\\phi} (x)||] L=∣∣y−fphi(x)∣∣ptheta=Eptheta[∣∣y−fphi(x)∣∣]
其中, f_ {\phi} 是一个回归网络,用于从图像 x 预测关键点 y , \phi 是其参数。 p_ {\theta} 是我们之前估计出的目标分布 \epsilon (y) 。这个损失函数相当于在每个关键点处加权了回归误差,使得模型更关注那些不确定性高的区域¹²。
Hourglass(2016)
设计思路:准确的姿态估计需要结合不同尺度的信息
- 局部信息 - 检测不同身体组建
- 全局信息 - 建模组建之间的关系,在大尺度变形、遮挡时可以准确推断出姿态
2.2 自底向上方法
- 是用关键点模型检测所有人体关键点
- 基于位置关系或其他辅助信息将关键点组合成不同的人
- 推理速度与人数无关 合成的时候和人有关
2.3 单阶段方法
SPM(2019)
SPM首次提出了人体姿态估计的单阶段解决方法,在取得速度优势的同时,也取得了不逊色于二阶段方法的检测率,且该方法可以直接从2D扩展到3D
2.4 基于Transformer的方法
TokenPose(2021)
三 3D姿态估计
通过给定的图像预测人体关键点的三维空间中的坐标,可以在三维空间中还原人体的姿态
3D的坐标哪里来?
思路1:直接预测
直接基于2D图像回归3D坐标,但2D图像不包含深度,这是一个病态问题,实际上隐式借助语义特征或人体的刚性实现了3D姿态的推理
思路2:利用视频信息
四 人体姿态估计的评估方法
Percentage of Correct Parts(pcp)
PCP以肢体的检出率作为评价指标
考虑每个人的左右大臂、小臂、大腿、小腿共计4X2个肢体
Percentage of Detected Joints(PDJ)
PDJ作为关节点的位置精度作为评价指标
五 人体参数化模型
将人体表面分为24个部分,并将每个部分参数化至同样大小(256X256)的UV平面