首页
/ Ultralytics YOLO 目标检测数据集指南:YOLO 格式、NDJSON 格式与 COCO 等标注格式转换

Ultralytics YOLO 目标检测数据集指南:YOLO 格式、NDJSON 格式与 COCO 等标注格式转换

2026-09-04 18:59:41作者:伍希望

本文围绕 Ultralytics YOLO 项目官方文档 Object Detection Datasets Overview 展开,完整讲解训练目标检测模型所需的两种数据集定义格式(Ultralytics YOLO 格式与 NDJSON 格式)、仓库内置的 27 个受支持数据集、自定义数据集的接入方式,以及 COCO 标注到 YOLO 格式的转换工具。读完本文,你可以直接编写合规的 data.yaml 与标注文件、用 NDJSON 单文件数据集启动训练,并理解参数校验与格式转换在源码中的实际实现位置。

一、YOLO 检测任务支持的数据集格式

训练一个健壮、准确的目标检测模型需要一个结构完整的数据集。Ultralytics YOLO 目前提供两条等价的入口路径:

  1. Ultralytics YOLO 格式data.yaml 定义数据集根目录与各个 split 的图像/标签路径,标注以"每图一个 *.txt"方式存放在 labels/ 目录中;
  2. Ultralytics NDJSON 格式:数据集元信息与所有标注压缩在单个 .ndjson 文件中,每行一个 JSON 对象,可携带远程图片 URL。

两种格式在训练时都通过 model.train(data=...) / yolo detect train data=... 传入,框架在 check_det_dataset 中完成下载、解压、YAML 解析与路径校验;若传入的是 .ndjson 文件,则由 convert_ndjson_to_yolo_if_needed 自动触发 NDJSON 到 YOLO 目录结构的转换(见第四节)。

二、Ultralytics YOLO 格式

2.1 数据集 YAML 配置

Ultralytics YOLO 格式是一个数据集配置格式:定义数据集根目录、训练/验证/测试图像目录(或列出图像路径的 *.txt 文件)以及类别名字典。仓库中的 coco8.yaml 是最完整的参考样例:

# 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: coco8 # dataset root dir
train: images/train # train images (relative to 'path') 4 images
val: images/val # val images (relative to 'path') 4 images
test: # test images (optional)

# Classes
names:
  0: person
  1: bicycle
  2: car
  # ... COCO 全部 80 个类别

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

各字段的实际含义与约束如下(这些约束由 check_det_dataset 在运行时强制校验):

字段 必填 说明
path 数据集根目录。相对路径会先按相对自身解析,找不到时回退到 datasets/DATASETS_DIR)目录下
train / val 可取目录目录列表、或逐行列出图像路径的 *.txt 文件;缺失任一项会直接抛出 SyntaxError
test / minival 可选的测试集(minival 用于评估时快速抽检)
namesnc 二者必有其一 names{类别 ID: 名称} 字典(或列表);若只给 nc,框架自动生成 class_0 ... class_{n-1} 名称,且 names 长度必须与 nc 一致
download 支持 .zip 直链、bash ... 脚本或以 yaml 为参数的 Python 脚本,图像缺失且 autodownload 开启时自动执行
channels 图像通道数,默认 3

关于 *.txt 列表文件:以 ./ 开头的路径按该 .txt 文件所在目录解析,也可以混用绝对路径。列表文件适合只用某个目录的子集训练、跳过未标注图像、或将多个来源的图像合并进同一个 split。文档给出的示例如下:

# dataset.yaml
path: datasets/coco8 # dataset root
train: train.txt # a directory, a list e.g. [images/a, images/b], or a *.txt file
val: val.txt
names:
  0: person
# train.txt
./images/im0.jpg
./images/im1.jpg
/data/shared/im2.jpg

2.2 标签文件格式(每图一个 *.txt

标签必须导出为 YOLO 文本格式:每张图像对应一个 *.txt 文件;若图中没有目标,则不需要生成该 *.txt 文件。每个文件每行一个目标,格式为:

class x_center y_center width height

关键规则:

  • 归一化 xywh:框坐标必须是 0~1 的归一化值。若框以像素为单位,需将 x_centerwidth 除以图像宽度,y_centerheight 除以图像高度;
  • 零起索引:类别编号从 0 开始,与 names 的 key 对应;
  • 检测之外的任务(segment/pose/obb)在 5 列基础上追加多边形顶点、关键点或 4 个角点坐标,同样归一化。

标签路径的推导规则可以直接从 img2label_paths 的源码看出:框架把图像路径中的 /images/ 子串替换为 /labels/,并把扩展名换成 .txt。因此目录必须严格按下述结构组织(与 COCO8 数据集页 的示例一致):

datasets
└── coco8
    ├── images
    │   ├── train        # 4 张训练图
    │   │   └── 000000000009.jpg
    │   └── val          # 4 张验证图
    │       └── 000000000009.jpg
    └── labels
        ├── train        # 与图像同名(.txt)的标签
        │   └── 000000000009.txt
        └── val
            └── 000000000009.txt

例如一张包含 2 个人(class 0)和 1 条领带(class 27)的图,其标签文件内容为:

0 0.471429 0.637500 0.304762 0.646875
0 0.670357 0.561875 0.240476 0.740625
27 0.638393 0.639688 0.017024 0.054375

2.3 训练使用示例

# Python
from ultralytics import YOLO

model = YOLO("yolo26n.pt")  # 加载预训练模型(训练推荐)
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)
# CLI:从预训练 *.pt 模型开始训练
yolo detect train data=coco8.yaml model=yolo26n.pt epochs=100 imgsz=640

数据流方面,check_det_dataset 会在 train/val 图像缺失时:先打印缺失路径;若 YAML 中有 download 字段且 autodownload=True,则执行 .zip 下载或 bash/Python 脚本,把数据集落到 DATASETS_DIR(默认 datasets/,可通过 settings 文件修改)——这解释了为什么 coco8.yaml 只需一份 YAML 即可让框架"自举"出完整数据集。

三、Ultralytics NDJSON 格式

NDJSON(Newline Delimited JSON)格式为数据集定义提供了另一种方式:数据集元数据与标注全部存储在单个文件中,每一行是一个独立的 JSON 对象。文件由两类记录组成:

  1. Dataset record(第 1 行):数据集元信息,包括任务类型、类别名等;
  2. Image records(后续各行):单张图像的记录,包括尺寸、标注与文件路径/URL。

3.1 记录结构

数据集记录示例:

{
    "type": "dataset",
    "task": "detect",
    "name": "Example",
    "description": "COCO NDJSON example dataset",
    "url": "https://app.ultralytics.com/user/datasets/example",
    "class_names": { "0": "person", "1": "bicycle", "2": "car" },
    "bytes": 426342,
    "version": 0,
    "created_at": "2024-01-01T00:00:00Z",
    "updated_at": "2025-01-01T00:00:00Z"
}

图像记录示例(detect 任务),annotations.boxes 中每条为 [class_id, x_center, y_center, width, height],坐标归一化:

{
    "type": "image",
    "file": "image1.jpg",
    "url": "https://www.url.com/path/to/image1.jpg",
    "width": 640,
    "height": 480,
    "split": "train",
    "annotations": {
        "boxes": [
            [0, 0.525, 0.376, 0.284, 0.418],
            [1, 0.735, 0.298, 0.193, 0.337]
        ]
    }
}

3.2 六类任务的标注字段

annotations 对象中的键随任务类型变化,文档列出了全部 6 种:

任务 元素格式
detect boxes [class_id, x_center, y_center, width, height]
segment segments [class_id, x1, y1, x2, y2, x3, y3, ...] 多边形顶点
pose pose [class_id, x_center, y_center, width, height, x1, y1, v1, x2, y2, v2, ...],关键点为 bbox 后重复的 (x, y, v) 三元组,v 为可见性:0=未标注、1=被遮挡、2=可见;关键点数量由数据集决定(如 COCO pose 为 17 个关键点 = bbox 后 51 个值)
obb obb [class_id, x1, y1, x2, y2, x3, y3, x4, y4],四个角点按从左上角开始的顺时针顺序定义旋转框,全部归一化
classify classification [class_id]
depth 数据集记录声明 depth_scale(如 { "type": "dataset", "task": "depth", "depth_scale": 1000 }),图像记录另附 "depth": { "url": "..." } 指向配对的 uint16 深度 PNG

pose 与 depth 的两个细节在源码中有对应实现:pose 数据集若未声明 kpt_shape,转换时 _infer_ndjson_kpt_shape 会扫描最多 50 条标注自动推断关键点形状(先按 dims=3 校验可见性值,再回退 dims=2);depth_scale 默认 1000 且必须为正有限数,深度 PNG 必须是 2 通道 uint16(校验见 check_depth_scale 相关逻辑,深度图格式说明见 Depth 数据集文档)。

3.3 自定义图像 metadata

每条 image record 可携带一个 metadata JSON 对象,存放拍摄条件、设备标识、审核状态等业务上下文,支持嵌套:

{
    "type": "image",
    "file": "airbus-wing.jpg",
    "url": "https://example.com/airbus-wing.jpg",
    "split": "train",
    "metadata": {
        "aircraft": { "family": "A350", "section": "wing" },
        "inspectionStatus": "reviewed"
    }
}

导入 Ultralytics Platform 后 metadata 与图像一起存储,可在图像全屏信息面板中查看或编辑。平台侧限制:顶层 metadata key 不超过 128 字符、单图序列化 metadata 不超过 500,000 字符、单次 NDJSON 导入的有效 metadata 总量不超过 500,000 字符。

3.4 训练使用示例

# Python
from ultralytics import YOLO

model = YOLO("yolo26n.pt")
results = model.train(data="path/to/dataset.ndjson", epochs=100, imgsz=640)
# CLI
yolo detect train data=path/to/dataset.ndjson model=yolo26n.pt epochs=100 imgsz=640

3.5 NDJSON 格式的优势

  • 单文件:全部数据集信息集中在一个文件中;
  • 可流式处理:逐行解析即可处理超大数据集,无需整体载入内存;
  • 云集成:图像记录支持远程 URL,天然适配云端训练;
  • 可扩展:可随意添加自定义 metadata 字段;
  • 版本友好:单文件格式非常适合 git 等版本控制系统。

从源码结构看,NDJSON 训练并不要求本地已经存在 YOLO 目录结构:convert_ndjson_to_yolo 会逐行读取记录(首行必须是 dataset record),生成以内容哈希命名的数据集目录 {stem}-{hash}data.yaml,并用 aiohttp 以最多 128 并发、失败重试 3 次的方式下载图像(本地 path 字段则可指向已落盘的 images/{split}/ 结构直接拷贝);若数据集缺少 val split,会固定种子从 train 中自动切出约 10% 作为验证集;转换完成后写入 hash/complete 标记,下次训练直接复用缓存,无需重复下载。相关行为在 tests/test_ndjson_converter.py 中有针对深度数据下载、depth_scale 传递与缓存复用的测试覆盖。

四、受支持的数据集

以下数据集均可通过 data=<数据集名>.yaml 直接引用(YAML 位于 ultralytics/cfg/datasets/ 目录,缺失时框架自动下载)。每个数据集的详细结构说明见各自文档页:

  • African-wildlife:非洲野生动物图像数据集,包含水牛、大象、犀牛、斑马等;
  • Argoverse:城市环境下的 3D 跟踪与运动预测数据,标注丰富;
  • Brain-tumor:脑肿瘤检测数据集,含肿瘤存在性、位置与特征的 MRI/CT 图像;
  • COCO:Common Objects in Context,80 类的大规模检测、分割与字幕数据集;
  • COCO8:COCO train 与 val 各前 4 张图的小子集(约 1 MB),适合快速验证流程;
  • COCO8-Grayscale:由 RGB 转灰度得到的单通道 COCO8,适合单通道模型评估;
  • COCO8-Multispectral:通过 RGB 波长插值得到的 10 通道多光谱 COCO8,适合谱感知模型评估(插值实现可参考 convert_to_multispectral);
  • COCO12-Formats:12 张图像覆盖 12 种图像格式(AVIF、BMP、DNG、HEIC、JP2、JPEG、JPG、MPO、PNG、TIF、TIFF、WebP),用于验证图像加载管线;
  • COCO16 / COCO32 / COCO64:COCO train2017 前 16/32/64 张图(8+8 / 16+16 / 32+32 划分)的快速测试子集,随官方资源包提供;
  • COCO128:COCO train2017 前 128 张图,适合中等规模测试;
  • Construction-PPE:工地工人安全装备标注(头盔、背心、手套、靴子、护目镜),含 no_helmet、no_goggle 等缺失装备类别,用于合规监测;
  • Global Wheat 2020:Global Wheat Challenge 2020 的小麦穗图像数据集;
  • HomeObjects-3K:床、椅、电视等家居物品数据集,适合智能家居、机器人、AR 与房间布局分析;
  • KITTI:真实驾驶场景(立体视觉、LiDAR、GPS/IMU),此处用于城市/乡村/高速公路场景下汽车、行人、骑行者的 2D 检测;
  • LVIS:1203 类的大规模检测、分割与字幕数据集;
  • Medical-pills:药片图像数据集,适用于制药质检、药片分拣与合规审查;
  • Objects365:365 类、60 万+ 标注图像的高质量检测数据集;
  • OpenImagesV7:Google 出品,1.7M 训练图 + 42k 验证图;
  • Roboflow 100:跨 7 个成像领域的 100 个数据集组成的检测评测基准;
  • Signature:文档签名标注数据集,支持文档真伪核验与欺诈检测研究;
  • SKU-110K:零售场景稠密目标检测,1.1 万+ 图像、170 万边界框;
  • TT100K:清华大学-腾讯 100K 交通标志数据集,16,817 张街景图像、221 个标志类别;
  • VisDrone:无人机视角检测与多目标跟踪数据,1 万+ 图像与视频序列;
  • VOC:Pascal VOC,20 类、1.1 万+ 图像的经典检测/分割数据集;
  • xView:俯视影像目标检测数据集,60 类、100 万+ 标注目标。

五、添加你自己的数据集

使用 Ultralytics YOLO 格式接入自有序列的步骤:

  1. 转换标注:将现有标注(VOC XML、COCO JSON、掩码图等)转为 YOLO 文本格式,坐标归一化、类别零起索引;
  2. 组织目录:按 images/{train,val} + labels/{train,val} 结构存放,标签文件名与图像同名;
  3. 编写 YAML:在数据集中创建 data.yaml,写清 pathtrainvalnames(必要时附 download);
  4. 启动训练model.train(data="path/to/data.yaml") 或 CLI 方式传入即可。

若你的数据集是掩码图(像素值 = 类别),仓库还提供了 convert_segment_masks_to_yolo_seg,可将二值掩码目录批量转为 YOLO-seg 轮廓标注(背景像素 0 跳过,轮廓至少 3 个点)。

六、标注格式转换:COCO → YOLO

对于 COCO 及其衍生格式(包括 LVIS),可以直接使用内置转换函数 convert_coco

from ultralytics.data.converter import convert_coco

convert_coco(labels_dir="path/to/coco/annotations/")

该函数把基于 JSON 的 COCO 标注转换为更简洁的文本 YOLO 格式,使数据集可被 Ultralytics YOLO 模型直接消费。从源码看其核心行为:

  • 类别映射category_idcoco91_to_coco80_class 从 91 类索引映射到 80 类索引(cls91to80 参数控制,默认开启);
  • 框格式变换:COCO 的 [x, y, w, h](左上角)先平移为中心点再分别除以宽高归一化,w<=0h<=0 的框与 iscrowd 标注会被丢弃;
  • 可选扩展use_segments=True 输出分割多边形(缺失/非法多边形时退化为 bbox 矩形并给出警告,RLE 掩码无法转为点列),use_keypoints=True 追加归一化关键点;
  • LVIS 支持lvis=True 时按 train2017/val2017 分目录预建标签目录并生成图像列表 txt(因为 LVIS val 含 COCO train2017 中的图像)。

LVIS 的转换示例:

convert_coco("lvis/annotations/", use_segments=True, use_keypoints=False, cls91to80=False, lvis=True)

完整的 COCO→YOLO 工作流(类别 ID 映射、目录布局、分割与关键点标注处理)见 Convert COCO Annotations to YOLOconverter API 参考

七、常见问题(FAQ)

Q1:Ultralytics YOLO 数据集格式是什么、如何组织? 它是一套数据集配置:data.yaml 中定义 pathtrainval(可选 test)路径与 names 类别字典(如 coco8.yaml);标签为每图一个 *.txt,每行 class x_center y_center width height(归一化坐标)。详见 COCO8 数据集示例

Q2:如何把 COCO 数据集转成 YOLO 格式?Ultralytics 转换工具

from ultralytics.data.converter import convert_coco
convert_coco(labels_dir="path/to/coco/annotations/")

Q3:Ultralytics YOLO 支持哪些目标检测数据集? 覆盖面很广,包括 ArgoverseCOCOLVISCOCO8Global Wheat 2020Objects365OpenImagesV7 等,完整清单见上文"受支持的数据集"一节。

Q4:如何用我的数据集开始训练 YOLO26? 先确保数据集格式正确且路径已在 YAML 中定义,然后:

from ultralytics import YOLO
model = YOLO("yolo26n.pt")  # 加载预训练模型
results = model.train(data="path/to/your_dataset.yaml", epochs=100, imgsz=640)
yolo detect train data=path/to/your_dataset.yaml model=yolo26n.pt epochs=100 imgsz=640

Q5:在哪里可以找到更多 Ultralytics YOLO 目标检测的实战示例? 文档仓库提供了预测、训练等使用入口:predict 模式文档train 模式文档,以及 YOLO26 模型族 的规格对比,可结合数据集文档按任务选型。

八、小结

  • YOLO 格式data.yamlpath/train/val/names)+ images/labels/ 镜像目录 + 归一化 xywh 文本标签;train/val/test 支持目录、目录列表与 *.txt 图像清单三种写法;
  • NDJSON 格式:单文件、每行一个 JSON 对象,覆盖 detect/segment/pose/obb/classify/depth 六类标注,支持远程 URL 与自定义 metadata,转换管线带哈希缓存与断点复用;
  • 格式转换convert_coco 一行代码打通 COCO/LVIS → YOLO,掩码数据集可用 convert_segment_masks_to_yolo_seg
  • 接入自有序列:按目录结构整理 + YAML 声明路径与类别即可训练,check_det_dataset 会对缺键、类别数不一致等常见错误提前报错,配合 27 个内置数据集 YAML 可快速起步验证。
登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.12 K
2.72 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
528
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
503
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
540
384