機器之心報道
參與:一鳴、Jamin
PyTorch 進軍三維計算機視覺了,專用庫已出爐。
3D 計算機視覺是一個重要的課題,如何選擇合適的框架進行計算,使得處理效果更好、更高效?近日,FaceBook 博客更新了一篇新的文章,介紹了團隊開發的針對 3D 計算機視覺的框架——PyTorch3D。這是一個基于 PyTorch 的庫,在 3D 建模,渲染等多方面處理操作上有更好的表現。
項目地址:https://github.com/facebookresearch/pytorch3d
基于 PyTorch 的 3D 計算機視覺處理庫
據項目介紹,PyTorch3d 是一個高效、可復用的 3D 計算機視覺庫。在這一項目中,開發者實現了以下新特性:
1. 他們提出了新的 3D 數據結構——Meshes,這種數據結構可以更好地存儲和修改三角網格的數據;
2. 高效處理三角網格的算子,如投影變換、圖卷積、采樣、損失函數等;
3. 一個可微分的網格生成器;
由于是基于 PyTorch 的,這個框架主要面向的是深度學習方面的模型。項目目標是將 3D 計算機視覺和深度學習結合,用于對三維數據的預測和計算。在 PyTorch3D 中,所有的算子都:
1. 使用 PyTorch 的算子;
2. 可以使用異構的批數據;
3. 可微分;
4. 能夠使用 GPU 加速;
這樣一來,PyTorch3D 吸收了深度學習框架的優勢,同時能夠專門針對 3D 建模渲染等進行計算,有著很好的性能和應用優勢。
主要特性
PyTorch3D 主要有三個值得注意的新特性,這些特性在 FaceBook 的博客中進行了介紹。
3D 網格數據的新格式:Meshes
由于三維網格包含頂點坐標以及面的索引這兩者的集合,因此在批量處理不同尺寸的三維網格時會需要進行一些調整。為了解決這個問題,研究者們提出了 Meshes,一種在深度學習應用中可以批量處理異構網絡的數據結構。
Mesh 的數據結構。
這種數據結構使得研究人員很容易將底層的網格數據轉換為合適的格式,從而讓相應的算子能夠匹配到最高效的數據表示。Pytorch3D 為用戶提供了在不同的表示視圖間高效切換的方法,同時還可以獲得不同數據表示的屬性,具有很好的靈活性。
對 3D 數據的高效處理
團隊已經完成了部分工作,如優化一些常用運算符、優化三維數據的損失函數,以及支持異構批數據輸入等。
這說明,用戶可以在 Pytorch3D 中直接導入這些算子,以便于更快的進行實驗。這些算子包括倒角損失(chamfer loss),它是一種用于比較兩組點云的方法,可以用作三維網格的損失函數。開發團隊還使用 CUDA 內核為這個損失函數創建了一個算力資源密集型的最近鄰計算優化方法。
通過對倒角損失等進行收斂,從而建模。
可微的圖像渲染方法
將 3D 模型渲染為 2D 圖像是這一領域的核心部分。這種渲染采用的思路是將 3D 的場景屬性轉換為 2D 圖像的像素點信息。傳統的渲染方法一般是不可微的,因此無法和深度學習結合。可微的渲染方法是一個新的研究領域,而研究者希望通過 PyTorch3D 來實現。
將 3D 模型轉換為 2D 圖像的過程。
在項目中,研究者采用了高效、模塊化且可微的渲染器(renderer)。而且,這些都是可以擴展的,用戶可以很容易地進行定制,比如在渲染的時候改變光影效果。而在計算密集的模型轉像素點階段,計算可以在 PyTorch、C++和 CUDA 上并行化,還能夠全面地進行測試,驗證其準確性。和其他 PyTorch3D 的算子一樣,渲染器也是支持異構批量數據的。
使用教程
除了在博客中介紹了項目之外,項目研究者還提供了四個相關教程。
將球形點云分解為海豚: https://github.com/facebookresearch/pytorch3d/blob/master/docs/tutorials/deform_source_mesh_to_target_mesh.ipynb
渲染帶有材質的點云:https://github.com/facebookresearch/pytorch3d/blob/master/docs/tutorials/render_textured_meshes.ipynb
網格調整:https://github.com/facebookresearch/pytorch3d/blob/master/docs/tutorials/bundle_adjustment.ipynb
相機視角優化:https://github.com/facebookresearch/pytorch3d/blob/master/docs/tutorials/camera_position_optimization_with_differentiable_rendering.ipynb