首页
/ Ultralytics KITTI 检测数据集:配置解析、自动下载机制与 YOLO26 训练实战

Ultralytics KITTI 检测数据集:配置解析、自动下载机制与 YOLO26 训练实战

2026-09-04 22:01:52作者:廉彬冶Miranda

本文围绕 Ultralytics 仓库中为 KITTI 数据集编写的检测配置文档与配套 YAML,系统讲解这一自动驾驶 2D 目标检测数据集的组成结构、8 个目标类别、kitti.yaml 配置的完整字段含义、首次使用时约 390.5 MB 数据集的自动下载机制,以及如何使用 YOLO26 完成训练、验证、推理与导出。读完后,你可以直接复制文中的 Python/CLI 命令在本地启动 KITTI 训练,并能从源码层面理解 Ultralytics 是如何解析数据集 YAML 并触发下载的。

数据集概述与划分

Ultralytics KITTI 是面向自动驾驶场景的 2D 目标检测数据集,由卡尔斯鲁厄理工学院(KIT)与芝加哥丰田技术学院联合发布,共包含 7,481 张带标注图像(训练集 5,985 张、验证集 1,496 张),覆盖 8 个类别。图像来自真实的城市、乡村与高速公路驾驶场景,涵盖多样的目标尺度、视角与光照条件。

需要注意的是,完整的 KITTI Vision Benchmark Suite 还涵盖深度估计、光流、立体视觉与视觉里程计等多个任务,但本仓库中的 kitti.yaml 仅面向 2D 目标检测,与 Ultralytics YOLO26 完全兼容。仓库内另有一份 depth-kitti.yaml 面向单目深度估计任务,与本文讨论的检测配置互不干扰。

数据集划分

划分 图像数 说明
Train(训练集) 5,985 用于模型训练的带标签图像
Validation(验证集) 1,496 用于评估与基准测试的留出图像

原文档特别强调:原始 KITTI 测试集不包含在 Ultralytics 配置中,因为该测试集没有公开的 ground-truth 标注,只能提交到离线评测服务器。因此 Ultralytics 版本只提供 train / val 两个划分,这也是使用 data="kitti.yaml" 时看不到 test 键的原因。

8 个目标类别

kitti.yaml 中定义了 8 个类别,覆盖驾驶场景中常见的车辆、行人与其他道路使用者:

索引 类别 含义
0 car 小汽车
1 van 厢式货车
2 truck 卡车
3 pedestrian 行人
4 person_sitting 坐姿人员
5 cyclist 骑行者
6 tram 有轨电车
7 misc 杂项(其他遮挡/困难目标等)

kitti.yaml 配置详解

数据集的完整定义位于 ultralytics/cfg/datasets/kitti.yaml,内容如下:

# parent
# ├── ultralytics
# └── datasets
#     └── kitti ← downloads here (390.5 MB)

# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: kitti # dataset root dir
train: images/train # train images (relative to 'path') 5985 images
val: images/val # val images (relative to 'path') 1496 images

names:
  0: car
  1: van
  2: truck
  3: pedestrian
  4: person_sitting
  5: cyclist
  6: tram
  7: misc

# Download script/URL (optional)
download: https://github.com/ultralytics/assets/releases/download/v0.0.0/kitti.zip

各字段含义:

  • path:数据集根目录。此处写的是相对名 kitti,实际解析时会定位到 Ultralytics 默认的数据集目录(通常为 datasets/ 下),数据集包下载解压后即形成 kitti 子目录。
  • train / val:图像子路径,相对于 path。Ultralytics 支持三种写法:目录路径(path/to/imgs)、图像清单文件(path/to/imgs.txt)或路径列表。检测数据集按 YOLO 格式组织,即 images/train/*.jpg + 同名 .txt 标签文件。
  • names:类别索引到名称的映射,训练时用于类别编号到名字的双向转换。
  • download:可选的下载地址。首次训练时若本地找不到数据集,Ultralytics 会从这里下载 390.5 MB 的 zip 包并自动解压,无需手动操作。

训练、验证、推理与导出

使用预训练 YOLO26 在 KITTI 上训练

按文档给出的示例,加载预训练 yolo26n.pt,在 KITTI 上训练 100 个 epoch、输入尺寸 640:

from ultralytics import YOLO

# Load a pretrained YOLO26 model
model = YOLO("yolo26n.pt")

# Train on kitti dataset
results = model.train(data="kitti.yaml", epochs=100, imgsz=640)

等价的 CLI 命令:

yolo detect train data=kitti.yaml model=yolo26n.pt epochs=100 imgsz=640

数据集会在首次使用时自动下载并解压到本地 datasets 目录,整个过程不需要手动步骤。训练完成后可用同一份配置直接进行验证(val)、推理(predict)和模型导出(export):

yolo detect val data=kitti.yaml model=best.pt imgsz=640
yolo detect predict data=kitti.yaml model=best.pt
yolo export model=best.pt format=onnx

首次下载与配置解析的源码级流程

"首次训练自动下载"并非魔法,其调用链在源码中清晰可查:

  1. 定位 YAML:训练入口接收到 data="kitti.yaml" 后,最终会进入 check_det_dataset 函数。该函数首先处理"裸数据集名"的容错——如果你只写 data="kitti",它会尝试补全为 kitti.yaml / kitti.yml

    if "://" not in dataset and not Path(dataset).exists() and Path(dataset).suffix not in {".yaml", ".yml"}:
        # allow bare dataset names, e.g. 'coco8' -> 'coco8.yaml', ...
        dataset = next((f"{dataset}{x}" for x in (".yaml", ".yml") if check_file(f"{dataset}{x}", hard=False)), dataset)
    file = Path(check_file(dataset))
    

    这里 check_file(定义于 ultralytics/utils/checks.py)负责在仓库内置的 ultralytics/cfg/datasets/ 目录中查找同名 YAML;本地找不到时才考虑按 download 字段下载。

  2. 读取并校验 YAMLcheck_det_dataset 加载 YAML 后做强制校验——trainval 两个键缺失会直接抛出 SyntaxError;若使用旧式的 validation 键会被自动重命名为 val 并给出警告;namesnc 至少要提供一个,否则报错。也就是说 kitti.yaml 中那 8 行 names 映射不仅是说明,而是训练流程的硬性输入。

  3. 解析路径:校验通过后,函数将 pathtrainval 解析为绝对路径并回写到解析结果中,供后续数据加载器(ultralytics/data 包)读取 images/trainimages/val 目录及其同名标签文件。

  4. 自动下载解压:若本地不存在数据集且 YAML 提供了 download 字段,下载器会拉取 zip 包、解压到 datasets/ 目录,再重新定位其中的数据集 YAML,随后继续训练流程——这正是文档中"390.5 MB 自动下载"的实现来源。

典型应用场景

KITTI 数据集支撑的 2D 检测应用包括:

  • 自动驾驶感知:训练模型检测并跟踪车辆、行人与骑行者,使自动驾驶系统安全通行;
  • ADAS 开发:基于真实行车视频构建碰撞预警、行人检测等辅助驾驶功能;
  • 交通与道路场景分析:检测并统计车辆与道路使用者,研究交通流与道路安全;
  • 计算机视觉基准:将 KITTI 作为标准基准,评估 2D 目标检测与多目标跟踪模型。

样本图像与标注说明

数据集中的典型样本是一幅真实驾驶场景的 2D 边框标注图像:KITTI 图像横跨城市、乡村与高速公路场景,在真实交通流中采集,因此模型能接触到多样的目标尺度、视角与光照。标注采用 YOLO 格式的归一化边框坐标,每张图像对应一个同名 .txt 文件,每行为 class cx cy w h

常见问题(FAQ)

KITTI 数据集用来做什么? 用于训练与评估面向自动驾驶的 2D 目标检测模型:7,481 张带标注图像、8 个类别(含 car、pedestrian、cyclist 等),广泛用于感知模型基准测试。

KITTI 有多少图像和类别? 共 7,481 张图像(5,985 训练 + 1,496 验证),无独立 test 划分;每张图像按 8 个类别标注。

是否包含 test 划分? 不包含。原始 KITTI 测试集因没有公开的 ground-truth 标注而被排除。

如何下载 KITTI 数据集? 无需手动操作:首次以 data="kitti.yaml" 训练时,Ultralytics 会自动拉取(390.5 MB)图像与标签并解压到本地数据集目录。

能否用 KITTI 训练 Ultralytics YOLO26? 可以。KITTI 与 YOLO26 完全兼容,直接提供训练与验证两种用法,使用同一份 YAML 配置即可。

引用与致谢

若在你的研究中使用 KITTI 数据集,请引用原始论文:

@article{Geiger2013IJRR,
  author = {Andreas Geiger and Philip Lenz and Christoph Stiller and Raquel Urtasun},
  title = {Vision meets Robotics: The KITTI Dataset},
  journal = {International Journal of Robotics Research (IJRR)},
  year = {2013}
}

本文内容依据 KITTI Vision Benchmark Suite 提供的数据集整理,该数据集持续推动计算机视觉、机器人与自主系统领域的进步。

延伸阅读

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.12 K
2.72 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
527
590
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
904
1.82 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
854
1.34 K
docsdocs
暂无描述
Markdown
889
5.78 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.52 K
1.01 K
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.33 K
1.45 K
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
980
502
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
540
384