DEKR 解構(gòu)式關(guān)鍵點回歸(一):算法思想與原理
前言
CW前陣子玩了下人體姿態(tài)估計,用上了微軟新鮮出爐的算法——DEKR: Bottom-Up Human Pose Estimation Via Disentangled Keypoint Regression。 這個工作挺大膽的,它采用直接回歸關(guān)鍵點坐標(biāo)的方法,在COCO和CrowdPose兩個數(shù)據(jù)集上干掉了此前那些基于關(guān)鍵點熱度圖(heatmap)檢測并組合的方法。
DEKR的個性在于,它獨立地對每個關(guān)鍵點進(jìn)行特征提取和回歸,實現(xiàn)了關(guān)鍵點之間的解耦,猶如其名——解構(gòu)式關(guān)鍵點回歸,而這種做法的成功則得益于其中的重要思想:回歸關(guān)鍵點坐標(biāo)的特征必須集中注意到關(guān)鍵點周圍的區(qū)域!
https://github.com/HRNet/DEKR

以往方法存在的問題
吾以為,想要產(chǎn)出一個經(jīng)得住考驗的優(yōu)秀工作,一個重大前提就是要深刻認(rèn)識以往方法存在的缺陷。只有懂得發(fā)現(xiàn)問題,明白痛點在哪里,才能針對性地去改善,甚至創(chuàng)造。因此,一起和CW先來看看以往的一些方法存在哪些問題吧~
多人姿態(tài)檢測任務(wù)不僅要定位不同類型的關(guān)鍵點,還得確定哪些關(guān)鍵點屬于同一個人。目前的解決方案大致分為自頂向下(Top-Down)和自底向上(Bottom-Up)兩類,前者先檢測出包含人的目標(biāo)框,再基于框內(nèi)的人體進(jìn)行關(guān)鍵點檢測,類似于目標(biāo)檢測中的2-stage算法,先定位出一個大致的候選,再精準(zhǔn)回歸。這種做法通常更準(zhǔn),但同時開銷也更大;后者則是通常先用熱度圖(heatmap)預(yù)測出關(guān)鍵點位置,然后再對它們進(jìn)行組合,類似于目標(biāo)檢測的1-stage算法,效率高,但后處理可能比較繁瑣。
還有一些“個性玩家”,如CenterNet之流,其對圖中的每個像素點都直接回歸K個關(guān)鍵點的位置,是很簡潔,但準(zhǔn)確度卻不夠6。
由上可知,主流的兩類做法都有各自的痛點,2-stage不用說了,還分階段,聽起來就不爽快;1-stage的預(yù)測過程雖然很順溜,但事后還要很費腦子。至于個性玩家們嘛,就像個不及格考生..
既然各流派獨立玩都玩不好,那么把它們組合一下?不過,該如何選擇呢..
先排除自頂向下,2-stage開銷太大,老百姓耗不起,于是果斷選擇自底向上。但是自底向上中先熱度圖后組合的方式又太繁瑣,不如向個性玩家們學(xué)習(xí)下,采用密集關(guān)鍵點坐標(biāo)回歸的形式。
OK,大體方案已確立,即:自底向上+密集關(guān)鍵點回歸。然而,僅僅這樣豈不是白嫖別人的勞動果實..而且這樣簡單粗暴地進(jìn)行組合,效果也得不到保證。于是,還必須加點料才能work,至于是什么料,且看下文揭曉~
成功的關(guān)鍵因素
前言說到,DEKR的一個重要思想是認(rèn)為回歸關(guān)鍵點坐標(biāo)的特征必須集中注意到關(guān)鍵點周圍的區(qū)域,那么如何做到呢?我們知道,傳統(tǒng)卷積只能激活中心像素及其周圍的鄰域點,于是,DEKR設(shè)計了一種自適應(yīng)卷積,它能夠使得像素點的激活范圍不再局限于其鄰域,而是集中在關(guān)鍵點周圍!這,便是DEKR加的第一味兒料~
其次,為了使得每個關(guān)鍵點的預(yù)測更加精準(zhǔn),就應(yīng)該更有針對性地對各個關(guān)鍵點進(jìn)行特征提取和回歸。于是,DEKR采用了多分支結(jié)構(gòu),每個分支與每個關(guān)鍵點一一對應(yīng),利用自適應(yīng)卷積專心學(xué)習(xí)關(guān)鍵點特征,然后基于這些特征去回歸關(guān)鍵點的位置。這,實現(xiàn)了各個關(guān)節(jié)點之間的解耦,是DEKR加的第二味兒料,真香!
解耦多分支回歸關(guān)鍵點位置

多分支結(jié)構(gòu)如上圖所示,首先將backbone輸出的特征按通道劃分為K份,每份送入一個獨立的分支,對各關(guān)鍵點進(jìn)行解耦。對于COCO數(shù)據(jù)集來說,K=17。
其中,每個分支都會用自適應(yīng)卷積去學(xué)習(xí)對應(yīng)的關(guān)鍵點特征,最后基于學(xué)到的特征去回歸關(guān)鍵點的二維偏移值向量,也就是使用卷積將通道數(shù)映射為2。
這些并行的分支結(jié)構(gòu)都是一樣的,但是各自有獨立的參數(shù),互相“井水不犯河水”。
自適應(yīng)卷積提取關(guān)鍵點特征
自適應(yīng)卷積與可變形卷積是一家,先對像素點生成與核大小數(shù)量對應(yīng)的偏移量,得到與卷積核操作的各個像素點位置后,再進(jìn)行卷積。只不過,這里生成偏移量的方式并非可變形卷積那種額外使用一個卷積來完成,而是采用仿射變換的方式,具體做法是:
1.使用卷積將特征通道數(shù)映射為4,置換到最后1維并拆分成2x2(增加了一個維度),得到仿射變換矩陣(B,H,W,2,2);
2.將與
代表3x3常規(guī)卷積位移的矩陣進(jìn)行點乘,得到的結(jié)果最后兩維2x9(B,H,W,2,9),2對應(yīng)x和y坐標(biāo),9對應(yīng)著3x3位置個偏移量,合并這兩維并置換回第1維(B,18,H,W);
3.使用卷積將特征通道數(shù)映射為2(B,2,H,W),代表2d位移向量t,每一維分別對應(yīng)x坐標(biāo)和y坐標(biāo);
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)
其中,的形式如下,每一行對應(yīng)著x/y坐標(biāo)的偏移:

多尺度特征雙向融合
DEKR的成功主要得益于以上兩點:解構(gòu)式多分支&自適應(yīng)卷積。但是,CW認(rèn)為其backbone中的多尺度特征雙向融合也是有一定功勞的,因此也給它個名分。

這里的做法繼承自HRNet,低分辨率向高分辨率特征融合時,先采用1x1卷積將通道數(shù)映射為一致,然后再采用最近鄰(注意不是雙線性)插值一次性上采樣到高分辨率大?。欢叻直媛氏虻头直媛侍卣魅诤蠒r,則是分段采用3x3卷積進(jìn)行2倍下采樣,直至達(dá)到目的低分辨率大小,并且,只在最后一個3x3卷積改變通道數(shù)。至于特征融合的方式,均是element-wise add。
Preview
下一部分,CW將分享下DEKR的標(biāo)簽制作過程,先明確模型學(xué)習(xí)的目標(biāo)。
作者:cw