PyTorch 進(jìn)軍三維計(jì)算機(jī)視覺了,專用庫已出爐。

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

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

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

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

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

渲染帶有材質(zhì)的點(diǎn)云: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

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