【姿態估計文章閱讀】Efficient Object Localization Using Convolutional Networks【大佬文,每一個實驗都值得一看】

一、這是大佬們的一篇文章,算是比較早的利用CNN預測heatmap來做姿態估計的文章,上傳時間2015年。

二、這篇文章的核心思想:

       1、pooling層能爲網絡增強一些“局部不變性”、“旋轉不變性”之類的能力,也能降低參數等種種優點的同時對於迴歸heatmap的任務卻會帶來location的精度損失。因此提出了一種新的結構,用於彌補pooling的負效應,“position refinement”。這種結構有點像RCNN的二級結構。

       2、當然一個貢獻是不夠的,因此文章中的另一個大貢獻是“SpatialDropout”

       3、多分辨率輸入,這個的話,看到結構圖應該就很好理解,在圖像分類中也有這麼做的

三、先來說說什麼是“SpatialDropout”與“Multi-resolution”

                        

      圖3是標準的dropout,正如我們所知dropout有着很多優點:通過每次隨機抑制部分神經元,防止過擬合;有點類似多模型融合從而在測試時候能夠提升模型效果;

      圖3,可以看出在進行反向傳播的時候,W2的中心位置的梯度只能收到一個f2a的,f2b被抑制爲0了,但是因爲傳統的分類任務中,我們不關注空間點與點之間的關聯性,我們只關注核心特徵是什麼無所謂在哪裏,而且我們把相鄰的輸出近似當作差不多相等的。

      但是放眼圖像的空間迴歸問題中,這麼做存在兩個問題:1、我們關注某個特徵的location問題,點與點之間存在很強的關聯,性,繼續這樣做無法迴歸出準確的位置,因爲我們抑制了部分的梯度。2、作者在文章中說了,最開始確實擦用了這種dropout但是除了增加訓練時間,沒有其他收益。

      從而提出了“SpatialDropout”:

             

   其實就是正對整個channel而言的dropout,而不是在2d的feature map上去隨機抑制,採用了去抑制整個feature map。至於效果“We have found this modified dropout imple- mentation improves performance, especially on the FLIC dataset, where the training set size is small.”(這裏特別注意where the training set size is small,不知道在大數據集上這個操作如何了)。

   這個結構放在哪裏呢?如下結構圖,這個圖也同時展示了“多分辨率輸入”

    

   這個結構一目瞭然,不過多解釋了,有問題可以留言哈。

四、新的網路結構(級聯結構)

     “三” 裏面的最後的那個網絡結構圖,只是第一部分,也是比較樸素的迴歸方式,接下來這個圖是本文模型結構:

     第一部分的“Corase Heat-Map Model”就是“三”結尾那個圖,很好理解。利用Corase Heat-Map預測每個關鍵點的大概位置,然後去剪裁(直接在不同層的feature map上剪裁---這裏是不是很類似於目標檢測中的FPN?),每個關鍵點都重複這個操作,這個子模型一次只預測一個heatmap,運行“關鍵點個數”次,就能得到每個關鍵點在小圖中的預測位置,然後結合上原始的“Corase Heat-Map”的預測就是最終結果。

     子模型(Siamese Model):子模型就是一個網絡,每次都要把子模型運行n次(n就是關鍵點個數),這也就是文章中所說的”子模型共享權重“的意思,因爲畢竟這些子模型的任務都是去利用經過篩選的feature maps的區域去預測一個最高響應,所以無所謂具體去預測什麼關節了(也就是類別),類別信息在”Corase HeatMap Model“預測結果中已經包含了。

   當然這個“級聯結構的模型”是可以端到端的訓練的,作者在文章中也解釋了,對於來自sub network的梯度只要對應到crop的來源那部分去就可以了“output gradients from the cropped image are simply added to the output gradients of the convolution stages in the coarse heat-map model at the sampled pixel locations.”

   但是作者在4.2章講訓練的時候好像是分開訓練的,也就是先訓練Coarse model然後固定這部分的參數,去練後fine model。

五、其他內容和訓練細節,非常牛逼的細節

   作者提到了,其實標註是不規範的,也是存在歧義的,主要表現爲關鍵點的標註很難具體的說到底在哪個點?如下圖所示是作者們自己進行的實驗,請了13個人對數據集中隨機的10章圖像進行標記:

                   

    接下來,不得不說大佬就是大佬,用這個標註數據去計算了標準差,對於每個關節就能產生自己的sigma了!!!解決了我一直不知道sigma怎麼設置這回事!

      大佬利用“Coarse Model”建立在8x pooling基礎上進行實驗發現:誤差基本在-4像素到+4像素之間,這麼以來人工標註的誤差和數據集本身的誤差基本上是吻合的。(給大佬跪了) 這個圖說明了“單純使用Coarse Model”會放大誤差範圍,“提出的級聯模型”確實更加貼近人類的真是誤差。

      

    對於pooling會帶來精度損失的實驗:

                       

    圖中x座標代表了距離在多少閾值內這個關節點算正確找到,可以明顯的看出距離越大(條件越寬鬆)結果越好,從結果上看4x和8x的pooling結果上差不多,4x略好些,16x最差。(估計是這個原因,所以很多後來的圖像工作中分割任務和pose estimation都採用的 8x 或者 4x)。這個圖的實驗是直接在“Coarse model”上的。

    “級聯模型”針對pooling帶來的負效應,對於“Coarse Model”帶來了顯著的提升,腕關節屬於困難檢測點,因爲通常存在很多變數,穿衣服,遮擋,需要更多的骨架結構信息作爲支撐,這樣話“Coarse Model”的預測結果會更加不可靠,同時,對於子模型而言也比較困難直接從crop的部分來預測“腕關節”

                     

   

    文章還對比,crop的源來自feature map和 image,以及是否使用spatialDropout:

                               

    當然對於“Coarse Model”作者也和前人的工作進行了比較,結果依然是本文的工作擁有最好的效果:

    

        文章同時也對比,是否進行尺度歸一化,以及在訓練和測試階段什麼時候進行尺度歸一化,這裏尺度歸一化代表了利用MPII數據集提供的人物尺度進行規範化,可以保證每個人物出現在網絡輸入中的大小差不多,可以發現還是有很大的影響的。in standard evaluation practice the query image is scale normalized so that the average person height is con- stant, thus making the detection task easier

 

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