如何用本地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
相关产品推荐
相关产品推荐

