個heatmap,即為每個關鍵點預測一個heatmap 作為關鍵點的中間表示,heatmap上的最大值處即對應關鍵點的坐標。對於改種方法,heatmap的ground truth是以關鍵點為中心的二維高斯分布 (高斯核大小為超參)早期的工作如DeepPose多為直接回歸坐標,當下的工作多數以heatmap作為網絡的輸出,這種中間表示形式使得回歸結果更加精確。接下來我們介紹top-down發展過程中的一些landmark。
需要說明的是,CPM和Hourglass提出時主要面向的是單人姿態估計,因為當時還沒有COCO數據集,多使用MPII數據集進行evaluation。但top-down的方法本質上也是在解決單人姿態估計問題,所以將這兩個模型放在此處介紹。
CPMCPM,Convolutional Pose Machines,是2015年CMU的一個工作。這個工作提出了很重要的一點:使用神經網絡同時學習圖片特徵(image features)和空間信息(spatial context) ,這是處理姿態估計問題必不可少的兩樣信息。在此之前,我們多使用CNN來提取圖片特徵,使用graphical model或其他模型來表達各個身體部位在空間上的聯繫。使用神經網絡同時學習這兩種信息,不僅效果更好,而且使**端到端(end-to-end)**學習成為可能。
CPM是一個multi-stage 的結構,如下圖所示。每個stage的輸入是原始圖片特徵和上一個階段輸出的belief map,這個belief map可以認為是之前的stage學到的spatial context的一個encoding。這樣當前stage根據這兩種信息繼續通過卷積層提取信息,並產生新的belief map,這樣經過不斷的refinement ,最後產生一個較為準確的結果。
下面這張圖給出了一個具體的例子來強調spatial context的重要性,也展現了refinement的過程。在stage1時,錯誤的將right elbow定位到了right knee處;在stage2時,由於有了stage1提供的spatial context信息,我們根據right shoulder的位置能夠對right elbow的位置進行糾正,從圖中可以看到響應的峰值已經基本到了正確位置。在stage3時,stage2中一些錯誤的響應(left elbow、right knee)徹底被消除,right elbow的定位也更加精確。
這篇文章還提出了很重要的一點,就是通過intermediate supervision來解決梯度消失的問題 。由於我們的網絡可以包含許多個stage,隨著網絡的加深,梯度消失問題的出現導致網絡無法收斂。因此,在每個stage結束後我們給當前的belief map加一個監督,可以有效緩解梯度消失的問題,後面可以看到在multi-stage的網絡中這是比較常用的一種技巧。
HourglassHourglass也是一種multi-stage的結構,是2016年的一個工作,與CPM相比更加簡潔一些,如下圖所示。這個網絡由多個堆疊起來的Hourglass module組成(因為網絡長的很像多個堆疊起來的沙漏)。每個Hourglass module的結構都包含一個bottom-up過程和一個top-down過程 ,前者通過卷積和pooling將圖片從高解析度降到低解析度,後者通過upsample將圖片從低解析度恢復到高解析度。
每個Hourglass module的結構如下圖所示,其中每個box都是一個殘差結構。可以看到在top-down階段,對於兩個相鄰 解析度的feature map,我們通過upsampling(這裡用的是nearest neighbor upsampling)對較低解析度的feature map進行上採樣,然後通過skip connection 將bottom-up階段較高解析度的feature map拿過來,此時再通過element-wise addition將這兩部分特徵進行合併。通過這種方式,在top-down階段將不同解析度下的特徵逐步進行了融合。
總而言之,Hourglass最大的特點就是能夠提取並整合所有scale下的特徵 ,這種設計的出發點也是出於我們在姿態估計時對各個不同scale下特徵的需要。這種網絡結構在當時達到了很好的效果。
值得注意的是,Hourglass也使用了intermediate supervision,對於multi-stage的網絡這一點通常是必要的。
CPNCPN,Cascaded Pyramid Network,是2017年曠視提出的一種網絡結構,獲得了COCO 2017 Keypoint Benchmark的冠軍,網絡結構如下圖所示。這個網絡可以分為兩部分:GlobalNet和RefineNet,從名字也可以看出後半部分網絡是在前半部分的基礎上做refinement 。GlobalNet的作用主要是對關鍵點進行一個初步的檢測,由於使用了強大的ResNet作為backbone ,網絡能夠提取到較為豐富的特徵(在此之前的CPM、Hourglass都沒有使用,因此網絡的特徵提取能力較差),並且使用了FPN結構加強了特徵提取,在這個過程中像head、eyes這些簡單且可見的關鍵點基本能夠被有效地定位。而對於GlobalNet沒有檢測到的關鍵點,使用RefineNet進行進一步的挖掘,RefineNet實際上是將pyramid結構中不同解析度下的特徵進行了一個整合,這樣一些被遮擋的、難以定位 的關鍵點,根據融合後的上下文語境信息能夠更好的被定位到。
下面這張圖給出了一個例子(綠點表示ground truth),對於eye來說較容易定位,通過GlobalNet即可定位到。而對於hip來說,在原圖中被遮擋,僅僅使用GlobalNet難以直接精確定位。通過RefineNet將語境信息整合進來,才使得這些關鍵點被定位。
Simple BaselinesSimple Baselines,是2018年MSRA的工作,網絡結構如下圖所示。之所以叫這個名字,是因為這個網絡真的很簡單。該網絡就是在ResNet的基礎上接了一個head,這個head僅僅包含幾個deconvolutional layer ,用於提升ResNet輸出的feature map的解析度,我們提到過多次高解析度是姿態估計任務的需要。這裡的deconvolutional layer是一種不太嚴謹的說法,閱讀原始碼可知,deconvolutional layer實際上是將transpose convolution、BatchNorm、ReLU 封裝成了一個結構。所以關鍵之處在於transpose convolution,可以認為是convolution的逆過程。
從圖中看可以發現Simple Baselines的網絡結構有點類似Hourglass中的一個module,但可以發現:①該網絡沒有使用類似Hourglass中的skip connection;②該網絡是single-stage,Hourglass是multi-stage的。但令人驚訝的是,該網絡的效果卻超過了Hourglass。我個人認為有兩點原因,一是Simple Baselines以ResNet作為backbone,特徵提取能力相比Hourglass更強。二是Hourglass中上採樣使用的是簡單的nearest neighbor upsampling,而這裡使用的是deconvolutional layer,後者的效果更好(後面可以看到在MSRA的Higher-HRNet中依舊使用了這種結構)。
HRNetHRNet,是2019年MSRA的工作,網絡結構如下圖所示,這個網絡結構和之前的相比還是很novel的。我們知道,要想準確定位關鍵點,既離不開高解析度的表示,也離不開低解析度的語義信息。之前提到的幾種網絡結構也都著力於充分利用多個解析度的信息,但之前的網絡比如Hourglass、Simple Baselines,都是經歷了一個先bottom-up再top-down的過程,換言之,我們得到的高解析度的feature map都是從低解析度的feature map經過upsampling/deconvolution恢復過來的,這樣總會有一些潛在的信息丟失。HRNet的最大特點就是將不同解析度feature map之間的連接從串行改成了並行 ,從圖中可以清楚的看到,在整個過程中一直保持高解析度分支的存在,並且隨著網絡的深入,逐漸添加低解析度的分支,最後網絡結構就是同時保持多個解析度分支的並行網絡 。
此外非常重要的一點,從圖中我們也可以看到,為了使不同解析度之間的信息融合在一起,從而獲得包含多個解析度下信息的feature map,在相鄰的stage之間(每添加一個新的低解析度分支時視為一個新stage的開始)加了fusion 結構,fusion直觀上類似在兩邊的feature maps之間加了一個fc層,下採樣通過多個 卷積,上採樣就是簡單的nearest neighbor upsampling。這裡的融合就是簡單的累加。通過多次fusion,最後得到的feature map包含的信息是非常豐富的,也因此HRNet達到了很好的效果。
值得一提的是,MSRA後來在HRNet上做了一點微小的改動,稱為HRNetv2。HRNetv1輸出的feature map(heatmap)是最後一層最高解析度的feature map,HRNetv2輸出的feature map(heatmap)是最後一層所有解析度的feature map變換scale後concat在一起。之後他們將該任務應用到了object detection、semantic segmentation、facial landmark detection等其他多個任務上,在許多數據集上達到了SOTA。
MSPNMSPN,是2019年曠視的工作,網絡結構如下圖所示。此前我們介紹的網絡中,有single-stage的例如CPN、Simple Baselines,也有multi-stage的如CPM、Hourglass,理論上multi-stage的效果應該更好,但實際上在COCO數據集上single-stage的表現超過了multi-stage。MSPN沿用了multi-stage的思路,並做出了一系列改進,最終使得MSPN的效果超過了當前的single-stage網絡。
首先,對於每個stage的module,MSPN採用了前面提到的CPN中的GlobalNet(backbone為ResNet),當然這裡使用其他backbone也沒問題。其次,MSPN增加了跨階段的特徵融合,即圖中的黃色箭頭。由於經過反覆的下採樣-上採樣,會有不可避免的信息損失,故MSPN中將前一個stage下採樣和上採樣過程中對應解析度的兩個feature maps都連接過來,與當前stage下採樣的feature map進行融合,這樣當前stage得到的feature map就包含了更多prior information,減少了stage之間的信息丟失。此外,這種類似殘差結構的設計也有助於緩解梯度消失問題。最後,MSPN還採用了coarse-to-fine supervision ,我們知道姿態估計的ground truth是以關鍵點為中心的二維高斯分布,這裡的高斯核大小是一個超參數。直觀上來說,對於multi-stage網絡,隨著stage的增加,我們對keypoint的估計是一個coarse-to-fine的過程,這樣我們進行intermediate supervision的時候,可以將ground truth也設置成coarse-to-fine的heatmap,也就是前面stage的高斯核較大,後面stage的高斯核較小,隨著stage的增加要求關鍵點位置越來越精確。
Bottom-up前面我們提到諸多top-down的方法都是將多人姿態估計轉化為單人姿態估計問題,但在進行多人姿態估計時,top-down的方法有兩個缺點:①性能受到detector性能的影響 (雖然在CPN的論文中證明了當detector性能足夠好時提高detector的性能對最後的結果提高很微小);②運行時間隨著圖片中人數增加而增加 。而bottom-up的方法則是另一條思路:先檢測出圖中所有人的所有關鍵點,再對關鍵點進行分組,進而組裝成多個人。這種方法的好處是性能受人數影響較小,實際上bottom-up的速度往往會比top-down的更快,幾乎能做到real-time,在移動端部署的時候往往採用的也是bottom-up的方法。接下來介紹近年出現的一些有代表性的bottom-up的工作。
OpenposeOpenpose是2016年CMU的一個工作,獲得了COCO 2016 Keypoints challenge的冠軍,這個工作在後來產生了很大的影響,github上目前有15.8k個stars。下圖是openpose的pipeline,首先根據輸入圖片(a)生成一個Part Confidence Maps (b)和一個Part Affinity Fields (c):前者就是我們上文常提到的heatmap,用來預測關鍵點的位置;後者是本文的一個主要創新點)——PAF,PAF實際上是在關鍵點之間建立的一個向量場,描述一個limb的方向。有了heatmap和PAF,我們使用二分圖最大權匹配算法來對關鍵點進行組裝(d),從而得到人體骨架(e)。由於文字描述過於抽象,下面花一些篇幅引用原文中的一些數學表達形式來分別介紹這幾部分。
對於生成heatmap和PAF的部分,使用了下圖所示的網絡結構。首先 是初始的feature map,網絡的輸出是heatmap和PAF,分別用 和 表示,其中 是part(即上文中的keypoint,這裡遵循原文中的說法)的數量, 是limb的數量。 ,即第 個part對應的heatmap,每個pixel對應一個響應值,可以認為是概率值; ,即第 個limb對應的PAF,每個pixel對應一個二維向量,表示該pixel所在limb的方向。二者都是pixel-wise的。這裡借鑑CPM使用了多個stage不斷進行refinement ,後一階段的輸入是前一階段的 、 和初始的 的結合。
接下來需要說明heatmap和PAF的ground truth分別是怎樣的。heatmap和top-down中的類似,對於第 個人的第 個part,令其位置為 ,則ground truth是以 為中心的二維高斯分布,用 表示。在這裡由於一張圖片中有多個人,ground truth中的每個channel對應一個part,第 個part對應的ground truth為 , 表示單個位置,即對所有人該part的ground truth按pixel取max 。
PAF的ground truth則更加複雜,對於第 個人的第 個limb(連接關鍵點 和 ),ground truth用 表示。如果位置 在這個limb上, ,否則為零向量。這裡 實際上是 指向 的單位向量。那麼如何判斷一個位置 是否在當前limb上呢?只要 滿足:①在線段 上,②距離線段 在一個閾值範圍內(框處了一個矩形範圍),就認為 在該limb上。最後對於某個limb的所有,按pixel採用average 進行處理,即 ,這裡 為 位置處非零向量的個數,也就是只有非零向量才參與均值計算。此處用到的一些符號在圖中含義如下。
至於loss的計算,就是對每個stage的 和 分別計算L2 loss,最後所有stage的loss相加即可。同樣類似之前top-down中提到的,intermediate supervision有助於緩解梯度消失的問題。
現在我們有了heatmap,在heatmap上採用nms 可以為每個part找出一系列候選點(因為圖中有不止一個人,以及false positive的點),這些候選點之間互相組合能夠產生大量可能的limb,如何從中選出真正的limb,這就需要使用我們預測的PAF。首先定義兩個關鍵點 和 之間組合的權值 ,這裡 , 分別表示 的坐標。實際上就是對 和 間各點的PAF在線段 上投影的積分 ,直觀上說,如果線段上各點的PAF方向與線段的方向越一致, 就越大,那麼這兩個點組成一個limb的可能性就越大。
知道了如何計算兩個候選點之間組合的權值,對於任意兩個part對應的候選點集合,我們使用二分圖最大權匹配算法 即可給出一組匹配。但如果我們考慮所有part之間的PAF,這將是一個K分圖最大權匹配問題,該問題是NP-Hard的。因此我們做一個簡化,我們抽取人體骨架的一棵最小生成樹 ,這樣對每條樹邊連接的兩個part採用二分圖最大權匹配來求解,不同樹邊之間是互不幹擾的。也就是將原問題劃分成了若干個二分圖最大權匹配問題 ,最後將每條樹邊對應的匹配集合組裝在一起即可得到人體骨架。
上述即openpose的整個pipeline,雖然看起來比較複雜,但許多想法都是圍繞PAF展開的,畢竟PAF還是這篇文章最大的亮點。
Hourglass+Associative EmbeddingAssociative embedding,是一種處理detection+grouping任務的方法。也就是先檢測再組裝的任務,比如多人姿態估計是檢測出所有關鍵點再組裝成多個人體,實例分割是先檢測出所有像素點的語義類別再組裝成多個實例。往往這類任務都是two-stage的,即先detection,再grouping。這篇文章的作者提出了一種新的思路:同時處理detection和grouping兩個任務 ,這麼做的初衷是因為detection和grouping兩個任務之間本身密切相關,分成兩步來先後處理可能會導致性能下降。作者將該方法應用到了Hourglass上,在當時達到了多人姿態估計任務的SOTA。
在單人姿態估計時,我們網絡的輸出是m個heatmap,m表示關鍵點數量。現在在之前的基礎上多輸出了m個associative embeddings。Associative embeddings實際上是給heatmap的每個值都額外嵌入一個vector作為一個tag 用於標識所在的組,擁有相同tag的所有關鍵點我們將其劃分為一組,也就是屬於某一個人。下圖是Hourglass+Associative embedding的示意圖,Hourglass輸出了m個detection heatmaps(灰色)和m個associative embeddings(藍色),根據heatmaps上的響應值確定關鍵點的坐標,根據embeddings上的tag(下圖中不同tag用不同顏色表示)確定哪些關鍵點屬於同一個人。
現在我們考慮ground truth,對於heatmaps來說和之前一樣,不再贅述。對於embeddings來說實際上沒有ground truth ,因為tag的絕對值並不重要 ,只要保證同一個人的關鍵點tag相同,不同人的關鍵點tag之間互不相同即可。這裡需要說明的是,tag雖然是一個vector,但vector的維數並不重要,實踐證明1D vector已經足夠(即一個實數)。為了使tag滿足上述要求,我們需要設計一個loss來評價當前的tag是否符合實際的分組。用 表示第 個關鍵點對應的embeddings(tagging heatmap), 表示人的數量, 表示關鍵點數量, 表示第 個人第 個關鍵點的坐標。我們定義第 個人的參考embeddings為 ,則loss定義為 。loss的前半部分使同一個人的所有embeddings儘量接近 ,後半部分 使不同人的embeddings間隔儘量增大 。最後所有關鍵點的embeddings分布如下圖所示。inference時將距離小於一定閾值的embeddings分為一組即可。
HigherHRNetHigherHRNet,是微軟在HRNet之後延續的一個工作。前面我們提到過HRNet在top-down的方法中表現的很好,是因為這種並行的結構使得最後的feature map能夠包含各個解析度的信息,尤其是對高解析度信息保留的效果較之前提升尤為明顯。在bottom-up的方法中,作者認為有兩個問題需要解決:①scale variation ,即圖片中有各種scale的人,如果僅僅在一個解析度的feature map下進行預測,難以保證每個scale的人的關鍵點都能被精確預測;②精確定位small person的關鍵點 。之前一些網絡在推理時使用multiscale evaluation ,能夠緩解問題①,但仍然無法解決問題②,對small person的預測不夠精確。
HigherHRNet的思路是首先使用HRNet生成feature map(最高解析度分支),然後接一個類似Simple Baselines中的deconvolution層,生成一個更高解析度的feature map。顯然,更高解析度的feature map有助於更加精確地定位small person的關鍵點 (實踐證明接一層deconv. module足夠)。在訓練時,使用multi-resolution supervision ,即對原圖1/4和1/2大小的兩個feature map同時進行監督,這樣做是為了在訓練時就使網絡獲得處理scale variation的能力 ,1/4的feature map主要處理大一些的人,1/2的feature map主要處理小一些的人,而不是在推理時依賴multiscale evaluation處理scale variation的問題。在推理時,使用multi-resolution heatmap aggregation ,即將不同解析度的heatmap取平均用於最後的預測,也是為了處理scale variation。
前面僅僅討論了如何生成一個準確且scale-aware的heatmap,對於grouping採用的也是上文提到的associative embedding 。最後這個工作達到了SOTA,是目前bottom-up方法中性能最強勁的網絡之一。
參考文獻Convolutional Pose Machines, Wei etc, CVPR 2016Stacked Hourglass Networks for Human Pose Estimation, Newell etc, ECCV 2016Cascaded Pyramid Network for Multi-Person Pose Estimation, Chen etc, CVPR 2017Simple Baselines for Human Pose Estimation and Tracking, Xiao etc, ECCV 2018Deep High-Resolution Representation Learning for Human Pose Estimation, Sun etc, CVPR 2019Rethinking on Multi-Stage Networks for Human Pose Estimation, Li etc, Arxiv 2019Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields, Cao etc, CVPR 2017Associative Embedding: End-to-End Learning for Joint Detection and Grouping, Newell etc, NIPS 2017Bottom-up Higher-Resolution Networks for Multi-Person Pose Estimation, Cheng etc, Arxiv 2019