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