进阶提升 · 5标注与配置
核心概念
- 数据标注 (Labeling):通过工具(如 LabelMe)对图像中的目标进行框选或分割,生成 JSON 格式的标注文件。
- 配置文件 (Config):定义模型结构、类别数、路径等关键信息,使训练过程与任务目标匹配。
- 格式转换:将 LabelMe 的 JSON 标注转换为 YOLO 所需的中心点 + 宽高格式,并归一化到 [0,1]。
- 数据一致性:标签文件与图像文件名必须严格对应,确保训练时正确加载。
提出问题
- 如何高效完成小规模数据集的标注?
- 标注格式与 YOLO 输入格式不同,如何正确转换?
- 配置文件如何修改以支持自定义类别?
- 如何组织和管理标注数据,使其与训练代码无缝对接?
论点与解决方案
- 标注流程:
- 使用 LabelMe 工具完成标注,可选择矩形框或更复杂的 mask。
- 标注少量图像可用于迁移学习实验,真实任务需上千张以上。
- 配置文件生成:
- 修改 config 文件,设定自定义类别数量。
- 使用
.sh
脚本快速复制模板并调整classes
参数。 - 类别顺序需与标注字典保持一致,避免训练标签错位。
- JSON → YOLO 格式转换:
- 原始 JSON 提供 (x1,y1,x2,y2),需转换为 (cx,cy,w,h)。
- 所有坐标归一化到 [0,1]。
- 每个类别用整数 ID 表示,从 0 开始。
- 数据准备:
- 标签文件存放到
data/custom/labels/
,图像文件存放到data/custom/images/
。 - 标签文件与图像文件名保持一致(仅扩展名不同)。
- 标签文件存放到
关键机制 / 细节
-
标注 JSON 示例:
- 包含类别(label)、位置信息(x1,y1,x2,y2)、图像尺寸等字段。
-
转换脚本 (json2yolo.py):
-
输入:LabelMe 的 JSON 文件夹路径。
-
输出:YOLO 所需的
.txt
文件,每行一目标框:class cx cy w h
-
-
配置文件修改要点:
classes
设置为自定义类别数。names
文件列出类别名称,顺序与标注字典一致。train.txt
和val.txt
指定图像路径,需与标签对应。
-
训练参数调整:
- batch size 依赖显存大小。
- checkpoint/验证频率可根据数据量适当减少。
- 若数据量小,建议加载预训练权重进行微调。
总结
- 数据标注与格式转换 是自定义目标检测任务的第一步。
- 配置文件的修改与一致性 决定了训练能否正常运行。
- 小规模标注可用于演示与迁移学习,但实际任务需更大数据量。
- 合理的标注、转换、配置和路径管理,是训练 pipeline 成功的前提。