SC-SfMLearner-Release
SC-SfMLearner-Release 是一款专注于从单目视频中学习深度信息的开源算法框架。它核心解决了传统无监督深度学习方法中常见的“尺度不一致”难题,即模型难以判断物体真实的大小和距离比例,导致重建结果在全局范围内失真。
该工具通过引入几何一致性损失函数,确保预测的深度图在全局尺度上保持连贯;同时利用自发现掩码机制,自动识别并剔除视频中的移动物体和遮挡区域,从而显著提升了深度估计与相机位姿推算的精度。凭借其出色的尺度一致性,SC-SfMLearner-Release 生成的数据可直接应用于单目视觉 SLAM 系统,支持高质量的点云可视化及稠密体素三维重建。
这款工具主要面向计算机视觉领域的研究人员、算法工程师及自动驾驶开发者。如果你正在探索无需昂贵激光雷达标注即可实现高精度三维感知的方案,或者需要复现 IJCV 2021 与 NeurIPS 2019 的相关学术成果,SC-SfMLearner-Release 提供了一个基于 PyTorch 的成熟基线。它不仅支持 KITTI 等主流户外数据集,还扩展了对 NYUv2 室内场景的支持,是连接学术研究与工程落地的有力助手。
使用场景
某自动驾驶初创团队正在利用车载单目摄像头采集的视频数据,构建高精度的城市道路三维地图以辅助车辆定位。
没有 SC-SfMLearner-Release 时
- 深度尺度漂移严重:传统的无监督学习方法无法保证全局尺度一致性,导致重建的街道在长距离行驶后出现明显的拉伸或压缩变形,地图无法直接用于导航。
- 动态物体干扰大:路面上行驶的车辆和行人会被错误地识别为静态背景,生成错误的“鬼影”点云,严重污染地图数据的纯净度。
- 依赖昂贵标注数据:为了修正上述误差,团队不得不花费大量资金购买激光雷达(LiDAR)真值数据进行有监督训练,大幅增加了研发成本和数据准备周期。
使用 SC-SfMLearner-Release 后
- 实现全局尺度一致:借助其几何一致性损失函数,SC-SfMLearner-Release 从视频中学习到的深度图具有稳定的全局尺度,长距离重建的道路结构准确无误,无需额外尺度校正。
- 自动剔除动态干扰:利用自发现掩码(Self-discovered mask)机制,该工具能精准检测并屏蔽移动车辆与遮挡区域,生成的点云干净清晰,显著提升了静态地图的质量。
- 纯视频无监督训练:团队仅需使用普通的单目行车记录仪视频即可完成模型训练,彻底摆脱了对激光雷达真值数据的依赖,将数据预处理时间缩短了 70% 以上。
SC-SfMLearner-Release 通过解决单目视觉中的尺度模糊与动态干扰难题,让低成本摄像头也能产出工业级的高精度三维环境感知能力。
运行环境要求
- Linux
需要 NVIDIA GPU,CUDA 10.0
未说明

快速开始
SC-Depth
请参阅我们在 https://github.com/JiawangBian/sc_depth_pl 上的新实现(V1、V2 和 V3)。
本代码库实现了论文中描述的 SC-DepthV1:
从视频中无监督学习尺度一致的深度
卞家旺、詹黄颖、王乃延、李志超、张乐、沈春华、程明铭、伊恩·里德
IJCV 2021 [PDF]
KITTI 数据集(左)和真实世界数据(右)上的点云可视化
使用估计的深度(右下角)进行密集体素重建(左)
贡献
- 一种几何一致性损失,使预测的深度在全局尺度上保持一致。
- 一种自发现的掩码,用于检测运动物体和遮挡,以提高精度。
- 尺度一致的预测结果,可用于单目视觉 SLAM 系统。
如果您认为我们的工作对您的研究有帮助,请考虑引用我们的论文:
@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 版本相比)
请注意,这是改进后的版本,您可以在“Release / NeurIPS Version”中找到 NeurIPS 版本,以复现论文中报告的结果。与 NeurIPS 版本相比,我们 (1) 更改了网络结构,使用在 ImageNet 上预训练的 Resnet18 和 Resnet50 模型作为深度和位姿编码器。 (2) 添加了 Monodepth2 的“auto_mask”,以去除静止点。 (3) 将深度和位姿预测集成到 ORB-SLAM 系统中。 (4) 增加了在 NYUv2 室内数据集上的训练和测试。详情请参见 Unsupervised-Indoor-Depth。
前言
该代码库是在 Ubuntu 16.04 上使用 Python 3.6、Pytorch 1.0.1 和 CUDA 10.0 开发并测试的。它基于 Clement Pinard 的 SfMLearner 实现。
先决条件
pip3 install -r requirements.txt
数据集
请参阅“scripts/run_prepare_data.sh”。
对于 KITTI Raw 数据集,可以使用官方网站提供的脚本 http://www.cvlibs.net/download.php?file=raw_data_downloader.zip 下载数据集。
对于 KITTI Odometry 数据集,需要下载带有彩色图像的数据集。
或者您也可以从以下链接下载我们预处理好的数据集:
kitti_256(适用于 KITTI Raw) | kitti_vo_256(适用于 KITTI Odometry) | kitti_depth_test(Eigen 分割) | kitti_vo_test(序列 09-10)
训练
“scripts”文件夹提供了几个训练和测试的示例。
您可以通过运行以下命令在 KITTI Raw 数据集上训练深度模型:
sh scripts/train_resnet18_depth_256.sh
或者通过以下命令在 KITTI Odometry 数据集上训练位姿模型:
sh scripts/train_resnet50_pose_256.sh
然后您可以在此文件夹中启动一个 tensorboard 会话:
tensorboard --logdir=checkpoints/
并在浏览器中打开 https://localhost:6006 查看训练进度。
评估
您可以通过运行以下命令评估 Eigen 分割下的深度:
sh scripts/test_kitti_depth.sh
通过以下命令评估视觉里程计:
sh scripts/test_kitti_vo.sh
并通过以下命令可视化深度结果:
sh scripts/run_inference.sh
预训练模型
要评估 NeurIPS 模型,请从“Release/NeurIPS version”下载代码。
深度结果
KITTI raw 数据集(Eigen 分割)
| 模型 | Abs Rel | Sq Rel | RMSE | RMSE(log) | Acc.1 | Acc.2 | Acc.3 |
|---|---|---|---|---|---|---|---|
| resnet18 | 0.119 | 0.857 | 4.950 | 0.197 | 0.863 | 0.957 | 0.981 |
| resnet50 | 0.114 | 0.813 | 4.706 | 0.191 | 0.873 | 0.960 | 0.982 |
NYUv2 数据集(原始视频)
| 模型 | Abs Rel | Log10 | RMSE | Acc.1 | Acc.2 | Acc.3 |
|---|---|---|---|---|---|---|
| resnet18 | 0.159 | 0.068 | 0.608 | 0.772 | 0.939 | 0.982 |
| resnet50 | 0.157 | 0.067 | 0.593 | 0.780 | 0.940 | 0.984 |
NYUv2 数据集(由 Unsupervised-Indoor-Depth 校正后的图像)
| 模型 | Abs Rel | Log10 | RMSE | Acc.1 | Acc.2 | Acc.3 |
|---|---|---|---|---|---|---|
| resnet18 | 0.143 | 0.060 | 0.538 | 0.812 | 0.951 | 0.986 |
| resnet50 | 0.142 | 0.060 | 0.529 | 0.813 | 0.952 | 0.987 |
KITTI odometry 数据集上的视觉里程计结果
网络预测(在 00-08 上训练)
| 指标 | 序列 09 | 序列 10 |
|---|---|---|
| t_err (%) | 7.31 | 7.79 |
| r_err (度/100m) | 3.05 | 4.90 |
Pseudo-RGBD SLAM 输出(SC-Depth 在 ORB-SLAM2 中的集成)
| 指标 | 序列 09 | 序列 10 |
|---|---|---|
| t_err (%) | 5.08 | 4.32 |
| r_err (度/100m) | 1.05 | 2.34 |
相关项目
SfMLearner-Pytorch(CVPR 2017,我们的基准框架。)
Depth-VO-Feat(CVPR 2018,基于立体视频训练深度和视觉里程计)
DF-VO(ICRA 2020,利用尺度一致的深度结合光流实现更精确的视觉里程计)
Kitti-Odom-Eval-Python(用于 KITTI 视觉里程计评估的 Python 代码)
Unsupervised-Indoor-Depth(将 SC-SfMLearner 应用于 NYUv2 数据集)
版本历史
NeurIPS-Version2020/03/15常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
ML-For-Beginners
ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。
funNLP
funNLP 是一个专为中文自然语言处理(NLP)打造的超级资源库,被誉为"NLP 民工的乐园”。它并非单一的软件工具,而是一个汇集了海量开源项目、数据集、预训练模型和实用代码的综合性平台。 面对中文 NLP 领域资源分散、入门门槛高以及特定场景数据匮乏的痛点,funNLP 提供了“一站式”解决方案。这里不仅涵盖了分词、命名实体识别、情感分析、文本摘要等基础任务的标准工具,还独特地收录了丰富的垂直领域资源,如法律、医疗、金融行业的专用词库与数据集,甚至包含古诗词生成、歌词创作等趣味应用。其核心亮点在于极高的全面性与实用性,从基础的字典词典到前沿的 BERT、GPT-2 模型代码,再到高质量的标注数据和竞赛方案,应有尽有。 无论是刚刚踏入 NLP 领域的学生、需要快速验证想法的算法工程师,还是从事人工智能研究的学者,都能在这里找到急需的“武器弹药”。对于开发者而言,它能大幅减少寻找数据和复现模型的时间;对于研究者,它提供了丰富的基准测试资源和前沿技术参考。funNLP 以开放共享的精神,极大地降低了中文自然语言处理的开发与研究成本,是中文 AI 社区不可或缺的宝藏仓库。
cs-video-courses
cs-video-courses 是一个精心整理的计算机科学视频课程清单,旨在为自学者提供系统化的学习路径。它汇集了全球知名高校(如加州大学伯克利分校、新南威尔士大学等)的完整课程录像,涵盖从编程基础、数据结构与算法,到操作系统、分布式系统、数据库等核心领域,并深入延伸至人工智能、机器学习、量子计算及区块链等前沿方向。 面对网络上零散且质量参差不齐的教学资源,cs-video-courses 解决了学习者难以找到成体系、高难度大学级别课程的痛点。该项目严格筛选内容,仅收录真正的大学层级课程,排除了碎片化的简短教程或商业广告,确保用户能接触到严谨的学术内容。 这份清单特别适合希望夯实计算机基础的开发者、需要补充特定领域知识的研究人员,以及渴望像在校生一样系统学习计算机科学的自学者。其独特的技术亮点在于分类极其详尽,不仅包含传统的软件工程与网络安全,还细分了生成式 AI、大语言模型、计算生物学等新兴学科,并直接链接至官方视频播放列表,让用户能一站式获取高质量的教育资源,免费享受世界顶尖大学的课堂体验。
scikit-learn
scikit-learn 是一个基于 Python 构建的开源机器学习库,依托于 SciPy、NumPy 等科学计算生态,旨在让机器学习变得简单高效。它提供了一套统一且简洁的接口,涵盖了从数据预处理、特征工程到模型训练、评估及选择的全流程工具,内置了包括线性回归、支持向量机、随机森林、聚类等在内的丰富经典算法。 对于希望快速验证想法或构建原型的数据科学家、研究人员以及 Python 开发者而言,scikit-learn 是不可或缺的基础设施。它有效解决了机器学习入门门槛高、算法实现复杂以及不同模型间调用方式不统一的痛点,让用户无需重复造轮子,只需几行代码即可调用成熟的算法解决分类、回归、聚类等实际问题。 其核心技术亮点在于高度一致的 API 设计风格,所有估算器(Estimator)均遵循相同的调用逻辑,极大地降低了学习成本并提升了代码的可读性与可维护性。此外,它还提供了强大的模型选择与评估工具,如交叉验证和网格搜索,帮助用户系统地优化模型性能。作为一个由全球志愿者共同维护的成熟项目,scikit-learn 以其稳定性、详尽的文档和活跃的社区支持,成为连接理论学习与工业级应用的最
keras
Keras 是一个专为人类设计的深度学习框架,旨在让构建和训练神经网络变得简单直观。它解决了开发者在不同深度学习后端之间切换困难、模型开发效率低以及难以兼顾调试便捷性与运行性能的痛点。 无论是刚入门的学生、专注算法的研究人员,还是需要快速落地产品的工程师,都能通过 Keras 轻松上手。它支持计算机视觉、自然语言处理、音频分析及时间序列预测等多种任务。 Keras 3 的核心亮点在于其独特的“多后端”架构。用户只需编写一套代码,即可灵活选择 TensorFlow、JAX、PyTorch 或 OpenVINO 作为底层运行引擎。这一特性不仅保留了 Keras 一贯的高层易用性,还允许开发者根据需求自由选择:利用 JAX 或 PyTorch 的即时执行模式进行高效调试,或切换至速度最快的后端以获得最高 350% 的性能提升。此外,Keras 具备强大的扩展能力,能无缝从本地笔记本电脑扩展至大规模 GPU 或 TPU 集群,是连接原型开发与生产部署的理想桥梁。


