【面試基礎--關鍵點檢測】深度學習關鍵點檢測方法發展概述

參考:

https://blog.csdn.net/sigai_csdn/article/details/80650411

https://blog.csdn.net/Anymake_ren/article/details/81978260

1. 導言
       人體骨骼關鍵點對於描述人體姿態,預測人體行爲至關重要。因此人體骨骼關鍵點檢測是諸多計算機視覺任務的基礎,例如動作分類,異常行爲檢測,以及自動駕駛等等。近年來,隨着深度學習技術的發展,人體骨骼關鍵點檢測效果不斷提升,已經開始廣泛應用於計算機視覺的相關領域。本文主要介紹2D人體骨骼關鍵點的基本概念和相關算法,其中算法部分着重介紹基於深度學習的人體骨骼關鍵點檢測算法的兩個方向,即自上而下(Top-Down)的檢測方法和自下而上(Bottom-Up)的檢測方法。

2. 人體骨骼關鍵點檢測概述

      人體骨骼關鍵點檢測即Pose Estimation,主要檢測人體的一些關鍵點,如關節,五官等,通過關鍵點描述人體骨骼信息;

                          

      人體骨骼關鍵點檢測是計算機視覺的基礎性算法之一,在計算機視覺的其他相關領域的研究中都起到了基礎性的作用,如行爲識別、人物跟蹤、步態識別等相關領域。具體應用主要集中在智能視頻監控,病人監護系統,人機交互,虛擬現實,人體動畫,智能家居,智能安防,運動員輔助訓練等等。

      由於人體具有相當的柔性,會出現各種姿態和形狀,人體任何一個部位的微小變化都會產生一種新的姿態,同時其關鍵點的可見性受穿着、姿態、視角等影響非常大,而且還面臨着遮擋、光照、霧等環境的影響,除此之外,2D人體關鍵點和3D人體關鍵點在視覺上會有明顯的差異,身體不同部位都會有視覺上縮短的效果(foreshortening),使得人體骨骼關鍵點檢測成爲計算機視覺領域中一個極具挑戰性的課題。

      多人人體骨骼關鍵點檢測主要有兩個方向,一種是自上而下,一種是自下而上,其中自上而上的人體骨骼關鍵點定位算法主要包含兩個部分,人體檢測和單人人體關鍵點檢測,即首先通過目標檢測算法將每一個人檢測出來,然後在檢測框的基礎上針對單個人做人體骨骼關鍵點檢測,其中代表性算法有G-RMI, CFN, RMPE, Mask R-CNN, and CPN,目前在MSCOCO數據集上最好的效果是72.6%;自下而上的方法也包含兩個部分,關鍵點檢測和關鍵點聚類,即首先需要將圖片中所有的關鍵點都檢測出來,然後通過相關策略將所有的關鍵點聚類成不同的個體,其中對關鍵點之間關係進行建模的代表性算法有PAF, Associative Embedding, Part Segmentation, Mid-Range offsets,目前在MSCOCO數據集上最好的效果是68.7%。

      接下來的介紹,分爲經典的單人人體關鍵點檢測模型自上而下的人體骨骼關鍵點定位算法以及自下而上的人體骨骼關鍵點定位算法

3. 單人人體關鍵點檢測模型

      2015年之前都是直接回歸出關節的座標(Deep pose),效果並不理想。其主要原因有兩方面:一方面是人體運動比較靈活,另一方面,迴歸模型的可擴展性較差,比較難於擴展到不定量的人體姿態識別問題中。因此,目前大家普遍使用的過渡處理方法是將其看作檢測問題,從而獲得一張heat map。

[1] Convolutional Pose Machines CVPR 2016

源碼:https://github.com/shihenw/convolutional-pose-machines-release

參考博客https://blog.csdn.net/shenxiaolu1984/article/details/51094959

COCO2016 Keypoints Challenge的冠軍。

                         

      2016 年提出的 CPM 方法具有很強的魯棒性,CPM 的貢獻在於使用順序化的卷積架構來表達空間信息和紋理信息。算法在每一個尺度下,計算各個部件的響應圖,對於每個部件,累加所有尺度的響應圖,得到總響應圖,在每個部件的總響應圖上,找出相應最大的點,爲該部件位置。作者用各部件響應圖來表達各部件之間的空間約束,模型能有效解決遮擋問題。

[2] Stacked Hourglass Networks for Human Pose Estimation

源碼:https://github.com/umich-vl/pose-hg-train

      16,17年之後出現的大多單人姿態估計算法都是基於這個模型結構進行改進。MPII2016冠軍。

                       

      一種沙漏型的網絡結構,首先進行卷積處理,並進行下采樣操作,獲得一些分辨率較低的特徵,從而使計算複雜度降低。爲了使圖像特徵的分辨率上升,緊接着進行上採樣。上採樣操作使得圖像的分辨率增高,同時更有能力預測物體的準確位置。通過這樣一種處理,相較於其他網絡,該網絡結構能夠使同一個神經元感知更多的上下文信息。作者提到在12 GB NVIDIA TitanX GPU 訓練用時3天,每一幅圖片前向運算用時75ms,每一副圖片測試用時130ms,比CPM方法有顯著優勢。

4. Top-down
[1] G-RMI Towards accurate multi-person pose estimation in the wild (CVPR 2017 Google)

      論文采用top-down的結構,分爲兩個階段: 第一階段使用faster rcnn做detection,檢測出圖片中的多個人,並對bounding box進行image crop; 第二階段採用fully convolutional resnet對每一個bonding box中的人物預測dense heatmap和offset;最後通過heatmap和offset的融合得到關鍵點的精確定位。

                                                            

[2] MASK-RCNN (ICCV 2017, Facebook,Kaiming He)

      2017年何凱明的Mask R-CNN,Mask R-CNN 是用於目標檢測分割的框架,即對一張圖片,既輸出圖片中已有的目標,還能爲每一個實例生成一個高質量的分割掩碼。mask RCNN是在 faster R-CNN 的基礎上,在每一個 RoI 都增加一個預測分割的mask,這和分類以及 bounding box 迴歸是並行的一條分支。它的訓練簡單,僅僅比 faster RCNN多一點計算開銷。它易於泛化到多個任務上,例如人體姿態估計。應用到pose estimation,將分割系統中的目標改爲K個one-hot,m*m的二進制mask。準確率比COCO 2016 冠軍高0.9個點,速度達到5 FPS。

                                                

[3] RMPE: Regional Multi-Person Pose Estimation (ICCV 2017)

AlphaPose:上海交大盧策吾團隊和騰訊優圖工作,COCO2017 Keypoints Challenge亞軍。

      論文主要考慮的是top-down的關鍵點檢測算法在目標檢測產生Proposals的過程中,可能會出現檢測框定位誤差、對同一個物體重複檢測等問題。檢測框定位誤差,會出現裁剪出來的區域沒有包含整個人活着目標人體在框內的比例較小,造成接下來的單人人體骨骼關鍵點檢測錯誤;對同一個物體重複檢測,雖然目標人體是一樣的,但是由於裁剪區域的差異可能會造成對同一個人會生成不同的關鍵點定位結果。本文提出了一種方法來解決目標檢測產生的Proposals所存在的問題,即通過空間變換網絡(STN)將同一個人體的產生的不同裁剪區域(Proposals)都變換到一個較好的結果,如人體在裁剪區域的正中央,這樣就不會產生對於一個人體的產生的不同Proposals有不同關鍵點檢測效果。檢測使用的是SSD-512,識別人體姿態使用的是Stacked Hourglass方法。網站掛出來的在各個數據集的評測結果比論文好很多,應該是後來調整的。已經開源了,不過速度只有5fps,實時的版本還沒有出來。

[4] Cascaded Pyramid Network for Multi-Person Pose Estimation

      曠視提出來CPN模型,COCO2017 Keypoints Challenge的冠軍,目前COCO榜單也是最好的。

      先生成人體邊界框,利用mask-rcnn的detection結構檢測人體(FPN+ROIAlign),之後通過CPN實現關鍵點檢測。有效的級聯金字塔網絡CPN包括GlobalNet和RefineNet兩部分。GlobalNet是特徵金字塔網絡,可以定位簡單的關鍵點,如眼睛和手,雖然無法識別被遮擋的關鍵點,但是可以提供上下文信息,用於推斷被遮擋的關鍵點。RefineNet通過整合GlobalNet所有級別的特徵來處理比較難識別的關鍵點。

                          

      該網絡以ResNet50作爲骨架網絡在8卡Titan上要訓練1.5天。利用ResNet-Inception作爲骨架網絡,在COCO test-dev數據集上取得了極好的效果,遠超OpenPose和Mask-RCNN。文章沒有提到速度,想必速度沒有5fps。(MASK RCNN直接進行人體姿態估計5fps)。

5. Bottom-up
[1] open-Pose:Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields (CVPR 2017 Oral, CMU)

      Part Affinity Fields(PAF)能夠針對多人做到實時檢測,它採用的卻是Bottom-up的方法,網絡框架分爲兩路;一路使用 CNN,根據置信圖進行關節點預測,另一路使用CNN 獲得每個關節點的 PAF,PAF 可以看作是記錄 limb 位置和方向的 2D 向量。兩路進行聯合學習和預測。最後就是如何將這些節點兩兩連接不重複,這轉換爲圖論問題。

      評測數據集:COCO 2016關鍵點檢測數據集+MPII。對於MPII多人pose,本文無論是準確度還是精度上都有質的飛躍。對於一個含有19個人的video,速度可以達到8.8fps。目前開源最好的demo效果可以達到15fps。

[2] Joint Multi-Person Pose Estimation and Semantic Part Segmentation ( ICCV 2017, UCLA)

      論文對人體進行不同部位分割,而關鍵點都落在分割區域的特定位置,通過部位分割對關鍵點之間的關係進行建模,既可以顯式的提供人體關鍵點的空間先驗知識,指導網絡的學習,同時在最後對不同人體關鍵點進行聚類時也能起到相應的連接關鍵點的作用。該方法耗時太久,一張圖片用時8s。

[3] Associative Embedding (Associative Embedding:End-to-End Learning for Joint Detection and Grouping) (rejected by ICCV2017 , UMICH Jia Deng)

MPII總體評價精度上榜首位置。論文提出了一種single-stage,將檢測和分組合併到一個過程,end-to-end的關節點檢測和分組方法,這不同於以往的multi-stage的關節點檢測方法。基本方法是在檢測環節直接給檢測結果編號,表明它屬於哪個物體,所得到的這些編號標籤就代表了分組。因爲這重新將神經網絡回到了黑盒時代——讓神經網絡去得到準確的編號標籤,所以在訓練的時候需要特別設計loss function,促使統一物體有相同標籤,不同的物體不同。因爲ground truth中並沒有現成的這種標籤,所以不用在‘標籤號大小’上對ground truth負責。而且重點不是標籤的大小,而是保證他們是不同的就好了,所以網絡可以自己決定標籤號大小,只要符合ground truth分組。在多人姿態識別時,用到了堆疊Hourglass網絡的方法,由此產生每一個關節的位置heatmap和關節點的標籤heatmap,然後將關節使用相同標籤分組。文章沒有提到速度。

總結
      目前單人的姿態識別技術已經很成熟,由於一張圖只含有一個人,所以用時來說100ms左右。Open-pose的CPM模型採用的大卷積核來獲得大的感受野,對於推斷被遮擋的關節是很有效的,實現起來簡單,只不過速度略慢一點。單人方法可以考慮CPM。

      多人的姿態識別top-down的方法總體來說效果好於bottom-up的方法,而bottom-up的速度明顯要優於top-down。取捨的話,Openpose是一個不錯的選擇。商用的話,感覺提速是必須的一個過程。

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