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