You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

学习新框架、YOLO自定义数据集格式化及编程问题求解

YOLO自定义数据集格式化与自动标注指南

一、YOLO数据集格式规范

  • 图像文件:统一存放于images目录,支持JPG、PNG等格式,文件名需与对应标注文件一一匹配(如img001.jpg对应img001.txt)。
  • 标注文件:统一存放于labels目录,每个图像对应同名.txt文件,每行代表一个目标,格式为:
    <类别ID> <归一化x_center> <归一化y_center> <归一化宽度> <归一化高度>
    
    细节说明:
    • 类别ID:从0开始的整数,需与data.yamlnames列表顺序一致(如names: ['cat', 'dog'],cat对应0,dog对应1)。
    • 归一化坐标:所有坐标需除以图像宽高。例如图像宽640、高480,目标左上角(100,200)、右下角(300,400),计算方式:
      • x_center = (100+300)/2 / 640 = 0.3125
      • y_center = (200+400)/2 / 480 = 0.625
      • width = (300-100)/640 = 0.3125
      • height = (400-200)/480 = 0.4167
    • 无目标的图像,对应的.txt文件可留空或不创建(多数YOLO版本支持)。
  • 配置文件data.yaml:必须包含以下核心内容:
    train: ./train/images  # 训练集图像路径
    val: ./val/images      # 验证集图像路径
    nc: 2                  # 类别数量
    names: ['cat', 'dog']  # 类别名称列表
    

二、无标注工具自动生成YOLO数据集的方法

结合你的自动标注场景,按以下步骤生成符合规范的数据集:

  1. 提取原始标注数据:从自动标注逻辑中获取每个图像的目标边界框(x1,y1,x2,y2,即左上角、右下角坐标)、类别ID,以及图像宽高。
  2. 编写坐标转换脚本:用Python编写脚本,将原始坐标转换为YOLO要求的归一化格式,生成对应.txt标注文件。示例代码:
    import os
    from PIL import Image
    
    # 配置路径
    img_dir = "path/to/your/images"
    label_dir = "path/to/your/labels"
    os.makedirs(label_dir, exist_ok=True)
    
    # 替换为你的自动标注逻辑,返回[(class_id, x1, y1, x2, y2), ...]
    def get_annotations(img_path):
        return []
    
    for img_name in os.listdir(img_dir):
        if not img_name.lower().endswith(('.jpg', '.png')):
            continue
        img_path = os.path.join(img_dir, img_name)
        label_path = os.path.join(label_dir, os.path.splitext(img_name)[0] + '.txt')
        
        # 获取图像尺寸
        with Image.open(img_path) as img:
            img_w, img_h = img.size
        
        # 获取自动标注结果
        annotations = get_annotations(img_path)
        
        # 生成标注文件
        with open(label_path, 'w') as f:
            for cls_id, x1, y1, x2, y2 in annotations:
                x_center = (x1 + x2) / 2 / img_w
                y_center = (y1 + y2) / 2 / img_h
                width = (x2 - x1) / img_w
                height = (y2 - y1) / img_h
                f.write(f"{cls_id} {x_center:.6f} {y_center:.6f} {width:.6f} {height:.6f}\n")
    
  3. 划分训练/验证集:编写脚本按8:2或7:3的比例,将图像和标注文件分别移入trainval目录下的imageslabels子目录,保持文件对应关系。

三、非AI方式查找编程问题答案的建议

  • 精准搜索关键词:使用具体技术术语+问题描述,比如搜“YOLOv8 custom dataset txt format”而非模糊的“YOLO数据集格式”,限定版本缩小范围。
  • 优先查阅官方文档:直接查看对应YOLO版本的官方仓库文档(如Ultralytics YOLO的docs目录),里面有权威的数据集格式说明。
  • 浏览论坛精华内容:查看Stack Overflow的yolo标签热门问题,或GitHub Issues中已解决的类似问题,很多用户会分享实用的数据集处理脚本。
  • 参考开源项目结构:在GitHub上找基于YOLO的开源项目,直接模仿它们的数据集目录结构、标注文件和data.yaml写法。
  • 过滤过时内容:搜索时添加年份限定(如搜索引擎中用“YOLO dataset format 2024”),避免被旧版本格式误导。

内容的提问来源于stack exchange,提问作者max

火山引擎 最新活动