SC_Depth:
本仓库提供了 SC-Depth (V1、V2 和 V3) 的 pytorch lightning 实现,用于从视频中自监督学习单目深度。
在 SC-DepthV1(IJCV 2021 和 NeurIPS 2019)中,我们提出了 (i) 几何一致性损失,用于随时间推移进行尺度一致的深度预测,以及 (ii) 自发现遮罩,用于在训练过程中检测和移除动态区域和遮挡,以提高准确性。预测的深度足够准确和一致,可用于 ORB-SLAM2 系统。下面的视频展示了以点云(顶部)和颜色图(右下)形式呈现的估计深度。
在 SC-DepthV2(TPMAI 2022)中,我们证明了手持相机拍摄视频中的大相对旋转运动是室内场景无监督单目深度估计的主要挑战。基于这一发现,我们提出了自动校正网络(ARN)来处理连续视频帧之间的大相对旋转。它被集成到 SC-DepthV1 中,并与自监督损失联合训练,大大提升了性能。
在 SC-DepthV3(TPAMI 2023)中,我们提出了一个鲁棒的学习框架,用于在(高度)动态场景中进行准确和清晰的单目深度估计。由于光度损失(自监督方法中的主要损失)在动态物体区域和遮挡中无效,先前的方法在动态场景中表现出较差的准确性,并在物体边界处产生模糊的深度预测。我们提出利用外部预训练深度估计网络生成单图像深度先验,基于此提出有效的损失来约束自监督深度学习。在包括静态和动态场景的六个具有挑战性的数据集上的评估结果证明了所提方法的有效性。
定性深度估计结果:DDAD、BONN、TUM、IBIMS-1
演示视频
安装
conda create -n sc_depth_env python=3.8
conda activate sc_depth_env
conda install pytorch torchvision pytorch-cuda=11.7 -c pytorch -c nvidia
pip install -r requirements.txt
数据集
我们将视频数据集组织成以下格式,用于训练和测试模型:
数据集
-训练
--场景0000
---*.jpg(颜色图像列表)
---cam.txt(3x3相机内参矩阵)
---depth(包含地面真实深度图的文件夹,可选用于验证)
---leres_depth(包含由LeReS生成的伪深度的文件夹,训练SC-DepthV3时需要)
--场景0001
...
train.txt(包含训练场景名称)
val.txt(包含验证场景名称)
-测试
--color(包含测试图像)
--depth(包含地面真实深度)
--seg_mask(包含用于动态/静态区域深度评估的语义分割掩码)
我们提供预处理好的数据集:
训练
我们提供了一个bash脚本("scripts/run_train.sh"),展示了如何在kitti、nyu和数据集上进行训练。通常,您需要根据您的设备编辑配置文件(例如,"configs/v1/kitti.txt"),然后运行
python train.py --config $CONFIG --dataset_dir $DATASET
然后,您可以通过运行以下命令在此文件夹中启动一个tensorboard
会话
tensorboard --logdir=ckpts/
通过在浏览器中打开https://localhost:6006,您可以观察训练进度。
在您自己的数据上训练
您需要根据上述格式重新组织您自己的视频数据集以进行训练。然后,您可能会遇到三个问题:(1) 没有用于验证的地面真实深度;(2) 难以选择适当的帧率(FPS)来对视频进行子采样;(3) 没有用于训练V3的伪深度。
没有用于验证的GT深度
在训练脚本或配置文件中添加"--val_mode photo",这将使用光度损失进行验证。
python train.py --config $CONFIG --dataset_dir $DATASET --val_mode photo
对视频帧进行子采样(以获得足够的运动)用于训练
我们提供了一个脚本("generate_valid_frame_index.py"),它计算并保存每个训练场景中的"frame_index.txt"。它使用基于opencv的光流方法来计算连续帧中的相机移动。如果需要,您可能需要更改参数以在图像中检测足够的关键点(通常不需要)。一旦您按照上述格式准备好数据集,您可以通过运行以下命令来调用它
python generate_valid_frame_index.py --dataset_dir $DATASET
然后,您可以在训练脚本或配置文件中添加"--use_frame_index",以在过滤后的帧上训练模型。
python train.py --config $CONFIG --dataset_dir $DATASET --use_frame_index
生成用于训练V3的伪深度
我们在此项目中使用LeReS生成伪深度。您需要安装它并为您自己的图像生成伪深度(标准数据集的伪深度已在上面提供)。具体来说,您可以参考这行代码来保存伪深度。
此外,也可以使用其他最先进的单目深度估计模型来生成伪深度,例如DPT。
预训练模型
您需要解压并将其放入"ckpts"文件夹。然后您可以使用预训练模型运行"scripts/run_test.sh"或"scripts/run_inference.sh"。
对于v1,我们提供了在KITTI和DDAD上训练的模型。
对于v2,我们提供了在NYUv2上训练的模型。
对于v3,我们提供了在KITTI、NYUv2、DDAD、BONN和TUM上训练的模型。
测试(对完整图像进行评估)
我们提供了脚本("scripts/run_test.sh"),展示了如何在kitti、nyu和ddad数据集上进行测试。该脚本仅评估完整图像的深度准确性。有关动态/静态区域深度估计的单独评估,请参见下一节。
python test.py --config $CONFIG --dataset_dir $DATASET --ckpt_path $CKPT
演示
这里提供了一个简单的演示。您可以将您的图像放在"demo/input/"文件夹中,然后运行
python inference.py --config configs/v3/nyu.txt \
--input_dir demo/input/ \
--output_dir demo/output/ \
--ckpt_path ckpts/nyu_scv3/epoch=93-val_loss=0.1384.ckpt \
--save-vis --save-depth
您将看到结果保存在"demo/output/"文件夹中。
动态/静态区域的评估
您首先需要使用("scripts/run_inference.sh")来保存预测的深度,然后可以使用("scripts/run_evaluation.sh")进行评估。这些文件中提供了DDAD数据集的演示。通常,您需要执行以下步骤:
推理
python inference.py --config $YOUR_CONFIG \
--input_dir $TESTING_IMAGE_FOLDER \
--output_dir $RESULTS_FOLDER \
--ckpt_path $YOUR_CKPT \
--save-vis --save-depth
评估
python eval_depth.py \
--dataset $DATASET_FOLDER \
--pred_depth=$RESULTS_FOLDER \
--gt_depth=$GT_FOLDER \
--seg_mask=$SEG_MASK_FOLDER
参考文献
SC-DepthV1:
从视频中进行无监督尺度一致的深度学习(IJCV 2021)
Jia-Wang Bian, Huangying Zhan, Naiyan Wang, Zhichao Li, Le Zhang, Chunhua Shen, Ming-Ming Cheng, Ian Reid
[论文]
@article{bian2021ijcv,
title={Unsupervised Scale-consistent Depth Learning from Video},
author={Bian, Jia-Wang and Zhan, Huangying and Wang, Naiyan and Li, Zhichao and Zhang, Le and Shen, Chunhua and Cheng, Ming-Ming and Reid, Ian},
journal= {International Journal of Computer Vision (IJCV)},
year={2021}
}
这是之前会议版本的扩展:
从单目视频中进行无监督尺度一致的深度和自运动学习(NeurIPS 2019)
Jia-Wang Bian, Zhichao Li, Naiyan Wang, Huangying Zhan, Chunhua Shen, Ming-Ming Cheng, Ian Reid
[论文]
@inproceedings{bian2019neurips,
title={Unsupervised Scale-consistent Depth and Ego-motion Learning from Monocular Video},
author={Bian, Jiawang and Li, Zhichao and Wang, Naiyan and Zhan, Huangying and Shen, Chunhua and Cheng, Ming-Ming and Reid, Ian},
booktitle = {Advances in Neural Information Processing Systems (NeurIPS)},
year={2019}
}
SC-DepthV2:
用于无监督室内深度估计的自动校正网络(TPAMI 2022)
Jia-Wang Bian, Huangying Zhan, Naiyan Wang, Tat-Jun Chin, Chunhua Shen, Ian Reid
[论文]
@article{bian2021tpami,
title={Auto-Rectify Network for Unsupervised Indoor Depth Estimation},
author={Bian, Jia-Wang and Zhan, Huangying and Wang, Naiyan and Chin, Tat-Jin and Shen, Chunhua and Reid, Ian},
journal= {IEEE Transactions on Pattern Analysis and Machine Intelligence (TPAMI)},
year={2021}
}
SC-DepthV3:
SC-DepthV3:用于动态场景的鲁棒自监督单目深度估计(TPAMI 2023)
Libo Sun*, Jia-Wang Bian*, Huangying Zhan, Wei Yin, Ian Reid, Chunhua Shen
[论文]
* 表示同等贡献和共同第一作者
@article{sc_depthv3,
title={SC-DepthV3: Robust Self-supervised Monocular Depth Estimation for Dynamic Scenes},
author={Sun, Libo and Bian, Jia-Wang and Zhan, Huangying and Yin, Wei and Reid, Ian and Shen, Chunhua},
journal= {IEEE Transactions on Pattern Analysis and Machine Intelligence (TPAMI)},
year={2023}
}