PyTorch 進軍三維計算機視覺了,專用庫已出爐。

3D 計算機視覺是一個重要的課題,如何選擇合適的框架進行計算,使得處理效果更好、更高效?近日,F(xiàn)aceBook 博客更新了一篇新的文章,介紹了團隊開發(fā)的針對 3D 計算機視覺的框架——PyTorch3D。這是一個基于 PyTorch 的庫,在 3D 建模,渲染等多方面處理操作上有更好的表現(xiàn)。
項目地址:https://github.com/facebookresearch/pytorch3d
基于 PyTorch 的 3D 計算機視覺處理庫
據(jù)項目介紹,PyTorch3d 是一個高效、可復用的 3D 計算機視覺庫。在這一項目中,開發(fā)者實現(xiàn)了以下新特性:
1. 他們提出了新的 3D 數(shù)據(jù)結構——Meshes,這種數(shù)據(jù)結構可以更好地存儲和修改三角網(wǎng)格的數(shù)據(jù);
2. 高效處理三角網(wǎng)格的算子,如投影變換、圖卷積、采樣、損失函數(shù)等;
3. 一個可微分的網(wǎng)格生成器;
由于是基于 PyTorch 的,這個框架主要面向的是深度學習方面的模型。項目目標是將 3D 計算機視覺和深度學習結合,用于對三維數(shù)據(jù)的預測和計算。在 PyTorch3D 中,所有的算子都:
1. 使用 PyTorch 的算子;
2. 可以使用異構的批數(shù)據(jù);
3. 可微分;
4. 能夠使用 GPU 加速;
這樣一來,PyTorch3D 吸收了深度學習框架的優(yōu)勢,同時能夠專門針對 3D 建模渲染等進行計算,有著很好的性能和應用優(yōu)勢。
主要特性
PyTorch3D 主要有三個值得注意的新特性,這些特性在 FaceBook 的博客中進行了介紹。
3D 網(wǎng)格數(shù)據(jù)的新格式:Meshes
由于三維網(wǎng)格包含頂點坐標以及面的索引這兩者的集合,因此在批量處理不同尺寸的三維網(wǎng)格時會需要進行一些調(diào)整。為了解決這個問題,研究者們提出了 Meshes,一種在深度學習應用中可以批量處理異構網(wǎng)絡的數(shù)據(jù)結構。

Mesh 的數(shù)據(jù)結構。
這種數(shù)據(jù)結構使得研究人員很容易將底層的網(wǎng)格數(shù)據(jù)轉換為合適的格式,從而讓相應的算子能夠匹配到最高效的數(shù)據(jù)表示。Pytorch3D 為用戶提供了在不同的表示視圖間高效切換的方法,同時還可以獲得不同數(shù)據(jù)表示的屬性,具有很好的靈活性。
對 3D 數(shù)據(jù)的高效處理
團隊已經(jīng)完成了部分工作,如優(yōu)化一些常用運算符、優(yōu)化三維數(shù)據(jù)的損失函數(shù),以及支持異構批數(shù)據(jù)輸入等。
這說明,用戶可以在 Pytorch3D 中直接導入這些算子,以便于更快的進行實驗。這些算子包括倒角損失(chamfer loss),它是一種用于比較兩組點云的方法,可以用作三維網(wǎng)格的損失函數(shù)。開發(fā)團隊還使用 CUDA 內(nèi)核為這個損失函數(shù)創(chuàng)建了一個算力資源密集型的最近鄰計算優(yōu)化方法。

通過對倒角損失等進行收斂,從而建模。
可微的圖像渲染方法
將 3D 模型渲染為 2D 圖像是這一領域的核心部分。這種渲染采用的思路是將 3D 的場景屬性轉換為 2D 圖像的像素點信息。傳統(tǒng)的渲染方法一般是不可微的,因此無法和深度學習結合??晌⒌匿秩痉椒ㄊ且粋€新的研究領域,而研究者希望通過 PyTorch3D 來實現(xiàn)。

將 3D 模型轉換為 2D 圖像的過程。
在項目中,研究者采用了高效、模塊化且可微的渲染器(renderer)。而且,這些都是可以擴展的,用戶可以很容易地進行定制,比如在渲染的時候改變光影效果。而在計算密集的模型轉像素點階段,計算可以在 PyTorch、C++和 CUDA 上并行化,還能夠全面地進行測試,驗證其準確性。和其他 PyTorch3D 的算子一樣,渲染器也是支持異構批量數(shù)據(jù)的。
使用教程
除了在博客中介紹了項目之外,項目研究者還提供了四個相關教程。

將球形點云分解為海豚: https://github.com/facebookresearch/pytorch3d/blob/master/docs/tutorials/deform_source_mesh_to_target_mesh.ipynb

渲染帶有材質(zhì)的點云:https://github.com/facebookresearch/pytorch3d/blob/master/docs/tutorials/render_textured_meshes.ipynb

網(wǎng)格調(diào)整:https://github.com/facebookresearch/pytorch3d/blob/master/docs/tutorials/bundle_adjustment.ipynb

相機視角優(yōu)化:https://github.com/facebookresearch/pytorch3d/blob/master/docs/tutorials/camera_position_optimization_with_differentiable_rendering.ipynb





























