查看原文
其他

ICCV 2021 | 重铸Regression荣光!具有残差对数似然估计的人体姿态回归

Tau PaperWeekly 2022-07-04


© 作者 | Tau
单位 | 网易
研究方向 | 计算机视觉



本文是一篇新鲜出炉的 ICCV Oral,由于我的工作内容是姿态估计相关,因此也在第一时间拜读了一下,以下是一些笔记和过往经验的总结。由于我自身能力有限,文章中存在错误请见谅,欢迎指正。


论文标题:
Human Pose Regression with Residual Log-likelihood Estimation


论文地址:
https://jeffli.site/res-loglikelihood-regression/resources/ICCV21-RLE.pdf


开源地址:
https://github.com/Jeff-sjtu/res-loglikelihood-regression

这两天抓紧时间看了下作者放出来的代码,发现有些地方值得注意:

1. 本文走的是用(joint_num*3)维的 FC 层直接回归出坐标点的路子,可以说是非常暴力了,这和我一开始想的 soft-argmax 的路线还不太一样,这显得 RLE 更强了;

2. 根据我过去工作的经验,用 soft-argmax 积分热图来回归的方法应该能取得比纯 FC 更好的效果,在对比实验中也没有把 RLE 用到 Integral Pose 上的实验,直觉上应该能再涨点才对。我正在自己的数据上跑实验,出了结果会在这里更新。后续:我跟作者取得了联系,根据作者的说法积分热图确实能带来轻微的提升,但增加了计算量。


Hi Tau. Actually, we did conduct experiments on the soft-argmax based method. We use ResNet-50 and usingsigmoidto predict the normalized heatmap. The original model obtains 65.7 mAP on the COCO validation set, and the model trained with RLE obtain 70.7 mAP. This is slightly better than the direct regression method (70.5 mAP without pretrained). Although using soft-argmax is better, but we think the improvement is marginal and it brings more computation.


调了几天,终于在我自己的项目上跑起来了,记录一些遇到的坑:

1. RLE 这个 loss 数值是可正可负的,因为 L=-log p,当 p>1 的时候就会为负数,基本上训到后面都会是负的,这是正常现象;

2. 这个 loss 对数据噪声比较敏感,很容易导致模型训崩,我之前的训练数据清洗得不够干净(自己没发现),但在 L1 loss 上训练没有遇到问题,在 RLE 上模型直接训崩了,debug 了很久才发现是数据噪声问题(比如坐标值超出了图片范围);

3. 作者的训练代码里,坐标值是经过了归一化的,在 RegressionFlow 模型中使用的 bar_mu = (pred_jts - gt_uvd) / sigma 时,sigma 也进行了 sigmoid 限制在 0~1 之间。


前言



一般来说,我们可以把姿态估计任务分成两个流派:Heatmap-based 和 Regression-based。其主要区别在于监督信息的不同,Heatmap-based 方法监督模型学习的是高斯概率分布图,即把 GroundTruth 中每个点渲染成一张高斯热图,最后网络输出为 K 张特征图对应 K 个关键点,然后通过 argmax 或 soft-argmax 来获取最大值点作为估计结果。

这种方法由于需要渲染高斯热图,且由于热图中的最值点直接对应了结果,不可避免地需要维持一个相对高分辨率的热图(常见的是 64x64,再小的话误差下界过大会造成严重的精度损失),因此也就自然而然导致了很大的计算量和内存开销。

Regression-based 方法则非常简单粗暴,直接监督模型学习坐标值,计算坐标值的 L1 或 L2 loss。由于不需要渲染高斯热图,也不需要维持高分辨率,网络输出的特征图可以很小(比如 14x14 甚至 7x7),拿 Resnet-50 来举例的话,FLOPs 是 Heatmap-based 方法的两万分之一,这对于计算力较弱的设备(比如手机)是相当友好的,在实际的项目中,也更多地是采用这种方法。

说到 Regression-based 方法的优点,那是就是好呀就是好,可以简单总结为以下三点:

1. 没有高分辨率热图,无负一身轻。计算成本和内存开销一起大幅降低;

2. 输出为连续的,不用担心量化误差。(Heatmap-based 输出的热图最大值点在哪,对应到原图的点也就确定了,输出热图的分辨率越小,这个点放大后对应回去就越不准。Regression-based 输出为一个数值,小数点后可以有很多位,精度不受缩放影响);

3. 可拓展性高。不论是 one-stage 还是 two-stage,image-based 还是 video-based,2D 还是 3D,Regression-based 方法都可以一把梭。此前就有用这种方法来将 2D 和 3D 数据放在一起联合训练的文章。这是Heatmap-based方法做不到的,因为输出是高度定制化的,2D 输出必须渲染 2D 高斯热图,3D 就必须渲染 3D 的高斯热图,计算量和内存开销也蹭蹭蹭地暴涨。

而 Heatmap-based 方法通过显式地渲染高斯热图,让模型学习输出的目标分布,也可以看成模型单纯地在学习一种滤波方式,将输入图片滤波成为最终希望得到的高斯热图即可,这极大地简化了模型的学习难度,且非常契合卷积网络的特性(卷积本身就可以看成一种滤波),并且这种方式规定了学习的分布,相对于除了结果以外内部一切都是黑盒的 Regression-based 方法,对于各种情况(遮挡、动态模糊、截断等)要鲁棒得多。

基于以上种种优点,Heatmap-based 方法在姿态估计领域是处于主导地位的,SOTA 方案也都是基于此,这也导致了一种学术研究与算法落地的割裂,你在各种数据集和比赛里指标刷得飞起,但项目落地时我们工程师却只能干着急,因为你用的方法又慢又吃内存,真实项目里根本没法用啊。

终于,这一天有篇文章站出来说,重铸 Regression 荣光,吾辈义不容辞!不仅将 Regression-based 方法提到了超越 Heatmap-based 方法的高度,还保留了其一直以来的节省计算资源和内存资源的优点,真正做到了又快又准,简直是项目落地算法工程师的福音,接下来就让我们一起来学习一下这篇文章。



核心思想



从极大似然估计(Maximum Likelihood Estimation, MLE)的角度来看问题,损失函数的选择其实是基于我们对目标分布的假设的,如果我们假设目标分布服从高斯分布,那么损失函数就应该选择 L2 loss,如果假设为拉普拉斯分布,则应该选择 L1 loss。


这里其实我还延申出来一个理解,早一些时候的文章大家都选择 L2 loss 作为损失函数,但近来越来越多的文章选择 L1 loss,并且有翔实的实验显示 L1 在大多数情况下都会优于 L2,对于这个现象我一开始是作为一种实验得到的经验结论进行记忆的,但到这里我才理解,选择 L2 其实是一件很自然的事情,因为高斯分布具有大量优秀的特性:采样方便、解析的密度已知、KL 距离容易计算,还有中心极限定理的保证——任何大的数据都趋近于高斯分布,所以你怎么用它几乎都是对的。但对于姿态估计任务而言,由于要精确地预测关键点位置,实际上概率分布是相对来说比较稀疏的,只有小部分区域具有概率,因此将拉普拉斯分布作为先验可能是一种更好的假设。


从这个视角来思考,我们其实可以把 Heatmap-based 方法看成是对模型的中间结果进行了监督,显式地要求模型学习高斯概率分布,进而得出结果;而 Regression-based 方法由于缺少对概率分布的监督约束,模型内部学到的分布是不稳定的,完全受到训练数据的支配,因此在性能和鲁棒性上逊于 Heatmap-based 方法也就不难想象了。

因此我们也可以知道,一个正确的密度函数假设对优化结果是起到主导性作用的。但在实际问题中,目标的分布是未知的,我们所掌握的数据也是有限的,模型很难单纯通过数据回归出真实的密度函数,有没有比草率地假设某一个分布更好的选择呢?有的,这里我们将引入这篇文章的核心之一,标准化流(Normalizing Flows)。

标准化流


标准化流是一类深度生成式模型,具体的数学原理有兴趣的朋友可以自行搜索,我这里比较肤浅地将其理解为,通过构造一个可逆的变换函数,能将一些基本的简单分布(如高斯分布)变换为任意的复杂分布。

这里用李宏毅老师的视频截图来进行直观展示,通过一系列可逆变换的叠加,可以将简单分布变换成任意的复杂分布:



换句话说,虽然现阶段我们条件有限,我们的回归模型只能拟合一个简单分布,但我可以对拟合出来的结果进行变换,让变换后的结果更接近真实分布,只要我的变换足够复杂,理论上我可以拟合任意的目标分布。

而这里的变换,实际上也就是我们的神经网络,因为神经网络理论上可以逼近任意的函数,因此流模型中那一系列叠加的可逆变换可以通过叠加的 FC 层实现。也就是说,我们将网络学习的目标,从让网络直接拟合目标分布,变成了拟合简单分布+流模型变换调整两个步骤。



结果用极大似然估计法,损失函数可以表示为:



以上的描述对应图中的(a)设计。


重参数化


尽管思想上是说得通了,但在实际实现中,还需要一些技巧。

Regression-based 方法是要网络直接预测坐标值的,但是(a)中的设计显然增加了步骤,而且让网络先拟合简单分布再进行变换的思路,似乎也有点绕弯路的感觉。因此作者进一步改进了方案,我们先对一个标准的基础分布进行变换,然后让网络直接学变换后的真实分布不是更好吗?

在实际操作中,作者假设所有底层分布共享相同的密度函数族,但是根据输入不同,会有不同的均值和方差(可以理解为需要对原始分布进行平移和缩放)。我们以标准正态分布为基础分布,通过流模型将基础分布变换为真实分布的原始分布,用回归网络来预测平移和缩放系数 。这里的平移和缩放参数,实际上就是预测值和 GT 的偏移量。


注意这里的符号!!带 hat 的是偏移量,或者说平移缩放系数,头上带 overline 一横的是真实目标分布。


到了这里,我们模型的学习目标也发生了改变,已经从(a)中的:回归模型学习基础分布,流模型学习将基础分布变换为真实分布;变成了:流模型学习 GT 的偏移量的原始分布变换,回归模型学习变换后的原始分布的平移缩放参数。

损失函数也因此可以简化为:



经过以上的简化,我们的模型已经可以端到端地进行训练了,但实际上还是存在一些问题。

不难发现,我们的回归模型的学习是完全依赖于流模型变换的结果的,而在模型训练的初期,我们学到的变换函数是非常不准的,如果让回归模型去拟合基于不正确的变换得到的目标分布,对于模型性能是有害的。但端到端训练的原则让我们不想将训练变成二阶段的(即先训练流模型,训好以后再训练回归模型),因此本文又引入了一个残差对数似然估计(Residual Log-likelihood Estimation, RLE)的概念。

残差对数似然估计


要解决上面提到的模型依赖问题,本文设计了一条梯度 shortcut 来降低依赖程度。

用公式表示流模型拟合的目标分布,可以构造拆分为三项:



其中第一项 Q(x) 是一个简单分布(如高斯分布或拉普拉斯分布),第二项我们称之为残差对数似然项,第三项是一个常数 s。

我们可以假设 Q(x) 是大致上接近于目标分布的,只是不够完美,这在之前我们已经有眉目了,选高斯分布不会错,选拉普拉斯分布更优。残差对数似然项是对第一项的一个补充,用于填补简单分布不够完美的部分,因此目标概率分布公式可以写成:



其中 G(x) 是流模型所需要学习的分布。经过这样的变换后,我们可以发现,回归模型对流模型的依赖被大大减轻了,因为不论流模型学到的结果如何,都只是在简单分布的基础上进行补充。这里的简单分布恰好正是我们前人使用的 baseline,所以不管怎么学,我们的回归模型都不会太差,相反,随着流模型对变换参数的预测越来越准确,回归模型所拟合的分布将比 baseline 更加接近真实分布。

最终得到训练的损失函数为:



而当训练结束,回归模型学到的平移缩放参数就固定了,我们的流模型也固定了,由于我们假设所有的数据都服从我们的目标分布,变换函数是不会因为输入数据的变化而受影响的。更牛逼的是,由于是在 N(0, I)的标准分布上进行的变换,在测试推理阶段,平移缩放系数直接就可以看成最终预测的坐标值。

因此在推理阶段我们就不再需要运行流模型了,我们的回归网络至此已经学到了流模型变换后的真实分布。这也是本文提出的方法的妙处所在,训练时对目标分布的假设就已经确定了,剩下的就又回到了 Regression-based 方法的既定流程上,确定分布假设,对应设计损失函数即可。


流模型这部分的逻辑比较绕,而且 (a) (b) (c) 三种方案里几个 mu 和 sigma 的含义是有不同,但又能互相转化的,建议对照着那张路程图多看几遍,最好结合原文来理解,笔者才疏学浅,表达得可能不够清晰。


流模型


本文选择的基础分布为拉普拉斯分布,这也是符合前人实验结论的,大量的实验结果佐证了拉普拉斯分布应该是一个比较接近于真实目标分布的假设,只是不够完美,但这足够我们选择它作为变换的基础,有利于简化变换的难度,降低学习的难度。

而常见的可以选择流模型其实有很多种,本文经过实验对比最终选择了 RealNVP,可逆变换函数用 3 个具有 64 个神经元的全连接层来表示。这样一个简单的轻量级的流模型,对训练速度的影响是几乎可以忽略的。

在文章最后的附录中,作者也对学到的分布进行了可视化:




实验结果


对所提出方法的消融实验如下:



这个实验以在 Resnet50 上对 L1 loss 进行直接回归作为 baseline,通过加入重参数化后的流模型进行直接似然估计的端到端训练(Direct Likelihood Estimation, DLE)可以带来 4.6mAP 的提升,加入残差对数似然估计来减轻模型依赖后的提升变为 12.4mAP,最后加入前人文章中用到的训练技巧,先用 heatmap 对 backbone 进行预训练,然后再用 Regression-based 方法进行微调,可以最终带来 13.2mAP 的提升。


PS:这个预训练技巧其实还蛮有用的,可以学一手。



跟现有 SOTA 方法的对比如图,可以看到能让 Regression-based 方法达到媲美 Heatmap-based 方法的高度,其他更多的消融实验和参数选择实验我在这里就不一一贴出来了,有兴趣的朋友可以自行查阅论文。

以上是对本文进行学习后的一些记录,可能存在一些理解有误或者不够精准的地方,后续可能会进行修改,也欢迎大家进行指正,感谢阅读。


更多阅读




#投 稿 通 道#

 让你的文字被更多人看到 



如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。


总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。 


PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学术热点剖析科研心得竞赛经验讲解等。我们的目的只有一个,让知识真正流动起来。


📝 稿件基本要求:

• 文章确系个人原创作品,未曾在公开渠道发表,如为其他平台已发表或待发表的文章,请明确标注 

• 稿件建议以 markdown 格式撰写,文中配图以附件形式发送,要求图片清晰,无版权问题

• PaperWeekly 尊重原作者署名权,并将为每篇被采纳的原创首发稿件,提供业内具有竞争力稿酬,具体依据文章阅读量和文章质量阶梯制结算


📬 投稿通道:

• 投稿邮箱:hr@paperweekly.site 

• 来稿请备注即时联系方式(微信),以便我们在稿件选用的第一时间联系作者

• 您也可以直接添加小编微信(pwbot02)快速投稿,备注:姓名-投稿


△长按添加PaperWeekly小编




🔍


现在,在「知乎」也能找到我们了

进入知乎首页搜索「PaperWeekly」

点击「关注」订阅我们的专栏吧



·

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存