1. 程式人生 > >Paperreading 之二  多人人體姿態估計COCO2017冠軍—CPN

Paperreading 之二  多人人體姿態估計COCO2017冠軍—CPN

  1. 前言

人體姿態估計是MSCOCO資料集(http://cocodataset.org/)上面的一項比賽,人體關鍵點檢測,目前主流的做法都是深度學習來做。可以分為兩個大的方向:

(1)top-down方向:自頂向下的方法,目前的主流,像cpn,hourglass,cpm,alpha pose等都是top-down。主要分為兩個階段,行人檢測和單人姿態估計,行人檢測對後面的單人姿態估計影響很大,通常會使用效能較好的檢測器(比如faster rcnn,fpn之類的),然後把檢測到的行人框(bbox)作為單人姿態估計的輸入,所以把行人準確無誤的檢測出來非常重要。

(2)bottom-up方向:自底向上方法,典型就是COCO2016年人體關鍵點檢測冠軍open pose。主要分為兩個階段:檢測出輸入圖片中左右的人體關鍵點,根據某種策略對關鍵點之間進行連線,這時候就容易出現把a的關鍵點和b的關鍵點連線起來,open pose裡面的策略是提出PAFs,讓網路學習人體關節的向量場資訊,相當於得到了一個方向資訊,結合前面的座標點,可以確定連線。

2.構建網路

CPN網路整體結構非常的直觀明瞭,包含兩個部分GlobalNet和RefineNet,顧名思義,GlobalNet是一個全域性的初步的檢測,相當於一個粗檢測,會得到一個不錯的結果;而RefineNet是一個微調網路,在GlobalNet的輸出基礎上做進一步的精細檢測,會得到更加精確的結果。

GlobalNet相當於是一個FPN接面構,假設使用ResNet50作為backbone(全文都是以ResNet50作為backbone),左邊的四個實心方塊就是ResN50的res2- res5(包含[3,4,6,3]個Residual block),右邊的虛線方塊就是特徵融合的過程,不斷通過上取樣和elem-sum的過程做特徵融合。共有4個層次,這樣就會得到4個不同的結果,都需要計算loss,不同的層次對應groundtruth的heatmap使用的sigma大小不一樣,根據實驗來選擇,通常使用7-15之間的奇數。

RefineNet就更簡單了,把GlobalNet提取到的4個層次特徵分別經過一些bottleneck(也是使用Residual block)和一些不同倍數的上取樣,然後在特徵層上進行concat進行特徵融合,最後再經過一個bottleneck,輸出最後的結果,最後的結果是outputsize[0]*ouputsize[1]*num_points的形式,對於COCO資料集,num_points=17,output_size=[64,48](如果輸入是256*192),共有17個feature map,每一個表示一個關鍵點資訊。在feature map上的heatmap中熱力值最大的點就表示對應的關鍵點。

3.LOSS的設計

GlobalNet和RefineNet都是使用L2 loss,只是在RefineNet裡面略有點不同,作者設計了一個類似ohem的策略進行loss回傳,ohkm(Online Hard Keypoints Mining)線上困難關鍵點挖掘,ohkm更關注與高層次的資訊,而ohem更關注與困難樣本。

Ohkm原理很簡單,在loss回傳的時候,只回傳那些loss值比較大的loss,比如說只回傳最大的8個loss(一共有17個點,相當於有17個loss),相當於是讓網路更針對比較難學的關鍵點,從而會有更精細的結果。

關於loss的設計作者做了不少實驗,關於到底使用L2 loss還是ohkm版的L2 loss,以及GlobalNet到底使用還是不使用loss。實驗結果表明,前面使用普通L2 loss,後面使用ohkm的L2 loss效果最好。

4.Ablation Experiment

消融實驗作者也做了很多,

  1. 關於行人檢測以及裡面的一些處理,比如nms和softnms等等
  2. 關於網路的設計主要和hourglas對比,
  3. 關於RefineNet的設計,作者嘗試過不加bottleneck直接上取樣和concat,加一個bottleneck,提取GlobalNet輸出4層的哪幾層(C2-C5)

最終得到圖1的RefineNet結構,4個不同層次加不同個數的bottleneck,效果最好。

5.原始碼和結果

作者提供了(https://github.com/chenyilun95/tf-cpn),質量不錯,能達到論文的效果

Github上有很多其他版本,有一個PyTorch版本(https://github.com/GengDavid/pytorch-cpn

)復現作者的tf程式碼,效果不錯,程式碼也很整潔。

6. 結論

  1. 分析多人姿態估計的影響因素,提出一種新的網路結果CPN,由GlobalNet和RefineNet組成
  2. 對RefineNet的精心設計和提出ohkm
  3. 主要是遭不住人家效果好,拿了冠軍呀

做了一些實驗,效果確實很不錯。下次寫上

參考文獻

[1] Chen Y, Wang Z, Peng Y, et al. Cascaded Pyramid Network for Multi-Person Pose Estimation[J]. 2017.

[2] Cao Z, Simon T, Wei S E, et al. Realtime Multi-person 2D Pose Estimation Using Part Affinity Fields[C]// IEEE Conference on Computer Vision and Pattern Recognition. IEEE Computer Society, 2017:1302-1310.

[3] https://github.com/chenyilun95/tf-cpn

[4] https://github.com/GengDavid/pytorch-cpn