news 2026/3/10 21:11:58

【PYTHON-YOLOV8N】如何自定义数据集

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【PYTHON-YOLOV8N】如何自定义数据集

【PYTHON-YOLOV8N】如何自定义数据集

      • 一、核心前提:明确 YOLO 数据集格式
      • 二、步骤 1:整理原始数据(图片)
        • 1. 文件夹结构(推荐)
        • 2. 数据收集/筛选
      • 三、步骤 2:标注数据(生成 YOLO 格式标签)
        • 方式 1:手动标注(新手/小数据集,精准)
        • 方式 2:自动标注(大数据集/快速迭代,高效)
      • 四、步骤 3:编写数据集配置文件(.yaml)
      • 五、步骤 4:验证数据集(避免训练报错)
        • 1. 可视化验证
        • 2. 基础检查项
      • 六、步骤 5:使用自定义数据集训练 YOLOv8
      • 七、常见问题与解决方案
      • 总结

自定义适配 YOLO(以 YOLOv8 为例)的数据集是训练专属模型(如面部表情识别、特定目标检测)的核心步骤,核心遵循「数据整理 → 格式标注 → 配置文件编写 → 数据集划分」四步流程,以下是详细、可落地的操作指南:

一、核心前提:明确 YOLO 数据集格式

YOLO 要求数据集为「图片 + 标签文件」的一对一结构,且标签需满足归一化坐标格式,先明确规则:

文件类型要求
图片文件格式:JPG/PNG/BMP 等;命名:建议数字/字母(如001.jpgface_002.png
标签文件1. 与图片同名,后缀为.txt(如001.txt对应001.jpg);
2. 每行格式:类别索引 归一化x中心 归一化y中心 归一化宽度 归一化高度
3. 无标注的图片无需创建.txt文件
类别索引从 0 开始连续编号(如表情识别:0=开心,1=悲伤,2=愤怒…)
归一化坐标坐标值范围 0~1,公式:
x中心 = (x1 + x2)/2 / 图片宽度
y中心 = (y1 + y2)/2 / 图片高度
宽度 = (x2 - x1)/图片宽度
高度 = (y2 - y1)/图片高度
(x1,y1 是框左上角,x2,y2 是框右下角)

二、步骤 1:整理原始数据(图片)

1. 文件夹结构(推荐)

先按「用途」划分数据集,创建统一的根目录(如my_dataset),结构如下:

my_dataset/ ├── images/ # 所有图片存放目录 │ ├── train/ # 训练集图片(占总数据 70~80%) │ │ ├── 001.jpg │ │ ├── 002.jpg │ │ └── ... │ ├── val/ # 验证集图片(占 10~15%) │ └── test/ # 测试集图片(占 10~15%,可选) └── labels/ # 所有标签文件存放目录(与 images 结构完全对应) ├── train/ │ ├── 001.txt │ ├── 002.txt │ └── ... ├── val/ └── test/
2. 数据收集/筛选
  • 来源:自己拍摄、公开数据集(如 FER2013 表情、VOC/COCO 目标检测)、网络爬取;
  • 筛选:删除模糊、无目标、重复的图片,保证数据质量;
  • 统一尺寸(可选):若图片尺寸差异大,可批量缩放到统一尺寸(如 640×640),减少训练时的尺寸适配成本。

三、步骤 2:标注数据(生成 YOLO 格式标签)

标注是核心环节,分「手动标注」和「自动标注」两种方式,按需选择:

方式 1:手动标注(新手/小数据集,精准)

用之前提到的 LabelImg/Labelme 工具,以 LabelImg 为例:

  1. 激活虚拟环境,安装 LabelImg:
    activate about pip install labelimg -i https://pypi.tuna.tsinghua.edu.cn/simple
  2. 启动 LabelImg,配置标注环境:
    labelimg
    • 点击「Open Dir」选择my_dataset/images/train(先标训练集);
    • 点击「Change Save Dir」选择my_dataset/labels/train
    • 左上角「View」→ 勾选「Auto Save Mode」(自动保存标签);
    • 关键:点击「Format」→ 选择「YOLO」(切换标注格式为 YOLO)。
  3. 开始标注:
    • W调出标注框,拖动鼠标框选目标(如人脸);
    • 输入类别名称(如happy),LabelImg 会自动映射为类别索引(需提前在predefined_classes.txt中配置类别列表,避免拼写错误);
    • D切换下一张图片,重复标注。

详细的用法可以参考篇文章:https://blog.csdn.net/knighthood2001/article/details/125883343

方式 2:自动标注(大数据集/快速迭代,高效)

用 YOLO 预训练模型自动标注(如人脸检测用yolov8n-face.pt,通用目标用yolov8n.pt),大幅减少手动工作量,示例代码(以面部表情识别为例):

fromultralyticsimportYOLOimportosimportcv2# 1. 配置路径img_dir="my_dataset/images/train"# 待标注图片目录label_dir="my_dataset/labels/train"# 标签保存目录os.makedirs(label_dir,exist_ok=True)# 2. 加载预训练模型(按需选择:人脸/通用目标)model=YOLO("yolov8n-face.pt")# 人脸检测模型(表情识别先标人脸框)# 3. 类别映射(根据你的需求定义,如表情:0=开心,1=悲伤,2=愤怒)emotion_mapping={"happy":0,"sad":1,"angry":2}# 4. 批量标注forimg_nameinos.listdir(img_dir):ifnotimg_name.endswith((".jpg",".png")):continue# 读取图片img_path=os.path.join(img_dir,img_name)img=cv2.imread(img_path)h,w=img.shape[:2]# 图片宽高(用于坐标归一化)# 模型预测(检测目标,如人脸)results=model(img,conf=0.5)# conf=0.5 过滤低置信度框# 生成标签文件label_path=os.path.join(label_dir,img_name.replace(".jpg",".txt"))withopen(label_path,"w",encoding="utf-8")asf:forboxinresults[0].boxes:# 提取像素坐标(x1,y1,x2,y2)x1,y1,x2,y2=box.xyxy.cpu().numpy()[0]# 转换为YOLO归一化坐标x_center=(x1+x2)/2/w y_center=(y1+y2)/2/h width=(x2-x1)/w height=(y2-y1)/h# 手动指定类别(自动标注仅标框,类别需手动/批量赋值,或结合分类模型)# 此处示例:假设当前图片是“开心”表情,类别索引为0class_idx=0# 写入标签文件(保留6位小数)f.write(f"{class_idx}{x_center:.6f}{y_center:.6f}{width:.6f}{height:.6f}\n")

⚠️ 注意:自动标注后需抽查 10~20% 的标签,修正错误/漏标,保证数据质量。

四、步骤 3:编写数据集配置文件(.yaml)

YOLO 训练时需通过.yaml文件读取数据集路径和类别信息,创建my_dataset.yaml(放在my_dataset根目录),示例如下:

# 1. 数据集根目录(绝对路径/相对路径,推荐绝对路径)path:D:/projects/my_dataset# 替换为你的数据集根目录# 2. 训练/验证/测试集路径(相对于 path)train:images/trainval:images/valtest:images/test# 可选,若无测试集可注释# 3. 类别数(必须与实际标注的类别数一致)nc:3# 4. 类别名称(按索引顺序排列,与标注时的类别一一对应)names:0:happy1:sad2:angry

✅ 关键检查:

  • path路径不能有中文/空格(避免训练时报错);
  • nc(类别数)必须准确(如表情识别有7类则 nc=7);
  • names的顺序必须与标注时的类别索引一致(如索引0对应happy,就不能颠倒)。

五、步骤 4:验证数据集(避免训练报错)

标注和配置完成后,先验证数据集格式是否正确,避免训练时出现「找不到标签」「类别不匹配」等问题:

1. 可视化验证

用 YOLO 自带的可视化功能检查标注框:

fromultralyticsimportYOLO# 加载预训练模型model=YOLO("yolov8n.pt")# 验证数据集(可视化前5张训练集图片)results=model.val(data="my_dataset/my_dataset.yaml",split="train",save_json=False,plots=True)# 运行后会在 runs/val 目录生成可视化图片,查看标注框是否与目标匹配
2. 基础检查项
  • 图片和标签数量是否对应(训练集图片数 = 训练集标签数,无标注的图片除外);
  • 标签文件中是否有超出 0~1 范围的坐标(归一化错误);
  • .yaml文件的path和类别信息是否正确。

六、步骤 5:使用自定义数据集训练 YOLOv8

验证无误后,即可用自定义数据集训练模型,命令如下(激活about环境后执行):

# 基础训练命令 yolo detect train model=yolov8n.pt data=my_dataset/my_dataset.yaml epochs=50 batch=16 imgsz=640 device=cpu

参数说明:

  • model=yolov8n.pt:用 YOLOv8 nano 轻量化模型(新手推荐,训练快);
  • data=...:指定你的数据集配置文件路径;
  • epochs=50:训练轮数(小数据集可设 30~50,大数据集设 100+);
  • batch=16:批次大小(CPU 训练设 8/16,GPU 可设 32/64);
  • imgsz=640:输入图片尺寸(与标注时的图片尺寸匹配);
  • device=cpu:无 GPU 则用 CPU,有 GPU 改device=0

七、常见问题与解决方案

问题原因解决方案
训练时报「找不到标签文件」图片和标签文件名不一致/路径配置错误检查文件名(如 001.jpg ↔ 001.txt),核对.yamlpath
标注框偏移/错位归一化时图片宽高搞反(w/h 颠倒)检查代码中h, w = img.shape[:2](shape 是 (高,宽,通道))
类别预测错误类别索引与names顺序不匹配修正.yamlnames顺序,与标注索引一致
训练时 loss 为 NaN标签中有无效值(如坐标>1)/图片损坏清理无效标签/图片,重新标注

总结

自定义 YOLO 数据集的核心是「对齐格式」:

  1. 按「images/labels → train/val/test」整理文件结构;
  2. 保证标签文件的「归一化坐标 + 类别索引」符合 YOLO 规则;
  3. 编写准确的.yaml配置文件;
  4. 先验证再训练,减少报错概率。

小数据集(<1000张)推荐手动标注,大数据集优先用「自动标注 + 人工抽查」,既能提升效率,又能保证数据质量。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/10 2:09:32

AI如何帮你快速掌握Wireshark端口过滤技巧

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个Wireshark端口过滤助手应用&#xff0c;能够根据用户输入的关键词&#xff08;如HTTP流量、SSH连接&#xff09;自动生成对应的过滤表达式。应用应支持常见协议端口号的智能…

作者头像 李华
网站建设 2026/3/10 2:09:31

手把手教你复现CVE-2023-51767漏洞

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 生成一个CVE-2023-51767漏洞复现实验手册&#xff0c;包含&#xff1a;1) 所需实验环境&#xff08;虚拟机配置、软件版本&#xff09;&#xff1b;2) 分步骤的漏洞触发流程&#x…

作者头像 李华
网站建设 2026/3/10 2:09:29

雷柏V500Pro键盘新手必看:5分钟搞定基础设置

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个交互式雷柏V500Pro键盘新手教学应用。功能&#xff1a;1. 分步图文指导 2. 3D键盘模型展示 3. 设置检查功能 4. 常见问题解答 5. 视频教程嵌入。使用HTML5CSS3实现响应式设…

作者头像 李华
网站建设 2026/3/8 12:51:27

Java小白必看:5分钟上手MD5加密解密

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个面向Java初学者的MD5教学项目&#xff0c;要求&#xff1a;1. 分步骤实现MD5加密&#xff08;从MessageDigest初始化到结果转换&#xff09;&#xff1b;2. 每个步骤都有详…

作者头像 李华
网站建设 2026/3/10 16:29:54

AI一键搞定Java8安装:快马平台智能配置指南

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 请生成一个Java8自动化安装脚本&#xff0c;要求&#xff1a;1. 支持Windows/Linux/Mac三平台 2. 自动检测系统环境并选择对应版本 3. 自动配置JAVA_HOME环境变量 4. 包含安装后验证…

作者头像 李华
网站建设 2026/3/7 20:58:46

二叉排序树的构建与遍历

二叉排序树是一种特殊的二叉树&#xff0c;它的每个节点都满足&#xff1a;左子树所有节点值小于当前节点&#xff0c;右子树所有节点值大于当前节点。一、二叉排序树的核心结构首先定义树节点TreeNode&#xff0c;包含左孩子、右孩子和节点值&#xff1a;public class TreeNod…

作者头像 李华