論文概況
論文名:Towards Accurate Multi-person Pose Estimation in the Wild
作者(第一作者)及單位:George Papandreou, 谷歌
發表期刊/會議:CVPR2016
被引次數(截止到發博日期,以谷歌學術為數據來源):52
主要方法
論文實現的是多人的姿態估計,使用的是自頂向下(top-down)的方法,即:先由目標檢測方法把人檢測出來,然后再進行單人的姿態估計。這篇論文的總體流程是:第一步,使用Faster-RCNN進行人的檢測。第二步,進行姿態估計。
第一步、使用Faster-RCNN進行人的提取
這部分看起來沒什么好說的,但是,讀論文就要事無巨細,所以來看一下詳細實現。
文章中使用了基於ResNet101的Faster-RCNN,但是做了一些更改,就是把卷積操作用atrous convolution給修改了,具體修改可以看一下原文的參考文獻,我們這里看一下atrous convolution是什么,atrous convolution頻繁的在deeplab的論文里出現,這里特意找了一下,如下圖:
圖(b)就是atrous convolution,接下來我們看一個二維的卷積,如圖:
這幅圖雖然是講的時空金字塔池化,但是上面的卷積核我們可以直觀的看到,可以說就是帶孔的卷積,這樣可以用相對更少的參數得到更大感受野的feature map(這樣說也不知道對不對),論文中這么做的目的是為了讓ResNet的輸出由原來的stride=32變成stride=8,這樣子就可以產生更“稠密”的feature map,我的理解是具有更大的感受野和更多的信息。另外,這里用的Faster-RCNN是重新訓練過的,並且訓練的時候只保留“人”這一個類別。
第二步、姿態估計
這部分是本文的重頭戲,其骨干就是用ResNet來同時做了分類和回歸。
1.圖片分割
之前說過,我們首先要通過一個Faster-RCNN來檢測人,但是我們知道檢測框的大小不一樣,那么應該如何處理呢。讓我來做的話,二話不說,直接resize成我的網絡輸入大小,但實際上這樣子會使我的人的圖像長寬比失真,最終導致我的模型訓練效果不佳。本文使用了一個比較好的方法,我覺得以后做類似任務的時候都可以這么處理。
- 將檢測出來的框的長或寬擴展,使檢測框符合一個長寬比x。
- 然后將整個框保持長寬比不變進行擴大,論文里說訓練的時候按照1.0-1.5的比例隨機擴大,也算是數據集增強的一部分,然后測試的時候就按1.25的比例擴大。
- 將上面的框框出來的區域裁剪,然后resize成257*353的大小,注意,之前的長寬比x=353/257=1.37,這樣,即使經過resize,圖片也不會失真。
2.分類和回歸問題
前面說過,這部分主要是做了分類和回歸。對於分類問題,論文中將以關節點為中心,以R為半徑的區域歸為1,其余位置為0。對於回歸問題,回歸了一個向量,也就是偏移量,定義為:
其中l_k為關節點坐標。為什么要這樣呢?直接回歸出關節點不好嗎,實際上直接回歸是很難的,谷歌的deeppose論文就是直接回歸的,但是也是用了很多了階段不停地修正才能得到真正的坐標,我曾經試過只用一個階段單純的回歸坐標,但是結果是所有的預測結果都是一樣的,必須經過修正才可以讓網絡學到真正能識別關節的特征,所以這就是本文的兩步走策略,我先找到一個大概區域,然后根據我預測的偏移量投票出我真正的關節點坐標,那么怎么得到呢,公式如下:
其中G()是 bilinear interpolation kernel,恕我才疏學淺,這個函數找了很久都不知道是什么,看字面是雙線性內插算法,但是雙線性內插公式要有四個已知點,這部分等以后搞懂了再說吧。但是論文中提到,如果heatmap(也就是那個圓)和offset(偏移向量)都是完美的話,那么f應該是沖擊響應函數,我們看一下論文里的圖片,直覺上理解一下。
后面就是實驗結果,其中還提到了基於OKS的非最大值抑制,但是可惜沒有說具體怎么做,關於非最大值抑制的相關問題,由於這個也很重要,以后單寫一篇隨筆吧。