用 Ultralytics YOLO 在 ImageNet (ILSVRC-2012) 上训练与评估图像分类模型:完整指南
【免费下载链接】ultralyticsUltralytics YOLO26, YOLO11, YOLOv8 — object detection, instance segmentation, semantic segmentation, image classification, pose estimation, object tracking项目地址: https://gitcode.com/GitHub_Trending/ul/ultralytics
本文为基于 Ultralytics 仓库官方文档docs/en/datasets/classify/imagenet.md并结合仓库源码(ImageNet.yaml、get_imagenet.sh、data/utils.py、classify/train.py)编写的技术指南。读完后你将掌握:data="imagenet"数据集的确切规模与目录结构、Ultralytics 自动下载机制、YOLO 分类模型在 ImageNet 上的完整训练命令(Python 与 CLI),以及 ImageNet 作为深度视觉分类事实基准的技术背景与 ILSVRC 竞赛历史。
ImageNet 数据集概览
Ultralytics ImageNet数据集(data="imagenet")是用于训练与基准测试图像分类模型的ImageNet-1k / ILSVRC-2012 子集。其核心规格为:
- 1,000 个物体类别
- 1,281,167 张训练图像+50,000 张验证图像
- 训练/评测图像尺寸224×224
- 完整下载体积约144 GB
更完整的 ImageNet 数据库规模远大于此——超过 1,400 万张高分辨率图像、按 WordNet 同义词集(synset)标注,涵盖 20,000 多个类别。但 Ultralytics 使用的是业界标准化的 1,000 类 ILSVRC 子集,这也是深度学习计算机视觉领域的事实预训练基准。
该数据集的关键特性:
imagenet数据集提供 ILSVRC-2012 标准的 1,000 类、1,281,167 张训练图与 50,000 张验证图,是图像分类的标准预训练基准;- 类别按WordNet 层级组织,每个类别对应一个 synset(同义词集合);
- 图像以 224×224 尺寸训练,完整数据约 144 GB 下载量;
- 年度 ImageNet 大规模视觉识别挑战赛(ILSVRC)推动了计算机视觉研究的重要进展。
ILSVRC-2012 数据划分与目录结构
Ultralytics 的 ImageNet 数据集采用 ILSVRC-2012 划分:
| 划分 | 图像数 | 类别数 |
|---|---|---|
| 训练集 | 1,281,167 | 1,000 |
| 验证集 | 50,000 | 1,000 |
图像存储于按 WordNet synset ID 命名的每类文件夹中(例如n01440764),这正是 Ultralytics 分类训练所期望的目录布局。1,000 个类别中的每一个都映射到一个 WordNet synset;由于没有单独的测试划分,50,000 张图像的验证集被用来度量准确率。
数据目录布局
从 get_imagenet.sh 可以确认 Ultralytics 约定的解压布局:
parent/ ├── ultralytics └── datasets └── imagenet # 下载/解压位置 ├── train/ # 1,281,167 张图像,按 synset 子目录存放(n01440764/...) └── val/ # 50,000 张图像,经 valprep 后同样移入每类子目录对应地,ImageNet.yaml 中声明:
path: imagenet # dataset root dir train: train # train images (relative to 'path') 1281167 images val: val # val images (relative to 'path') 50000 images test: # test images (optional)注意(下载体积):ImageNet-1k 约为 144 GB 下载量,训练前请确认磁盘空间充足。若只做快速实验,较小的 ImageNette 与 ImageNet10 子集采用完全相同的目录格式,且训练时间只占一小部分。
仓库源码剖析:自动下载、类别名与训练器
1. 一键自动下载机制
在 data/utils.py 中,当传入data="imagenet"但本地找不到数据集目录时,Ultralytics 会自动调用下载脚本:
if str(dataset) == "imagenet": subprocess.run(["bash", str(ROOT / "data/scripts/get_imagenet.sh")], check=True)get_imagenet.sh 的关键行为(均可从脚本源码直接验证):
- 训练集:
wget https://image-net.org/data/ILSVRC/2012/ILSVRC2012_img_train.tar(约 138 GB,1,281,167 张图像),先解压外层 tar,再遍历 1,000 个 synset 子 tar 分别解到同名目录,形成train/nXXXX/YYYY.JPEG布局; - 验证集:
wget https://image-net.org/data/ILSVRC/2012/ILSVRC2012_img_val.tar(约 6.3 GB,50,000 张图像),解包后执行valprep.sh把验证图像按类移动到子目录,使其与训练集布局一致(这也是"无独立测试集、以验证集评测"的原因); - 脚本支持可选参数:
bash data/scripts/get_imagenet.sh --train --val,不带参数时默认两者都下载; - 脚本末尾还留有一行可选注释:
rm train/n04266014/n04266014_10835.JPEG——删除一张"名为 JPEG 实为 PNG"的损坏图像,避免个别数据加载器解析失败。
2. 内置 1,000 类简化类别名
ImageNet.yaml 内联了全部 1,000 个类别名(names映射,键 0–999),这些名称采用社区常用的简化标签(脚本头注释注明来源为anishathalye/imagenet-simple-labels)。例如前几类为:
names: 0: tench 1: goldfish 2: great white shark 3: tiger shark ... 980: volcano 999: traffic circle值得注意的是,autobackend.py 中有一条针对性处理:当模型携带的类别名以n0开头时(即n01440764这类 synset 编码),代码会尝试将这类 ImageNet 类码解析/替换为可读名称——说明 Ultralytics 对"synset ID 目录 + 模型类名"的两种表示都做了兼容。
3. ClassificationTrainer:默认 224 与输出头重塑
分类训练的入口类是 classify/train.py 中的ClassificationTrainer,几个与 ImageNet 训练直接相关的实现细节:
- imgsz 默认 224:构造函数中
if overrides.get("imgsz") is None: overrides["imgsz"] = 224,与 ImageNet 的 224×224 标准训练尺寸一致; - 类别数自适应:
get_model()用nc=self.data["nc"]构建模型,setup_model()中通过ClassificationModel.reshape_outputs(self.model, self.data["nc"])把分类头重塑为数据集中的类别数——因此同一套代码既能全量在 ImageNet 1,000 类上训练,也能在imagenet10等小子集上微调; - 训练时剔除多余类别:
get_dataloader()会过滤类别索引 ≥nc的样本并给出警告,避免数据/模型类别数不一致导致 CUDA 断言错误; - torchvision 模型直通:若
model名称命中torchvision.models(如resnet50),训练器会直接以IMAGENET1K_V1预训练权重加载,这正对应"ImageNet 预训练权重是迁移学习常见起点"这一惯例。
ImageNet 预训练模型性能参考
Ultralytics 提供的 YOLO26 分类系列模型均按 224 输入在 ImageNet 上评测,官方性能数据见 yolo-cls-perf.md:
| 模型 | 输入尺寸 | Top-1 准确率 | Top-5 准确率 | CPU ONNX 延迟 (ms) | T4 TensorRT10 延迟 (ms) | 参数量 (M) | 224 输入 FLOPs (B) |
|---|---|---|---|---|---|---|---|
| YOLO26n-cls | 224 | 71.4 | 90.1 | 5.0 ± 0.3 | 1.1 ± 0.0 | 2.8 | 0.5 |
| YOLO26s-cls | 224 | 76.0 | 92.9 | 7.9 ± 0.2 | 1.3 ± 0.0 | 6.7 | 1.6 |
| YOLO26m-cls | 224 | 78.1 | 94.2 | 17.2 ± 0.4 | 2.0 ± 0.0 | 11.6 | 4.9 |
| YOLO26l-cls | 224 | 79.0 | 94.6 | 23.2 ± 0.3 | 2.8 ± 0.0 | 14.1 | 6.2 |
| YOLO26x-cls | 224 | 79.9 | 95.0 | 41.4 ± 0.9 | 3.8 ± 0.0 | 29.6 | 13.6 |
其中YOLO26n-cls 以 71.4% Top-1 / 90.1% Top-5 准确率配合约 0.5 B FLOPs,在实时应用场景下是速度与精度的平衡点;预训练权重可以显著降低从零训练的算力开销并加快开发迭代。
在 ImageNet 上训练 YOLO 分类模型
在 ImageNet 上训练一个 224×224、跑 100 个 epoch 的 YOLO 分类模型,使用以下代码片段。完整参数列表请参见模型训练页面。
Python
from ultralytics import YOLO # 加载模型 model = YOLO("yolo26n-cls.pt") # 加载预训练模型(训练推荐) # 训练模型 results = model.train(data="imagenet", epochs=100, imgsz=224)CLI
# 从预训练 *.pt 模型开始训练 yolo classify train data=imagenet model=yolo26n-cls.pt epochs=100 imgsz=224参数说明(结合 cfg/init.py 与训练器源码):
| 参数 | 示例取值 | 说明 |
|---|---|---|
model | yolo26n-cls.pt | 预训练分类权重。classify 任务的默认模型即yolo26n-cls.pt(见TASK2MODEL) |
data | imagenet | 数据集标识。注意 classify 的默认演示数据是imagenet10(见TASK2DATA),全量 ImageNet 必须显式指定 |
epochs | 100 | 训练轮数 |
imgsz | 224 | 输入尺寸。分类训练器未指定时默认即为 224 |
此外,也可以借助 Ultralytics Platform 在云端管理分类数据集并运行训练。
快速验证:小子集先行
全量 144 GB 下载之前,建议先按官方约定用小子集验证环境与流程(二者目录格式与全量一致):
yolo classify train model=yolo26n-cls.pt data=imagenet10 epochs=10 imgsz=224仓库测试与文档示例中(如 val.py 的 doctest)普遍以data="imagenet10"作为 classify 任务的示例数据,这一约定同样适用于 ImageNet 全量流程的预演。
ILSVRC 与 ImageNet 的视觉意义
年度ImageNet 大规模视觉识别挑战赛(ILSVRC)让研究者可以在大规模、标准化的数据集上以一致的评测指标对算法进行基准测试。它推动了深度视觉学习在图像分类、目标检测及其他视觉任务上的重大进展——最具代表性的是 2012 年 AlexNet 的夺冠,它帮助开启了现代深度学习时代。
ImageNet 也被广泛用于训练与评估深度模型做图像分类、目标检测与目标定位。AlexNet、VGG、ResNet 等里程碑式架构都在 ImageNet 上完成开发与基准评测,而ImageNet 预训练权重至今仍是各类视觉任务迁移学习的常用起点(这也体现在上文setup_model()中直接使用IMAGENET1K_V1权重的实现)。
引用与致谢
若在研究或开发中使用 ImageNet 数据集,请引用以下论文:
@article{ILSVRC15, author = {Olga Russakovsky and Jia Deng and Hao Su and Jonathan Krause and Sanjeev Satheesh and Sean Ma and Zhiheng Huang and Andrej Karpathy and Aditya Khosla and Michael Bernstein and Alexander C. Berg and Li Fei-Fei}, title={ImageNet Large Scale Visual Recognition Challenge}, year={2015}, journal={International Journal of Computer Vision (IJCV)}, volume={115}, number={3}, pages={211-252} }在此向 ImageNet 团队致谢——由 Olga Russakovsky、Jia Deng 与 Li Fei-Fei 领衔,其创建并维护的 ImageNet 数据集是机器学习与计算机视觉研究社区的重要资源。
常见问题(FAQ)
ImageNet 数据集是什么?在计算机视觉中如何使用?
ImageNet 是一个大规模图像数据库,其完整集合包含超过 1,400 万张按 WordNet synset 标注的高分辨率图像。在 Ultralytics 中,data="imagenet"对应标准化的 1,000 类 ILSVRC-2012 子集,是图像分类预训练的事实基准。AlexNet、VGG、ResNet 等标志性模型都在 ImageNet 上训练与评测,凸显了它对计算机视觉发展的推动作用。
ImageNet 数据集有多少类别和图像?
Ultralytics 的imagenet数据集使用 ILSVRC-2012 子集:1,000 类、1,281,167 张训练图像、50,000 张验证图像,训练尺寸 224×224,总下载量约 144 GB。完整 ImageNet 数据库大得多(超过 1,400 万张图像、20,000 多个 WordNet synset),但用于分类训练与基准测试的是这 1,000 类子集。
如何在 ImageNet 上训练 YOLO 图像分类模型?
加载一个预训练分类模型,并把data指向imagenet即可(见上文"训练"小节的 Python/CLI 示例)。更深入的训练参数说明见训练页面。
为什么选择 Ultralytics YOLO26 预训练模型做 ImageNet 项目?
YOLO26 预训练模型在速度与准确率上表现优异:例如 YOLO26n-cls 的 Top-1 准确率为 71.4%、Top-5 为 90.1%,且推理开销小,适合实时应用(详见性能参考)。预训练模型降低了从零训练所需的计算资源,加速开发周期。
ILSVRC 在计算机视觉中扮演什么角色?
年度 ILSVRC 通过提供大规模、标准化数据集上的竞争式评测平台推动了视觉技术进展。其一致的评测指标促进了图像分类、目标检测与图像分割的创新,持续推动深度学习与计算机视觉的边界。
适用前提与限制小结
data="imagenet"需要约144 GB可用磁盘(训练 138 GB + 验证 6.3 GB,解压后体积更大),且首次训练时会自动触发 get_imagenet.sh 下载,请预留充足的下载时间与带宽;- 图像尺寸固定按224×224训练与评测,与 YOLO26-cls 系列模型的评测条件一致;
- 由于无独立测试集,50,000 张验证集同时承担评测职责,报告中请以验证集准确率为基准;
- 若本地已有 ILSVRC-2012 数据,只需按
datasets/imagenet/{train,val}布局放置(含 synset 子目录),Ultralytics 会直接复用而不再下载(见 data/utils.py 中"目录存在则跳过下载"的逻辑)。
【免费下载链接】ultralyticsUltralytics YOLO26, YOLO11, YOLOv8 — object detection, instance segmentation, semantic segmentation, image classification, pose estimation, object tracking项目地址: https://gitcode.com/GitHub_Trending/ul/ultralytics
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考