参考:
本文的目标任务是人类姿态估计(human pose estimation),主要目的就是检测任意图片中人类关节的空间位置(坐标)。由于每张图片的光线、背景以及人们的穿着都不一样,因此这个任务的难点在于这些关节在图片中的呈现方式变化很大,从而一个好的标记(身体关节的坐标)表征也就显得尤为重要了。目前对于标签进行表征的标准方法是使用坐标热图 (heatmap)——以每个关节的标签坐标为核心而生成的二维高斯分布/核 [5],这个方法的核心在于坐标编码(也就是从坐标到热图的过程)与解码(从热图回到坐标的过程),而且目前的 SOTA 方法也是基于热图的。因此本文的主要目的是改进热图的编码和解码方法,同时也用实验证明了一个好的表征的重要性。
整个任务的最终目标是预测给定输入图像的关节坐标。为此,需要学习一个从输入图像到输出坐标的回归模型。这个过程可以分为两步,首先假设有一组训练图像,模型的学习分为两步:第一步编码过程:将节点的 ground truth 坐标编码为一个热图作为监督学习目标。
第二步解码过程:在测试过程中,将预测的热图解码为原始图像坐标空间中的坐标。在编码的过程中,为了减少计算量,图像的像素进行了分辨率衰减,因此解码过程中需要进行对结果进行偏移才能得到好结果。而过去的基本方法都是根据经验确定的偏移量,本文则对这个偏移进行了详细的解释,并给出了更好的偏移方法。同样,在编码时,也要对其进行相应的变换以避免分辨率衰减带来的影响。
热图的解码、量化误差与后处理
解码:基于热图回归的方法在推理阶段,从预测的热图得到人体关键点坐标的过程称为“解码”;
量化误差:因为内存限制,热图回归预测的热图尺寸比原图小很多,因此真实的关键点坐标具有小数部分,但是热图直接 argmax 解码的时候,得到的坐标只有整数部分,因此具有“量化误差”;
后处理:DARK 之前的“标准后处理”是在 Hourglass 中提出的,即将预测坐标从最大值点向第二大值点方向移动 0.25 像素。
一、解码过程
1.1 标准的解码方法
标准的解码方法是根据经验确定的,初步的坐标 p 可由下式计算得出:
这里的 m 是热图中的最大激活值,s 是热图中的第二大激活值,|| . ||_2 是向量的模长。
P —— 预测的关节点位置
m —— heatmap中响应最大处的坐标
s —— heatmap中响应第二大处的坐标
即取峰值到次峰值的1/4偏移处的位置 ,这样做补偿了原图像输入网络时下采样时的量化误差
也就是说,真实坐标要在热图空间中从第一大激活值向着第二大激活值进行偏移才行。之所以要偏移,是因为在编码的过程中,为了减少计算量,图像的像素进行了分辨率衰减,因此最终热图中的第一大激活值的位置并不跟关节的在图片中的真实位置一致,而只是一个粗略的假设。
假设开始的衰减率为,坐标经过分辨率修复(Resolution Recovery)后的最终坐标为:
其中λ是resolution reduction ratio.分辨率降低率
1.2 解码实现方法
文中提出的的解码方法利用了热图的分布结构,从而找到真正的最大激活值。其基本流程如下图所示。
(图源自原论文)图 1:解码过程结构图
其中的分辨率修复与标准方法一致(如上式所示)。
Distribution-aware Maximum Relocalization是在基于分布假设的情况下对最大激活值进行重定位。具体来说,本文作者假定预测热图符合 2D 高斯分布,与实际热图相同,因此预测热图可以被表示为:
这里的(向量)是热图上某一像素的位置坐标(
),
是将要被预测的关键点位置的高斯核均值,也就是需要估计的值。,
是一个常数,不用管。
是高斯的中心,这个中心与最重要预测的关节位置(原始图片中的位置)相关。协方差
是个对角矩阵,与坐标编码过程中使用的相同(
是标准差):
根据对数似然优化原则(Goodfellow,Bengio和Courville 2016),作者在保持原始的最大激活值位置的前提下利用对数将原指数形式G转化为二次形式P:
整个任务的最终目的还是为了估计,作为分布的一个极端点,众所周知,位置
的一阶导数满足以下条件:
那么 是一个和
形状一样的向量, 由于真实值和预测值相隔很近,对取对数后的热图在最大值点
处进行泰勒展开,则真实关键点坐标
处的对数热图可以写成
其中 为对数热图上最大值点 m 处的一阶、二阶导数。
对(7)式两边同时对 求导,得到:
因为 是高斯分布的中心,
,带入 (4) 式化简之后得到:
(其中公式推导参见:Dark估计关键点真实分布的均值位置)
1.3 Distribution Modulation(分布调制)
由于本文所提出的坐标解码方法是基于预测热图是高斯分布的假设,但是通常情况下,由人体姿态估计模型预测的热图与训练后的热图数据相比,并没有表现出良好的高斯结构。
如图所示,预测热图通常在最大激活点附近出现多个峰值。这可能会对我们的解码方法的性能产生负面影响。为了解决这一问题,我们建议预先调节预测热图分布,
即从predicted heatmap --> Modulated Heatmap
具体的做法就是:用高斯核对predicted heatmap做平滑
因此作者使用了一个与训练数据离散度相同的高斯核 K 来对预测的热图 h 进行调制(卷积),以减轻多峰值的影响:
为了保持原有的heatmap的大小,我们最终对h’进行了缩放,使它的最大激活量等于h的最大激活量证调制前后值大小的一致性,作者又对其进行了尺度变化:
- 热图分布调制
- 通过亚像素精度下的泰勒展开的分布感知联合定位。
- 分辨率恢复到原始的空间
1.4坐标编码过程
这一部分作者为了解决跟解码相同的问题,将 gound-truth(关节坐标)先进行了转换以减轻分辨率衰减的影响,然后再生成热图。具体来说,作者首先对 ground-truth(g=(u,v))进行像素衰减( 为衰减率)得到 g':
然后为了方便核的生成,作者又对其进行了量化处理(quantise(), 可以是向下取整, 向上取整, 四舍五入等)从而最终得到 g":
最终以这个坐标 (g'') 为中心的热图就可以生成了:
随后,以量化坐标g’‘为中心的热图可以通过以下方式合成:
由于量化误差的存在,上面方式生成的热图是由偏差的,不准确的,如图所示。
这个图主要说明量化误差。蓝点表示g’的精确位置,对于基于floor的量化操作,有一个误差(红色箭头),其他量化方法也有同样问题。
解决方法:用非量化之前的g’代表量化中心,把方程14中的g’’用g’代替,我们将演示这种无偏热图生成方法的好处(表3)。如下:
这样无偏热图的好处,如表3:
论文代码开源:
GitHub - ilovepose/DarkPose: Distribution-Aware Coordinate Representation for Human Pose Estimation
里面readme写的非常详细;
运行:
output: