BundleSDF:未知物体的神经6自由度跟踪和3D重建
这是我们发表在CVPR 2023上的论文的实现
摘要
我们提出了一种近实时方法,可以从单目RGBD视频序列中对未知物体进行6自由度跟踪,同时执行物体的神经3D重建。我们的方法适用于任意刚体物体,即使在缺乏视觉纹理的情况下也能工作。只需在第一帧对物体进行分割。不需要额外信息,也不对交互代理做任何假设。我们方法的关键是一个神经物体场,它与姿态图优化过程同时学习,以便将信息稳健地累积到一个一致的3D表示中,捕捉几何和外观信息。自动维护一个动态的带姿态的记忆帧池,以促进这些线程之间的通信。我们的方法可以处理具有大幅姿态变化、部分和全遮挡、无纹理表面和镜面高光的挑战性序列。我们在HO3D、YCBInEOAT和BEHAVE数据集上展示了结果,证明我们的方法显著优于现有方法。
引用
@InProceedings{bundlesdfwen2023,
author = {Bowen Wen and Jonathan Tremblay and Valts Blukis and Stephen Tyree and Thomas M\"{u}ller and Alex Evans and Dieter Fox and Jan Kautz and Stan Birchfield},
title = {{BundleSDF}: {N}eural 6-{DoF} Tracking and {3D} Reconstruction of Unknown Objects},
booktitle = {CVPR},
year = {2023},
}
数据下载
-
下载预训练的分割网络权重,并将其放在
./BundleTrack/XMem/saves/XMem-s012.pth
-
下载预训练的LoFTR outdoor_ds.ckpt权重,并将其放在
./BundleTrack/LoFTR/weights/outdoor_ds.ckpt
-
下载HO3D数据。我们提供了增强数据,您可以从这里下载。然后从这里下载YCB-Video物体模型。最后,确保结构如下所示,并在
BundleTrack/scripts/data_reader.py
顶部更新HO3D_ROOT
的根路径HO3D_v3 ├── evaluation ├── models └── masks_XMem
Docker/环境设置
- 构建Docker镜像(这只需要做一次,可能需要一些时间)。
cd docker
docker build --network host -t nvcr.io/nvidian/bundlesdf .
- 首次启动Docker容器
cd docker && bash run_container.sh
# 在Docker容器内,编译机器相关的包
bash build.sh
在自定义数据上运行
- 按如下方式准备您的RGBD视频文件夹(也可以参考示例牛奶数据)。您可以在这里找到用于测试的示例牛奶数据。
root
├──rgb/ (PNG文件)
├──depth/ (PNG文件,以毫米为单位存储,uint16格式。文件名与rgb相同)
├──masks/ (PNG文件。文件名与rgb相同。0为背景。其他为前景)
└──cam_K.txt (3x3内参矩阵,使用空格和回车分隔)
由于许可问题,我们无法在此代码库中包含XMem用于在线运行分割。如果您有兴趣这样做,请单独下载代码并在segmentation_utils.py
中添加包装器。
- 运行您的RGBD视频(指定video_dir和您想要的输出路径)。有3个步骤。
# 1) 运行联合跟踪和重建
python run_custom.py --mode run_video --video_dir /home/bowen/debug/2022-11-18-15-10-24_milk --out_folder /home/bowen/debug/bundlesdf_2022-11-18-15-10-24_milk --use_segmenter 1 --use_gui 1 --debug_level 2
# 2) 运行全局细化后处理以优化网格
python run_custom.py --mode global_refine --video_dir /home/bowen/debug/2022-11-18-15-10-24_milk --out_folder /home/bowen/debug/bundlesdf_2022-11-18-15-10-24_milk # 将路径更改为您的视频目录
# 3) (可选) 如果您想绘制定向边界框以可视化姿态,类似于我们的演示
python run_custom.py --mode draw_pose --out_folder /home/bowen/debug/bundlesdf_2022-11-18-15-10-24_milk
- 最后,结果将被保存在
out_folder
中,包括存储在ob_in_cam/
中的跟踪姿态和带纹理的重建网格textured_mesh.obj
。
在HO3D数据集上运行
# 运行BundleSDF以获取姿态和重建结果
python run_ho3d.py --video_dirs /mnt/9a72c439-d0a7-45e8-8d20-d7a235d02763/DATASET/HO3D_v3/evaluation/SM1 --out_dir /home/bowen/debug/ho3d_ours
# 对输出结果进行基准测试
python benchmark_ho3d.py --video_dirs /mnt/9a72c439-d0a7-45e8-8d20-d7a235d02763/DATASET/HO3D_v3/evaluation/SM1 --out_dir /home/bowen/debug/ho3d_ours
致谢
我们要感谢Jeff Smith协助发布代码。感谢Marco Foco和他的团队提供静态场景的测试数据。
联系方式
如有问题,请联系Bowen Wen (bowenw@nvidia.com)