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