SimCC:人体姿态估计的简单坐标分类视角.
Heatmap-based方法是二维姿态估计领域的常用方法,这类方法存在一些缺陷:
- 在低分辨率图片上效果较差:对于HRNet-W48,当输入分辨率从256x256降到64x64,AP会从75.1掉到48.5;
- 为了提升精度,需要多个上采样层来将特征图分辨率由低向高进行恢复:通常来说上采样会使用转置卷积来获得更好的性能,但相应的计算量也更大;
- 需要额外的后处理来减小尺度下降带来的量化误差。
本文作者指出,带有显式空间结构的高斯热图表征可能并不是编码位置信息所必需的。为了探索更高效的关键点表征方式,本文提出了一种姿态估计的解耦坐标表征,Simple Coordinate Classification (SimCC),将关键点坐标$(x, y)$用两个独立的、长度不小于原图片尺寸的一维向量进行表征,在CNN-based和Transformer-based人体姿态估计模型上均取得了更好的表现。
传统的Heatmap-based方法通过2D高斯分布生成高斯热图作为标签,监督模型输出,通过L2 loss来进行优化。而这种方法下得到的Heatmap尺寸往往是小于图片原尺寸的,因而最后通过argmax得到的坐标放大回原图,会承受不可避免的量化误差。
在本文提出的方法中,关键点的$x$和$y$坐标通过两条独立的一维向量来进行表征,通过一个缩放因子$k(\geq1)$,得到的一维向量长度也将大于等于图片边长。缩放因子$k$的作用是将定位精度增强到比单个像素更小的级别。对于第$p$个关键点,其编码后的坐标将表示为:
\[p' = (x',y') = (round(x^p\times k), round(y^p\times k))\]假设模型输出两条一维向量,预测点的坐标计算为一维向量上最大值点所在位置除以缩放因子还原到图片尺度:
\[o_x' = \frac{\arg\max_i o_x(i)}{k}, o_y' = \frac{\arg\max_j o_y(j)}{k}\]对于CNN-based模型,可以将输出的特征图拉直为$d$维向量,再通过线性投影把$d$维升高到$W\cdot k$维和$H\cdot k$维。而对于Transformer-based模型,输出则已经是一维向量,同样地进行投影即可。
本文的方法将关键点定位问题转化为分类问题,因而目标函数可以使用相较于L2(MSE) Loss性质更优的分类损失,如交叉熵。
作为分类问题标签是one-hot的,除了正确的那一个点外其他错误坐标是平等,会受到同等的惩罚,但实际上模型预测的位置越接近正确坐标,受到的惩罚应该越低才更合理。因此本文进一步提出了升级版SimCC,通过1D高斯分布来生成监督信号,使用KL散度作为损失函数,计算目标向量和预测向量的KL散度进行训练:
\[\begin{aligned} & \boldsymbol{p}_{\boldsymbol{x}_{-} \boldsymbol{s} \boldsymbol{a}}^{\prime}=\left[x_0, x_1, \ldots, x_{W \cdot k-1}\right] \in \mathbb{R}^{W \cdot k}, x_i=\frac{1}{\sqrt{2 \pi} \sigma} \exp \left(-\frac{\left(i-x^{\prime}\right)^2}{2 \sigma^2}\right) \\ & \boldsymbol{p}_{\boldsymbol{y}_{-} \boldsymbol{s} \boldsymbol{a}}^{\prime}=\left[y_0, y_1, \ldots, y_{H \cdot k-1}\right] \in \mathbb{R}^{H \cdot k}, y_j=\frac{1}{\sqrt{2 \pi} \sigma} \exp \left(-\frac{\left(j-y^{\prime}\right)^2}{2 \sigma^2}\right) \\ \end{aligned}\]作者在两个CNN-based模型上验证了不同$k$取值的表现,总体而言$k$取$2$或$3$是足够优秀的,更大的$k$带来的收益几乎可以忽略不计了,并且为了避免过拟合的风险,越大的输入图片应该用越小的$k$。
在COCO数据集上的实验对比可以看到,在小尺度(64x64)图片输入上Heatmap方法出现严重的掉点问题,而SimCC方法在更低计算量的情况下多了10.6个点的提升。