【姿態估計文章閱讀】Human Pose Estimation with Iterative Error Feedback【這篇文章看的雖然有點迷糊,但是最後有一點很重要,自適應scale】

         

一、這是伯克利的大哥哥們在2016年發的一篇文章,也算是CNN的姿態估計,上升比較快的那幾年。

二、其實核心思想很像GBDT,一步步的去擬合殘差。但是,不一樣肯定是不一樣的!放一張好看的圖,GBDT的。

                         

      主要貢獻:

       1、提出一種自我修正的模型

       2、傳統模型映射是建立在“從input到output”的,本文把input和output這兩個空間融合在一起~~~有點不太明白這個說法的含義。Here we propose a framework that expands the expressive power of hierarchical feature extractors to encompass both input and output spaces, by introducing top-down feedback. 我感覺這裏最重要的就是這個自頂向下吧!從最優預測,一步一步反向傳回最處預測(coarse)。coarse to fine,反向傳播 fine to coarse。

三、核心思想解讀---自我修正模型

      其實還是比較容易一下子看明白的。這個模型的輸入是[Image,n*heatmap]利用f(),這個f()其實也就是ConvNet,得到預測修正e1,從而可以吧y0+e1=y1。這個g()就是個座標轉2d 高斯圖的生成函數,把y1變成h1,這樣一次循環就完成了。注意f()不是預測heatmap的而是預測,對於輸入的heatmap的修正結果的。

     當然,這個ConvNet作者採用的是GoogLeNet,並且預測結果不是heatmap而是直接回歸座標的修正值,作者對GoogLeNet修改如下,第一層擴充爲20個通道,前三個通道依然採用預訓練參數,後17個通道隨機初始化;最後一層1000個節點的分類層去除,改爲32個節點的層(對應16個座標)(第17個關鍵點是什麼?就是一個人物中心位置

      問題1:修正結果的label如何產生?

                  

                       

                     

       看到這裏,其實本文的整個結構,是對初始姿態的一個修正,這個修正操作通過預測的殘差(偏移量)來體現,也就是每次循環都是對上一次關鍵點的一次移動!那麼公式中爲什麼有個大L,L是loss上界,文中設置爲20個像素,其實也就是限制了每次循環的最大修正係數!

           We initialized y0 as the median of ground truth 2D keypoint locations on training images and trained a model for T=4 steps ,using N=3 epochs for each new step. We found the fourth step to have little effect on accuracy and used 3 steps in practice at test time.

      問題2:爲什麼不直接用輸出的heatmap,反而要重新用g()函數生成heatmap?

      如果直接預測一個heatmap迴歸的話有以下問題:1、可能當年這個方式不流行;2、需要更小的pooling,更大的計算量,更大的顯存;3、那麼每次修正的殘差如何產生?用什麼來表示一種偏移?G-heatmap 與 預測heatmap 直接做差?還是什麼方式能夠體現出“偏移”?

     用g()生成的每次都是標準的高斯正態分佈!其實比網絡預測的heatmap更加規範,對於ConvNet輸入的數據更加規範!

      問題3:這樣做和直接從圖片預測heatmap的區別是什麼?或者爲什麼不直接預測yt,而是預測一個殘差?

      作者說了:The motivation for modifying yt by a bounded amount is that the space of xt is typically highly non-linear and hence local corrections should be easier to learn。輸入空間是個典型的高維非線性,直接預測比局部修正更加困難。(這裏我感覺思想上可以參考傳統機器學習中的一些方法,“提升方法”,直接學習一個強分類器比較困,因此可以集成弱分類器,結合上殘差學習達到更好的效果)。

       其實看了這張圖之後,應該對於模型的整個計算過程有比較深入的瞭解,輸入是image 結合 初始姿態的heatmap,每次只能修正一定距離,這個和修正公式中的L其實相關,當然這麼設計也是爲了:1、減輕網絡的難度;2、感受野有限;3、模型能力有限,不用追求一次到完美,可以多次;4、讓模型一步一步修復,一步一步的去超正確的位置移動對應的點,這個更是我們想要的效果。

    問題4:第17個關鍵點?

     An additional marking-point in each person is available both for training and testing, lo- cated somewhere inside each person’s boundary.我理解就是這個MPII數據集提供的每個人物的中心,因爲這個是個多人數據集,他提供了每個人的scale以及中心,我記得不提供bbox,因爲可以通過人物中心和scale大致從圖中挖出每個人。作者在訓練和測試的時候帶上這個信息,其實能讓模型更加註重的去迴歸目標人物!因爲圖中還存在背景人物。

四、實驗

   對比實驗1:迭代/單次 預測的對比(這裏預測的都是“最終座標”,並且輸入只有圖片沒有heatmap),從而體現出循環的加之錯在:

   對比實驗2:    直接預測 與 誤差預測 兩種方式的對比,也可以從上面這張圖重看出來,迭代“直接”預測 甚至不如單次“預測”!!!當然對比與“誤差預測”都是比不過的!

    這裏給我們一個思考:CPM,hourglass這類的模型都是stack的,但是從他們實驗上“是有提升的”(迴歸heatmap);但是爲什麼在這裏卻沒有提升(迴歸座標)?我心中的答案是這樣的:因爲在CPM和hourglass之類的模型中,每個stage不存在參數共享,那麼每個stage在訓練中慢慢定下來自己的函數內容(比如第一個stage解決大致位置,後續微調,所以在CPM中有人對比出來其實3個stage就差不多了);但是在本文中,每個stage參數貢獻,第一個stage進行大scale的修復,後續的很難表現爲進行小scale修復或者微調;從而在進行Iterative Error Feedback的時候,之所以可以“參數共享不同stage”,因爲設定了每個stage的修復上限“之前提到的L”。

對比實驗3: 直接訓練迭代的模型,還是單獨訓練每個stage,然後疊在一起?

   對比實驗4: 結構學習,就是在每次預測時候輸入中,加入哪些heatmap,以及效果對比。

 

               

 

    

 

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