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

論文閱讀筆記: 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/

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


代碼實現


  該代碼模型爲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

  接下來,我們可以測試程序。其中,./testing/CPM_demo.m爲測試程序,該程序指定測試圖片並且加載模型進行測試。測試結果如下所示:注意:需要用Matlab打開運行文件:
  


參考文章


  Convolutional pose machines

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