來自雲從科技和上海交通大學的研究者近期提出一種新型框架 DenseBody,可直接從一張彩色照片中獲取 3D 人體姿勢和形狀。該研究設計了一種高效的 3D 人體姿勢和形狀表示,無需中間表示和任務,端到端地實現從單個影像到 3D 人體網格的生成。
多年以來,如何從單一影像估計人體的姿勢和形狀是多項應用都在研究的問題。研究者提出不同的方法,試圖部分或者聯合地解決此問題。本文將介紹一種端到端的方法,使用 CNN 直接從單個彩色影像重建完整的 3D 人體幾何。
該領域的早期研究使用迭代優化方法從 2D 影像估計人體姿勢和形狀資訊,一般通過不斷優化估計的 3D 人體模型來擬合一些 2D 的觀測結果,比如 2D 關鍵點 [4] 或者輪廓 [11]。
隨著深度學習的崛起,很多研究試圖用 CNN 以端到端的方式解決該問題,其中有些已經達到了更好的效能和更快的執行速度。但是,用 CNN 直接預測完整的人體網格並不簡單,因為訓練這樣的模型需要大量的 3D 標註資料。
近期研究大都結合了某些引數化的人體模型,如 SMPL [13],轉而去預測這些模型的引數 [9]。[22,27] 藉由關節或分割輸出的幫助改善效能。這種基於模型的 3D 表示形式將 3D 人體形狀限制在低維線性空間裡,使其更容易通過 CNN 模型學習,但由於線性模型的限制,其效能可能無法達到最優。
[39] 提議使用一種體積表示(volumetric representation)來估計人體形狀,展現了一定的優點,在此過程中預測的 3D 關節位置被作為中間結果輸出。
雖然 3D 表示有多種選擇,但近期基於 CNN 的方法大都依賴於某些中間 2D 表示和損失函式來引導訓練過程。
在這些方法中,單個 RGB 影像到 3D 人體網格的對映問題被分解為兩步:首先得到某些型別的 2D 表示,比如關節熱圖、掩碼或 2D 分割;然後基於這些中間結果預測 3D 表示 [16,5]。這些研究所選擇的中間表示以及解決這些子任務的神經網路的輸出質量,很大程度上會影響它們的最終效果。
雲從科技的這項研究提出了一種高效的方法,從單個 RGB 影像中直接得到完整的 3D 人體網格。
這個方法和其他研究的主要區別有以下兩個方面:首先,該研究提出的網路沒有結合任何引數化的人體模型,因此該網路的輸出不會受到任何低維空間的限制;其次,該方法的預測過程是一步到位的,沒有依賴於中間任務和結果來預測 3D 人體。該研究在多個 3D 人體資料集上評估了這一方法,並將其與之前研究中的方法做了對比。
評估結果表明該方法的效能遠超其他結果,且執行速度更快。
該研究的主要貢獻如下:
提出了一個端到端的方法,從單個彩色影像直接得到 3D 人體網格。為此,研究者開發了一種新型 3D 人體網格表示。它能夠把 2D 影像中的完整人體編碼為姿勢和形狀資訊,無需依賴任何引數化的人體模型。
把 3D 人體估計的複雜度從兩步降到了一步。該研究訓練了一個編碼器-解碼器網路,可直接把輸入 RGB 影像對映到 3D 表示,無需解決任何中間任務,如分割或 2D 姿態估計。
進行了多次實驗來評估以上方法的效果,並與現有的最優方法進行對比。結果顯示,該方法在多個 3D 資料集上實現了顯著的效能提升,執行速度也更快。
圖 1:示例結果。
論文:DenseBody: Directly Regressing Dense 3D Human Pose and Shape From a Single Color Image
論文地址:https://arxiv.org/pdf/1903.10153.pdf
摘要:由於人體的高度複雜性和靈活性,以及 3D 標註資料相對較少,從 2D 影像得到 3D 人體姿勢和形狀可謂是一個難題。之前的方法大體上依賴於預測中間結果,比如人體分割、2D/3D 關節、以及輪廓掩碼,將當前問題分解成多個子任務,從而利用更多 2D 標籤或者結合低維線性空間內的引數化人體模型來簡化問題。
在本文中,我們提出使用卷積神經網路(CNN),直接從單個彩色影像得到 3D 人體網格。我們設計了一種高效的 3D 人體姿勢和形狀表示,可以通過編碼器-解碼器結構的神經網路學習獲得。實驗表明我們的模型在多個 3D 人體資料集上達到了當前最優效能,同時執行速度更快。資料集包括 Human3.6m、SURREAL 和 UP-3D。
3. 本文提出的方法
3.1 3D 人體表示
之前的研究通常使用 SCAPE 和 SMPL 這樣的可變形模型和體素來表示 3D 人體幾何結構。本文提出的方法則用 UV 位置對映圖來表示 3D 人體幾何結構,其有如下優點:首先,它能儲存點和點之間的空間鄰接資訊,相比一維的向量表示,該資訊對精確重建更為關鍵;其次,相比體素這樣的 3D 表示,它的維數更低,因為體素表示法中,大量不在表面上的點其實用處不大;最後,這是一個 2D 表示,所以我們能直接使用現成的 CNN 網路,例如 Res-net 和 VGG,使用計算機視覺領域的最新進展。
在人體重建領域,UV 對映圖作為一種物體表面的圖片表達方式,經常被用來渲染紋理圖。在這篇論文裡,我們嘗試使用 UV 對映圖來報答人體表面的幾何特徵。大多數的 3D 人體資料集提供的三維標註是基於 SMPL 模型的,SMPL 模型本身提供了一個自帶的 UV 對映圖,把人體切分成了 10 個區域。
DensePose 裡面提供了另一種人體切分的方式,並提供了一個 UV 對映圖,將人體切分成了 24 個區域。我們實驗了兩種切分方式,SMPL 的 UV 對映圖獲得了更好的實驗結果。因此,在我們的方法中,我們採用這個 UV 對映圖來儲存整個人體表面的三維位置資訊。
圖 2 展示了不同解析度下 UV 位置對映圖的頂點變形和重取樣時引入的誤差。考慮到當前最優方法的全身精度誤差(surface error)和關節精度誤差(joint error)在幾十毫米的數量級,我們選擇了 256 的解析度,它引入的 1 毫米全身精度誤差可以忽略不計。另外,256 解析度的 UV 對映圖能夠表示六萬多個頂點,遠多於 SMPL 的頂點數。
圖 2:在不同的 UV 位置對映圖解析度下,由於變形和重取樣引入的全身精度誤差和關節精度誤差,單位為毫米。
3.2 網路和損失函式
我們的網路採用編碼器-解碼器結構,輸入是 256*256 的彩圖,輸出是 256*256 的 UV 位置對映圖,其中編碼器部分使用 ResNet-18,解碼器是由四層上取樣和卷積層組成。
不同於以前的方法中需要仔細設計和融合多種不同損失函式的做法,我們直接針對預測的 UV 位置對映圖進行監督和設計損失函式 (見表 2)。為了平衡不同的身體區域對訓練的影響,我們採用了權重掩模圖來調整損失函式。此外,關節點附近的點的權重也進行了加重。
表 1:不同方法中採用的損失函式。
圖 3:不同方法的框架與 DenseBody 對比。
3.3 實現細節
所有的影像都先做了對齊,使人位於正中。然後通過裁剪和縮放調整到 256x256,使得緊湊的邊界框和影像邊緣之間距離適中。影像經過了隨機的平移、旋轉、翻轉和色彩抖動。我們要注意,資料增強的操作大都不簡單,因為對應的真值資料也要進行相應的形變。
而當隨機形變後的人體超過了 256x256 的畫布,則該增強操作無效。我們用正交投影來得到位置對映圖的 x-y 座標,以避免深度資訊的誤差傳播。真值資料的深度資訊要經過適當縮放,以控制在 sigmoid 輸出的值域裡。
我們使用 Adam 優化器,學習率為 1e-4,mini-batch 的大小為 64,訓練直到收斂為止(大概 20 個 epoch)。在單個 GTX 1080Ti GPU 上訓練大約 20 個小時。程式碼實現基於 Pytorch。
4. 實驗
表 2:在 SURREAL 上的實驗結果,全身精度誤差和關節精度誤差以毫米為單位。
表 4:UP-3D 上的實驗結果。全身精度誤差和關節精度誤差以毫米為單位。
表 5:在單個 GTX1080TI 上的前向執行時,以毫秒為單位。1 表示在 TITAN X GPU 上執行。