做目标检测项目,很多人一上来就急着调模型、改网络结构,结果训练出来的模型精度上不去,回头排查才发现问题出在数据集上——类别标错、框没贴边、正负样本失衡、train/val泄露……这些坑我基本都踩过一遍。YOLO26作为新出的检测框架,虽然模型结构有升级,但对数据的要求和YOLOv8/v11是一脉相承的:数据集的整理和标注质量,直接决定了下游一切工作的上限。
这篇文章就围绕“YOLO26数据集与标注”这个主题,把从数据获取、标注工具选择、格式转换到最终训练前检查的完整链路捋一遍。会结合X光安检物品检测这类典型场景来举例,也会把我在实际项目中遇到过的数据集问题拿出来复盘。
1. 先搞清楚YOLO26需要什么样的数据集
聊数据集之前,得先明确YOLO26这个框架对数据的预期到底是什么。很多初学者拿着网上下载的乱七八糟的图片就往训练脚本里塞,报错了也不知道为什么,本质上是没理解YOLO系列的数据组织逻辑。
1.1 YOLO格式标注文件的底层结构
YOLO26延续了Ultralytics系列一贯的数据组织方式。标注信息不是存在JSON或XML里,而是每个图片对应一个同名的txt文件,放在与图片同名的目录层级下。这个txt文件每一行代表一个目标,格式是:
class_id x_center y_center width height注意这里的x_center、y_center、width、height全部是归一化后的值,范围在0到1之间,用像素坐标除以图片宽高得到。类ID是从0开始计数的整数,对应你在数据集配置文件里的类别顺序。
我用一个X光安检物品的例子来说明。假如图片宽度是1024像素,高度是768像素,一个水瓶的检测框左上角在(200, 150),右下角在(400, 450),那么标注就是:
# 计算归一化坐标 x_center = (200 + 400) / 2 / 1024 = 0.29296875 y_center = (150 + 450) / 2 / 768 = 0.390625 width = (400 - 200) / 1024 = 0.1953125 height = (450 - 150) / 768 = 0.390625 # 写入txt文件(假设水瓶是类别0) # 0 0.29296875 0.390625 0.1953125 0.390625这里有一个非常容易踩的坑:坐标必须是归一化的。我之前见过有人直接把像素坐标写进去,训练的时候模型Loss直接变成NaN,排查了很久才发现是这个问题。你说这个错低级吗?低级。但就是会发生。
1.2 数据量需求与类别分布的基本规律
关于数据集规模,业界有个粗浅的经验法则:每个类别至少需要1500到3000个标注实例,这里的“实例”指的是单个目标框,不是图片数。如果你的项目只有500张图,每张图平均3个目标,那就是1500个实例,勉强够用;但前提是场景多样性要足够。
YOLO26毕竟是个新的模型结构,参数量和容量摆在那里,数据量太少非常容易过拟合。针对X光安检这种场景,如果你只标注了200张图,那效果还不如用轻量级的YOLOv8n。不是模型越新越好,数据配不上模型的时候,小模型反而更稳。
类别分布也需要注意。X光安检场景里,刀具、枪支这类危险品是重点但长尾,水瓶、手机这类杂物数量多。如果你按原始数据分布直接训练,模型会严重偏向杂物类别,危险品漏检率会很高。最笨但有用的办法是各类别数量做基本均衡,比如通过复制粘贴(在图像层面)或合成数据来补齐少数类。
1.3 图片尺寸与分辨率影响的边界条件
YOLO26默认输入尺寸通常推荐640x640,但你的原始图片分辨率会显著影响标注精度和训练效果。X光安检机的图一般很大,2000x1500甚至更高分辨率都很常见。如果直接压到640,小目标(比如一把小折叠刀)可能只剩十几个像素,标注框再准也没用。
这时候有几个选择:
- 高分辨率输入训练:把imgsz参数调到1280甚至1536,但显存占用会成倍增长,你需要算一下自己GPU的显存能不能扛得住。我实测RTX 4090 24G跑1280输入,batch size只能开到8左右。
- 切图训练:把大图切成若干有重叠的patch,每个patch单独训练和推理。这个方法我在X光安检和遥感图像上都试过,效果很好,但标注的时候就得按切好的patch来标,工作量会翻倍。
- 保持原图训练:部分Ultralytics版本支持非正方形输入,但YOLO系列本身对长宽比有鲁棒性,只要不是极端比例(比如1:4以上)问题都不大。
我的建议是:如果项目预算和时间够,优先尝试切图;如果只是快速验证,先压到640看基线结果,再决定要不要上高分辨率。
2. 公开数据集与自采数据的取舍
再聊数据集从哪来。X光安检、人员入侵检测、无人机视角目标检测、遥感图像分析……不同场景的数据来源策略差异很大。我分几类典型场景说一下。
2.1 公开数据集的检索与筛选方法
CV领域公开数据集资源非常多,关键是你得会筛。COCO官网数据集、Kaggle、Roboflow Universe、Papers with Code这些渠道都可以用。
Roboflow Universe是个特别好用的平台,直接搜“security X-ray”或“suitcase”之类的关键词,能找到别人已经标注好并转换好格式的X光安检数据集,下载下来就是YOLO格式,极大节省时间。但要注意查看数据集的License,部分数据集仅限学术使用,商业项目用了会有合规风险。
COCO官方数据集是目前多类别检测的基准,虽然是自然图像,但作为预训练用完全足够。很多人忽略了一点:YOLO26支持在COCO预训练权重基础上微调,这比从头训练要快得多、稳得多。你构建自己的X光安检数据集时,完全可以先在COCO上预训练,然后再在你的领域数据上微调。
筛选公开数据集的要点:
- 确认标注类别和你的目标类别是否一致,不一致的多余类别要做过滤
- 看标注质量:随机抽几十张图,可视化标注框,看框是否贴边、有无错标漏标
- 看场景多样性:全是一个角度一个背景的数据集,泛化能力非常差
- 确认数据的地域和隐私属性:人脸、车牌这类敏感信息,很多数据集不允许二次发布
2.2 自采数据的采集规范与场景规划
如果公开数据集满足不了需求,就得自己采集。自采数据最核心的原则是:模拟真实部署环境。以X光安检物品检测为例,如果你最终要部署在机场安检机上,那训练数据至少应该包含:
- 不同摆放角度(正放、倒放、侧放、堆叠遮挡)
- 不同遮挡程度(独立物品、多物重叠、被厚重物体遮挡)
- 不同材质背景(黑色传送带、金属托盘、不同品牌安检机)
- 不同密度布局(空包、少量物品、塞满的双肩包)
很多团队图省事,用手机拍了一堆放在白桌子上的物品照片就开训,结果上真实安检机完全不能用。光照不一样可以靠泛化硬扛,但背景纹理、透视角度、X光透射成像特性这些差异是算法学不出来的,只能从数据源头解决。
采集时还要记录设备参数。比如X光安检机有能量等级、传送带速度、成像分辨率等参数,这些会影响图像特征。如果你混用不同型号的安检机数据,最好在数据划分时按设备分组,避免训练集和验证集来自同一台机器(这属于数据泄露的一种,会让验证指标虚高)。
2.3 数据增强在数据匮乏场景下的补救作用
数据不够,增强来凑。YOLO26训练框架内置了Mosaic、MixUp、Copy-paste、HSV变换等增强策略,这些用好了能极大缓解数据不足的问题。但增强不是万能的,它只能在已有数据分布上做插值,无法创造全新的场景。
实际使用中,我一般这样配置增强策略:
# augmentations 配置参考 mosaic: 0.8 # 四图拼接,提升小目标检测能力,X光安检场景保留 mixup: 0.2 # 两张图混合,适合场景复杂的安检图 copy_paste: 0.5 # 目标复制粘贴,用来平衡长尾类别 hsv_h: 0.015 # X光图色彩变化不大,这个值不宜过高 hsv_s: 0.5 hsv_v: 0.4 degrees: 10.0 # 旋转范围适中,X光图和自然图不一样,翻转需要谨慎 translate: 0.1 scale: 0.4 fliplr: 0.5特别提醒一点:X光安检图像的方向性是敏感的。比如一支枪,翻转后其实还是枪,目标检测器理论上能学到;但如果是文字类目标(比如包裹上的快递单),翻转会让文字变成反的,反而干扰学习。所以增强策略要结合任务特点调,不是所有增强都是多多益善。
3. 标注工具实操:从CVAT到Make Sense.ai的选型与用法
数据准备环节里,标注是人力成本最高的一步。选对工具能把效率提升一倍以上。我试过LabelImg、Label Studio、CVAT、Make Sense.ai、Roboflow Annotate等主流工具,各有各的适用场景。
3.1 主流标注工具的横向对比与选型建议
| 工具 | 适合规模 | 标注效率 | 学习成本 | 协作能力 | 备注 |
|---|---|---|---|---|---|
| LabelImg | 小型项目(百张级) | 低 | 极低 | 无 | 适合单人快速标注,界面简陋,已停止活跃维护 |
| Make Sense.ai | 小型到中型 | 中 | 低 | 无 | 网页版上传即用,支持YOLO格式导出,适合初学者 |
| CVAT | 中大型项目 | 高 | 中 | 强 | Intel开源,支持自动化标注、AI辅助标注,企业级首选 |
| Label Studio | 中大型多模态 | 中高 | 中 | 中 | 支持文本、图像、音频等多模态标注,但检测标注体验一般 |
| Roboflow Annotate | 中大型 | 高 | 低 | 中 | 云平台,自带数据集管理和增强流水线,但免费额度有限 |
如果你想快速验证一个想法,我个人推荐Make Sense.ai,原因就一个字:快。打开网页、拖入图片、直接画框,标注完直接导出YOLO格式,全程不需要安装任何软件。我当年做YOLO26第一个demo就是用Make Sense.ai标注的验证集,大概400来张图,一个下午搞定。
如果项目正式启动,几百上千张图要标,CVAT是更合理的选择。它支持Pascal VOC、COCO、YOLO等多种格式导入导出,并且有半自动标注功能——先用预训练模型跑一遍初稿,人工只需要修正错框和漏框,效率能翻好几倍。
3.2 CVAT标注平台的核心操作链路
我用CVAT做一个完整标注流程的演示。假设你要标X光安检图中的危险品类别(比如gun、knife、bottle):
第一步:创建项目和任务
在CVAT中新建Project,添加标签(label),标签名要和后续数据集配置yaml里的类别名对应。每个标签还可以设置颜色做区分,标注时更容易分辨。
第二步:上传数据和分配任务
把图片压缩成zip包上传,或直接关联云存储(S3、Azure Blob等)。任务创建好后可以分配给不同标注员。CVAT支持多人同时标注同一任务的不同子集,团队协作能力在这里体现得最明显。
第三步:标注执行
画框的快捷键是N(从上一张切到下一张)、Shift+N(回到上一张)、空格(确认标签并下一张)。比较精细的操作包括:
- 按住Alt拖动可以调整框的某个边
- 按Ctrl+C/V在一个任务内复制粘贴框(同一张图里同一类物品有多个时很好用)
- 按I可以直接输入坐标数值(这个做边界贴紧时很有用)
第四步:质检与导出
标注完成后,CVAT提供任务级的属性检查和人工审核功能。导出时选择YOLO 1.1格式,会自动生成一个包含图片和对应txt标注的zip包。
3.3 标注质量控制体系的设计
画框这件事,听起来简单,但不同的人画出来的框风格差异巨大,这种差异会直接反映在模型指标上。我在管理标注团队时,一般定这几条硬规则:
- 框必须紧贴目标边缘,宁可少一个像素,不可多一个背景像素。多出来的背景像素在特征层面会混入背景信息,对模型学习非常不利。
- 遮挡目标的处理:如果一个目标被挡住超过50%,不标;遮挡低于30%,标出可见部分的最小外接矩形;遮挡在30%到50%之间,标出可见部分并加difficult标记。
- 边界目标的处理:如果目标被图片边缘截断超过一半,不标;截断小于一半,按完整目标正常标注。
- 同一目标的标注一致性:在连续帧或连续图片中,同一物体的框大小变化应该是渐变的,如果出现突变,大概率是标注错误。
我建议每个项目都要有一个标注入职培训,找5张代表性图片让新标注员试标,评审通过后才正式开工。不要小看这一步,标注入职培训和正式标注标准对齐,能省下后期大量返工时间。
4. 从标注到训练的最后一公里:格式转换与目录组织
标注完成后,下一步是把标注数据组织成YOLO26能直接读取的目录结构和配置文件。这一步出错率极高,而且报错信息往往不直观。
4.1 目录结构标准与数据集配置yaml的编写
YOLO26延续Ultralytics风格,数据集目录一般这样组织:
security_xray/ ├── images/ │ ├── train/ │ ├── val/ │ └── test/ ├── labels/ │ ├── train/ │ ├── val/ │ └── test/ └── data.yaml这里有几个容易出问题的细节:
图片和标注文件名必须匹配。这张图是IMG_0001.jpg,对应的标注文件必须是IMG_0001.txt,名称完全相同,只是扩展名不同。目录结构里images和labels是兄弟目录,不是父子目录。
data.yaml的内容格式。一个最简配置长这样:
path: /path/to/security_xray # 数据集根目录,最好填绝对路径 train: images/train # 训练集图片目录(相对于path) val: images/val # 验证集图片目录 test: images/test # 测试集图片目录(可选) nc: 3 # 类别数量 names: ['gun', 'knife', 'bottle'] # 类别名称,顺序和标注txt的class_id对应我遇到过最典型的错误是:标注txt里用了类名(比如gun 0.5 0.5 0.2 0.3),而YOLO格式要求的是类ID(数字),结果训练直接报错或全部目标被当成背景。格式转换必须做仔细。
4.2 各种标注格式到YOLO格式的转换脚本
常见的标注格式有COCO JSON、Pascal VOC XML、LabelMe JSON、Roboflow导出格式等。网络上有很多转换脚本,但很多脚本考虑不周全,直接用容易出问题。我提供一个我常用的VOC XML转YOLO脚本框架:
import os import xml.etree.ElementTree as ET from pathlib import Path def voc_to_yolo(xml_path, out_dir, class_names): tree = ET.parse(xml_path) root = tree.getroot() # 读取图片尺寸 size = root.find('size') img_w = int(size.find('width').text) img_h = int(size.find('height').text) lines = [] for obj in root.iter('object'): name = obj.find('name').text if name not in class_names: continue # 过滤掉不需要的类别 class_id = class_names.index(name) # VOC格式是xmin, ymin, xmax, ymax bndbox = obj.find('bndbox') xmin = float(bndbox.find('xmin').text) ymin = float(bndbox.find('ymin').text) xmax = float(bndbox.find('xmax').text) ymax = float(bndbox.find('ymax').text) # 转换到YOLO归一化格式 x_center = (xmin + xmax) / 2 / img_w y_center = (ymin + ymax) / 2 / img_h width = (xmax - xmin) / img_w height = (ymax - ymin) / img_h # 边界检查,越界的会留下 if width <= 0 or height <= 0: continue if x_center < 0 or x_center > 1 or y_center < 0 or y_center > 1: continue lines.append(f"{class_id} {x_center:.6f} {y_center:.6f} {width:.6f} {height:.6f}") out_path = os.path.join(out_dir, Path(xml_path).stem + '.txt') with open(out_path, 'w') as f: f.write('\n'.join(lines)) # 使用示例 # class_names = ['gun', 'knife', 'bottle'] # voc_to_yolo('annotation.xml', 'labels/', class_names)转换完后有一个必须做的步骤:在图片上画框可视化验证。随便抽20张图,把标注框画回去,肉眼看一遍,基本能发现90%的格式问题。
4.3 train/val/test划分与数据泄露红线
数据划分是最容易被忽视但实际影响最大的环节。我见过一个项目,训练集和验证集是从同一个视频流里截取的连续帧,结果验证指标0.95,一上实地测试掉到0.6,就是这个划分方式导致的。
划分的原则很简单:同一个场景、同一个目标实例的高相似度样本,必须放在同一个集合里。具体实践方法:
- 多摄像头的场景,按摄像头ID划分,一个摄像头的全部数据进训练或验证,不要混着来
- 如果是视频帧,至少间隔50帧采样,或者直接按视频划分
- 如果是同一物体多角度拍摄,把同一物体的所有照片放到同一集合
划分比例一般是训练集70%-80%,验证集10%-15%,测试集10%-15%。测试集是最终评估用的,平时训练过程中不要去看测试集指标,看验证集就够了。
还有一个操作细节:划分数据时保证类别分布均匀。不要出现训练集有3个类而验证集只有2个类的情况。可以写个简单的脚本统计每个类别的实例数,按类别做分层抽样。
5. 标注质量体检与常见错误复盘
数据集建好后,训练前还有一道非常重要的工序:质量检验。但很多人直接跳过这一步,卡在训练环节反复折腾才发现数据集的问题。
5.1 标注可视化审查的实操方法
可视化验证是最直观的质检手段。Ultralytics框架提供的工具很简单,画框检查基本够用:
from ultralytics import YOLO model = YOLO('yolo26n.yaml') # 仅用模型结构,不加载权重 results = model.predict(source='path/to/images', save=True, conf=0.01, iou=0.01, show_labels=True)但这个方法只能看模型预测结果,想看标注真值的话,更直接的办法是自己画:
import cv2 import os def draw_yolo_labels(image_path, label_path, class_names, output_dir): img = cv2.imread(image_path) h, w = img.shape[:2] with open(label_path, 'r') as f: for line in f: parts = line.strip().split() cls_id = int(parts[0]) x_center = float(parts[1]) * w y_center = float(parts[2]) * h box_w = float(parts[3]) * w box_h = float(parts[4]) * h x1 = int(x_center - box_w / 2) y1 = int(y_center - box_h / 2) x2 = int(x_center + box_w / 2) y2 = int(y_center + box_h / 2) color = (0, 255, 0) cv2.rectangle(img, (x1, y1), (x2, y2), color, 2) cv2.putText(img, class_names[cls_id], (x1, y1 - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.6, color, 2) cv2.imwrite(os.path.join(output_dir, os.path.basename(image_path)), img) # 批量生成可视化结果 # for img_path in image_list: # label_path = img_path.replace('images', 'labels').replace('.jpg', '.txt') # draw_yolo_labels(img_path, label_path, class_names, 'vis_output')批量生成后,按图片顺序快速浏览视频或幻灯片,重点看:框是否贴紧、类别是否标错、有没有大目标被拆成多个小框、有没有漏标。一个5000张图的数据集,按这个方法抽检10%也就是500张,大约2小时能检完,这2小时花得非常值。
5.2 标注维度下的常见错误与修复
总结一下我在多个项目中见到的高频错误,最典型的是这几类:
标签语义不统一。同一个目标,不同标注员有的标“bottle”,有的标“drink”,有的是“cup”。这会导致类别混乱和模型特征学习困难。修复方法是制定严格的类别定义表,附上正例和反例图,标注前多看几遍。
框贴边不严。有些标注员喜欢把框画大一点,觉得“宁大勿小”,这是完全错误的认知。框大了,背景信息进入正样本,模型学到的特征会混杂背景纹理;框小了,目标边缘特征被截断,模型对部分目标会失明。对X光安检这类目标边界比较模糊的场景,尤其要强调贴边。
同一目标重复标注。在图像增强或多次标注时,同一个目标被画了多个框,训练时正样本数量虚增,网络会不知所措。检查时可以统计每张图的标注数量,出现异常多框的图要逐一排查。
框与目标不对应。比如标注的框偏移了半个身位,把背景标成目标。这种错误在密集遮挡场景里很常见,气人但很难完全避免。只能靠质检环节人工抽检去发现。
5.3 基于YOLO26训练日志反推数据问题
有时候标注问题在训练日志里会留下蛛丝马迹。YOLO26训练时观察这几个指标,能帮你快速定位数据集问题:
- box_loss持续不降且波动大:大概率是标注框本身有噪声,框位置忽左忽右,模型学不到稳定的回归目标。这时回去检查标注质量,而不是一味加大训练轮数。
- cls_loss降得很慢:可能是类别不均衡或标签语义混乱。有一个类别的样本数量远少于其他类别时,cls_loss就不会好看。
- 训练集loss和验证集loss差距大:典型过拟合信号,数据量不足或数据增强不够。
我自己有个习惯:每训练10个epoch就停止一次,随机挑几张验证集图片,把模型的预测结果画出来,和标注真值放在一起对比。这个简单的动作能发现很多数字指标发现不了的问题,尤其是漏检和小目标丢失的情况。
6. 数据标注工具链的前沿方向与扩展思路
最后聊一个偏进阶的话题:标注环节的自动化和工具链扩展。很多人把标注看成一次性投入,但如果你要做持续迭代的项目,标注工具的选型和组织方式值得多想一步。
6.1 半自动标注与预标注的流水线搭建
YOLO26这类模型本身就可以成为标注加速器。做法是:先用少量手工标注数据训练一个初版模型,然后用这个模型去预测未标注的数据,把模型输出作为预标注框导入CVAT,人工只需要检查修改。
这个pipeline能让标注效率提升3到5倍。我做过一个无人机视角的车辆检测项目,手工标注1000张图花了3个人两周,启动半自动标注后,剩余4000张图3个人4天就完成了。
具体做法(以CVAT为例):
- 在CVAT中创建一个任务,导入待标注图片
- 在任务设置里选择“AI辅助标注”,接入你已经训练好的YOLO26模型接口
- 模型自动跑一遍,生成预标注框
- 人工进入标注界面,逐张修正:标签错的改标签、位置偏的拖边框、漏检的手动补框
- 修正完成后导出标注结果,增量加入下一轮训练数据
这里有个注意点:预标注的质量取决于当前模型的性能,模型太差时预标注框反而会误导标注员,让人产生“框都画好了应该是对的”的错觉。所以启动半自动标注前,至少保证模型在验证集上的mAP达到0.5以上,低于这个阈值建议先手工标注。
6.2 数据版本管理与多轮迭代协作
数据不是一成不变的,项目开发过程中数据会不断修正和增补。很多团队把数据的每个版本都存在本地文件夹里,用“final_v2”“final_3”这种命名方式,时间一长就乱套了。
推荐用DVC(Data Version Control)或者简单点的Roboflow数据集版本来管理。DVC能和Git配合,在保留代码版本的同时对数据集做版本控制,每次修改数据集打一个tag,随时可以回退到任何一个历史版本。这对做实验对比很有帮助——同一个模型,在v1和v2版本的标注数据上训练,效果差异一目了然。
如果团队规模小,不想引入太重的基础设施,至少要做到:
- 每次修改标注后,导出一份完整的带版本号的数据包
- 数据包内附带一个README文件,记录修改时间、修改人、修改内容和原因
- 训练实验记录里,记清楚用的是哪个版本的哪个数据子集
- 标注文件的修改要有记录,不要直接覆盖原始文件
6.3 视觉数据标注与多模态的项目化合集
越来越多的视觉项目已经不满足于纯图像目标检测了。YOLO26生态里有DET(Detection)、POSE(关键点)、OBB(旋转框)、SEG(分割)等多个方向的模型变体,标注方式也各有不同。如果你的项目会往这些方向扩展,数据标注规划最好提前一步想好。
- 做目标检测转旋转框检测时,数据集需要重新标注OBB格式,标注工具需要支持旋转矩形框标注。CVAT支持,Make Sense.ai不支持,提前选型要考虑这个需求。
- 做姿态估计时,标注从矩形框变成关键点,CVAT用“Skeletons”标注类型来实现,每一帧每个目标都要标对应数量的关键点,工作量比检测框高得多,要提前预留预算。
- 做实例分割时,标注形态从框变成多边形轮廓,精度要求更苛刻,标注速度急剧下降,需要规划充分的标注周期。
这些多模态扩展方向,我在混合项目里都实践过。我的建议是:如果预判项目未来会涉及多种标注类型,从一开始就选择支持多标注类型的工具平台(CVAT是最稳妥的选择),避免中途迁移工具导致数据格式转换的额外工作。
7. 数据集从零到训练的全流程落地清单
最后把这篇文章的核心内容压缩成一份可直接照做的行动清单。这个清单是我多个项目经验的沉淀,按步骤走完,不说一定能训练出完美模型,但至少能帮你避开我踩过的绝大部分数据集相关的坑。
- 需求明确:画清楚检测目标类别清单,每个类别附上定义和正反例。明确部署场景,确定数据应该包含哪些环境差异性
- 数据搜集:优先检索公开数据集,用可视化工具抽检标注质量;不足部分自采,模拟真实部署场景,记录设备参数
- 数据划分:按场景/设备/实例分组划分train/val/test,确保类别分布均衡,杜绝数据泄露
- 标注准备:选择标注工具(推荐CVAT),制定标注规范,培训标注员,试标评审通过后正式开工
- 标注执行:按规范标注,设置抽检节点。对我来说,每标注完20%的数据做一次全量可视化抽检是最合理的节奏
- 格式转换:转换为YOLO格式txt,做边界检查和文件名匹配检查,可视化验证至少抽检20张
- 目录组织:按images/labels的train、val、test结构放好,写对data.yaml的类别顺序
- 质量体检:统计类别分布和标注框尺寸分布,异常值要排查;可视化抽检,重点关注贴边和漏标
- 干训练:先用小模型(yolo26n)和较小的epoch数跑通流程,确认loss正常下降、验证集指标有效,再放大模型规模
- 迭代优化:根据训练结果反推数据问题,持续增补长尾类别样本,修正标注错误,版本化管理数据迭代
有一点我在不同项目间反复体会到:数据集质量的上限决定了模型性能的天花板。模型结构可以砍,增强策略可以调,超参数可以搜,但这些都是在数据地基上的装修。如果你的数据集本身就是豆腐渣工程——标注错乱、类别失衡、划分泄露、格式错误——那再先进的结构也白搭。尤其是YOLO26这种大容量高表达能力的模型,训练数据稍微有点问题,过拟合给你表演得淋漓尽致。把时间花在数据上是绝对不亏的,希望这篇内容能帮你少走点弯路。