在做关键位置检测时,通常可以分为两大类方法:
- 全连接回归
- 高斯热图
方法1:全连接(FC)直接回归坐标
拓展阅读:《How much position information do convolutional neural networks encode?》
关于CNN如何学习到绝对位置坐标?
人体姿态估计一般通过检测方式学习到绝对位置(锚),关键点学习相对位置
FC 坐标回归方案
- 优点:训练和前向速度可以做到很快,端到端全微分训练
- 缺点缺乏空间泛化能力
空间泛化能力是指模型训练期间获取一个位置的能力,在 inference 阶段迁移学习到定位另一个位置的能力。
训练阶段,FC层权重严重以来于输入的空间分布。
例如,考虑一种极端情况,即训练集完全由位于图像左半边内的坐标组成。许多完全连接层的输入激活将是无用的,因此与图像右侧对应的权重将不会得到正确、充分的训练。
该问题在小规模数据集上表现得会更为明显。
因此,采用全连接层输出坐标点的方式会极大损害空间泛化能力。而卷积操作由于权重共享,是可以有效避免这类问题的,CNN相对来说,由于空间共享参数的存在,本身就存在较高的泛化能力。
全连接方式所得权重严重依赖于训练数据的分布,非常容易造成过拟合
方法2:高斯热图
heatmap 方法一般相对精度更高;但从图像输入到坐标距离并不是一个端到端可微的模型,从 heatmap 到坐标点,是通过 argmax 方式离线得到的,该过程并不可导。
heatmap 一般取输入尺寸1/4大小,输出尺寸大,内存消耗大,且需要后处理,运行速度慢。
argmax 操作同时会带来量化误差,,这与 heatmap 的分辨率有关。
优点解释:
构造 heatmap 实际上是构造了一个中间状态,这让heatmap有如下一些优点:
- 可以让网络全卷积,因为输出就是2维图像,不需要全连接。
- 关键点之间是有很强的相关关系的。然而直接对每个坐标点数值回归,并不能有效捕捉利用这些相关关系;而一张输入图像对应的 heatmap 就存在这种相关关系,那就可以用来指导网络进行学习。
- heatmap 同样捕捉了前景(关节点)与背景的对比关系,同样可以用来指导网络进行学习。这样,通过这条途径获得一个比较好的 predicted Heatmap(易于学习,效果很好),再通过其他方法获得最终的关节点位置坐标,就是目前 single person pose estimation 的基本 pipeline。
两种方法的对比
回归方法相比于高斯热图的方法是一种更难学习的监督方式,网络需要自行将空间位置转换维坐标。
高斯热图中网络的任务很直观,把和目标相似的位置输出高激活值就ok,这其实可以理解成在做滤波,也就是卷积干的事情。
一些问题
1. 为什么要附上高斯图
很多任务中,目标点其实很难准确的被一个像素位置定义,也就是很难被准确的标注。目标点附近的点其实也很像目标点,我们直接将其标为负样本,可能给网路的训练带来干扰,将其用高斯函数做一个“软标注”,网络也就更好的收敛。
加上高斯图,也能够给网络的训练增加一个方向性的引导,距离目标点越近,激活值越大,这样的网络有方向的取快速达到目标点。
2. 高斯图为啥精度更高
其实就是上述提到的三个优点。
3. 高斯热图存在误差下界
回归输出是浮点数,不存在精度误差。而高斯热图的位置坐标其实就是像素点的位置,是一个整数(整数这里好像说不通)
例如:
假设输入图片是512x512,输出是缩小4倍即128x128,那么假设一个关键点位置是507x507,那么缩小4倍后,即使没有任何误差的高斯热图还原,也会存在最大507-126*4=3个像素误差,这个3就是理论误差下界
总结
全连接回归方案
- 优点:训练和前向速度可以做到很快,端到端全微分训练;
- 缺点缺乏空间泛化能力。
高斯热图预测的精度通常高于回归的方法,但是其存在几个非常麻烦的问题:
- 输出图很大,导致内存占用多、推理和训练速度慢;
- 存在理论误差下届;
- mse loss可能会导致学习出来的结果出现偏移;
- 不是全微分模型(低分辨率输出情况下精度较低)。