You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用本地Open Images数据集配置并训练YOLO模型?

Open Images数据集适配YOLO训练的问题解答

1. YOLO的.yaml配置文件要不要自己创建?怎么弄?

得自己创建,YOLO官方不会提供针对特定数据集的配置文件。创建方法很简单:

  • 新建个文本文件,把后缀改成.yaml(比如命名为open_images.yaml)
  • 按下面的格式填写内容,路径要和你数据集实际存放位置对应:
    train: ./train/data  # 训练集图片所在文件夹
    val: ./validation/data  # 验证集图片所在文件夹
    test: ./test/data  # 测试集图片所在文件夹(可选)
    
    nc: 600  # Open Images目标检测默认有600类,若仅下载部分类别,改成对应数量即可
    names: ['Person', 'Bicycle', 'Car', ...]  # 按顺序列全你用到的类别名称,可从数据集的metadata文件中提取
    

2. 训练集标注文件超大但仅对应150张图,正常吗?是不是下载错误?

绝对不正常,大概率是下载时参数设置有误。Open Images的标注是按批次或类别打包的大文件,但每个标注条目都对应具体的图片ID。可以这么排查:

  • 检查下载工具的设置:如果用了官方脚本或第三方工具,可能只选中了部分类别,或是误选了测试批次,导致仅下载150张图,但拉取了全量标注文件。
  • 核对图片与标注:打开labels里的检测标注文件(比如oidv6-train-annotations-bbox.csv),查看里面的ImageID列,和你train/data里的图片文件名(不带后缀)对比,肯定只有150个能匹配上。
  • 解决办法:要么重新下载对应类别的完整图片集,要么写个小脚本从大标注文件中筛选出已下载图片的标注,转成YOLO需要的单张图对应单个.txt的格式。

3. 怎么把数据集配置好开始YOLO训练?

按以下三步操作:

第一步:转换标注格式为YOLO兼容版

Open Images的标注是CSV格式,YOLO要求每张图对应一个.txt文件,内容格式为类别ID x_center y_center width height(坐标需归一化到0-1区间)。可以用Python脚本批量转换,核心逻辑如下(自行调整路径):

import csv
import os

# 读取类别映射,将Open Images的类别编码转为YOLO用的数字ID
class_map = {}
with open('metadata/class-descriptions-boxable.csv', 'r', encoding='utf-8') as f:
    reader = csv.reader(f)
    for idx, row in enumerate(reader):
        class_map[row[0]] = idx  # row[0]是类似/m/01g317的编码,idx为从0开始的数字ID

# 处理训练集检测标注
with open('labels/detection/oidv6-train-annotations-bbox.csv', 'r', encoding='utf-8') as f:
    reader = csv.DictReader(f)
    for row in reader:
        img_id = row['ImageID']
        # 先确认该图片已下载
        img_path = os.path.join('train/data', f'{img_id}.jpg')
        if not os.path.exists(img_path):
            continue
        # 计算归一化坐标
        x_min = float(row['XMin'])
        x_max = float(row['XMax'])
        y_min = float(row['YMin'])
        y_max = float(row['YMax'])
        x_center = (x_min + x_max) / 2
        y_center = (y_min + y_max) / 2
        width = x_max - x_min
        height = y_max - y_min
        # 写入对应标注文件
        label_file = os.path.join('train/labels', f'{img_id}.txt')
        with open(label_file, 'a', encoding='utf-8') as txt_f:
            txt_f.write(f"{class_map[row['LabelName']]} {x_center} {y_center} {width} {height}\n")

验证集和测试集的标注用同样逻辑转换即可。

第二步:整理文件结构

需符合YOLO的要求,最终结构大致如下:

open_images_dataset/
├── train/
│   ├── data/          # 存放训练集所有.jpg图片
│   └── labels/        # 存放转换好的训练集.txt标注(每张图对应一个)
├── validation/
│   ├── data/
│   └── labels/
├── test/
│   ├── data/
│   └── labels/
└── open_images.yaml   # 你自行创建的配置文件

第三步:启动训练

以YOLOv8为例,使用以下命令(替换为自己的配置文件路径和模型):

yolo train data=open_images.yaml model=yolov8n.pt epochs=50 batch=16

若使用YOLOv5,命令为:

python train.py --data open_images.yaml --cfg yolov5n.yaml --epochs 50 --batch-size 16

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 22:41:05