Stacked Hourglass 論文:Stacked Hourglass Networks for Human Pose Estimation
Stacked Hourglass 為 Hourglass 網(wǎng)絡(luò)結(jié)構(gòu)的延伸蛔翅。論文中的網(wǎng)絡(luò)被用于人體位姿關(guān)鍵點(diǎn)預(yù)測(cè),直觀上一個(gè)關(guān)鍵點(diǎn)的位置應(yīng)該和其它關(guān)鍵點(diǎn)相關(guān)吠撮,所以 Stacked Hourglass 的設(shè)計(jì)思路是:網(wǎng)絡(luò)不同的輸出之間能夠顯式地相互影響名挥。它的思想可以應(yīng)用于許多圖到圖的預(yù)測(cè)網(wǎng)絡(luò)中葫隙。
Stacked Hourglass 的成功證明娄帖,重復(fù)的 top-down,bottom-up 處理麦撵,以及中繼監(jiān)督策略對(duì)于網(wǎng)絡(luò)的性能有著很關(guān)鍵的提升上遥。
人體位姿預(yù)測(cè)
在人體位姿預(yù)測(cè)中搏屑,一個(gè)重要的過(guò)程是預(yù)測(cè)每個(gè)人體關(guān)鍵點(diǎn)的位置:輸出它們?cè)谙袼氐燃?jí)上的準(zhǔn)確位置。
一個(gè)優(yōu)秀的人體位姿預(yù)測(cè)系統(tǒng)粉楚,需要對(duì)圖像的變形辣恋、遮擋、出界等問(wèn)題表現(xiàn)出魯棒性模软,并且在比較奇葩的姿勢(shì)上也能有好的效果伟骨,需要與其它外在因素——如衣著、光線等——無(wú)關(guān)燃异。
輸出設(shè)計(jì)
Stacked Hourglass 網(wǎng)絡(luò)的最終輸出為一組 heatmap携狭,它的每個(gè)維度對(duì)應(yīng)一個(gè)人體關(guān)鍵點(diǎn),每個(gè)維度上的個(gè)個(gè)像素值表示了該關(guān)鍵點(diǎn)位于這個(gè)像素處的概率回俐。很明顯逛腿,這需要一個(gè)能夠進(jìn)行 pixel-to-pixel 預(yù)測(cè)的網(wǎng)絡(luò)來(lái)實(shí)現(xiàn)。
Hourglass
一些網(wǎng)絡(luò)采用多 pipeline 的結(jié)構(gòu)以處理不同尺度上的特征(如YOLO2)仅颇,在這種結(jié)構(gòu)下单默,不同尺度上的特征是互不相關(guān)的。
Hourglass(沙漏網(wǎng)絡(luò)結(jié)構(gòu))被設(shè)計(jì)以用來(lái)捕捉圖像在不同尺度等級(jí)上的特征忘瓦,但它在各尺度上的特征是相關(guān)的搁廓,它通過(guò)跳線的方式來(lái)結(jié)合不同尺度上的特征。
一階 Hourglass:圖中淺綠色的圓角矩形為余差塊政冻。特征圖輸入兩個(gè)支路枚抵。上面一個(gè)支路正常提取特征线欲;下面一個(gè)支路先做下采樣(Pooling)將特征圖尺度減小到一半明场,再提取特征,再做上采樣(可以用反卷積李丰,也可以用插值法上采樣等苦锨,論文中采用臨近插值)恢復(fù)特征圖原大小。最后這兩個(gè)支路在 Channel 上連接(論文中采用的是每個(gè)元素直接相加)到一起。通過(guò)一階Hourglass舟舒,相當(dāng)于在兩個(gè)不同的尺度上提取了特征圖信息拉庶。
注意圖中被虛線框起來(lái)的地方,此時(shí)里面是一個(gè)余差塊秃励。
二階 Hourglass:將一階 Hourglass 中虛線部分替換為另一個(gè)一階 Hourglass氏仗,即構(gòu)成二階 Hourglass《嵯剩可見(jiàn)皆尔,二階 Hourglass 能夠在三個(gè)不同的尺度上提取特征圖信息。
以此類推币励,能得到任意階數(shù)的 Hourglass 結(jié)構(gòu)慷蠕。注意不論 Hourglass 的階數(shù)為多少,它都被看作是一個(gè)單個(gè)的 Hourglass食呻。
設(shè)計(jì)細(xì)節(jié)
Stacked Hourglass 論文中所有的 Hourglass 都采用四階流炕,也就是說(shuō),網(wǎng)絡(luò)能夠考慮到四個(gè)不同尺度上的特征仅胞,且特征圖最小會(huì)變成原始尺寸的 1/8(所以輸入圖像的尺寸最好應(yīng)能夠被 8 整除)每辟。在每個(gè) Hourglass 的輸出處,都加了兩個(gè) 1×1 的卷積層干旧,以預(yù)測(cè)人體關(guān)鍵點(diǎn)的一組 heatmap影兽。網(wǎng)絡(luò)的其它部分采用的卷積核大小統(tǒng)一為 3×3。余差塊結(jié)構(gòu)如下圖所示莱革。
在輸入圖像(256×256)輸入 Hourglass 之前峻堰,先通過(guò)帶 stride 的卷積,和池化操作盅视,下采樣到(64×64)捐名。這么做的原因是,不下采樣的話 GPU 內(nèi)存不夠用闹击∠馓#可見(jiàn)在 Hourglass 的大量并行通路下,其缺點(diǎn)在于龐大的運(yùn)算開(kāi)銷赏半。
Stacked Hourglass
單個(gè) Hourglass 能夠做到提取特征圖在不同尺度上的信息贺归,但是仍然不能在預(yù)測(cè)時(shí)(顯式地)考慮不同關(guān)鍵點(diǎn)之間的關(guān)系。所以才需要進(jìn)一步設(shè)計(jì) Stacked Hourglass断箫。
中繼監(jiān)督
中繼監(jiān)督的思想在更早的網(wǎng)絡(luò)里就已經(jīng)被提出了拂酣。GoogLeNet V1 就在網(wǎng)絡(luò)中部和中后部額外設(shè)置了全連接層分類支路,和最終的輸出一樣仲义,這些支路對(duì) Loss 有一定的貢獻(xiàn)婶熬。當(dāng)時(shí)的想法是剑勾,由于深層網(wǎng)絡(luò)的多次下采樣操作,一定尺度上的特征信息會(huì)丟失赵颅,所以才設(shè)計(jì)了這些中繼監(jiān)督位點(diǎn)虽另。與 Stacked Hourglass 不同,GoogLeNet 中的這些中繼監(jiān)督位點(diǎn)的輸出并沒(méi)有再返回網(wǎng)絡(luò)里饺谬。
Stacked Hourglass 的堆疊結(jié)構(gòu)和中繼監(jiān)督
Stacked Hourglass 將總共 8 個(gè) Hourglass 首尾相連捂刺。在每個(gè) Hourglass 末尾的第一個(gè) 1×1 卷積層后,分支出一個(gè)用于 heatmap 預(yù)測(cè)的 1×1 卷積層(下圖中藍(lán)色部分)募寨,此處可以與 Ground Truth? 進(jìn)行比較叠萍,并得到一個(gè) Loss 。之后绪商,預(yù)測(cè)結(jié)果會(huì)被重新通過(guò) 1×1 卷積苛谷,將維度調(diào)整到和中間特征相同,然后與中間特征按元素相加格郁。
按元素相加雖然直觀上看比較奇怪腹殿,但實(shí)際上,concatenate到一起之后例书,再通過(guò)一次卷積降維锣尉,那次卷積的最后其實(shí)也是按元素相加的操作。所以這里直接按元素相加决采,可以當(dāng)作之前的卷積層已經(jīng)得到了可相加的特征自沧,這并沒(méi)有什么不妥。
直觀上树瞭,將中繼監(jiān)督點(diǎn)的輸出重新返回網(wǎng)絡(luò)中拇厢,起到了一種“讓網(wǎng)絡(luò)對(duì)當(dāng)前的特征和預(yù)測(cè)結(jié)果進(jìn)行再評(píng)估”的作用。通過(guò)重復(fù)地將多個(gè) Hourglass 和中繼監(jiān)督串聯(lián)晒喷,網(wǎng)絡(luò)能夠顯式地學(xué)習(xí)每個(gè)預(yù)測(cè)目標(biāo)之間的關(guān)系孝偎,越靠后的預(yù)測(cè)越能夠結(jié)合所有關(guān)鍵點(diǎn)的位置信息,做出更準(zhǔn)確的關(guān)鍵點(diǎn)位置預(yù)測(cè)凉敲。有了這種特性衣盾,網(wǎng)絡(luò)就基本不會(huì)預(yù)測(cè)出一些從解剖學(xué)上不成立的人體姿勢(shì)。
這個(gè)堆疊結(jié)構(gòu)是 Stacked Hourglass 的主要?jiǎng)?chuàng)新點(diǎn)爷抓。提出的思路也很直接:首先需要加入中繼監(jiān)督進(jìn)行中間的預(yù)測(cè)势决,但是如果只有一個(gè) Hourglass,中繼監(jiān)督放哪里比較好蓝撇?放到前端考慮不到全局信息果复,放到后面又沒(méi)有機(jī)會(huì)進(jìn)行再評(píng)估。喔唉地,不如多來(lái)幾個(gè) Hourglass 串聯(lián)在一起据悔,每個(gè) Hourglass 的輸出處設(shè)一個(gè)中繼監(jiān)督吧。
訓(xùn)練細(xì)節(jié)
訓(xùn)練集
訓(xùn)練集使用了 FLIC 和 MPII Human Pose 兩個(gè)訓(xùn)練集內(nèi)的樣本耘沼。MPII 的樣本中有可能有很多人存在极颓,但 Stacked Hourglass 網(wǎng)絡(luò)被用于預(yù)測(cè)單個(gè)人物的關(guān)鍵點(diǎn),這通過(guò)在 MPII 的訓(xùn)練集中群嗤,只取最靠中間的任務(wù)的關(guān)鍵點(diǎn)作為樣本來(lái)實(shí)現(xiàn)菠隆。所有訓(xùn)練集均被裁剪、變形至 256×256 尺寸狂秘。
注:涉及到多個(gè)人物的關(guān)鍵點(diǎn)預(yù)測(cè)骇径,最好采用 Mask R-CNN 的 pipeline。
數(shù)據(jù)增強(qiáng)
隨機(jī)對(duì)樣本做了 ±30° 以內(nèi)的旋轉(zhuǎn)者春,和 ±25% 幅度的縮放破衔。沒(méi)有做平移,因?yàn)榫W(wǎng)絡(luò)需要預(yù)測(cè)在圖像正中間的人物钱烟。
損失函數(shù)
每個(gè)關(guān)鍵點(diǎn)的 Ground Truth 定義為以該關(guān)鍵點(diǎn)為峰值位置的 2D 高斯函數(shù)晰筛。Loss Function 定義為 Ground Truth 與預(yù)測(cè)得到的 heatmap 之間的均方誤差。