首页
/ Ultralytics YOLO 交通标志检测实战:TT100K 数据集的下载、配置与 YOLO26 训练全流程

Ultralytics YOLO 交通标志检测实战:TT100K 数据集的下载、配置与 YOLO26 训练全流程

2026-09-04 12:06:22作者:何举烈Damon

本文基于 Ultralytics 仓库的 TT100K 数据集文档 与仓库内真实配置文件 TT100K.yaml 展开,完整介绍清华大学-腾讯 TT100K 交通标志数据集的构成、221 个类别体系、自动下载与 YOLO 格式转换机制,以及如何用 YOLO26 在该数据集上完成训练、验证与高分辨率小目标调优,帮助你在自动驾驶感知与 ADAS 场景中直接上手交通标志检测。

数据集概述:为什么 TT100K 是小目标检测的难题基准

TT100K(Tsinghua-Tencent 100K)是清华大学与腾讯联合发布的交通标志检测基准数据集,源自 CVPR 2016 论文 Traffic-Sign Detection and Classification in the Wild。Ultralytics 为它维护了一份开箱即用的数据集配置:

  • 16,817 张街景图像,固定划分为 6,105 张训练 / 7,641 张验证 / 3,071 张测试;
  • 221 个交通标志类别,覆盖中国道路上的限速、禁令、警告、限高/限宽与指路标志;
  • 原始基准报告了 3 万多个标志实例;
  • 名称中的 “100K” 指的是构建基准所用的约 10 万张腾讯街景图像,并非你实际下载训练的图片数量。

由于原始论文只保留训练样本不少于 100 个的类别,社区中也存在一个常用的 45 类子集;但 Ultralytics 的配置保留了全部 221 个标注类别(其中许多类别样本稀疏)。

数据集的高分辨率街景图像涵盖光照、天气、视角与距离的大幅变化,是检验 小目标检测 能力的高难度基准。

关键特征

  • 多类检测:221 个交通标志类别,覆盖限速、禁令、警告、限高/限宽与指路标志。
  • 高分辨率:2048×2048 像素图像,标志从近景大目标到远景极小目标跨度很大,对检测器的细粒度能力提出压力测试。
  • 真实路况:天气、光照、视角、遮挡变化显著。
  • 边界框标注:每个标志都有类别与边界框标注,自动转换后为 YOLO 格式。
  • 预定义划分:固定的 train / val / test 划分(6,105 / 7,641 / 3,071),保证评估口径一致。

数据集结构与 221 类别体系

三个子集共享同一套 221 类别:

划分 图像数 说明
Train 6,105 用于训练检测器的带标注交通场景图像
Validation 7,641 数据集原始的 "other" 划分,用于验证评估
Test 3,071 留出图像,用于最终评估训练后的模型

221 个类别按前缀组织为几大组(与 TT100K.yamlnames 字段完全对应):

  • 限速标志:禁止限速 pl*(如 pl5–pl120)与最低限速 pm*(如 pm5–pm55);
  • 禁令标志:一般禁令 p1p29、禁行/禁停 pn/pne、限制类 pr*(pr10–pr100);
  • 警告标志w1w67,覆盖人行横道、急转弯、湿滑路面、施工等道路危险;
  • 限高/限宽标志:限高 ph*(如 ph2–ph5.5)与限宽 pb/pw*
  • 指路标志:一般信息 i1i15、限速信息 il*(il50–il110)、其他 io、信息板 ip

典型应用场景

  • 自动驾驶感知系统;
  • 高级驾驶辅助系统(ADAS);
  • 交通监控与道路基础设施分析;
  • 城市规划与交通流量研究;
  • 高分辨率图像中的小目标计算机视觉研究。

TT100K.yaml 配置解析

数据集配置由 TT100K.yaml 定义,包含三部分:数据路径、类别名列表、自动下载与转换脚本。

路径与划分

path: TT100K          # dataset root dir
train: images/train   # train images (relative to 'path') 6105 images
val: images/val       # val images (relative to 'path') 7641 images (original 'other' split)
test: images/test     # test images (relative to 'path') 3071 images

首次训练时数据会下载到 datasets/TT100K 目录(约 18 GB),形成 images/{split}labels/{split} 的标准 YOLO 目录结构。

类别定义

names 字段以 0–220 为索引映射 221 个类别名(如 0: i156: ph1.586: pl5130: w1)。值得注意的是索引顺序按名称字典序排列而非语义分组,因此阅读标注文件时需按索引回查类别名。文件头注释同时说明:“221 traffic sign categories, 45 with sufficient training instances”,即完整类别体系中有 45 个类别训练样本充足。

自动下载与 YOLO 格式转换脚本

YAML 末尾的 download 字段是一段内嵌 Python 脚本(TT100K.yaml),其核心流程为:

  1. 下载:从清华大学服务器抓取 data.zip(原始标注为 annotations.json + 街景图像);
  2. 划分路由:按图像路径中是否含 train/test 字符串将图像归入 train/test/val 三个子集,分别拷贝到 images/{split}
  3. 格式转换tt100k2yolo(dir) 函数读取 annotations.json,将每张图像的 xmin/ymin/xmax/ymax 像素框转换为 YOLO 归一化中心点格式 cls x_center y_center width height(六位小数),并裁剪到 [0, 1] 合法区间;
  4. 写标签:每张图像对应 labels/{split}/{stem}.txt;遇到不属于 221 类的标注会被跳过并计数提示。

自动下载是如何被触发的(源码级证据)

download 脚本并不独立运行,而是由 Ultralytics 的数据集校验函数 check_det_dataset 统一驱动,调用链为:

  1. 训练入口调用 check_det_dataset(data, autodownload=True) 解析 YAML;
  2. 函数校验 train/val 键与 names/nc 合法性(utils.py),并把 path 相对路径解析到全局数据集目录 DATASETS_DIR(定义于 utils/__init__.py,默认为 datasets/,可在设置文件中修改);
  3. 当验证集路径不存在且 autodownload=True 时,脚本按 download 内容分派:URL 直链走 safe_downloadbash 前缀走子进程、其余按 Python 脚本 exec 执行(utils.py)。TT100K 正是走第三种分支,脚本内可直接引用传入的 yaml 变量(如 Path(yaml["path"]))。

这也解释了首次训练为何会“多等几分钟”:18 GB 数据下载 + 1.6 万张图像的拷贝与逐框转换。

使用方式:训练 YOLO26 交通标志检测器

!!! 注意 TT100K 首次训练时自动下载,约需 18 GB 空闲磁盘空间。

用 Python 或 CLI 均可,以下示例加载预训练模型 yolo26n.pt,训练 100 个 epoch、图像尺寸 640:

from ultralytics import YOLO

# 加载模型
model = YOLO("yolo26n.pt")  # 加载预训练模型(推荐用于训练)

# 训练模型 - 数据集首次运行时自动下载
results = model.train(data="TT100K.yaml", epochs=100, imgsz=640)
# 从预训练 *.pt 模型开始训练
# 数据集首次运行时自动下载并转换
yolo detect train data=TT100K.yaml model=yolo26n.pt epochs=100 imgsz=640

完整训练参数见 训练文档。此外 Ultralytics 还支持在浏览器平台中标注更多交通标志图像、管理 TT100K 训练任务。

应对 2048×2048 高分辨率图像的策略

TT100K 图像中交通标志往往只占画面很小一部分,单张图可能包含多尺度、多距离的多个标志,且存在车辆、植被、建筑遮挡以及昼夜/雨晴条件差异——这正是该数据集对检测器鲁棒性的考验。调优建议:

  • 初始实验先用 imgsz=640 跑通基线;
  • GPU 显存允许时提升到 imgsz=1280 并相应减小 batch,更高分辨率有助于找回远处小标志:
model.train(data="TT100K.yaml", imgsz=1280, batch=4)  # 更高分辨率以检测小标志

引用与致谢

若你在研究或开发中使用 TT100K,请引用原始论文:

@InProceedings{Zhu_2016_CVPR,
    author = {Zhu, Zhe and Liang, Dun and Zhang, Songhai and Huang, Xiaolei and Li, Baoli and Hu, Shimin},
    title = {Traffic-Sign Detection and Classification in the Wild},
    booktitle = {The IEEE Conference on Computer Vision and Pattern Recognition (CVPR)},
    month = {June},
    year = {2016}
}

感谢清华大学与腾讯为计算机视觉与自动驾驶社区创建并维护这一资源。数据集许可证为 CC BY-NC 2.0,仅限非商业用途(见 TT100K.yaml 头注释)。

常见问题

TT100K 有多少张图像? Ultralytics 配置共 16,817 张:6,105 训练、7,641 验证(原始 "other" 划分)、3,071 测试。

为什么叫 100K 却只有约 1.68 万张图? “100K” 指原始基准来源的约 10 万张腾讯街景图像;Ultralytics 配置提供其中 16,817 张并附 YOLO 格式标签,名称反映的是来源集合而非训练集规模。

TT100K 有多少类别? 221 个类别。原始论文只统计训练样本 ≥100 的 45 类,但 Ultralytics 配置保留全部 221 类。

下载多大、如何获取? 约 18 GB,使用 data="TT100K.yaml" 训练时自动下载,无需手动操作;脚本同时会在首次运行完成标注格式转换。

小结

TT100K 通过 16,817 张 2048×2048 街景图、221 个标志类别和固定三分,为交通标志小目标检测提供了贴近真实路况的基准。Ultralytics 以一份 TT100K.yaml 打通了“下载 → JSON 转 YOLO → 训练”全链路:check_det_dataset 负责触发内嵌下载脚本,yolo detect train data=TT100K.yaml model=yolo26n.pt epochs=100 imgsz=640 一行即可启动基线训练,再用 imgsz=1280 提升分辨率攻克远景小目标。所有配置与实现均可在当前仓库中直接查阅复现。

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

项目优选

收起
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
982
502
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
540
384