當前位置:
首頁 > 知識 > 深度學習新應用:在PyTorch中用單個2D圖像創建3D模型

深度學習新應用:在PyTorch中用單個2D圖像創建3D模型

選自Medium

作者:Phúc Lê

機器之心編譯

參與:李詩萌、王淑婷

深度學習在諸多 2D 圖像任務中表現出色,毋庸置疑。但如何將它應用於 3D 圖像問題中呢?文本通過探索,將深度學習擴展到了單個 2D 圖像的 3D 重建任務中,並成功實現了這一應用。

近年來,深度學習在解決圖像分類、目標識別、語義分割等 2D 圖像任務方面的表現都很出色。不僅如此,深度學習在 3D 圖像問題中的應用也取得了很大的進展。本文試著將深度學習擴展到單個 2D 圖像的 3D 重建任務中,這是 3D 計算機圖形學領域中最重要也是最有意義的挑戰之一。

任務

單個圖像只是 3D 對象在 2D 平面的投影,所以一些高維空間的數據一定會在低維表徵中丟失。因此,單視角 2D 圖像中並沒有足夠的數據來構建其 3D 組件。

要根據單個 2D 圖像創建 3D 感知,首先需要關於 3D 形狀本身的先驗知識。

在 2D 深度學習中,卷積自編碼器是一種學習輸入圖像壓縮表徵的有效方法。將該架構拓展到學習緊湊形狀知識是將深度學習應用於 3D 數據的最有前景方法。

CNN 編碼深度形狀先驗知識

3D 數據表徵

3D 數據的不同表徵

與計算機格式中只有一種通用表徵(像素)的 2D 圖像不同,3D 數據能夠以許多數字形式來表示。它們各有優缺點,所以數據表徵的選擇直接影響了使用它們的方法。

柵格化形式(體素網格):可以直接應用 CNN

每個藍色的盒子表示單個體素,大部分體素都是空的。

體素是體積像素(volumetric pixel)的簡稱,它直接將空間網格像素拓展為體積網格體素。每一個體素的局部性共同定義了該體積數據獨一無二的結構,因此 ConvNet 的局部性假設在立體形式中仍然成立。

體素表徵密度低

但這種表徵既稀疏又浪費。有用體素的密度會隨著解析度的增加而降低。

優勢: 從 2D 表徵到 3D 表徵,可以直接應用CNN。

劣勢:容易浪費,要在細節和資源(計算力、內存)之間好好權衡。

幾何形式:不能直接應用 CNN

椅子的點雲表徵

多邊形網格:是三維空間中定義對象表面的頂點、邊和面的集合。它可以在相當緊湊的表徵中捕獲粒度細節。

點云:3D 坐標(x,y,z)中點的集合,這些點一起形成了與 3D 對象形狀類似的雲。點的集合越大,獲得的細節就越多。同一組順序不同的點表示同樣的 3D 對象。

優勢:表徵緊湊,重點關注 3D 對象的表面細節。

缺點:不能直接應用 CNN。

方法

本文的實現結合了點雲緊湊表徵的優勢,但是用了傳統的 2D ConvNet 來學習先驗形狀知識。

2D 結構生成器

我們將構建標準的 2D CNN 結構生成器來學習目標的先驗形狀知識。我們沒有用體素方法,因為它效率比較低下,而且不能直接用 CNN 學習點雲。因此我們將學習從單個圖像到點雲的多個 2D 投影的映射,將一個視角的 2D 投影定義為:2D projection == 3D coordinates (x,y,z) binary mask (m)

輸入:單個 RGB 圖像

輸出:預先設定視角的 2D 投影

點雲融合

將預測得到的 2D 投影融合到原生 3D 點雲數據中。這是有可能實現的,因為這些預測值的視角是固定的,而且是已知的。

輸入:預先設定視角的 2D 投影

輸出:點雲。

偽渲染

我們認為,如果用預測的 2D 投影融合得到的點雲有用,那麼如果我們從新視角渲染出不同 2D 投影的話,它應該與真實 3D 模型的投影類似。

輸入:點雲

輸出:新視角的深度圖像

訓練動態

由 2D 卷積結構生成器、融合模塊以及偽渲染模塊組成的完整架構。

將這三個模塊組合在一起,我們得到了一個端到端模型,它可以只用 2D 卷積結構生成器,根據單個 2D 圖像學習生成緊湊的點雲表徵。

這個模型的巧妙之處在於使融合模塊和偽渲染模塊可以純粹地進行可微分的幾何推理:

幾何代數意味著沒有可學習的參數,這使得模型更小、更易於訓練。

可微分意味著我們可以反向傳播梯度,從而用 2D 投影的損失來學習生成 3D 點雲。

結論

比較來自真實 3D 模型的新深度圖像和通過學到的點雲模型渲染得到的深度圖像。

最終結果:從單個 RGB 圖像3D 點雲

有了詳細的點雲表徵,就可以用 MeshLab 將單個 RGB 圖像轉換為其它表徵,比如與 3D 印表機兼容的體素或多邊形網格。

參考

Pytorch 代碼:https://github.com/lkhphuc/pytorch-3d-point-cloud-generation

Tensorflow 代碼:https://github.com/chenhsuanlin/3D-point-cloud-generation

論文:https://arxiv.org/abs/1706.07036

原始項目網站:https://chenhsuanlin.bitbucket.io/3D-point-cloud-generation/

參考鏈接:https://medium.com/vitalify-asia/create-3d-model-from-a-single-2d-image-in-pytorch-917aca00bb07

本文為機器之心編譯,轉載請聯繫本公眾號獲得授權。

------------------------------------------------

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 機器之心 的精彩文章:

不要爭了,別的程序員是這麼給變數起名的!
我收到了斯坦福、UCL、CMU、NYU、UW的博士offer,這是我的經驗

TAG:機器之心 |