【姿態估計文章閱讀】Joint Training of a Convolutional Network and a Graphical Model for Human Pose Estimation

一、這是毫無疑問的大佬們的文章,2014年出就發佈了第一版本,代碼:https://github.com/max-andr/joint-cnn-mrf

二、文章的核心思想

       1、利用CNN做姿態估計,採用heatmap的方式來回歸出關鍵點

       2、利用人體關鍵點之間的結構關係,結合馬爾科夫隨機場的思想來優化預測結果,主要針對於網絡預測的false postive。

三、這是早期的deep learning應用到姿態估計文章,所以有比較大篇幅網絡模型設計,但是這部分的設計過程依然非常值得學習和思考,每一步都有講究,不是說說的那種,是理論結合實際出發提出的改進

       先來看看模型迭代的過程:

    1號模型:想要採用滑動窗口的方式,結合上多尺度(pyramid),這裏的LCN是local contrast normalized,這種拉普拉斯金字塔可以讓卷積核non-overlapping spectral content,從而降低網絡的redundancy(字打不出來了)。這種over-lapping的滑動窗口方式可以保留更多的內容,同時擁有“平移不變性”。

    2號模型:解決了1號模型利用滑動窗口計算上會比較慢的缺點,因爲巨大的redundant 卷積,而且同時期的一些研究工作證明了2號模型這種方式可以產生有效的dense feature map。

    3號模型:結合了1、2模型,3號模型的下半部分的步長直接等於1/2的原始大小,其他部分比較好理解,着重看“Interleaved”這部分,其實和另一個idea很像“pixel shuffle”,注意上面的每個顏色塊對應到前面的4個部分(1,1),(1,2),(2,1),(2,2),這樣可以提高空間上的精度吧。

    4號模型:依然是取代了滑動窗口,同時利用upscale把feature map大小提上來(對比與3號模型,在兩個分支的feature 融合之前)3號模型利用了類似“pixel shuffle”的方式來upscale,4號模型應該是直接上採樣,比如雙線性插值(這裏具體用的什麼方式,有人知道的話告訴我下)。

   大致的模型構建過程,在這裏就結束了。

四、第二大核心內容“Higher-Level Spatial-Model”

   這裏作者,通過驗證集發現,網絡預測heatmap存在着很多的false positive,而且姿態是不正確的(anatomically incorrect),這裏就是說,檢測器只是在檢測一個圖中相似的目標,沒有理解人的姿態這個核心思想,不懂什麼是姿態。但是並不能說,CNN在迴歸的過程中沒有參考“相關的關鍵點之間的聯繫”,因爲網絡的複雜結構,在擬合過程中很可能存在着比較弱的關聯性體現,對這部分的學習也比較弱,畢竟我們的label對於每個人都是一對點,沒有給出關聯性的體現

   我們也不難發現,頭部預測的peak出現在heatmap中的時候,其實肩部也會在附近。但是目前CNN可能對這部分沒有那麼好的直接進行學習,所以建立了“spatial model”進行優化,對於那部分false positive 進行移除。

   we start by connecting every body part to itself and to every other body part in a pair-wise fashion in the spatial model to create a fully connected graph.也就是說,構建的是全聯接的圖,同時每個點還有個自鏈接。

   那麼CNN直接回歸出heatmap,可以看成一堆的先驗概率,以及條件概率(因爲CNN預測的時候是一次性“同時”預測出n個關鍵點的概率,因此可以當成是條件概率,也就是在B出現的條件下A出現的概率)

                    

    上面這個公式是最終的概率。文章說了,對於FLIC這個數據集是來自於好萊塢的所以很多是正面的鏡頭,而且是站立的,因此能夠得到比較穩定的結構信息,空間概率推測信息,比如頭的左下部會出現右肩。但是對於LSP這個數據集變化較大,因此這個模型的效果也會相應被減弱。

   在實際應用中作者把大Z去掉了,有以下幾個原因:1、我們只關注heatmap上的極大值點,或者最大值點,這一個點,在預測過程中heatmap我們只是希望能夠更加接近標準正態分佈就行了;2、反向傳播的時候這個Z只會相當於在這部分的梯度上乘了一個係數而已;3、每個人並不是一定是完整的,所以也是無法規範化的。下面是改進後的公式(雖然不再是標準的馬爾可夫隨機場了,但是依然對於適合用於空間限制的編碼):

     the addition in log space means that the partial derivative of the loss function with respect to the convolution output is not dependent on the output of any other stages。這裏很多取巧的地方避免的訓練和回傳時候的梯度問題,保證空間連續可導,防止出現0之類。而且整個計算過程可以很方便的嵌入到深度學習框架中:

    這張圖也回答了我們,條件概率(e A|v),background 概率(b v->A)這兩部分是來自於網絡學習的,一開始看的時候以爲是通過統計得到的,後來發現這些全部都是通過網絡自己學習得到的。這裏卷積核也是非常大的,需要能夠去覆蓋“最大的兩個關鍵點之間的距離”,因此對於90x60的輸出,卷積核達到了128x128,這樣能覆蓋64個像素之內的關鍵點偏移,比如手腕到手肘(這裏卷積核爲什麼是偶數,我也不知道,當然是需要padding的,而且要用FFT的方式進行卷積計算,初始化也比較特別,The convolution weights are initialized using the empirical histogram of joint displacements created from the training examples.)。

 六、訓練

    先單獨訓練(單獨訓練,先訓練迴歸模型,然後再基於迴歸模型訓練空間模型),然後一起再微調。   Unified training of both models (after independent pre-training) adds an additional 4-5% detection rate for large radii thresholds.

   從這張圖,可以發現,空間模型,在eval的時候,閾值越小(要求離groundtruth越近)時,效果不明顯,這也和文章一開始預料的一樣,這個方法不是用來提升“本身以及比較好的那部分結果的”,而是用於糾正那部分“錯的比較明顯的那部分”。

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