【YOLO实战系列 5/17】从0到1制作YOLO数据集:LabelImg标注→格式转换→增强

📅 2026/8/5 13:19:59
【YOLO实战系列 5/17】从0到1制作YOLO数据集:LabelImg标注→格式转换→增强
# 从0到1制作YOLO数据集LabelImg标注→格式转换→增强附脚本训练一个自定义YOLO模型80%的时间都花在数据上。今天手把手带你走完完整流程标注 → 格式转换 → 数据增强 → 一键划分。跟着做你也能做出“喂给YOLO吃”的高质量数据集哈喽这里是【YOLO模型仓库】。这周开始真正动手做一个属于你自己的数据集。不管你是想做安全帽检测、车辆识别还是水果分类流程都一样。我直接把标注工具 转换脚本 增强脚本全打包给你文末免费领 今天你将学会1️⃣ 用LabelImg打标签附操作动图2️⃣ YOLO标签格式长什么样一看就懂3️⃣ 数据集目录结构 自动划分脚本4️⃣ 数据增强让模型更鲁棒附代码5️⃣ 生成data.yaml直接喂给YOLO训练️ 一、LabelImg图形化标注工具安装一行命令pipinstalllabelimg启动labelimg界面操作超简单点击Open Dir打开你的图片文件夹点击Change Save Dir选择标签保存位置重要在菜单栏选择YOLO格式默认是PascalVOC按W开始画框 → 框住物体 → 输入类别 → 按CtrlS保存按D下一张重复以上步骤️此处插入LabelImg界面截图标注一个安全帽 小技巧按A上一张CtrlZ撤销效率翻倍。YOLO标签长这样.txt文件0 0.523 0.412 0.156 0.0830 类别ID从0开始0.523 框中心x坐标归一化0~10.412 框中心y坐标0.156 框宽度相对原图比例0.083 框高度别怕LabelImg自动帮你算好了你只管画框。 二、标准数据集目录结构YOLO要求固定的文件夹组织my_dataset/ ├── images/ │ ├── train/ │ │ ├── img1.jpg │ │ └── img2.jpg │ └── val/ │ ├── img3.jpg │ └── img4.jpg └── labels/ ├── train/ │ ├── img1.txt │ └── img2.txt └── val/ ├── img3.txt └── img4.txt⚠️ 注意图片和标签一一对应文件名相同后缀不同。一键划分训练/验证集Python脚本把下面脚本保存为split_dataset.py放在图片和标签同级目录运行importosimportrandomimportshutil# 设置路径img_dirimages# 所有原始图片label_dirlabels# 所有原始标签train_ratio0.8# 80%训练20%验证# 获取所有图片名无后缀names[f.split(.)[0]forfinos.listdir(img_dir)iff.endswith(.jpg)]random.shuffle(names)split_idxint(len(names)*train_ratio)train_namesnames[:split_idx]val_namesnames[split_idx:]# 创建目标文件夹fordin[images/train,images/val,labels/train,labels/val]:os.makedirs(d,exist_okTrue)# 拷贝文件fornameintrain_names:shutil.copy(f{img_dir}/{name}.jpg,fimages/train/{name}.jpg)shutil.copy(f{label_dir}/{name}.txt,flabels/train/{name}.txt)fornameinval_names:shutil.copy(f{img_dir}/{name}.jpg,fimages/val/{name}.jpg)shutil.copy(f{label_dir}/{name}.txt,flabels/val/{name}.txt)print(fDone! Train:{len(train_names)}, Val:{len(val_names)})运行后自动划分好省时省力。 三、数据增强让模型见过更多“世面”为什么要增强因为真实世界光线、角度千变万化增强后的模型更鲁棒mAP能涨2~5个点。安装albumentations库pipinstallalbumentations增强脚本对图片和标签同步处理importalbumentationsasAimportcv2# 定义增强流水线transformA.Compose([A.HorizontalFlip(p0.5),# 水平翻转A.RandomBrightnessContrast(p0.2),# 随机亮度对比度A.Rotate(limit10,p0.3),# 小角度旋转A.Blur(blur_limit3,p0.1),# 轻微模糊],bbox_paramsA.BboxParams(formatyolo))# 读取图片和对应标签yolo格式imagecv2.imread(img1.jpg)withopen(img1.txt)asf:bboxes[list(map(float,line.strip().split()))forlineinf]# 应用增强augmentedtransform(imageimage,bboxesbboxes)aug_imgaugmented[image]aug_bboxesaugmented[bboxes]# 保存增强后的图片和标签cv2.imwrite(img1_aug.jpg,aug_img)withopen(img1_aug.txt,w)asf:forbinaug_bboxes:f.write(f{int(b[4])}{b[0]:.6f}{b[1]:.6f}{b[2]:.6f}{b[3]:.6f}\n)️此处插入原图 vs 增强后对比图你可以运行多次把数据集扩大2~3倍。 四、生成data.yamlYOLO训练配置文件在数据集根目录创建data.yaml# 训练集和验证集路径相对于data.yaml的位置train:images/trainval:images/val# 类别数nc:2# 类别名称顺序必须与标注时的ID一致names:[helmet,head]搞定现在这个文件夹可以直接丢给YOLO训练了。配套资源本文涉及的完整代码、数据集和配置文件已整理归档感兴趣的朋友可以在我的 CSDN 主页简介中找到获取方式。如果觉得有帮助欢迎点赞收藏有问题欢迎评论区交流