Project Icon

CamLiFlow

双向相机LiDAR融合实现光流和场景流联合估计

CamLiFlow和CamLiRAFT是利用双向相机-LiDAR融合进行光流和场景流联合估计的开源方法。这两种算法在FlyingThings3D和KITTI等数据集上实现了领先性能。CamLiRAFT改进了训练流程,增强了泛化能力,能够处理非刚性运动。该项目开源了预训练模型、结果和多数据集评估训练代码,为相关研究提供了有力基线。

CamLiFlow 和 CamLiRAFT

PWC PWC

这是我们两篇论文的官方 PyTorch 实现:

中文解读:https://zhuanlan.zhihu.com/p/616384758

相对于会议论文的改进

在这个扩展版本中,我们基于递归全对场变换实例化了双向融合管道的新类型,即 CamLiRAFT。CamLiRAFT 相比原始基于 PWC 的 CamLiFlow 获得了显著的性能提升,并在多个数据集上创造了新的最先进记录。

  • 与立体场景流方法的比较:在 FlyingThings3D 上,CamLiRAFT 达到了 1.73 EPE2D 和 0.049 EPE3D,比 CamLiFlow 降低了 21% 和 20% 的误差。在 KITTI 上,即使是非刚性的 CamLiRAFT 也与之前最先进的方法 RigidMask 表现相当(SF-all:4.97% vs. 4.89%)。通过使用刚性先验细化背景场景流,CamLiRAFT 进一步将误差降低到 4.26%,在排行榜上排名第一

  • 与仅使用激光雷达的场景流方法的比较:我们方法的仅使用激光雷达的变体,称为 CamLiRAFT-L,在精度和速度方面也优于所有以前仅使用激光雷达的场景流方法(见论文中的表 5)。因此,CamLiRAFT-L 也可以作为仅使用激光雷达的场景流估计的强有力基准。

  • 在 MPI Sintel 上的比较:在未对 Sintel 进行微调的情况下,CamLiRAFT 在 Sintel 训练集的 final pass 上达到了 2.38 AEPE,比 RAFT 和 RAFT-3D 分别降低了 12% 和 18% 的误差。这表明我们的方法具有良好的泛化性能,并且可以处理非刚性运动。

  • 训练计划:原始的 CamLiFlow 需要复杂的训练计划:Things(L2 损失)-> Things(鲁棒损失)-> Driving -> KITTI,训练需要约 10 天。CamLiRAFT 将计划简化为 Things -> KITTI,训练仅需约 3 天。(在 4 个 RTX 3090 GPU 上测试)

新闻

  • 2023-11-05:CamLiRAFT 被 TPAMI 接受。感谢审稿人的宝贵建议!
  • 2023-09-20:我们为 CamLiRAFT 提供了一个演示,详情请参见 demo.py
  • 2023-03-22:我们发布了 CamLiFlow 的扩展版本 CamLiRAFT,地址为 https://arxiv.org/abs/2303.12017
  • 2022-03-29:我们的论文被选为口头报告
  • 2022-03-07:我们发布了代码和预训练权重。
  • 2022-03-03:我们的论文被 CVPR 2022 接受。
  • 2021-11-20:我们的论文可在 https://arxiv.org/abs/2111.10502 获取。
  • 2021-11-04:我们的方法在 KITTI 场景流 排行榜上排名第一

预训练权重

模型训练集权重备注
CamLiRAFTThings (80轮)camliraft_things80e.pt最佳泛化性能
CamLiRAFTThings (150轮)camliraft_things150e.ptThings上的最佳性能
CamLiRAFTThings (150轮) -> KITTI (800轮)camliraft_things150e_kitti800e.ptKITTI上的最佳性能
CamLiRAFT-LThings-Occ (100轮)camliraft_l_best_things_occ.ptThings-Occ上的最佳性能
CamLiRAFT-LThings-Occ (100轮)camliraft_l_best_kitti_occ.ptKITTI-Occ上的最佳泛化性能
CamLiRAFT-LThings-Noc (100轮)camliraft_l_best_things_noc.ptThings-Noc上的最佳性能
CamLiRAFT-LThings-Noc (100轮)camliraft_l_best_kitti_noc.ptKITTI-Noc上的最佳泛化性能

Things-Occ表示"有遮挡的FlyingThings3D",Things-Noc表示"无遮挡的FlyingThings3D"。KITTI-Occ和KITTI-Noc同理。

预计算结果

这里,我们提供了提交到KITTI场景流在线基准测试的预计算结果。*表示使用刚性先验对背景场景流进行优化。

模型D1-allD2-allFl-allSF-all链接
CamLiFlow1.81%3.19%4.05%5.62%camliflow-wo-refine.zip
CamLiFlow *1.81%2.95%3.10%4.43%camliflow.zip
CamLiRAFT1.81%3.02%3.43%4.97%camliraft-wo-refine.zip
CamLiRAFT *1.81%2.94%2.96%4.26%camliraft.zip

环境配置

使用conda创建PyTorch环境:

conda create -n camliraft python=3.7
conda activate camliraft
conda install pytorch==1.10.2 torchvision==0.11.3 cudatoolkit=11.3 -c pytorch

安装mmcv和mmdet:

pip install openmim
mim install mmcv-full==1.4.0
mim install mmdet==2.14.0

安装其他依赖:

pip install opencv-python open3d tensorboard hydra-core==1.1.0

编译CUDA扩展以加快训练和评估:

cd models/csrc
python setup.py build_ext --inplace

下载在ImageNet-1k上预训练的ResNet-50:

wget https://download.pytorch.org/models/resnet50-11ad3fa6.pth
mkdir pretrain
mv resnet50-11ad3fa6.pth pretrain/

如果您想在KITTI上进行评估,还需要NG-RANSAC。请按照https://github.com/vislearn/ngransac的说明安装该库。

演示

然后,运行以下脚本来启动一个从一对图像和点云估计光流和场景流的演示:

python demo.py --model camliraft --weights /path/to/camliraft/checkpoint.pt

请注意,CamLiRAFT对距离较远的物体不太稳健,因为网络仅在深度小于35m的数据上进行了训练。如果您在自己的数据上得到了不好的结果,请尝试将点云的深度缩放到5~35m的范围内。

评估CamLiFlow和CamLiRAFT

FlyingThings3D

首先,下载并预处理数据集(详细说明请参见 preprocess_flyingthings3d_subset.py):

python preprocess_flyingthings3d_subset.py --input_dir /mnt/data/flyingthings3d_subset

然后,下载预训练权重 camliraft_things150e.pt 并保存到 checkpoints/camliraft_things150e.pt

现在您可以重现表2中的结果(参见扩展论文):

python eval_things.py testset=flyingthings3d_subset model=camliraft ckpt.path=checkpoints/camliraft_things150e.pt

KITTI

首先,下载以下部分:

解压它们并按如下方式组织目录:

datasets/kitti_scene_flow
├── testing
│   ├── calib_cam_to_cam
│   ├── calib_imu_to_velo
│   ├── calib_velo_to_cam
│   ├── disp_ganet
│   ├── flow_occ
│   ├── image_2
│   ├── image_3
│   ├── semantic_ddr
└── training
    ├── calib_cam_to_cam
    ├── calib_imu_to_velo
    ├── calib_velo_to_cam
    ├── disp_ganet
    ├── disp_occ_0
    ├── disp_occ_1
    ├── flow_occ
    ├── image_2
    ├── image_3
    ├── obj_map
    ├── semantic_ddr

然后,下载预训练权重 camliraft_things150e_kitti800e.pt 并保存到 checkpoints/camliraft_things150e_kitti800e.pt

要重现利用刚体假设的结果(SF-all: 4.97%):

python kitti_submission.py testset=kitti model=camliraft ckpt.path=checkpoints/camliraft_things150e_kitti800e.pt

要重现使用刚性背景细化的结果(SF-all: 4.26%),您需要进一步细化背景场景流:

python refine_background.py

结果保存在 submission/testing 中。初始的非刚性估计用 _initial 后缀表示。

Sintel

首先,从以下链接下载光流数据集: http://sintel.is.tue.mpg.de 和深度数据集: https://sintel-depth.csail.mit.edu/landing

解压它们并按如下方式组织目录:

datasets/sintel
├── depth
│   ├── README_depth.txt
│   ├── sdk
│   └── training
└── flow
    ├── bundler
    ├── flow_code
    ├── README.txt
    ├── test
    └── training

然后,下载预训练权重 camliraft_things80e.pt 并保存到 checkpoints/camliraft_things80e.pt

现在您可以重现表4中的结果(参见扩展论文):

python eval_sintel.py testset=sintel model=camliraft ckpt.path=checkpoints/camliraft_things80e.pt

评估 CamLiRAFT-L

FlyingThings3D

数据预处理有两种不同的方式。第一种设置是由HPLFlowNet提出的,在预处理过程中只保留非遮挡点。第二种设置由FlowNet3D提出,保留遮挡点。

# 非遮挡
python eval_things_noc_sf.py testset=flyingthings3d_subset_hpl model=camlipwc_l ckpt.path=checkpoints/camliraft_l_best_things_noc.pt
# 遮挡
python eval_things_occ_sf.py testset=flyingthings3d_subset_flownet3d model=camliraft_l ckpt.path=checkpoints/camliraft_l_best_things_occ.pt

KITTI

与FlyingThings3D一样,数据预处理有两种不同的方式。我们报告了两种设置的结果。

# 非遮挡
python eval_kitti_noc_sf.py testset=kitti model=camliraft_l ckpt.path=checkpoints/camliraft_l_best_kitti_noc.pt
# 遮挡
python eval_kitti_occ_sf.py testset=kitti model=camliraft_l ckpt.path=checkpoints/camliraft_l_best_kitti_occ.pt

训练

FlyingThings3D

在训练之前,您需要预处理FlyingThings3D数据集(详细说明请参见 preprocess_flyingthings3d_subset.py)。

在FlyingThings3D上训练CamLiRAFT(150个epoch):

python train.py trainset=flyingthings3d_subset valset=flyingthings3d_subset model=camliraft

整个训练过程在4个RTX 3090 GPU上大约需要3天。

KITTI

使用在FlyingThings3D上训练的权重在KITTI上微调模型:

python train.py trainset=kitti valset=kitti model=camliraft ckpt.path=checkpoints/camliraft_things150e.pt

整个训练过程在4块RTX 3090 GPU上大约需要0.5天。我们使用最后一个检查点(第800个)来生成提交结果。

引用

如果您在研究中发现它们有用,请引用:

@article{liu2023learning,
  title   = {Learning Optical Flow and Scene Flow with Bidirectional Camera-LiDAR Fusion},
  author  = {Haisong Liu and Tao Lu and Yihui Xu and Jia Liu and Limin Wang},
  journal = {arXiv preprint arXiv:2303.12017},
  year    = {2023}
}

@inproceedings{liu2022camliflow,
  title     = {Camliflow: bidirectional camera-lidar fusion for joint optical flow and scene flow estimation},
  author    = {Liu, Haisong and Lu, Tao and Xu, Yihui and Liu, Jia and Li, Wenjie and Chen, Lijun},
  booktitle = {Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition},
  pages     = {5791--5801},
  year      = {2022}
}
项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号