DEKR 解构式关键点回归(一):算法思想与原理

前言

CW前阵子玩了下人体姿态估计,用上了微软新鲜出炉的算法——DEKR: Bottom-Up Human Pose Estimation Via Disentangled Keypoint Regression。 这个工作挺大胆的,它采用直接回归关键点坐标的方法,在COCO和CrowdPose两个数据集上干掉了此前那些基于关键点热度图(heatmap)检测并组合的方法。

DEKR的个性在于,它独立地对每个关键点进行特征提取和回归,实现了关键点之间的解耦,犹如其名——解构式关键点回归,而这种做法的成功则得益于其中的重要思想:回归关键点坐标的特征必须集中注意到关键点周围的区域!

https://github.com/HRNet/DEKR​github.com

以往方法存在的问题

吾以为,想要产出一个经得住考验的优秀工作,一个重大前提就是要深刻认识以往方法存在的缺陷。只有懂得发现问题,明白痛点在哪里,才能针对性地去改善,甚至创造。因此,一起和CW先来看看以往的一些方法存在哪些问题吧~

多人姿态检测任务不仅要定位不同类型的关键点,还得确定哪些关键点属于同一个人。目前的解决方案大致分为自顶向下(Top-Down)和自底向上(Bottom-Up)两类,前者先检测出包含人的目标框,再基于框内的人体进行关键点检测,类似于目标检测中的2-stage算法,先定位出一个大致的候选,再精准回归。这种做法通常更准,但同时开销也更大;后者则是通常先用热度图(heatmap)预测出关键点位置,然后再对它们进行组合,类似于目标检测的1-stage算法,效率高,但后处理可能比较繁琐。

还有一些“个性玩家”,如CenterNet之流,其对图中的每个像素点都直接回归K个关键点的位置,是很简洁,但准确度却不够6。

由上可知,主流的两类做法都有各自的痛点,2-stage不用说了,还分阶段,听起来就不爽快;1-stage的预测过程虽然很顺溜,但事后还要很费脑子。至于个性玩家们嘛,就像个不及格考生..

既然各流派独立玩都玩不好,那么把它们组合一下?不过,该如何选择呢..

先排除自顶向下,2-stage开销太大,老百姓耗不起,于是果断选择自底向上。但是自底向上中先热度图后组合的方式又太繁琐,不如向个性玩家们学习下,采用密集关键点坐标回归的形式。

OK,大体方案已确立,即:自底向上+密集关键点回归。然而,仅仅这样岂不是白嫖别人的劳动果实..而且这样简单粗暴地进行组合,效果也得不到保证。于是,还必须加点料才能work,至于是什么料,且看下文揭晓~

成功的关键因素

前言说到,DEKR的一个重要思想是认为回归关键点坐标的特征必须集中注意到关键点周围的区域,那么如何做到呢?我们知道,传统卷积只能激活中心像素及其周围的邻域点,于是,DEKR设计了一种自适应卷积,它能够使得像素点的激活范围不再局限于其邻域,而是集中在关键点周围!这,便是DEKR加的第一味儿料~

其次,为了使得每个关键点的预测更加精准,就应该更有针对性地对各个关键点进行特征提取和回归。于是,DEKR采用了多分支结构,每个分支与每个关键点一一对应,利用自适应卷积专心学习关键点特征,然后基于这些特征去回归关键点的位置。这,实现了各个关节点之间的解耦,是DEKR加的第二味儿料,真香!

解耦多分支回归关键点位置

多分支结构如上图所示,首先将backbone输出的特征按通道划分为K份,每份送入一个独立的分支,对各关键点进行解耦。对于COCO数据集来说,K=17。

其中,每个分支都会用自适应卷积去学习对应的关键点特征,最后基于学到的特征去回归关键点的二维偏移值向量,也就是使用卷积将通道数映射为2。

这些并行的分支结构都是一样的,但是各自有独立的参数,互相“井水不犯河水”。

自适应卷积提取关键点特征

自适应卷积与可变形卷积是一家,先对像素点生成与核大小数量对应的偏移量,得到与卷积核操作的各个像素点位置后,再进行卷积。只不过,这里生成偏移量的方式并非可变形卷积那种额外使用一个卷积来完成,而是采用仿射变换的方式,具体做法是:

1.使用卷积将特征通道数映射为4,置换到最后1维并拆分成2x2(增加了一个维度),得到仿射变换矩阵 (B,H,W,2,2);  

2.将 与代表3x3常规卷积位移的矩阵进行点乘,得到的结果最后两维是2x9(B,H,W,2,9),2对应x和y坐标,9对应着3x3位置个偏移量,合并这两维并置换回第1维(B,18,H,W);

3.使用卷积将特征通道数映射为2(B,2,H,W),代表2d位移向量t,每一维分别对应x坐标和y坐标;

4.将 (共9个)相加(B,0::2,H,W + B,0:1,H,W; B,1::2,H,W + B,1:2,H,W)得到最终的偏移量 (B,18,H,W)

其中,的形式如下,每一行对应着x/y坐标的偏移:

多尺度特征双向融合

DEKR的成功主要得益于以上两点:解构式多分支&自适应卷积。但是,CW认为其backbone中的多尺度特征双向融合也是有一定功劳的,因此也给它个名分。

这里的做法继承自HRNet,低分辨率向高分辨率特征融合时,先采用1x1卷积将通道数映射为一致,然后再采用最近邻(注意不是双线性)插值一次性上采样到高分辨率大小;而高分辨率向低分辨率特征融合时,则是分段采用3x3卷积进行2倍下采样,直至达到目的低分辨率大小,并且,只在最后一个3x3卷积改变通道数。至于特征融合的方式,均是element-wise add。

思考

前文也提到,DEKR和CenterNet一样都是使用密集关键点回归的好兄弟,但是这兄弟倆有个区别:

CenterNet在回归出关键点位置之后,需要将关键点匹配到距其最近的从热度图中检测出的关键点位置。也就是说,如果回归出来的关键点位置是,而在热度图检测出的所有关键点位置中有一个 (x_k',y_k')距离它最近,那么最终这个关键点的位置就为 (x_k',y_k'),当然,还有个额外条件就是 (x_k',y_k')要在 (x_k,y_k)所在的那个实例(人)的bbox里;

然而,DEKR却没有那么“婆妈”,直接回归完关键点位置就完事儿,别不信,回归出来的位置即最终的关键点位置,就是那么爽快~

作者也尝试了在DEKR中将关键点位置像它的兄弟CenterNet一样分配到heatmap中最近的位置,结果显示,这种做法在单尺度测试时几乎没有影响,而在多尺度测试时则会有少许性能提升(以下 'ss' 表示单尺度,'ms' 表示多尺度,'D-32' 表示使用 HRNet-W32 骨干网络,'D-48' 表示使用 HRNet-W48 骨干网络):

这就说明,DEKR 本身的关键点回归质量就很高,优秀!

明明是两兄弟,为何CenterNet就不能像DEKR一样豪爽且优秀呢?

最主要的原因,就是DEKR对各关键点的回归进行了解耦,同时使用自适应卷积让网络提取的特征点位置集中在关键点附近,就有点“一对一辅导”的味道,而CenterNet相对来说就是那种“大班教育”,针对性较弱,效果也就没有那么好了,因此它最终需要使用heatmap去refine。

那么你可能会问了,为何heatmap的预测就是比较准的,而回归的预测就是粗略的呢?凭什么说heatmap可以refine回归的结果?

你仔细想想heatmap是干啥的?人家就是“一对一”针对各个关键点去学习的啊,在每个关键点附近分配正样本去训练模型,人家主业就是做识别的;而回归,是基于物体中心点的位置计算其到各个关键点的offset,然后去学习,是“一对多”的关系。而且,使用的是常规卷积,感受野受限,特征针对性不强,基于一个中心点位置去同时回归多个关键点位置,太难了..

当然,DEKR这种爽快也是有“代价”的,那就是其必须针对各类关键点设置独立的预测头部,同时还得结合自适应卷积去较好地提取各关键点特征,这无疑使网络结构复杂化、更重载;而CenterNet在这个阶段就显得相当“简便”了,所有关键点共享预测头部,也没有用什么花里胡哨的结构。

所以说,各路英雄豪杰都有自己的招,孰高孰下还得结合当下的时局去分析判断。

作者:cw

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值