首页
/ Ultralytics Open Images V7 数据集实战指南:601 类大词表检测的数据配置、预训练模型与 YOLO 训练全流程

Ultralytics Open Images V7 数据集实战指南:601 类大词表检测的数据配置、预训练模型与 YOLO 训练全流程

2026-09-04 21:20:47作者:滑思眉Philip

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,从 AccordionZucchini

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,
        )

这段脚本的逻辑可以拆成三步:

  1. 依赖与目录准备:先通过 check_requirements("fiftyone") 确保 fiftyone 可用,并把 fiftyone 的 zoo 缓存目录重定向到 SETTINGS["datasets_dir"]/fiftyone/open-images-v7,与数据集落盘目录统一管理;
  2. 按切分加载标注foz.load_zoo_dataset("open-images-v7", split=split, label_types=["detections"]) 分别拉取 train(1,743,042 张)与 validation(41,620 张)切分;fraction = 1.0 变量提供了“只取子集”的官方预留口(源码注释标注为 full dataset 的使用比例);
  3. 导出为 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_downloadbash 前缀的脚本走 subprocess,其余(如 Open Images V7 的 fiftyone 脚本)直接 exec 执行内联 Python。执行成功后日志会输出 Dataset download success ✅ (...),数据集被保存到 DATASETS_DIR(默认 datasets/,可在 settings.json 中修改),之后 path: open-images-v7 会解析为 <DATASETS_DIR>/open-images-v7train/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.ptyolov8x-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 数据集页,任务背景可参考 检测任务文档

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.12 K
2.72 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
527
590
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
904
1.82 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
854
1.34 K
docsdocs
暂无描述
Markdown
889
5.78 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.52 K
1.01 K
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.33 K
1.45 K
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
980
502
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
540
384