news 2026/9/5 21:56:03

Ultralytics YOLO26-Depth 训练数据解析:Virtual KITTI 2 稠密深度数据集的结构、配置与实战用法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Ultralytics YOLO26-Depth 训练数据解析:Virtual KITTI 2 稠密深度数据集的结构、配置与实战用法

Ultralytics YOLO26-Depth 训练数据解析:Virtual KITTI 2 稠密深度数据集的结构、配置与实战用法

【免费下载链接】ultralyticsUltralytics YOLO26, YOLO11, YOLOv8 — object detection, instance segmentation, semantic segmentation, image classification, pose estimation, object tracking项目地址: https://gitcode.com/GitHub_Trending/ul/ultralytics

Virtual KITTI 2(vKITTI2)是 Ultralytics YOLO26-Depth 单目深度估计模型预训练数据源之一,它以照片级真实感的合成渲染方式复刻了 KITTI 驾驶场景,并提供逐像素稠密真值深度。本篇指南基于仓库中的数据集文档与配置,讲清 vKITTI2 的数据构成与训练分工、depth-vkitti2.yaml的逐字段含义(尤其是depth_scale: 100厘米约定)、自动下载与格式转换脚本的工作原理,以及直接用 Python / CLI 在该数据集上训练 YOLO26-Depth 的完整方法。

一、数据集概览:为什么用合成数据训练户外深度估计

Virtual KITTI 2(vKITTI2)是 KITTI 驾驶场景的照片级真实感合成复刻:它从原始 KITTI 数据集中克隆了 5 条序列,并在不同天气与光照条件下重新渲染,同时提供逐像素稠密真值(dense per-pixel ground truth)。

与真实 KITTI 数据相比,vKITTI2 的核心价值在于稠密性:真实 KITTI 的 Velodyne LiDAR 点云投影出的深度是稀疏的,而 vKITTI2 为每个像素都给出深度真值。这种"干净、稠密的户外驾驶几何"正是单目深度估计模型所需要的监督信号,因此 vKITTI2 与真实 KITTI 数据一起构成了 YOLO26-Depth 预训练混合数据中"户外驾驶"维度的重要互补。

关键事实(均来自 数据集文档):

  • 照片级真实感的合成KITTI 驾驶场景复刻;
  • 5 条克隆序列,在多种天气与光照下渲染;
  • 户外驾驶环境;
  • 稠密逐像素真值深度(真实 KITTI 稀疏 LiDAR 返回的稠密对应物);
  • 深度范围约80 m
  • 为 Ultralytics 深度训练混合集贡献42,520 张图像(25,780 训练 / 16,740 验证)。

二、数据集划分与文件组织

vKITTI2 深度数据集划分为两个子集:

  1. Train:25,780 张图像,配对的稠密深度图用于训练;
  2. Val:16,740 张图像,配对的稠密深度图用于训练期间的验证。

每张 RGB 图像都配有一张经过缩放的 uint16 深度 PNG,遵循 Ultralytics 统一的深度数据集格式。源数据与转换后的 PNG 均使用厘米单位(depth_scale: 100),因此可以完整保留 80 m 的训练深度范围。

深度编码约定:depth_scale = 100 的含义

深度数据集文档给出了三种常见深度 PNG 编码约定的对照(见 docs/en/datasets/depth/index.md):

约定depth_scale分辨率最大可编码深度
默认 / ARKitScenes10001 mm65.535 m
KITTI2563.90625 mm255.996 m
Virtual KITTI 21001 cm655.35 m

也就是说,vKITTI2 的深度 PNG 中像素值 100 代表 1 米(厘米级量化)。uint16 PNG 把编码值0保留给无效像素,因此 vKITTI2 约定下共有 65,535 个正深度值可用。需要注意的是,上表中的最大深度是存储上限而非训练上限——数据集可以通过更小的max_depth独立控制参与损失与评估的深度区间,vKITTI2 的 YAML 中即为 80 m。

这套约定的底层实现在 ultralytics/data/utils.py 中:

  • DEPTH_PNG_SCALE = 1000是默认的毫米级量化常量;
  • save_depth_png(path, depth, scale=1000)把米制浮点数组按scale量化为 uint16 PNG,无效像素(NaN或非正值)编码为0,并在超出 uint16 可表示范围时抛出异常;
  • load_depth(path, scale=1000)反向解码:读取 uint16 PNG 后除以scale得到米制深度,也支持直接读取米制浮点 NPY。

目录布局与"images → depth"配对规则

转换后的数据采用标准并行目录结构:

depth-vkitti2/ ├── images/ │ ├── train/ # RGB 图像 │ └── val/ └── depth/ ├── train/ # 配对的 16 位 *.png 深度图 └── val/

加载器通过把路径中的images目录分量替换为depth来定位深度文件(优先.png,回退.npy),这一逻辑见 DepthDataset._depth_path_for。此外 get_image_and_label 会在加载时用cv2.resize(..., INTER_NEAREST)把深度图对齐到图像尺寸,因此深度图可以与 RGB 图像分辨率不同,只要宽高比一致即可。数据集缓存哈希同样纳入了depth_scale(get_cache_hash),修改该字段会触发缓存重建,避免旧编码被误读。

三、在 YOLO26-Depth 预训练中的角色

Virtual KITTI 2 是用于预训练 Ultralytics YOLO26-Depth 模型的大规模多数据集混合(约 219 万张图像)中的训练源之一。该混合集横跨室内(≤10 m)到户外(约 80 m)的深度范围,完整数据源清单可在 深度数据集总览 中查阅(ARKitScenes、SUN RGB-D、DIODE、Hypersim、TartanAir、vKITTI2、KITTI、ImageNet 伪标注等)。在这一混合中,vKITTI2 为稀疏的真实 KITTI LiDAR 真值提供了稠密的合成户外驾驶对应物。

需要明确的一点:该配置下没有独立的 vKITTI2 留出基准。预训练得到的模型统一在标准单目深度基准上评估:NYU Depth V2、KITTI、Make3D、ETH3D 和 iBims-1(各基准说明见 docs/en/datasets/depth/)。

验证指标的实现见 DepthValidator:它从数据 YAML 读取max_depth(默认 100.0)构造DepthMetrics,只统计真值深度落在有效区间内的像素,输出 delta1 / abs_rel / rmse / silog 等标准深度估计指标。

四、数据集 YAML 逐字段解析

仓库内置了该数据集的完整配置 ultralytics/cfg/datasets/depth-vkitti2.yaml,内容如下(保留原文注释):

# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license # Virtual KITTI 2 dataset for monocular depth estimation — photorealistic synthetic outdoor driving, dense per-pixel depth # Documentation: https://docs.ultralytics.com/datasets/depth/vkitti2 # Example usage: yolo depth train data=depth-vkitti2.yaml model=yolo26n-depth.pt # parent # ├── ultralytics # └── datasets # └── depth-vkitti2 ← downloads here (15 GB archives, ~85 GB converted) # ├── images/{train,val} # RGB images # └── depth/{train,val} # paired 16-bit *.png depth maps (images/ -> depth/) # If an interrupted download leaves a partial dataset, delete the depth-vkitti2 dir and re-run to rebuild it. path: depth-vkitti2 # dataset root dir (relative to Ultralytics settings 'datasets_dir') train: images/train # train images (relative to 'path') 25780 images val: images/val # val images (relative to 'path') 16740 images max_depth: 80 # (m) maximum valid depth; GT beyond this is excluded from val metrics nc: 1 names: 0: depth channels: 3 depth_scale: 100 # source PNG value 100 = 1 meter (centimeters)

字段说明:

字段取值说明
pathdepth-vkitti2数据集根目录,相对于 Ultralytics 设置中的datasets_dir;下载脚本会自动把数据落在此处
trainimages/train训练图像目录,25,780 张
valimages/val验证图像目录,16,740 张
max_depth80最大有效深度(米);真值超过该值的像素不计入验证指标(见 DepthMetrics 的 Eigen 式评估协议)
nc/names1/{0: depth}深度任务的单"类"约定
channels3RGB 三通道
depth_scale100PNG 像素值 100 = 1 米(厘米单位),用于解码深度 PNG

自动下载与格式转换脚本

YAML 的download段内嵌了一个完整的转换脚本,首次引用该 YAML 时会自动执行:

  1. 从 Naver Labs 官方镜像下载vkitti_2.0.3rgbdepth两个 tar 归档(合计约 15 GB)到source/目录;
  2. 遍历rgb_*.jpg源文件,按路径中解析出scene/variation/camera信息(源布局为Scene01/clone/frames/rgb/Camera_0/rgb_00000.jpg);
  3. 划分规则:Scene20 归入 val,其余所有场景归入 train
  4. 读取同名配对深度 PNG,用(depth / 100).clip(max=80)把厘米单位换算为米并裁剪到 80 m,再通过 save_depth_png 以scale=100(厘米)写回 uint16 PNG;
  5. 将 RGB 图像重命名并移动到images/{split}/,最后删除source/原始归档(转换后约 85 GB)。

脚本注释还给出了一条实用的运维提示:如果下载中断留下了残缺数据集,删除depth-vkitti2目录后重新运行即可重建。

五、实战:在 vKITTI2 上训练 YOLO26-Depth

以下示例基于 docs/en/datasets/depth/vkitti2.md 原文,以 640 输入尺寸训练yolo26n-depth。完整参数列表见 训练指南。

Python 方式:

from ultralytics import YOLO # Load a model model = YOLO("yolo26n-depth.pt") # load a pretrained model (recommended for training) # Train the model results = model.train(data="depth-vkitti2.yaml", epochs=100, imgsz=640)

CLI 方式:

# Start training from a pretrained *.pt model yolo depth train data=depth-vkitti2.yaml model=yolo26n-depth.pt epochs=100 imgsz=640

几点实践提示:

  • data=depth-vkitti2.yaml指向仓库内置配置 ultralytics/cfg/datasets/depth-vkitti2.yaml;首次运行会自动触发上述下载与转换流程(约 15 GB 归档、转换后约 85 GB,请预留磁盘空间);
  • 若希望做大规模混合训练,也可以按 深度数据集总览 的方式,让train字段列出多个图像目录,把 vKITTI2 与其他数据源组合;
  • 验证阶段会按 YAML 中的max_depth: 80过滤有效像素,报告 delta1 / abs_rel / rmse / silog 等指标(见 docs/en/datasets/depth/index.md 的 FAQ 一节)。

预训练模型家族

YOLO26 深度家族权重yolo26n-depth.ptyolo26s-depth.ptyolo26m-depth.ptyolo26l-depth.ptyolo26x-depth.pt均自动从 Ultralytics releases 下载,且都训练于包含 Virtual KITTI 2 在内的多数据集混合。各模型的基准成绩与下载方式汇总在 深度估计任务页(vKITTI2 在该表中以 80 m 深度范围、约 4.3 万张图像列于训练源一侧)。

六、引用与致谢

如果你的研究或开发工作使用了 Virtual KITTI 2 数据集,请引用原始论文:

@article{cabon2020vkitti2, title={Virtual KITTI 2}, author={Yohann Cabon and Naila Murray and Martin Humenberger}, journal={arXiv preprint arXiv:2001.10773}, year={2020} }

感谢 Virtual KITTI 2 的创作者将这一合成驾驶数据集提供给计算机视觉社区。

小结

  • vKITTI2 以合成渲染方式复刻 5 条 KITTI 序列,提供 42,520 张"RGB + 稠密逐像素深度"样本,深度范围约 80 m;
  • 它是 YOLO26-Depth 预训练混合(约 219 万张)中的合成户外驾驶源,与稀疏的真实 KITTI LiDAR 真值互补,本身不单独作为评估基准;
  • 内置 depth-vkitti2.yaml 采用厘米级depth_scale: 100编码与max_depth: 80指标裁剪,并内置约 15 GB 归档的自动下载与转换脚本(Scene20 → val,其余场景 → train);
  • 通过yolo depth train data=depth-vkitti2.yaml model=yolo26n-depth.pt即可复现文档中的训练流程,深度加载、配对与解码分别由 DepthDataset 和 load_depth / save_depth_png 实现。

【免费下载链接】ultralyticsUltralytics YOLO26, YOLO11, YOLOv8 — object detection, instance segmentation, semantic segmentation, image classification, pose estimation, object tracking项目地址: https://gitcode.com/GitHub_Trending/ul/ultralytics

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/5 21:53:20

安卓推箱子高分项目:Java+Canvas原生开发实战

简介:本资源是一套基于Android Studio开发的推箱子小游戏完整项目源码,专为安卓课程设计、期末大作业及初学者实践打造,适用于计算机科学、人工智能、通信工程等专业在校学生及入门开发者。项目已通过本地编译与功能测试,评审得分…

作者头像 李华
网站建设 2026/9/5 21:51:12

用AI+Skill约束,5分钟生成Fastadmin后台插件

Fastadmin 插件开发能不能通过 AI 对话直接搞定?能,但前提不是让 AI 自由发挥,而是先给它一份针对 Fastadmin 的 Skill 约束。我把平时做 Fastadmin 后台插件时最容易遗漏的开发规范整理成一个 Skill 文件,然后让 AI 按这套规范直…

作者头像 李华
网站建设 2026/9/5 21:48:38

全开源微教育系统实战:从源码解析到营销模块与数据看板二次开发

简介:这是一套面向教育行业数字化转型的全开源微信小程序源码,适用于在线教育机构、知识付费平台及教培从业者快速搭建具备营销与数据分析能力的轻量级教学服务平台。资源基于微教育3.15.22全能版深度定制,集成营销模块(如拼团、分…

作者头像 李华
网站建设 2026/9/5 21:44:26

MCP协议实战:让AI稳定调用工具与服务的工程指南

2026 年还在聊 MCP 协议,听上去不太新鲜,但真正把它用顺手的团队其实不多。MCP(Model Context Protocol,模型上下文协议)在经历了快速扩张后,已经变成了 Agent 后端的事实接入标准。但“接入标准”和“稳定…

作者头像 李华
网站建设 2026/9/5 21:40:13

80个Python实战项目,分阶段练成编程高手

经常会有读者在评论区问我:Python 基础语法已经过了一遍,循环、函数、列表、字典也都能看懂,但一到自己动手就不知道从哪里入手。还有人干脆把“Python 安装好了”当成“已经学会 Python 了”,然后刷了半个月视频,代码…

作者头像 李华