使用 Nvidia Kaolin 和 PyTorch 进行 3D 深度学习:从 2D 照片重建 3D 模型

35 分钟 · 中文笔记YouTube 标准许可

本教程演示了如何使用 Nvidia 开发的 DIB-R(可微渲染器)库,通过纯优化方法从多视角 2D 图像重建 3D 形状。视频介绍了 Nvidia Kaolin 库的功能,演示了安装 Nvidia Omniverse 和 Kaolin App 的过程,并详细讲解了 DIB-R 教程代码的运行步骤,包括数据准备、损失函数设置(L1 损失、IoU 损失、Laplacian 和 Flat 正则化项)、训练循环以及使用 Kaolin App 可视化训练结果。最后,演示者展示了如何使用 Kaolin App 生成自定义合成数据(如球体)进行训练测试。

你会学到

  • Nvidia Kaolin 是一个用于 3D 深度学习的库,提供网格(meshes)和体素网格(voxel grids)的处理功能,以及不同表示之间的转换函数。
  • DIB-R 是一种可微渲染器(differential renderer),它通过建模像素值来允许梯度反向传播,从而解决从 2D 图像恢复 3D 场景的问题。
  • 传统的图形渲染管线(如光栅化)存在不可微或梯度丢失的问题,无法直接用于优化 3D 几何形状。
  • DIB-R 将光栅化视为顶点属性的插值,每个像素仅受其覆盖的面片影响,从而保证几何变化能反映在图像像素上。
  • 在重建 3D 形状时,需要引入正则化项(Regularizers)来防止形状自相交或过于复杂,常用的包括 Laplacian loss 和 Flat loss。
  • 训练过程中,损失函数通常包含两部分:一是渲染图像与真实图像之间的 L1 损失,二是语义掩码(semantic mask)之间的交并比(IoU)损失。

步骤与时间轴

  1. 3:08 · 安装 Nvidia Omniverse 和 Kaolin App
    首先下载并安装 Nvidia Omniverse Launcher。安装完成后,通过 Launcher 启动并安装 Nvidia Kaolin App。Kaolin App 用于可视化 3D 模型和训练过程。
  2. 4:31 · 下载数据集
    下载教程中使用的数据集,例如来自 Pixar 的 Kitchen 数据集。该数据集包含多个视角的图像、相机属性文件以及语义掩码文件(semantic file)。
  3. 5:25 · 使用 Anaconda 安装 Nvidia Kaolin 库
    使用 Anaconda 创建一个新的 Python 环境。切换到 Kaolin 仓库的特定分支(建议检查是否有 DIB-R 的新发布版本,避免使用不稳定的 master 分支)。在该环境中安装 Kaolin 库及其依赖项。
  4. 15:48 · 准备 DIB-R 教程代码和数据
    解压包含渲染时钟(render clock)目录的文件。该目录包含 100 个视角的时钟图像、相机属性文件和语义掩码文件。代码中需要指定这些文件的路径。
  5. 17:45 · 配置超参数和正则化项
    在代码中设置超参数,包括 Laplacian weight 和 Flat weight。这些参数用于控制正则化强度,帮助生成更平滑、无自相交的 3D 形状。
  6. 18:45 · 加载数据和初始模型
    使用 PyTorch 的数据加载器(data loader)加载训练数据。加载一个初始的球体 OBJ 文件作为待优化的 3D 几何形状。代码会同时加载语义掩码用于后续比较。
  7. 20:27 · 设置损失函数和优化器
    定义损失函数,包括:1. L1 损失,比较渲染图像与真实图像的像素差异;2. IoU 损失,比较渲染掩码与真实掩码的交并比。设置优化器(如 Adam),用于更新纹理贴图(texture map)和顶点位移(vertices shift)。
  8. 25:36 · 运行训练循环
    开始训练过程,通常运行多个 epoch(例如 48 个 epoch)。在每个 epoch 中,遍历所有真实视角图像。对于每个视角,使用 DIB-R 将当前球体渲染为 2D 图像,计算损失,并通过反向传播(loss.backward)更新参数。
  9. 29:22 · 可视化训练结果
    训练过程中会生成时间序列日志(time lapse logs)。使用 Nvidia Kaolin App 的 Training Visualiser 功能加载这些日志,查看 3D 形状从球体逐渐变形为时钟的过程,以及最终的纹理和几何效果。
  10. 30:33 · 生成自定义合成数据
    使用 Nvidia Kaolin App 的数据生成器(data generator)创建新的合成数据集。选择目标物体(如球体),设置渲染数量(如 100 个视角)、方位角(azimuth)和光照类型。指定输出目录并导出渲染图像,用于替换原有的时钟数据进行新的训练测试。

要点与注意

  • 在克隆 Kaolin 仓库时,建议检查是否有针对 DIB-R 的特定发布分支,因为 master 分支的代码可能不稳定。
  • 正则化项(Laplacian loss 和 Flat loss)对于防止 3D 形状出现自相交或过度扭曲至关重要,需要根据具体任务调整权重。
  • 训练数据中的语义掩码(semantic mask)对于计算 IoU 损失非常重要,确保数据集中包含对应的掩码文件。
  • 使用 Kaolin App 生成合成数据时,注意固定相机距离,以避免因视角变化过大导致训练不稳定。
  • DIB-R 教程主要演示的是纯优化方法,而非神经网络方法,理解这一点有助于区分可微渲染器与神经渲染网络的区别。

适合谁看

国内 CG、3D、AI 创作从业者,特别是希望了解 3D 深度学习底层原理、可微渲染技术以及使用 Nvidia 工具链进行 3D 重建的开发者。

本页是根据公开视频整理的中文学习笔记,视频版权归原作者 CODE MENTAL 所有。如有问题请联系我们。

© 版权声明

相关文章