關鍵點檢測的總結

一、三款模型

幾款模型目前來看的精度:CPM < DeeperCut < CMU OpenPose < AlphaPose

1、CPM
timctho/convolutional-pose-machines-tensorflow 
cpm是CMU開源項目OpenPose的前身,整個framework還是比較清晰的,Pose estimation任務屬於FCN的一種,輸入是一張人體姿勢圖,輸出n張熱力圖,代表n個關節的響應。 

è¿éåå¾çæè¿°

(1)級聯網絡,CPM是一個cascaded網絡,但是CPM是一個交互的sequence 
framework,即上一個FCN的上下文(contextual)會作爲下一個FCN的輸入。
(2)分階段,每個階段都能輸出各個部件的響應圖(藍色score),使用時以最後一個階段的響應圖輸出爲準。

è¿éåå¾çæè¿°

(3)爲了多人預測的center map,爲一個高斯響應,因爲cpm處理的是單人pose的問題,如果圖片中有多人,那麼center map可以告訴網絡,目前要處理的那個人的位置。 因爲這樣的設置,cpm也可以自底向上地處理多人pose的問題。
參考:Convolutional Pose Machines、convolutional pose machines, CVPR 2016、【人體姿態】Convolutional Pose Machines

2、 CMU OpenPose (Part Affinity Fields )
github: ZheC/Realtime_Multi-Person_Pose_Estimation 
ildoonet/tf-pose-estimation 一些調整:mattzheng/tf-pose-estimation-applied

用Part Affinity Fields來學習如何將身體關鍵和個人匹配起來。主要思想是利用貪心算法自下而上的解析步驟從而達到高準確率和實時性。身體部位定位和關聯是在兩個分支上同時進行的。該方法獲得了COCO2016 keypoints challenge中奪得第一名。 
文章代碼總共分爲兩條線,經過卷積網絡提取特徵,得到一組特徵圖,然後分成兩個岔路,分別使用 CNN網絡提取Part Confidence Maps 和 Part Affinity Fields ,得到這兩個信息後,我們使用圖論中的 Bipartite Matching 將同一個人的關節點連接起來得到最終的結果。

è¿éåå¾çæè¿°

第一條線:求所有的關鍵點(頭,肩膀,手肘,手腕 … )

  • 1)一共兩個cnn,第一個cnn的輸入是原圖,輸出是熱圖(每一個熱圖包含某一種關鍵點)
  • 2)第二個cnn輸入是上一個cnn得到的所有熱圖,和原圖。輸出還是熱圖。

循環直至收斂

第二條線:求所有關節區域
1)一共兩個cnn,第一個cnn的輸入是原圖,輸出是熱圖(每一個熱圖包含某一種連接(可以簡單理解爲骨頭)區域),其實它們是一整片區域,不過每個地方的概率大小不同。
2)第二個cnn輸入是上一個cnn得到的所有熱圖,和原圖。輸出還是熱圖。
循環直至收斂

根據前邊兩個階段得到的兩個熱圖,計算哪兩個點連接比較好。這就要根據關節區域和點的位置來計算每個像素的小法向。生成一個法向圖。


參考: 
行人姿態估計–Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields、 
姿態估計論文思路整理 – Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields、 
基於部分親和字段PAF(Part Affinity Field)的2D圖像姿態估計、 
Paper reading: Realtime Multi-person 2D Pose estimation using Part Affinity Fields(1)

 

3、DeeperCut

github:eldar/pose-tensorflow 一些調整:mattzheng/pose-tensorflow-detailed 

è¿éåå¾çæè¿°

首先使用CNN提取body part candidates,每一個候選區域對應的是一個關節點, 每一個關節點作爲圖中的一個節點,所有的這些候選關節點組成代表的節點組成一副完整的圖,正如上圖dense graph所示。節點之間的關聯性作爲圖中的節點之間的權重。這時,可以將其看作是一個優化問題,將屬於同一個人的關節點(圖中的節點)歸爲一類,每一個人作爲一個單獨的類。同時,另一條分支,需要對檢測出來的節點進行標記,確定他們屬於人體的哪一個部分。最後,使用分類的人結合標記的部分構成最終的每個人的姿態估計。 
前一個版本DeepCut: 
具有以下幾個優勢:

1)可以解決未知個數人的圖像,通過歸類得到有多少個人
2)通過圖論節點的聚類,有效的進行了非極大值抑制
3)優化問題表示爲 Integer Linear Program (ILP),可以有效求解


不過同樣地,因爲使用了自適應的Fast R-CNN來進行人體部分的檢測,又使用ILP來進行多人的人體姿態估計,導致DeepCut的計算複雜度比較高。

DeeperCut 改進了:

(1)採用了Resnet來提高body part的檢測,更加的有效,精度更高;
(2)使用了image-conditioned pairwise 
terms可以將得到足夠豐富的候選區域節點壓縮到一定數量的節點,而這也是整個論文的核心部分,也是stronger & 
faster的主要原因。如下圖所示,即通過候選區域節點之間的距離來判斷是否爲不同的重要關節點。

è¿éåå¾çæè¿°

參考: 
DeepCut及DeeperCut:基於Tensorflow的人體姿態估計 
論文閱讀:Deepcut&Deepercut:Joint Subset Partition and Labeling for Multi Person Pose Estimation

4、AlphaPose
——來源:姿態估計相比Mask-RCNN提高8.2%,上海交大盧策吾團隊開源AlphaPose 
上海交通大學盧策吾團隊,今日開源AlphaPose系統。該系統在姿態估計(pose estimation)的標準測試集COCO上較現有最好姿態估計開源系統Mask-RCNN相對提高8.2%,較另一個常用開源系統OpenPose(CMU)相對提高17%。同時,盧策吾團隊也開源了兩個基於AlphaPose的工作:

(1)一個高效率的視頻姿態跟蹤器(pose tracker),目前姿態跟蹤準確率第一。
(2)一個新的應用“視覺副詞識別“(Visual Adverb Recognition)。
開源github:https://github.com/MVIG-SJTU/AlphaPose 
訓練框架:torch 
預測框架:tf+torch

交大MVIG組提出RMPE的兩步法框架(ICCV 2017論文),並基於此開發了AlphaPose這一人體關鍵點檢測系統。

RMPE框架採用自頂向下的方法,先檢測人,再去做姿態估計。該框架有三個主要組成部分:

首先是對稱空間變換網絡(Symmetric STN),用於解決傳統兩步法中的主要問題,即imperfect proposal的問題。對於質量較差的人體檢測結果,symmetric STN能夠自動調整proposal的位置,將refine過後的結果輸入單人姿態估計網絡,並將輸出映射回原空間,從而使得在人體檢測框不準確的情況下,姿態估計網絡依然能夠有良好的效果。


第二個組成部件爲由姿態引導的樣本生成器(Pose-guided Proposals Generator),該部件能夠根據不同人體姿態生成額外的detection proposal用於訓練姿態估計網絡,從而獲得大量符合真實測試場景數據分佈的訓練數據。


第三個組成部件爲參數化的姿態非極大值抑制器(Parametric Pose NMS)。傳統的兩步法中,人體定位框會有較多的冗餘檢測。作者通過使用新的姿態距離度量來比較姿態相似性,來消除冗餘姿態。


拓展:視覺副詞識別(Visual Adverb Recognition)
利用了姿勢(pose)信息的,使用表情信息, RGB 和光流信息。同時,他們構建了對應的數據集:ADHA,這一數據集標註了視頻中人物的位置、動作和可以描述這一動作的副詞,我們還爲數據用戶提供了人物的 tracking 結果。 
主頁(包括代碼):http://mvig.sjtu.edu.cn/research/adha.html
數據:http://mvig.sjtu.edu.cn/research/adha/adha.html 

è¿éåå¾çæè¿°

 

二、幾款相關比賽:

Multi-person

(1)MSCOCO 

è¿éåå¾çæè¿°

 (2) AI challenger 

è¿éåå¾çæè¿°

Single person

 

三、如何訓練
筆者這邊用的是:mattzheng/pose-tensorflow-detailed,還算好,原作中寫了用自己數據做訓練的方式, 
但是,mattzheng/tf-pose-estimation-applied 這個方法,原作用的是coco,封裝的太好。 
mattzheng/convolutional-pose-machines-tensorflow,別人用過,貌似也不錯的樣子。

這大兄弟在玩 AI challenger人體骨骼關節點賽題的時候,同樣自己訓練並開源出來。 
但是,該比賽的關鍵點只有:14個(參考:賽題與數據),該作者在生成時候(ai2coco_art_neckhead_json.py),拼湊成17個點,與coco一致,然後就可以完全使用coco框架訓練(多人模式),同時共享pairwise stat。 
該作者在比賽數據上當時迭代了60W次,最終的得分爲:0.36,而原來的coco數據集,多人關鍵點定位需要180W次。

筆者自己fork的幾個項目,只玩了兩個:

mattzheng/tf-pose-estimation-applied
mattzheng/AlphaPose
mattzheng/pose-tensorflow-detailed
mattzheng/Realtime_Multi-Person_Pose_Estimation
mattzheng/convolutional-pose-machines-tensorflow

--------------------- 
作者:悟乙己 
來源:CSDN 
原文:https://blog.csdn.net/sinat_26917383/article/details/79704097 
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!

以上內容來源於悟乙己 ,如有侵權,立刻刪除

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章