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