让3D深度学习更快更灵活,Facebook开源PyTorch3D

鱼羊 发自 麦蒿寺
量子位 报道 | 公众号 QbitAI

现在,你的神经网络可以更轻松地和 3D 数据搭配使用了。

Facebook AI 已经推出了用于 3D 深度学习的开源工具包,PyTorch3D

顾名思义,PyTorch3D 是一个基于 PyTorch 的高度模块化,且经过优化的库。旨在通过 PyTorch 简化 3D 深度学习。

PyTorch3D 带有常用的 3D 运算符和用于 3D 数据的损失函数,以及模块化可微渲染API。

作为版本的一部分,Facebook 同时还开源了 Mesh R-CNN,一个能够对照片中的 2D 物体进行 3D 建模的神经网络模型。

并且,Facebook 把 PyTorch3D 与 2D 识别库 Detectron2 结合在了一起,将对物体的理解进一步推向三维。

那么,就一起来看看 PyTorch3D 是怎样让 3D 深度学习变更快更灵活的。

PyTorch3D:更快、更灵活的 3D 深度学习研究

与可以用简单张量表示的 2D 图像相比,3D 数据输入更加复杂,内存需求和计算需求也相对较高。

此外,3D 运算也必须是可微分的,如此,梯度才能从模型输出返回到输入,通过系统反向传播。

针对这些问题,PyTorch3D 通过提供批处理功能,以及对 3D 运算符和损失函数的支持,来优化训练和推理过程。

其主要的新增特性有以下三点。

1. 新数据结构:Meshes

3D 网格是顶点坐标和面索引的集合。为了更好地对其进行处理,Facebook 提出了新的数据结构Meshes

Meshes 对象代表一批三角网格,每个 mesh 可以有不同数量的顶点或面。可以用于存储与网格有关的数据,比如面法线、面区域和纹理等。

这样的数据结构让用户可以更轻松地将底层网格数据转换为不同的视图,从而使运算符和最高效的数据表示相匹配。

2. 高效处理三角网格

那么,要怎样让一个 mesh 变形为目标形状呢?

在 PyTorch3D 中,Facebook 实现了通用运算符、3D 数据损失函数的优化,且支持异构批数据的输入。

用户可以在 PyTorch3D 中直接导入这些运算符,快速开始实验。

3. 可微分网格渲染器(renderer)

渲染是将 3D 模型转换为 2D 图像的核心。

传统的渲染方法是不可微的,因此无法和深度学习相结合。

为了能够访问到下游应用程序所需的各种中间值,在 PyTorch3D 中,研究人员编写了一个模块化微分渲染器。

渲染器由可组合单元构成,具有扩展性,因此用户可以轻松实现自定义,比如在渲染时改变照明、阴影效果。

计算量较大的栅格化步骤可以在 PyTorch、C++和 CUDA 中并行实现。

同样,依靠 Mesh 数据格式,渲染器也支持异构批量数据。

Facebook 表示,推出 PyTorch3D 是为了推动「深度学习 + 3D」的研究。

凭借可微渲染功能,无需耗时的手动 3D 注释,就可能构建高质量的 3D 预测系统。

研究人员也能够更为轻松地渲染出 AR、VR 中的 3D 对象和场景。

在机器人、自动驾驶感知研究当中,PyTorch3D 无疑将成为新的助力。

传送门

Facebook AI 博客:https://ai.facebook.com/blog/-introducing-pytorch3d-an-open-source-library-for-3d-deep-learning/

PyTorch3D 项目:https://github.com/facebookresearch/pytorch3d

Mesh R-CNN 项目:https://github.com/facebookresearch/meshrcnn

— 完 —

版权所有,未经授权不得以任何形式转载及使用,违者必究。