Press "Enter" to skip to content

换个角度理解关键点定位的Heatmap和Regression方法

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

作者丨Tau

 

论文地址: https://arxiv.org/pdf/2003.03771.pdf

 

开源地址: https://github.com/jhb86253817/PIPNet

 

0. 前言

 

从广泛意义上讲,不论是人体姿态估计、手部姿态估计这样的姿态估计任务,还是人脸关键点检测,甚至于目标检测任务中的BBox定位,其实都可以看成是一种关键点定位任务。对于这一类任务,目前大家的做法也基本上达成了共识,大致上可分为Heapmap-based和Regression-Based两派,在细节处理上,根据监督信息不同,又衍生出了用Heatmap监督Heatmap,用坐标值监督坐标值,以及用坐标点来监督Heatmap的Soft-argmax流派。

 

由于不同下游任务上数据的特性不同,根据对性能和精度的取舍不同,大家在细节方法的选择上也各有不同,但往往都是立足于讨论一个不足之处,并提出解决方案,近年比较多的工作是在于提升Regression方法的精度,让其逼近或超越Heatmap。而对于Heatmap和Regression的优劣产生的原因,我暂时没有读到分析得特别让我满意的。

 

这篇工作是立足于人脸关键点任务的,但由于人脸近似于刚体这样的性质,会要求网络能尽量保证所有关键点的排布尽量连续,全局形状尽量稳定,不要有太大的变形。所以在Heatmap和Regression在全局形状保持能力上,进行了实验,分析了两种方法优劣产生的原因,其分析让我比较认同,因此写了这篇笔记进行记录。

 

由于我认为这篇工作有意思的地方在于对两种流派特性的分析,而不是本文提出的方法本身有多novel,因此这并不是一篇文章解读类的笔记,我会更多地关注分析的部分。

 

1. 文章贡献

 

从贡献而言,本工作提出了一个新的模型结构,形似于anchor-free目标检测模型中对bbox预测的做法;外加提出一种新的训练策略,运用课程学习(Curriculem Learning)的思想来进行迭代式半监督训练。

 

但是说实话,我读完之后觉得模型结构并不算新颖,提出的训练策略也很麻烦,除非是需要高强度调参刷点数,或者打比赛,否则估计在实际业务中价值是比较有限的。

 

这篇文章引起我兴趣的地方在于,Heatmap和Regression方法对于关键点连续性、全局形状的保持、极端视角下鲁棒性的实验的分析,得出了一些我比较认同的结论,并启发出了我的一些思考,促使我写这篇笔记。

 

2. 从人脸关键点定位说起

 

跟人体、手部相比,人脸有一个特性——近似于刚体,换句话说,大部分的关键点形状是比较固定的,彼此之间相对位置也比较固定,偏移和自遮挡的情况较为单一,不同于人体、人手的高自由度。因此,我们也会期望在任何情况下,模型预测的关键点轮廓是比较连续的,不会出现大的变形,不会预测出明显的离群点:

 

那幺从预测的关键点形状的稳定性来看,Heatmap和Regression方法各自表现如何呢?本文从这里入手进行了实验对比:

 

通过对比我们可以发现,Regression方法存在着大量点位不够贴合,对于眨眼、咧嘴等细微动作反馈不到位的问题。

 

尽管在平均误差指标上,Heatmap方法比起Regression方法有优势,但对于关键点的连续性、相对位置的稳定性,表现却是不如Regression方法的,尤其是在一些比较极端的视角或遮挡下,关键点之间出现了明显的不连续,而Regression依然能保持一个较好的整体形状,换句话说,Regression方法具有更好的鲁棒性。

 

很自然地,我们就会开始思索,造成这两种方法鲁棒性差异的原因是什幺呢?

 

从定位的原理上来看,Heatmap和Regression两种方法差异是很大的:

 

Heatmap方法实际上是在空间维度上做特征匹配,是卷积核在特征图平面上“滑动”,更多地关注和利用的是局部信息,而定位实际上是特征匹配的“副产品”,是我们通过求响应最大点索引(Argmax)的方式获得的,相对来说, 每一个关键点的计算是独立的。

 

而Regression方法则不同,所有的关键点 计算是同时完成的,共享了同一份特征信息。

 

本文作者认为,这是影响定位点鲁棒性的关键。

 

这种鲁棒性,实际上可以看成是一种隐式先验信息,就像对于人来说,我们都会知道嘴巴长在鼻子下面,这种隐式先验强大到,我们即使闭上眼睛吃饭,手依然可以准确地把食物送到嘴里。模型通过训练,同样学习到了这样的隐式先验。

 

从直觉上不难理解,回归方法基于共享的特征,从先天上就擅长对这种隐式先验的学习。可是Heatmap方法又是怎幺做到准确定位的呢?要知道对于分类网络而言,即使眼睛和嘴巴位置互换,网络也还是会预测为人脸,那幺为什幺Heatmap方法不会出现左右眼的定位点混乱呢?光靠特征匹配的话,左右脸上可是有大量的点特征是高度相似的。

 

关于这一点,在2020年其实学术界已早有研究发现,卷积网络实际上通过zero padding同样也学到了位置信息。为了验证这一点,本文将在人脸数据集上训练好的Heatmap和Regression模型,分别在纯黑图片、非人脸图片上进行了实验:

 

让我们暂时忽略PIPNet的结果,我们可以看到,Heatmap方法在纯黑图片上,同样能输出具有正常轮廓的人脸形状,这说明模型确实记住了关键点之间的位置关系。

 

但在非人脸图像上,Heatmap方法预测的关键点形状明显崩坏了不少,这与我们关于“特征匹配的特性会破坏形状的连续”的推测相吻合。

 

反观Regression方法的结果,在非人脸图像上依然能保持较好的人脸形状,本文作者认为这说明Regression具有更好的鲁棒性,我觉得从某种程度上来讲,这也可以解释为回归方法对训练数据的过拟合。

 

那幺很自然地,作者给出了一个折中方案,希望能同时从Heatmap和Regression方法中获益,吸取二者的优势,顺带还解决了Heatmap方法普遍存在的上采样计算量过大的问题。

 

2. 折中方案

 

之所以我称之为折中方案,是因为本文提出的所谓Pixel-in-Pixel(PIP)模块是这样的:用Backbone对图片提取下采样的特征图,特征图上的每一格都同时预测关键点的存在性(文中称为score)和关键点关于本格左上角的偏移(offset)。

 

明眼人一看就会感觉非常眼熟,这不就是目标检测头部一贯的做法吗?

 

模型相当于同时在做Heatmap和Regression,靠Heatmap特征匹配来确定关键点的粗略位置,再在小范围内依靠Regression补充出精确位置,如此一来,既省去了Heatmap上采样补足精度的步骤,又比纯粹依靠Regression得出所有点来得灵活。

 

更具体地分析,由于下采样得到的特征图分辨率是小于输入图片的,因此不可避免地,会有一些关键点落在Heatmap的同一格里,这 使得这些点在Regression时依赖了同一块区域特征,从而获得了形状的鲁棒。

 

这个思路听上去很美好,但是真的没有问题吗?要知道Heatmap既然是在做特征匹配,那完全有可能相邻的点匹配到了相隔较远的地方,这样就又没有共享特征的说法了。

 

而实验结果也是如此,尽管PIP确实相较于纯Heatmap方法,连续性问题缓解了一些,但依然是存在的。

 

于是作者又提出了一个邻居节点回归模块(NRM, Neighbor Regression Module)来进一步缓和这个问题。我这里用的词是“ 缓和 ”,因为我认为这种方法并不算高明,也没有真正解决这个问题。

 

所谓NRM,其实就是让原本每一格预测一个关键点,变成了预测多个关键点,也就是说,一块特征除了预测自己那个点外,还要预测周围最近的关键点。

 

这种思路有点类似于:既然Heatmap可能跑偏,导致邻近点无法共享特征,那我干脆让每块特征都预测邻近点,这样一来,就保证了所有邻近点必然都能享受到共享特征带来的鲁棒性。

 

这个思想其实挺符合直觉的,但我总觉得有点暴力,而且本文对于邻近点的定义也非常粗暴,是从平均脸型上用欧氏距离计算得到的。这当然是不太合理的,且不谈平均脸上的邻近点跟特殊姿态下有差异,本文用同一个超参数C来要求每块区域预测相同数量的邻近点,这个做法也不是很优雅,而最终的预测结果是所有点预测结果取平均,这更是和稀泥和到姥姥家了=。=

 

这样的操作就像强行对邻近点做了平均滤波,以此来获得连续性上的提升,也可以理解成在模型头部进行了一个小参数量模块的模型集成,从结果来看,PIP+NRM的确获得了不错的连续性。

 

3. 换个角度理解PIP+NRM

 

尽管上面吐槽归吐槽,这一套照搬目标检测思想搞出来的关键点检测结构,确实取得了不错的效果,所以还是值得我们细品一番的。

 

对目标检测算法有一些了解的小伙伴应该都知道,目标检测算法大致是Backbone+FPN+Head的结构,而Head部分分成了两个头部,一个负责做分类,一个负责回归计算BBox。

 

对应到本文中,PIP分成了score和offset两个头部,用Heatmap的方式监督score,用Regression方式监督offset。

 

Heatmap方法在监督时有两种做法,一种是渲染一个二维高斯分布,另一种是在二维平面上取one-hot,当然,后一种可以看成前一种的特例,在损失函数的选择上,分成了MSE Loss和CrossEntropy Loss两种,背后对应的思想都是拟合一种概率分布,也是在做分类问题。

 

Regression部分,PIP只预测了一个点,因此缺乏对邻近点隐式先验的学习,我们联系目标检测想一想,目标检测的回归头一般会回归四个值(x, y, w, h),是不是一下就有NRM预测邻近点内味儿了?

 

在进一步思考, 传统的Heatmap和Regression方法,实际上可以看成是这种目标检测结构的两种特例。

 

我们很容易理解到,PIP的收益,一部分来源于下采样特征图压缩了分辨率,使得一部分邻近点可以共享特征。 随着下采样率的提升,分辨率会越来越小,分类任务的难度会降低,回归任务的难度在提升 。在极端情况下,输入图片可以被下采样成一个像素,在这个情况下,分类任务退化成了一个0-1分类问题,彻底丧失了空间信息;回归头变成了标准Regression方法的形式,在整张图片尺度上预测关键点坐标。

 

在另一种极端情况下,输入图片不进行任何下采样(或者通过上采样将特征还原到输入分辨率),此时的score特征图,是在做一个HxW类的分类任务,或者说,在预测一个HxW维的概率分布,分类头退化成标准Heatmap方法的形式,而回归头失去了意义。

 

因此,可以发现,PIP+NRM实际上是对Heatmap和Regression两种形式的统一,虽然看上去是在照搬目标检测的东西,但这背后的思想是很深刻的。

 

4. 结语

 

本文后面还提出了一种基于Curriculum learning思想的半监督学习策略,能从数据层面提升模型的表现,但说实话我觉得不太实用,也不太吸引我,因此不在这里进行介绍了,有兴趣的小伙伴可以自行阅读原文。

 

对于C个邻近点的选择,本文也进行了实验调参,得出了一个在特定数据集上最优的数字,但说实话价值有限,我也不太认同基于平均脸上的欧氏距离确定邻近点的做法。

 

关于最终模型输出的坐标,所有输出点取平均的做法也有待商榷,感觉上用加权的形式,或者类似于GFL用分布的形式来学习。

 

以上都是一些本文我觉得有待探索的部分,但本文的分析让我对Heatmap和Regression两种流派有了更多的理解,在实际业务中,在工程上,很多时候我们算法工程师其实也只是在寻找一种折中方案罢了,其实没有那幺多的“无痛涨点”和“即插即用”,我们只是一群在天平上小心翼翼trade-off的人。

 

感谢相伴,希望本文对你有所帮助,能在下次trade-off时更加有迹可循,找到属于你的rich reward~

 

Be First to Comment

发表评论

您的电子邮箱地址不会被公开。