机器人智能体要想与环境中的物体进行交互,就必须知道周围物体的位置和方向。这类信息描述了一个刚体在 3D 空间中的六个自由度(DOF)姿态,详细说明了其平移和旋转状态。
准确的姿态估计是确定机械臂如何以特定方式抓取或放置物体的必要条件,比如操控机器人进行拾放操作(该用例尤其适用于仓库场景中的打包、零件装载、食品包装等任务)。了解物体的姿态对于机器人与人类之间的交接同样重要,在医疗、零售和家居场景中也很有用。
NVIDIA 开发的深度对象姿态估计(DOPE)可查找物体的六个 DOF 姿态。本文将展示如何生成合成数据来训练一个物体的 DOPE 模型。
深度对象姿态估计
图 1. DOPE 根据一个 RGB 图像估计物体的六个 DOF 姿态
DOPE 是 NVIDIA 开发的单样本深度神经网络(DNN),可根据 RGB 图像估计目标对象的六个 DOF 姿态,从而使机器人能够操纵环境中的物体。DOPE 只在合成数据上训练,并且需要一个纹理 3D 模型。它为现实世界中的抓取和夹具操纵带来了足够的准确性,误差仅为 2 厘米。
DOPE 是一种实例级模型,这意味着必须针对一个大类中的每个物体类型专门训练 DOPE 模型。例如,我们无法训练出一个能够检测所有类型椅子的 DOPE 模型,而是必须为每种类型的椅子训练一个模型。
再比如当一个应用要检测四个几何形状相似、但颜色不同的盒子时,就需要四个 DOPE 模型实例进行推理——每个颜色的盒子都需要一个专门训练的实例。
DOPE 的优势
可完全在合成数据上训练,降低了数据采集和标注成本。
能够处理物体遮挡问题。
通过结合域随机化和逼真的合成数据进行训练,减少了现实差距的挑战。
通过使用 PnP 算法,无需重新训练就可以在不同的相机内参上工作。
DOPE 由 NVIDIA Isaac ROS 支持,可提供由 GPU 加速的对象姿态估计。
现实差距挑战
仅在合成数据上训练的网络通常在实际数据上表现不佳。微调或域随机化等技术有助于提高性能。
域随机化是指在一个仿真环境中改变物体的各项参数,例如场景照明、比例、姿态、颜色和纹理等。目的是为神经网络提供足够多的域参数,从而提高其对现实环境的泛化能力。通过这种方式,神经网络可以将真实数据仅仅视为一种变体。
DOPE 通过结合域随机化和逼真合成数据进行训练,弥补了与现实的差距,并能够有效地推广到现实世界的用例中。
架构
图 2. DOPE 网络架构概览
DOPE 是一种受到卷积姿态机(CPM)和多人姿态估计器启发的单样本全卷积神经网络。其架构由标准 CNN(如 VGG19 或 RESNET 等)和附加的卷积层组成。
如需全面了解 DOPE 架构和数据生成管线,请参阅用于语义机器人抓取家用物品的深度对象姿态估计:
https://arxiv.org/pdf/1809.10...
数据集
NVIDIA 提供在 NVIDIA 家用物品姿态估计(HOPE)数据集上训练而成的预训练 DOPE 模型。该数据集包含 28 个不同环境中的玩具杂货对象,是 6D 对象姿态估计基准的一部分。
由于是实例级,因此 DOPE 必须使用针对与应用相关的目标对象的数据集进行训练。要生成用于训练 DOPE 的数据集,需要对象的 3D 模型。3D 对象模型可以使用 BundleSDF 生成。这种由 NVIDIA 开发的方法使用单目 RGBD 相机即可,无需昂贵的 3D 传感器。
数据生成
可使用 NVIDIA Isaac Sim 为 DOPE 生成用于域随机化的合成数据。我们重点关注两个数据集—— MESH 和 DOME,并实现了类似于 NViSII 论文中对这些数据集所示的随机化技术。
这些数据集在目标对象周围的场景中添加飞行干扰物,并对照明条件、干扰物的颜色以及材料进行随机化。与 MESH 相比,DOME 使用的干扰物更少,并且提供了更加真实的背景。
图 3. DOME 数据(左)和 MESH 数据(右)示例
有关如何使用 Isaac Sim 为 DOPE 创建训练数据,请参阅 NVIDIA 文档:
https://docs.omniverse.nvidia...
您可以指定要生成的每种类型(MESH 和 DOME)的图像数量。MESH 和 DOME 的合理比例取决于用例。您可以尝试找到适合自己模型的启发式方法(例如 MESH 和 DOME 的比例为 25:75)。如果您在单个对象上生成数据并训练 DOPE,一般情况下包含约 2 万张图像的训练数据集就已足够。
生成的数据集包含图像和带注释的 JSON 文件。每个 JSON 文件均包含对象的相关信息,包括对象类别、位置、方向以及在相应图像中的可见性。可见性表示该物体的可见程度(在有遮挡的情况下),可用于筛选用于训练的图像。
这种使用 Isaac Sim 的数据生成方法还能以类似于 YCB 视频数据集的格式写入数据,这些数据可用于训练其他 6D 姿态估计模型。
物体对称性
DOPE 在与目标对象绑定的立方体角上训练而成。该对象的旋转对称性可能会产生多个像素相同、但被不同立方体角标记的帧。
更多信息,敬请观看 GitHub 上的深度对象姿态视频:
https://github.com/NVlabs/Dee...
Isaac Sim 数据生成方法是否能够处理旋转对称性问题尚不明确。不过,NVIDIA 也提供了使用 NViSII 的合成数据生成脚本,这些脚本可以处理对称性问题。
训练 DOPE
在您生成训练数据集后,NVIDIA 会提供一个训练 DOPE 的脚本。您可以将该脚本指向您的训练数据,并指定模型训练的批量大小和轮数。
该脚本会保存有用的训练信息(包括损失图和信念图),您可以使用 TensorBoard 查看这些信息。
推理和评估
训练完 DOPE 模型后,可以在一个测试数据集上运行推理。根据测试数据中的图像,您可以在所提供的配置文件中指定配置参数,也可以自己编写配置参数。
在对象配置文件中加入目标对象的物理尺寸(有的人会使用在线 3D 查看器加载 3D 模型并查找尺寸)。该推理工作流会使用这些维度来生成结果,并在检测到的对象周围生成带有边界框的结果。
图 4. 定性结果会在具有 DOPE 精确姿态的物体周围加上边界框
在运行推理后,我们提供一个评估工作流来定量评估模型的性能。评估需要基准真相数据、推理步骤的预测结果以及目标对象的 3D 模型(.obj 格式),并渲染出该物体的 3D 模型来计算基准真相和预测结果之间的 3D 误差。
我们使用 ADD 指标,并提供两种计算误差的选项:
平均距离(ADD)是使用预测姿态与基准真相姿态之间的最近点距离计算出的平均距离。
立方体距离使用 3D 模型(基准真相)的八个立方体点和预测的立方体点计算平均距离。其计算速度比 ADD 快,但准确性较低。
在对一个任意对象仅使用域随机数据的情况下,在 30 万张图像中观察到的最大曲线下面积(AUC)为 66.64;而如果仅使用一个包含 60 万张逼真图像的数据集,AUC 为 62.94;当同时使用域随机化和逼真的合成图像时,准确性最高(AUC 为 77.00)。
图 5. 对于 YCB-Video 数据集上的一个物体,DOPE 与 PoseCNN 的准确性-阈值曲线对比
DOPE 仅使用合成图像训练而成。但即使在有遮挡和极端照明变化的情况下,它在使用不同摄像头拍摄的场景中仍然表现出色。其性能优于 PoseCNN 和 BB8,后者是在真实数据或合成数据与真实数据的结合上进行训练的。
为了进行直接比较,我们从 YCB 数据集中选取了五个对象,其中四个对象的 AUC 都比 PoseCNN 高。
更多详情,请参见 DOPE 论文:
https://arxiv.org/pdf/1809.10...
在我们的 GitHub 上获取推理和评估信息:
推理:https://github.com/andrewyguo...
评估:
https://github.com/andrewyguo...
使用 Isaac ROS 姿态估计
Isaac ROS 提供了一个 ROS 2 软件包,用于使用 DOPE 进行姿态估计。它使用 NVIDIA Triton 或 NVIDIA TensorRT 以及 Isaac ROS DNN 推理执行 GPU 加速推理。
在训练完 DOPE 模型后,您可以使用该软件包在 NVIDIA Jetson 或配备 NVDIA GPU 的系统上运行推理。
您还可以在摄像头数据流中的实时图像上执行推理,但这项任务会耗费大量计算资源。姿态估计的帧速率要低于摄像头的输入速率。基于 Isaac ROS Benchmark 工作流,我们的 DOPE 图形在 NVIDIA Jetson AGX Orin 上以 39.8 FPS 的速度运行,在 NVIDIA RTX 4060 Ti 上以 89.2 FPS 的速度运行。
图 6. 使用实时摄像头输入的数据运行 Isaac ROS DOPE,并在 Rviz 上实现姿态的可视化
该图包括三个组件和步骤:
- DNN 图像编码器节点将原始图像转换为大小合适、规范化的张量。
- TensorRT 节点将输入张量转换为信念图张量。
- DOPE 解码器节点将信念图转换为姿态阵列。
在性能总结中进一步了解不同 Isaac ROS 软件包的性能和基准测试方法:
https://nvidia-isaac-ros.gith...
请查看 GitHub 上的 Isaac ROS 姿态估计: