圖像轉(zhuǎn)換3D模型只需5行代碼,英偉達(dá)推出3D深度學(xué)習(xí)工具Kaolin
近年來,3D 計(jì)算機(jī)視覺和人工智能兩個(gè)領(lǐng)域都取得了飛快的發(fā)展,但二者之間如何實(shí)現(xiàn)有效的結(jié)合還有很長(zhǎng)的路要走?;诖?,英偉達(dá)于今日推出了 Kaolin PyTorch 庫,借助于這個(gè)庫,只需幾步即可將 3D 模型遷移至神經(jīng)網(wǎng)絡(luò)的應(yīng)用范疇。
此外,Kaolin 庫還可以大大降低為深度學(xué)習(xí)準(zhǔn)備 3D 模型的工作量,代碼可由 300 行銳減到僅僅 5 行。
作為一個(gè)旨在加速 3D 深度學(xué)習(xí)研究的 PyTorch 庫,Kaolin 為用于深度學(xué)習(xí)系統(tǒng)中的可微 3D 模塊提供了高效的實(shí)現(xiàn)。Kaolin 不僅能夠加載和預(yù)處理流行的 3D 數(shù)據(jù)集,而且具有操作網(wǎng)格、點(diǎn)云、符號(hào)距離函數(shù)和體素柵格(voxel grid)的本地功能,因而可以減少編寫不必要的樣本代碼。
Kaolin 庫包含渲染(rendering)、高光(lighting)、暗影(shading)和視圖合成(view warping)等幾種不同的圖形模塊。此外,Kaolin 庫還支持一系列用于無縫銜接評(píng)價(jià)(seamless evaluation)的損失函數(shù)和評(píng)價(jià)度量,并提供可視化功能來渲染 3D 效果。重要的是,英偉達(dá)創(chuàng)建了包含諸多當(dāng)前最優(yōu) 3D 深度學(xué)習(xí)架構(gòu)的 model zoo,從而作為未來研究的起點(diǎn)。
此類工具可以使得機(jī)器人、自動(dòng)駕駛、醫(yī)學(xué)成像和虛擬現(xiàn)實(shí)等諸多領(lǐng)域的研究者獲益。隨著人們對(duì) 3D 模型的興趣日益高漲,英偉達(dá)的 Kaolin 庫可以在該領(lǐng)域產(chǎn)生重大影響。在線存儲(chǔ)庫(repo)現(xiàn)已擁有很多 3D 數(shù)據(jù)集,這在一定程度上得益于世界各地所使用的、能夠捕獲 3D 圖像的約 3000 萬個(gè)深度攝像頭。
GitHub 地址:https://github.com/NVIDIAGameWorks/kaolin/
那么 Kaolin 庫的具體展示效果是怎樣的呢?英偉達(dá)給出了以下幾個(gè)實(shí)際應(yīng)用示例:
在 3D 場(chǎng)景中,通過分類功能來識(shí)別對(duì)象(圖中識(shí)別出了椅子)
3D 組件分割功能可以自動(dòng)識(shí)別 3D 模型的不同組件,這使得「裝備」動(dòng)畫角色或自定義模型以生成對(duì)象變體更加容易(圖左的 3D 模型在圖右穿上了衣服、鞋子等)
圖像到 3D(Image to 3D)功能可以根據(jù)訓(xùn)練的神經(jīng)網(wǎng)絡(luò)識(shí)別出的圖像來構(gòu)建 3D 模型(圖右生成了椅子的 3D 模型)
目前,英偉達(dá)推出的 beta 版 Kaolin 庫包含幾項(xiàng)處理功能,用于網(wǎng)格、體素、符號(hào)距離函數(shù)和點(diǎn)云上的 3D 深度學(xué)習(xí)。加載的幾個(gè)流行的數(shù)據(jù)集(如 ShapeNet、ModelNet 和 SHREC)支持開箱即用。此外,英偉達(dá)還實(shí)現(xiàn)了幾種 3D 遷移和轉(zhuǎn)換操作。
Kaolin 庫支持的 3D 任務(wù)如下:
- 可微渲染器(神經(jīng)網(wǎng)格渲染器、軟光柵化器(Soft Rasterizer)、基于可微插值的渲染器以及模塊化和可擴(kuò)展的抽象可微渲染器規(guī)范);
- 基于單張圖像的網(wǎng)格重建(如 Pixel2Mesh、GEOMetrics、OccupancyNets 等);
- 點(diǎn)云分類和分割(PointNet、PoinNet++、DGCNN 等);
- 網(wǎng)格分類和分割;
- 體素柵格的 3D 超分辨;
- 基本的圖像處理(如高光、暗影等)。
Kaolin 庫的安裝與使用
支持的平臺(tái)
Kaolin 已經(jīng)獲得了 Linux 平臺(tái)的官方支持,并已在 Ubuntu 18 上進(jìn)行構(gòu)建和測(cè)試。Windows 和 Mac 平臺(tái)上也應(yīng)考慮展開試驗(yàn)性的支持。
安裝步驟
英偉達(dá)推薦用戶在虛擬環(huán)境中安裝 Kaolin 庫(如利用 conda 或 virtualenv 創(chuàng)建的虛擬環(huán)境)。Kaolin 要求 Python 版本在 3.6 以上,并且目前在構(gòu)建時(shí)需要啟用 CUDA 的機(jī)器(即需要安裝 nvcc)。
首先創(chuàng)建一個(gè)虛擬環(huán)境。下例展示了如何為創(chuàng)建安裝 Kaolin 庫所需要的 conda 虛擬環(huán)境:
- $ conda create --name kaolin python=3.6 $ conda activate kaolin
接著安裝相關(guān)依賴(numpy 和 torch)。注意,設(shè)置文件并不能自動(dòng)安裝這兩種依賴。
- conda install numpy
然后安裝 Pytorch,這樣就可以安裝 Kaolin 庫了。最后根據(jù) repo 的根目錄(即包含 README 文件的目錄),運(yùn)行:
- $ python setup.py install
在安裝過程中,packman 包管理器將 nv-usd 包下載到~/packman-repo/中,后者包含閱讀和編寫通用場(chǎng)景描述(Universal Scene Description,USD)文件的必要包。
驗(yàn)證安裝
為了驗(yàn)證是否安裝完成 Kaolin 庫,用戶可以啟動(dòng) python 解釋器,并執(zhí)行以下命令:
- >>>import kaolin as kal>>> print(kal.__version)
創(chuàng)建文檔
為深入研究 Kaolin 庫,用戶可以創(chuàng)建文檔。根據(jù) repo 的根目錄(即包含 README 文件的目錄),執(zhí)行以下命令:
- $ cd docs $ sphinx-build . _build
運(yùn)行單元測(cè)試
為運(yùn)行單元測(cè)試,用戶可根據(jù) repo 的根目錄(即包含 README 文件的目錄)執(zhí)行以下命令:
- $ pytest tests/
Kaolin 庫的主要功能模塊
repo:支持的 3D 資產(chǎn)表征包括三角網(wǎng)格、四邊形網(wǎng)格、體素柵格、點(diǎn)云和符號(hào)距離函數(shù);
轉(zhuǎn)換:支持所有流行 3D 表征的轉(zhuǎn)換;
實(shí)現(xiàn)的模型包括:
- DGCNN (https://arxiv.org/abs/1801.07829v1)
- DIB-R (https://arxiv.org/abs/1908.01210)
- GEOMetrics (https://arxiv.org/abs/1901.11461)
- Image2Mesh (https://arxiv.org/abs/1711.10669)
- Occupancy Network (https://arxiv.org/abs/1812.03828)
- Pixel2Mesh (https://arxiv.org/abs/1804.01654)
- PointNet (https://arxiv.org/abs/1612.00593)
- PointNet++ (https://arxiv.org/abs/1706.02413)
- MeshEncoder: A simple mesh encoder architecture.
- GraphResNet: MeshEncoder with residual connections.
- OccupancyNetworks (https://arxiv.org/abs/1812.03828)
- 其他
圖形:庫為構(gòu)建可微渲染器提供了靈活的模塊化框架,使得單個(gè)組件易于實(shí)現(xiàn)替換。此外,Kaolin 庫還提供了以下可微渲染器的實(shí)現(xiàn):
DIB-R (https://arxiv.org/abs/1908.01210)
SoftRas (https://arxiv.org/abs/1904.01786)
Neural 3D Mesh Renderer (https://arxiv.org/abs/1711.07566)
度量:實(shí)現(xiàn)的度量和損失函數(shù)如下:
Mesh: Triangle Distance, Chamfer Distance, Edge Length regularization, Laplacian regularization, Point to Surface distance, Normal consistency
Point Cloud: Sided Distance, Chamfer Distance, Directed Distance
Voxel Grid: Intersection Over Union (3D IoU), F-Score