1. 程式人生 > >論文閱讀筆記: 2016 cvpr Convolutional Pose Machines(轉載)

論文閱讀筆記: 2016 cvpr Convolutional Pose Machines(轉載)

出自https://blog.csdn.net/u010579901/article/details/79606257


論文閱讀筆記: 2016 cvpr Convolutional Pose Machines

  部落格
  論文地址

  本部落格主要學習介紹2016 cvpr的一篇文章,這篇文章用於人的姿態估計,來自卡內基梅隆大學感知計算實驗室Carnegie Mellon University。


主要思想


  論文設計的網路分為多個階段(stage):前面階段使用原始圖片作為輸入,後面階段使用之前階段生成的特徵圖作為輸入,這樣做主要是為了融合空間資訊,紋理資訊。
  論文中,為了進一步提升精度,採用加大網路的感受野的方式來學習各個部件 parts 之間的空間幾何約束關係, 保證精度的同時考慮各個部件的遠距離關係.
  同時,網路採用全卷機網路(FCN), 可以 end-to-end joint training, 同時為了防止梯度消失, 在各個階段中新增監督資訊, 避免網路過深難以優化的問題.


演算法流程


  這裡講解一下整個演算法的流程。由於該演算法是針對姿態檢測的資料庫設計的,而姿態檢測資料庫中存在活躍標籤,即在多個人物中,最顯著的單人物標記。論文稱之為 center map。因此,網路考慮了 center map 的應用。
  首先,網路輸入影象特徵, 使用較小的感受野迴歸各個人的關節的點, 得到各個部件的 belief map 特徵譜。
  接下來,融合上一階段生成的特徵譜 belief map \ 中心譜 center map 以及輸入影象的影象特徵, 使用較大的感受野迴歸各個人的關節點,這裡就相當於融合了關節點的空間資訊,並且去除掉了其他人的響應, 從而輸出新的特徵譜 belief map.
  最後,在最後一個階段stage得到各個部件的特徵譜 belief map, 找出相應最大的點, 即為部件位置.


網路結構



  Stage 1 input是原始影象,經過全卷機網路,輸出是一個P+1層的2Dmap。其中,全卷積網路中有7個卷積層,3個池化層,原始輸入圖片是 368*368 ,經過3次池化後得到 46*46 大小。又因為這裡使用的資料庫是半身結構,只有9個關節點,因此加上背景,輸出的響應圖大小應該是 46*46*10。
  Stage 2 input是 Stage1 的 Output 響應譜,並且加上原始影象通過幾層網路後的特徵譜 feature map。輸出是一個P+1層的2Dmap。其中,stage 2 融合了三部分的資訊–一是stage1的響應圖,二是原始影象的影象特徵,三是高斯模版生成的中心約束。影象深度變為10+32+1 = 43。
  Stage 3 及其後面各個階段的網路結構和 Stage 2 相似
  為了防止訓練時出現梯度消失的問題:論文采用了中層監督(加入中層loss),加強反向傳播。

  注: 在cpm網路結構中,網路有一個格外的輸入: center map,center map為一個高斯響應。因為cpm處理的是單人pose的問題,如果圖片中有多人,那麼center map可以告訴網路,目前要處理的那個人的位置。因為這樣的設定,cpm也可以自底向上地處理多人pose的問題。


影象標籤:ground true


  論文是這樣生成 ground true的:在每個關節點的位置放置一個高斯響應,來構造響應圖的真值。對於一個含有多個人的影象,生成兩種真值響應,一是在每個人的相應關節位置,放置高斯響應。二是隻在標定的人的相應關節位置,放置高斯響應。
  
  由於第一階段只能考慮區域性特徵,故將每個人的相應關節位置用於第一階段網路訓練,標定的人的相應關節位置用於後續階段網路訓練。這部分操作由cpm_data層實現。即從標定的集合位置生成兩個label資料,分別傳給不同階段的loss層。


資料預處理


  為了獲得較好的測試結果,論文對輸入影象資料進行了資料增強操作。

  • 資料增強: 對原始圖片進行隨機縮放,旋轉,映象,僅僅在訓練時使用。這些操作在caffe層cpm_data中實現
  • 多尺度: 訓練時,通過cpm_data層對資料進行了尺度擴充。因此在測試時,直接從原圖生成不同尺度的影象,分別送入網路。將所得相應結果求和,將會獲得不錯的結果

  


資料集及實驗


  論文進行了相應的實驗,通過實驗證明,使用大的感受野具有的良好的效果.
  
  同時,隨著stage的增長,CPM會學習到parts之間的空間幾何約束關係來糾正容易出錯的情況.
  

  下面是論文使用的資料集,以及資料集的相關介紹。

    資料集     類別          部件數     訓練/測試樣本數
    FLIC        半身,影視       9           3987/1016
    LSP         全身,體育       14          11000/1000
    MPII        全身,日常       14          28000/

  
  • 1
  • 2
  • 3
  • 4

  下面這個圖是在不同資料庫上的相關比較結果。
  


程式碼實現


  該程式碼模型為OpenPose的前身,均來自卡內基梅隆大學感知計算實驗室Carnegie Mellon University. 實現了單人的姿態檢測, 效果還是不錯的.


Testing


  首先,從github上獲取對應程式碼,github程式碼
  從github上獲取了對應程式碼之後,需要配置caffe: Copy caffePath.cfg.example to caffePath.cfg and set your own path in it. 即把我們編譯的caffe路徑放進去。注意, 我們的caffe需要編譯matlab.
  配置好之後,就可以測試程式碼了。在測試程式碼之前,需要獲得訓練好的模型,在終端中輸入:

    sudo ./testing/get_model.sh

  
  • 1

  接下來,我們可以測試程式。其中,./testing/CPM_demo.m為測試程式,該程式指定測試圖片並且載入模型進行測試。測試結果如下所示:注意:需要用Matlab開啟執行檔案:
  


參考文章


  Convolutional pose machines