當前位置: 華文星空 > 知識

[浙大、商湯、ECCV2020] 多人絕對距離姿態估計

2021-07-02知識

最近忙找工作,一直沒更新文章。。。

本文連結:https:// arxiv.org/pdf/2008.1146 9.pdf

首先介紹一下問題背景:

多人絕對距離姿態估計是人體姿態估計裏一個比較特殊的分支,其特殊之處在於對於圖片中的人體,不光要輸出單位為毫米的三維姿態,還要給root節點分配一個距離相機的距離。我們知道,單張圖片求解深度距離是一件非常困難的事情,一般來說,我們需要人的真實尺寸以及圖中的尺寸資訊和相機的內參。但是在實際使用的時候,相機內參並不容易獲取,且由於場景的多樣性,導致數據域和訓練時可能大不一樣。

本文貢獻:

提出了一種3D人體絕對距離姿態估計的方法,透過監督2D關鍵點+PAF(Openpose的方法)、根節點深度、和身體部份相對深度來解決該問題。

下面直接上pipeline圖:

藍色的部份是Stacked Hourglass,然後在Stacked Hourglass每一個模組之後將原來的關鍵點熱力圖給擴充成N個關鍵點熱力圖+2(N-1)個PAF+(N-1)個相對深度圖+1個關鍵點深度圖。

接下來分析損失函數:

Loss Func分為三個部份,第一個部份是2D關鍵點相關的,即監督關鍵點熱力圖和PAF,第二個部份是各個關鍵點相對root深度,最後一個是root點深度。

在這個基礎上,為了易於訓練,本文歸一化了兩個參數,1. 預測根節點深度, 2. 最大骨長限制。

根節點深度的歸一化比較神奇,一般來說焦距(focal length)的單位是毫米,但是本文使用的焦距單位是像素(pixel),經過搜尋,我找到了這樣的解釋:

但是顯然CCD_SIZE在數據集裏面是沒有的(至少Human3.6M沒有),所以文中Human3.6M的結果不知道是不是隨便給的一個CCD_SIZE算出來的。

第二個歸一化的參數是骨長限制,這個就是經驗了。

關於本文其實存在一點不太清楚的地方:

  1. 關於深度的熱力圖是怎麽構建出來的,如果和關鍵點一致,感覺上只有數值不同,那為什麽不直接輸出數值,一下子能省64*64*(N-1)的空間。
  2. 深度是怎麽監督的?註意到損失函數第三項是取對應位置的深度值做監督,但是訓練過程中這樣做非常耗時,而且存在一個監督訊號稀疏的問題。

經過程式碼的一個閱讀,我得到了答案。

首先是以像素為單位的焦距,其實仔細看上圖,是直接把以毫米為單位的焦距和它進行數值上的等同的。所以直接用就好。

其次是深度的熱力圖,這個地方我想復雜了,實際上只需要在生成標簽的時候,把root的位置移動到最近的格點(這麽做比較糙)就可以了,然後訓練的時候直接監督對應的熱力圖位置的值。