YOLO 数据集配置文件(.yaml)详解

📌 关键要点

data=coco128.yaml 中的 yaml 是数据集配置文件——告诉训练程序"数据在哪、有哪些类别",不是给人看的说明文档。


一、什么是数据集配置文件

data=coco128.yaml 里那个 yaml,官方术语叫 dataset configuration file(数据集配置文件)。它是一份给程序读的参数表,负责把"图片、标注、类别"三者对应起来。

以内置的 coco128.yaml 为例:

path: coco128              # 数据集根目录(相对当前工作目录)
train: images/train2017    # 训练图片路径(相对 path)
val: images/train2017      # 验证图片路径(相对 path)
test:                      # 测试集(可选)

names:                     # 类别定义(id → 类别名)
  0: person
  1: bicycle
  2: car
  ...

download: https://github.com/ultralytics/assets/releases/download/v0.0.0/coco128.zip  # 自动下载地址(可选)
字段 作用 是否必填
path 数据集根目录 必填
train 训练图片路径(目录 / txt 列表 / 列表) 必填
val 验证图片路径 必填
test 测试图片路径 可选
names 类别字典:id: 名称 必填
download 数据下载地址或脚本 可选

💡 找配置文件的顺序:yolo 命令先找当前目录下同名 yaml(自定义优先),找不到再去 ultralytics 安装包内置目录(本机完整路径见第二章)。


二、ultralytics 内置的 42 个数据集配置

本机完整路径:D:\B\software\anaconda\envs\CondaBYP\Lib\site-packages\ultralytics\cfg\datasets\

定位方法:命令行执行 pip show ultralytics 可查看安装位置;换环境/换机器后,用此方法重新定位该目录。

安装 ultralytics 就自带这些配置文件,按用途分类:

通用检测(COCO 系)

经典基准数据集

航拍 / 遥感

垂直场景

姿态估计

用法都一样:yolo train data=VisDrone.yaml、yolo val data=coco.yaml……选哪个数据集就写哪个文件名。

2.1 42 个配置文件 → 6 种任务完整映射

YOLO 实际支持 6 种任务:detect(检测)、segment(实例分割)、semantic(语义分割,YOLO26 新增)、classify(分类)、pose(姿态)、obb(旋转框)。42 个配置文件按任务分布如下:

① 目标检测 detect(23 个)——输出矩形框

配置文件 说明
coco.yaml / coco128.yaml / coco8.yaml COCO 80 类(完整/入门/极速)
coco12-formats.yaml 12 张图测试所有图片格式
coco8-grayscale.yaml / coco8-multispectral.yaml 灰度 / 10 通道多光谱变体
VOC.yaml PASCAL VOC 20 类
lvis.yaml 1200+ 类长尾检测
Objects365.yaml / open-images-v7.yaml 365 类街景 / 600 类
kitti.yaml / Argoverse.yaml 自动驾驶
VisDrone.yaml / xView.yaml / dota8-multispectral.yaml 无人机/遥感航拍
SKU-110K.yaml / TT100K.yaml 货架商品 / 交通标志
african-wildlife.yaml / GlobalWheat2020.yaml / medical-pills.yaml / construction-ppe.yaml / signature.yaml / HomeObjects-3K.yaml 垂直场景(动物/小麦/药片/安全帽/签名/室内)

② 实例分割 segment(6 个)——每个目标独立像素掩码

配置文件 说明
coco128-seg.yaml / coco8-seg.yaml COCO 80 类分割
brain-tumor.yaml / crack-seg.yaml / package-seg.yaml / carparts-seg.yaml 脑肿瘤 / 裂缝 / 包裹 / 汽车零件

③ 语义分割 semantic(3 个,YOLO26 新任务)——整幅图逐像素分类

配置文件 说明
ade20k.yaml ADE20K 场景解析 150 类
cityscapes.yaml / cityscapes8.yaml 街景 19 类(masks_dir 掩码格式)

④ 图像分类 classify(1 个)——整图一个类别

配置文件 说明
ImageNet.yaml ImageNet 1000 类

⑤ 姿态估计 pose(5 个)——关键点

配置文件 说明
coco-pose.yaml / coco8-pose.yaml 人体 17 关键点
hand-keypoints.yaml 手部 21 关键点
dog-pose.yaml / tiger-pose.yaml 动物姿态

⑥ 旋转框检测 obb(4 个)——带角度的框,适合航拍

配置文件 说明
dota8.yaml / dota128.yaml / DOTAv1.yaml / DOTAv1.5.yaml 航拍遥感旋转框(飞机/轮船等任意角度目标)

合计:23 + 6 + 3 + 1 + 5 + 4 = 42 个

五大任务框架 vs YOLO 6 任务(对照 AI 视觉算法总览):

五大任务(通用框架) YOLO 对应任务 配置示例
图像分类 classify ImageNet.yaml
目标检测 detect coco.yaml(23 个)
语义分割 semantic(YOLO26)+ segment(可近似) ade20k.yaml
实例分割 segment coco128-seg.yaml
全景分割 ❌ YOLO 暂无 —
(框架外) pose 姿态 / obb 旋转框 coco-pose.yaml / dota8.yaml

三、COCO 80 个类别详解

官方预训练权重(yolov8n.pt / yolo11n.pt 等)默认检测的 80 类,即 coco.yaml 里 names 的内容。类别 id 与标注文件第一列一一对应,例如标注 0 0.52 0.55 0.4 0.6 中的 0 表示 person。

3.1 完整类别对照表(id 0–79)

id 类别 id 类别 id 类别 id 类别
0 person 人 20 elephant 大象 40 wine glass 酒杯 60 dining table 餐桌
1 bicycle 自行车 21 bear 熊 41 cup 杯子 61 toilet 马桶
2 car 汽车 22 zebra 斑马 42 fork 叉子 62 tv 电视
3 motorcycle 摩托车 23 giraffe 长颈鹿 43 knife 刀 63 laptop 笔记本电脑
4 airplane 飞机 24 backpack 背包 44 spoon 勺子 64 mouse 鼠标
5 bus 公交车 25 umbrella 雨伞 45 bowl 碗 65 remote 遥控器
6 train 火车 26 handbag 手提包 46 banana 香蕉 66 keyboard 键盘
7 truck 卡车 27 tie 领带 47 apple 苹果 67 cell phone 手机
8 boat 船 28 suitcase 行李箱 48 sandwich 三明治 68 microwave 微波炉
9 traffic light 红绿灯 29 frisbee 飞盘 49 orange 橙子 69 oven 烤箱
10 fire hydrant 消防栓 30 skis 滑雪板 50 broccoli 西兰花 70 toaster 烤面包机
11 stop sign 停车标志 31 snowboard 单板 51 carrot 胡萝卜 71 sink 水槽
12 parking meter 停车计时器 32 sports ball 球 52 hot dog 热狗 72 refrigerator 冰箱
13 bench 长椅 33 kite 风筝 53 pizza 披萨 73 book 书
14 bird 鸟 34 baseball bat 棒球棒 54 donut 甜甜圈 74 clock 钟表
15 cat 猫 35 baseball glove 棒球手套 55 cake 蛋糕 75 vase 花瓶
16 dog 狗 36 skateboard 滑板 56 chair 椅子 76 scissors 剪刀
17 horse 马 37 surfboard 冲浪板 57 couch 沙发 77 teddy bear 泰迪熊
18 sheep 绵羊 38 tennis racket 网球拍 58 potted plant 盆栽 78 hair drier 吹风机
19 cow 牛 39 bottle 瓶子 59 bed 床 79 toothbrush 牙刷

3.2 按大类(supercategory)分组

COCO 官方将 80 类归为 12 个大类,便于理解类别构成:

大类 类别数 包含类别
person 1 person
vehicle 车辆 8 bicycle, car, motorcycle, airplane, bus, train, truck, boat
outdoor 户外 5 traffic light, fire hydrant, stop sign, parking meter, bench
animal 动物 10 bird, cat, dog, horse, sheep, cow, elephant, bear, zebra, giraffe
accessory 配饰 5 backpack, umbrella, handbag, tie, suitcase
sports 运动 10 frisbee, skis, snowboard, sports ball, kite, baseball bat, baseball glove, skateboard, surfboard, tennis racket
kitchen 厨房 7 bottle, wine glass, cup, fork, knife, spoon, bowl
food 食物 10 banana, apple, sandwich, orange, broccoli, carrot, hot dog, pizza, donut, cake
furniture 家具 6 chair, couch, potted plant, bed, dining table, toilet
electronic 电子 6 tv, laptop, mouse, remote, keyboard, cell phone
appliance 家电 5 microwave, oven, toaster, sink, refrigerator
indoor 室内 7 book, clock, vase, scissors, teddy bear, hair drier, toothbrush

3.3 类别分布可视化(COCO128 示例)

COCO128 标注分布:目标位置分布与类别分布

训练时自动生成的 labels.jpg:左上为标注框位置/尺寸分布,右下为各类别数量直方图,直观展示数据集的类别构成。


四、关键问题:不同版本 YOLO 模型,类别都一样吗?

答案:模型能检测哪些类别,由数据集配置(yaml 的 names)决定,与模型版本无关。

层面 说明
模型版本(v5/v8/v11/YOLO26) 决定的是网络结构(层数、参数量、速度),不决定类别
数据集配置(yaml 的 names) 决定类别数量和名称,即模型输出头 Detect 的类别维度
官方预训练权重 一律按 COCO 训练 → 都是 80 类,所以不同版本官方模型默认都检测这 80 类

证据:训练日志中模型头部显示 Detect [80, 16, ...],其中的 80 来自 coco128.yaml 的 names 数量,不是写死在模型里的。换成 5 类的自定义数据集,Detect 头就是 [5, 16, ...]。

不同任务类别不同(同一版本):

任务 配置文件 类别数 类别
目标检测 coco.yaml 80 上面 3.1 的完整表
姿态估计 coco-pose.yaml 1 person(人体关键点)
实例分割 coco128-seg.yaml 80 同检测 80 类

五、如何编写自己的数据集配置文件

训练自己的数据时,把标注好的数据集按 YOLO 目录结构放好,再写一个自己的 yaml:

# 例如:识别 3 类水果
path: ../datasets/fruit      # 数据集根目录
train: images/train          # 训练图片
val: images/val              # 验证图片

names:
  0: apple
  1: banana
  2: orange

对应目录结构:

datasets\fruit\
   ├── images\train\    ├── labels\train\
   ├── images\val\      ├── labels\val\

标注 txt 与图片同名,每行 类别id x_center y_center width height(归一化)。然后用 yolo train data=fruit.yaml 即可训练自己的模型。


🔗 相关笔记:


📖 资料来源:


📝 创建时间:2026-08-31

相关笔记