首页
/ Ultralytics YOLO 大词汇检测数据集 LVIS:lvis.yaml 配置解析与 YOLO26 训练实战

Ultralytics YOLO 大词汇检测数据集 LVIS:lvis.yaml 配置解析与 YOLO26 训练实战

2026-09-04 09:41:12作者:邓越浪Henry

LVIS 是当前最主流的"大词汇"(large-vocabulary)目标检测与实例分割基准之一:它复用约 16 万张 COCO 图像,却将类别扩展到 1,203 个,并重点覆盖长尾稀有类别,是检验模型对低频类别识别能力的关键数据集。本文基于 Ultralytics 仓库中的官方文档 LVIS Dataset 与真实配置文件 lvis.yaml 展开,完整介绍数据集划分、YAML 配置结构、首次使用的自动下载机制(源码级原理),以及用 Python 和 CLI 两种方式训练 YOLO 模型的完整流程。

一、LVIS 数据集核心特性

LVIS 由 Facebook AI Research(FAIR)开发并发布,其定位是用"更大的词表 + 更完整的标注"推动检测与分割模型在稀有类别上的进展。核心特性如下:

  • 规模:约 160,000 张图像,约 200 万个实例级标注,同时支持目标检测与实例分割两类任务;
  • 词表:定义 1,203 个物体类别,既包含汽车、自行车、动物等常见物体,也覆盖雨伞、手提包、运动器材等细粒度类别;
  • 标注形式:物体边界框 + 分割掩码(mask),并刻意强调稀有/长尾类别的标注完整性;
  • 评估指标:检测任务用 mAP(mean Average Precision),分割任务用 mAR(mean Average Recall),便于横向对比;
  • 与 COCO 的关系:LVIS 与 COCO 数据集 使用相同的图像,但划分(split)不同、标注词表大得多——COCO 只有 80 个类别,LVIS 有 1,203 个。

从类别命名方式可以直观感受其"长尾"设计:仓库中 lvis.yamlnames 映射采用"主名/同义词"的写法,例如:

names:
  0: aerosol can/spray can
  2: airplane/aeroplane
  93: bicycle/bike/bike bicycle
  206: car/car automobile/auto/auto automobile/automobile
  792: person/baby/child/boy/girl/man/woman/human
  1202: zucchini/courgette

这种同义词聚合方式来自 LVIS 原始标注体系,帮助不同标注者对同一物体给出的一致命名。

二、数据集划分结构

Ultralytics 的 lvis.yaml 定义了三个本地可用的划分:

Split 图像数 说明
Train 100,170 用于训练检测/分割模型
Validation 19,809 训练过程中留出的评估集
Minival 5,000 快速验证子集,与 COCO 的 val2017 集合完全一致

在上游 LVIS 基准中还存在约 20,000 张图像的留出测试集,其真值标注不公开——推理结果需提交到 LVIS 官方评测服务器(eval.ai 上的 LVIS challenge)打分,而非本地评估。

注意一个细节:YAML 中 path: lvis 且数据集下载到 datasets/lvis 目录,注释中明确了目录布局与总大小(约 20.7 GB):

# parent
# ├── ultralytics
# └── datasets
#     └── lvis ← downloads here (20.7 GB)

三、lvis.yaml 配置文件详解

配置文件位于 ultralytics/cfg/datasets/lvis.yaml,整体分为四部分:

  1. 数据集根目录path: lvis(相对于 Ultralytics 的 datasets 目录);
  2. 三个图像列表文件
    train: train.txt # train images (relative to 'path') 100170 images
    val: val.txt # val images (relative to 'path') 19809 images
    minival: minival.txt # minival images (relative to 'path') 5000 images
    
    每个 .txt 是一行一张图的清单,标注以 YOLO 格式随行给出;
  3. names 类名映射:完整的 1,203 个类别(索引 0~1202),上文已给出示例;
  4. download 下载脚本:一段可选的 Python 代码,首次训练时自动执行,见下一节。

配置如何被校验:check_det_dataset

训练时传入 data="lvis.yaml" 后,框架会调用 check_det_dataset 完成"校验 + 自动下载 + 路径解析"。从源码可以看到几个关键行为:

  • 必填键检查trainval 键必须存在(validation 键会被自动重命名为 val);namesnc 至少有一个,且两者若同时给出则数量必须一致。LVIS 提供 names,因此解析后 nc 被自动置为 1,203;
  • 路径解析train/val/test/minival 等相对路径会被拼接到数据集根目录下并解析为绝对路径,这正是 LVIS 能带 minival 额外划分的原因——它在路径前缀遍历的键列表中(源码第 629 行 for k in "train", "val", "test", "minival");
  • 缺失时自动下载:若验证集路径不存在且 autodownload 为真(默认),框架会取出 YAML 中的 download 脚本字段并执行(exec(s, {"yaml": data}),源码第 660 行);
  • 字体检查:由于类名含大量 Unicode 文本,加载前还会按需确保 Arial.Unicode.ttf 字体可用(源码第 664 行 check_font)。

自动下载到底下了什么

lvis.yaml 末尾的 download 脚本(源码 lvis.yaml 第 1222-1239 行)定义了完整下载流程:

from pathlib import Path

from ultralytics.utils import ASSETS_URL
from ultralytics.utils.downloads import download

# Download labels
dir = Path(yaml["path"])  # dataset root dir
urls = [f"{ASSETS_URL}/lvis-labels-segments.zip"]
download(urls, dir=dir.parent)

# Download data (test2017.zip excluded: LVIS has no 'test:' split and never reads it)
urls = [
    "http://images.cocodataset.org/zips/train2017.zip",  # 19G, 118k images
    "http://images.cocodataset.org/zips/val2017.zip",    # 1G, 5k images
]
download(urls, dir=dir / "images", threads=3)

可以读出三个实现事实:

  • 标注包:YOLO 格式的 LVIS 标签(含分割多边形,lvis-labels-segments.zip)从 Ultralytics 官方资源站下载并解压到 datasets/ 下;
  • 图像包:直接复用 COCO 官方的 train2017.zip(约 19 GB)与 val2017.zip(约 1 GB),以 3 线程并发下载(底层由 download/safe_download 实现,含重试机制);
  • 刻意排除 test2017.zip:注释明确说明 LVIS 配置没有 test: 划分、也从不读取该文件——测试集留作官方服务器评测,本地无需下载。

下载完成后,datasets/lvis/ 下即有 images/train2017images/val2017train.txt/val.txt/minival.txt 清单,总占用约 20.7 GB。

四、在 LVIS 上训练 YOLO 模型

官方文档给出的基准示例是:用 YOLO26n 预训练权重,在 LVIS 上训练 100 个 epoch、输入分辨率 640。数据集(20.7 GB)会在首次使用时自动下载。

Python API

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")  # load a pretrained model (recommended for training)

# Train the model
results = model.train(data="lvis.yaml", epochs=100, imgsz=640)

CLI

# Start training from a pretrained *.pt model
yolo detect train data=lvis.yaml model=yolo26n.pt epochs=100 imgsz=640

两点实践说明:

  • 传入 data="lvis.yaml" 即可,check_det_dataset 会把裸名称补全为仓库内置的 YAML(源码第 567-569 行支持 coco8coco8.yaml 这类简写);
  • 完整的训练超参数(batchclose_mosaiclr0 等)参见 Training 文档;训练后可用 Validation 模式valminival 上评估、用 Predict 模式 做推理。

马赛克数据增强

LVIS 训练 batch 的一个典型特征是马赛克增强:多张含大量类别的复杂场景图像被拼接成一张训练图,提升每个 batch 内物体与场景的多样性,帮助模型适应不同尺度、宽高比与上下文。这一增强由 Ultralytics 数据流水线默认开启(mosaic=1.0),配合 1,203 类的长尾分布,可在有限采样内让模型"看到"更多稀有类别组合。

五、典型应用场景

LVIS 常被用于训练和评估各类深度学习模型:检测方向如 YOLO(见 YOLO26 模型文档)、Faster R-CNN、SSD;分割方向如 Mask R-CNN。它之所以成为长尾类别能力的关键基准,是因为三点组合:大词表 + 高标注量 + 标准化 mAP/mAR 指标。如果你的业务场景涉及开放式物体识别(商品、零部件、户外细碎物品等类别极多的场景),在 LVIS 上验证模型对低频类别的召回表现,比在 COCO 的 80 类上验证更具说服力。

六、引用与致谢

若在研究或开发中使用 LVIS 数据集,请引用原始论文:

@inproceedings{gupta2019lvis,
  title={LVIS: A Dataset for Large Vocabulary Instance Segmentation},
  author={Gupta, Agrim and Dollar, Piotr and Girshick, Ross},
  booktitle={Proceedings of the {IEEE} Conference on Computer Vision and Pattern Recognition},
  year={2019}
}

该数据集由 LVIS Consortium 创建并持续维护,是计算机视觉社区的重要公开资源。

七、FAQ

LVIS 数据集用于什么? 用于在大规模、长尾词表上训练与基准测试目标检测和实例分割模型。1,203 个类别、约 200 万实例标注,使其成为衡量 YOLO 等模型对常见与稀有类别识别能力的关键资源。

图像与类别数量? lvis.yaml 覆盖 1,203 个类别:训练 100,170 张、验证 19,809 张、minival 5,000 张(与 COCO val2017 相同)。图像与 COCO 相同,但词表与标注密度大得多。

LVIS 与 COCO 的核心区别? 图像相同、划分与标注不同:类别从 80 个扩展到 1,203 个,并强调标注的完整性与多样性,用于推动检测/分割模型在细粒度、低频类别上的上限。

是否有测试集? 本地配置只有 train/val/minival 三个划分;上游另有约 20,000 张的留出测试集,真值不公开,需提交 LVIS 评测服务器打分。因此自动下载脚本也刻意跳过了 test2017.zip

相关入口:数据集文档 docs/en/datasets/detect/lvis.md、COCO 对照文档 docs/en/datasets/detect/coco.md、配置文件 ultralytics/cfg/datasets/lvis.yaml、数据集校验与下载实现 ultralytics/data/utils.py

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

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.12 K
2.72 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
528
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
982
503
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
540
384