Ultralytics Open Images V7 数据集实战指南:601 类大词表检测的数据配置、预训练模型与 YOLO 训练全流程
Open Images V7 是 Google 发布的大规模物体检测数据集,Ultralytics 仓库为其提供了开箱即用的 open-images-v7.yaml 数据配置、基于 fiftyone 的自动下载脚本,以及五个预训练好的 YOLOv8 -oiv7 检查点。阅读本文后,你将掌握:如何理解该数据集在 Ultralytics 配置下的规模与类别体系、如何在不下载 561 GB 数据的情况下直接使用预训练模型做推理与微调、以及如何从零训练 YOLO 模型时触发自动下载脚本并理解其底层执行链路。
一、Open Images V7 数据集概述
Open Images V7 官方页面 由 Google 提供,在 Ultralytics 的配置下包含 1,743,042 张训练图像、41,620 张验证图像和 601 个物体类别。上游完整版本则横跨约 900 万张图像,附带图像级标签、边界框、分割掩码、视觉关系(visual relationships)与本地化叙述(localized narratives)等多种标注,是计算机视觉领域覆盖面最广的标注资源之一。
该数据集的关键特征包括:
- 平均密度高:约 900 万张图中标注了多种任务,平均每张图含 8.3 个物体;
- 人工标注占比高:1,900 万张图像上的约 1,600 万个边界框中,约 90% 由专业标注人员手动绘制,保证高精度;
- 标注类型丰富:
- 330 万条视觉关系标注,覆盖 1,466 个三元组(subject—predicate—object);
- V5 新增 280 万个物体(350 类)的分割掩码;
- V6 新增 67.5 万条本地化叙述;
- V7 新增 6,640 万个点级标签,覆盖 140 万张图像、5,827 个类别;
- 图像级标签规模大:跨 20,638 个类别的 6,140 万条图像级标签,使其同样适用于图像分类与多模态研究。
二、数据集结构:Ultralytics 的切分与类别定义
Ultralytics 的 open-images-v7.yaml 只下载 Open Images V7 的检测子集,其切分如下:
| 切分 | 图像数 | 用途 |
|---|---|---|
| Train | 1,743,042 | 带框标注图像,用于模型训练 |
| Validation | 41,620 | 留出图像,用于评估与基准测试 |
| Test | (空) | 配置中 test: 键留空,不提供测试集 |
配置文件头部明确声明了数据落盘位置与体积(约 561 GB):
# parent
# ├── ultralytics
# └── datasets
# └── open-images-v7 ← downloads here (561 GB)
path: open-images-v7 # dataset root dir
train: images/train # train images (relative to 'path') 1743042 images
val: images/val # val images (relative to 'path') 41620 images
test: # test images (optional)
类别体系:601 类而非 600 类
配置定义了 601 个类别,索引 0–600,从 Accordion 到 Zucchini:
names:
0: Accordion
1: Adhesive tape
2: Aircraft
3: Airplane
# ... 共 601 个条目
599: Zebra
600: Zucchini
值得注意的一个细节:Google 官方文档将可框选类别数记为 600(向下取整表述),但官方的 boxable class 列表与 Ultralytics YAML 中都包含 601 个条目。以仓库中的 YAML 为准即可,训练时以 names: 的 601 个条目为类别空间。
三、Open Images V7 预训练模型:免下载直接推理
Ultralytics 发布了五个在 Open Images V7 上预训练的 YOLOv8 模型,覆盖全部 601 个类别,无需下载数据集即可使用:
| 模型 | 输入尺寸 (px) | mAPval 50-95 | 速度 CPU ONNX (ms) | 速度 A100 TensorRT (ms) | 参数量 (M) | FLOPs (B) |
|---|---|---|---|---|---|---|
| YOLOv8n-oiv7 | 640 | 18.4 | 142.4 | 1.21 | 3.5 | 10.5 |
| YOLOv8s-oiv7 | 640 | 27.7 | 183.1 | 1.40 | 11.4 | 29.7 |
| YOLOv8m-oiv7 | 640 | 33.6 | 408.5 | 2.26 | 26.2 | 80.6 |
| YOLOv8l-oiv7 | 640 | 34.9 | 596.9 | 2.43 | 44.1 | 167.4 |
| YOLOv8x-oiv7 | 640 | 36.3 | 860.6 | 3.56 | 68.7 | 260.6 |
这些权重被纳入了 Ultralytics 官方资产清单。从 ultralytics/utils/downloads.py 的源码可以看到,GITHUB_ASSETS_NAMES 中通过 [f"yolov8{k}{suffix}.pt" for k in "nsmlx" for suffix in ("", "-cls", "-seg", "-pose", "-obb", "-oiv7")] 显式枚举了 -oiv7 后缀的五个文件名——这意味着当你加载 yolov8n-oiv7.pt 时,如果本地不存在,框架会自动从官方资产仓库拉取,无需任何额外配置。
使用预训练模型:推理与微调
Python API:
from ultralytics import YOLO
# 加载 Open Images V7 预训练的 YOLOv8n 模型
model = YOLO("yolov8n-oiv7.pt")
# 执行推理
results = model.predict(source="image.jpg")
# 从预训练检查点开始微调训练
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)
CLI:
# 使用 Open Images V7 预训练模型进行推理
yolo detect predict source=image.jpg model=yolov8n-oiv7.pt
# 从 Open Images V7 预训练检查点开始训练
yolo detect train data=coco8.yaml model=yolov8n-oiv7.pt epochs=100 imgsz=640
适用前提:yolov8*-oiv7.pt 是 COCO 之外的类别空间(601 类),如果你的下游任务类别很少,直接用预训练权重推理即可;若要迁移到自己的数据上,用 model.train(data=你的yaml, ...) 微调,框架会自动按新数据的类别数重建检测头。
四、完整数据集训练:YAML 配置与自动下载机制
注意:Open Images V7 在首次使用时会自动下载,其 1,743,042 张训练图像与 41,620 张验证图像共需约 561 GB 的磁盘空间。下载脚本会安装
fiftyone包拉取图像,并将标注转换为 YOLO 格式,耗时取决于网络与硬件。
训练命令
训练一个 YOLO26n 模型(COCO 预训练初始化)在 Open Images V7 上训练 100 个 epoch、图像尺寸 640:
Python API:
from ultralytics import YOLO
# 加载 COCO 预训练的 YOLO26n 模型
model = YOLO("yolo26n.pt")
# 在 Open Images V7 数据集上训练
results = model.train(data="open-images-v7.yaml", epochs=100, imgsz=640)
CLI:
# 在 Open Images V7 数据集上训练 COCO 预训练的 YOLO26n
yolo detect train data=open-images-v7.yaml model=yolo26n.pt epochs=100 imgsz=640
更多训练参数可参考 训练模式文档。
底层机制:download: 内联脚本是如何被执行的
open-images-v7.yaml 与普通数据集 YAML 的关键区别在于末尾的 download: 字段——它不是 URL,而是一段内联 Python 脚本:
check_requirements("fiftyone")
import fiftyone as fo
import fiftyone.zoo as foz
name = "open-images-v7"
fo.config.dataset_zoo_dir = Path(SETTINGS["datasets_dir"]) / "fiftyone" / name
fraction = 1.0 # fraction of full dataset to use
LOGGER.warning("Open Images V7 dataset requires at least **561 GB of free space. Starting download...")
for split in "train", "validation": # 1743042 train, 41620 val images
train = split == "train"
# Load Open Images dataset
dataset = foz.load_zoo_dataset(
name,
split=split,
label_types=["detections"],
max_samples=round((1743042 if train else 41620) * fraction),
)
# Export to YOLO format
with warnings.catch_warnings():
warnings.filterwarnings("ignore", category=UserWarning, module="fiftyone.utils.yolo")
dataset.export(
export_dir=str(Path(SETTINGS["datasets_dir"]) / name),
dataset_type=fo.types.YOLOv5Dataset,
label_field="ground_truth",
split="val" if split == "validation" else split,
classes=classes,
overwrite=train,
)
这段脚本的逻辑可以拆成三步:
- 依赖与目录准备:先通过
check_requirements("fiftyone")确保 fiftyone 可用,并把 fiftyone 的 zoo 缓存目录重定向到SETTINGS["datasets_dir"]/fiftyone/open-images-v7,与数据集落盘目录统一管理; - 按切分加载标注:
foz.load_zoo_dataset("open-images-v7", split=split, label_types=["detections"])分别拉取 train(1,743,042 张)与 validation(41,620 张)切分;fraction = 1.0变量提供了“只取子集”的官方预留口(源码注释标注为 full dataset 的使用比例); - 导出为 YOLO 格式:
dataset.export(...)以fo.types.YOLOv5Dataset格式写到datasets/open-images-v7/,validation 切分显式映射为val子目录,与 YAML 中val: images/val声明对齐。
脚本的执行入口在 check_det_dataset(位于 ultralytics/data/utils.py):当训练/验证流程解析完 YAML 后发现 val 图像路径不存在,且 autodownload 开启时,框架按 download: 字段的形态分派——
val, s = (data.get(x) for x in (split or "val", "download"))
if val:
val = [Path(x).resolve() for x in (val if isinstance(val, list) else [val])]
if not all(x.exists() for x in val):
...
if s.startswith("http") and s.endswith(".zip"): # URL
safe_download(url=s, dir=DATASETS_DIR, delete=True)
elif s.startswith("bash "): # bash script
subprocess.run(s.split(), check=True)
else: # python script
exec(s, {"yaml": data}) # noqa: S102
可以看到:.zip 结尾的 URL 走 safe_download,bash 前缀的脚本走 subprocess,其余(如 Open Images V7 的 fiftyone 脚本)直接 exec 执行内联 Python。执行成功后日志会输出 Dataset download success ✅ (...),数据集被保存到 DATASETS_DIR(默认 datasets/,可在 settings.json 中修改),之后 path: open-images-v7 会解析为 <DATASETS_DIR>/open-images-v7,train/val 路径依次拼接生效。
类别来源的一个细节
脚本中 train 切分导出时使用的类别列表来自 dataset.default_classes(全部类别),旁边保留了一行注释掉的备选 dataset.distinct("ground_truth.detections.label")(只取实际出现过的类别)。这解释了为什么 YAML 能稳定写出 601 个类别条目——它对齐的是 fiftyone zoo 提供的完整类别定义,而非某次扫描结果。
五、典型应用场景
Open Images V7 支撑的训练/评估方向包括:
- 大词表物体检测:601 个类别远多于 COCO 的 80 类,在其上训练的检测器可识别的类目广度显著提升;
- 视觉关系检测:330 万条关系标注可用于训练理解物体间交互的模型;
- 实例分割:280 万个物体的掩码支持像素级场景分析;
- 多模态学习:本地化叙述将语音、文本与鼠标轨迹同视觉数据配对;
- 零样本评估:广覆盖的类别集合有助于评估模型对训练期间未见物体的处理能力。
与 COCO 数据集的对比
| 维度 | Open Images V7(Ultralytics 配置) | COCO |
|---|---|---|
| 类别数 | 601 | 80 |
| 训练图像数 | 1,743,042 | 118,287 |
| 定位 | 大词表检测与预训练 | 检测器对比的标准基准 |
COCO 仍是横向对比检测器的标准基准,而 Open Images V7 更适合需要宽类别覆盖的大词表检测与预训练场景。若磁盘空间有限,也可以先从 检测数据集总览 挑选更小的数据集,或直接使用上面的 -oiv7 预训练模型。
六、FAQ 与引用
问:不下载数据集能否使用 Open Images V7 预训练模型?
可以。五个 yolov8n-oiv7.pt 至 yolov8x-oiv7.pt 预训练模型开箱检测全部 601 类(mAP 18.4–36.3),无需 561 GB 下载即可对自有图像执行 推理。
问:下载需要多大空间?
约 561 GB 可用磁盘空间,首次以 data="open-images-v7.yaml" 训练时自动触发;脚本安装 fiftyone 并把标注转成 YOLO 格式。
引用(BibTeX)——若在你的研究中使用该数据集,请引用:
@article{OpenImages,
author = {Alina Kuznetsova and Hassan Rom and Neil Alldrin and Jasper Uijlings and Ivan Krasin and Jordi Pont-Tuset and Shahab Kamali and Stefan Popov and Matteo Malloci and Alexander Kolesnikov and Tom Duerig and Vittorio Ferrari},
title = {The Open Images Dataset V4: Unified image classification, object detection, and visual relationship detection at scale},
year = {2020},
journal = {IJCV}
}
数据集由 Google AI 团队创建并维护(许可证 CC-BY-4.0),Ultralytics 仓库中对应文档为 Open Images V7 数据集页,任务背景可参考 检测任务文档。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0622
Hy4-previewHy4 preview 是由腾讯混元团队研发的新一代混合专家(MoE)旗舰模型。模型总参数量 770B,每个 token 激活 49B,主干共包含78层,第一层采用标准 FFN,其余 77 层均为 MoE 结构,每层包含 256 个路由专家与 1 个共享专家,每个 token 激活 top-8 路由专家及共享专家。主干之外原生内置 1 层 MTP(总参数量 10B,激活 0.7B)以支持投机解码。Python00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
GLM-5.3-FlashGLM-5.3-Flash (320B-A18B),是GLM-5系列的首个原生多模态模型。320B总参数,能力超过GLM-5.2Jinja00
Spark-X2.5-4BSpark-X2.5-4B 旨在让强大的 AI 更实用、更高效、更易获得。在广泛日常任务中表现强劲,涵盖对话、写作、翻译、推理、编码、工具调用以及智能体工作流,并在同等规模的开源模型中取得领先成绩。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00