首页
/ Ultralytics YOLO 图像分类实战:Caltech-101 数据集详解与 YOLO26 分类模型训练指南

Ultralytics YOLO 图像分类实战:Caltech-101 数据集详解与 YOLO26 分类模型训练指南

2026-09-05 23:24:02作者:吴年前Myrtle

Caltech-101 是计算机视觉领域经典的图像分类基准数据集,包含 9,144 张图像、101 个物体类别外加 1 个背景类,共 102 个类别目录。本文以 Ultralytics 官方文档为基础,结合本仓库中 数据集切分工具分类训练器 的源码实现,完整讲解如何用 YOLO 分类模型(如 yolo26n-cls)在 Caltech-101 上零手工准备地完成训练:包括数据集结构与 80/20 自动切分机制、Python/CLI 两种训练方式的关键参数、以及底层训练流程的实现细节,帮助读者快速复现并理解整个训练链路。

Caltech-101 数据集概览

Caltech-101 由加州理工学院发布,是一个覆盖真实世界物体(动物、车辆、家居用品、人物等)的经典分类基准。其核心特性如下:

  • 规模:9,144 张彩色图像,分布在 101 个物体类别外加 1 个 BACKGROUND_Google 背景类,共 102 个类别目录
  • 类别不平衡:每个类别的图像数量约为 40 到 800 张,类别规模差异显著,训练时需关注小样本类别的表现。
  • 分辨率:图像尺寸可变,多数图像约为 300x200 像素(中等分辨率)。
  • 定位:被广泛用于图像分类与目标识别算法(CNN、SVM 及各类深度学习模型)的基准评测,是模型研究与原型验证的常用数据集。

数据集结构与自动切分

Caltech-101 以 102 个类别文件夹 的形式分发,不自带预定义的训练/验证划分。Ultralytics 在首次训练时会自动完成 80% 训练 / 20% 验证的切分,无需任何手工准备:

项目 说明
类别数 102(101 个物体类别 + 1 个背景类)
图像总数 9,144 张
训练/验证划分 自动 80% / 20%(约 7,280 张训练、1,864 张验证)
每类图像数 约 40 到 800(不平衡分布)

这种"目录即标注"的结构(文件夹名 = 类别名)正是 Ultralytics 分类任务的数据格式要求,也是自动切分能够生效的前提。

源码视角:自动切分是怎么实现的

文档中"训练时自动切分"的说明,对应仓库中的通用切分工具 split_classify_dataset。该函数的行为可以从源码直接确认:

  1. 输出目录:在源目录旁创建 {source_dir}_split 新目录,包含 train/val/ 两个子目录,保留原有类别结构(例如 caltech_split/train/<class>/);
  2. 切分比例train_ratio 参数默认 0.8,逐类执行 random.shuffle 后按比例 shutil.copy2 复制文件,保证每个类别内部都按 80/20 划分,而不是全局随机划分;
  3. 文件过滤:只处理后缀在 IMG_FORMATS 白名单内的图片文件(shutil 复制而非移动,原数据不动)。

从源码结构看,该函数还通过 __main__ 入口(split.py)直接支持 split_classify_dataset("caltech101") 的命令行调用,说明官方工具链将 Caltech-101 作为分类数据集切分的标准示例场景。若需要自定义比例(如 75/25),可直接调用 split_classify_dataset("path/to/caltech101", 0.75)

应用场景

Caltech-101 被广泛用于训练和评测图像分类与目标识别模型,包括卷积神经网络(CNN)与支持向量机(SVM)等算法。其类别覆盖面广、标注干净,是机器学习与计算机视觉研究及原型开发的热门基准。在 Ultralytics 生态中,它是 YOLO 分类任务(task=classify)的典型训练数据源之一——仓库文档在 分类数据集总览 中将 Caltech-101 与 Caltech-256、CIFAR-10/100、Fashion-MNIST、MNIST、Imagenette、ImageNet-10 等并列为支持自动下载的分类数据集。

使用:在 Caltech-101 上训练 YOLO 分类模型

官方推荐的入门配置是:100 个 epoch、图像尺寸 416,使用预训练权重 yolo26n-cls.pt 作为起点。数据集在首次使用时会自动下载。以下两种方式等价,完整的训练参数列表可参考 训练模式文档图像分类任务指南

Python

from ultralytics import YOLO

# 加载模型
model = YOLO("yolo26n-cls.pt")  # 加载预训练模型(训练时推荐)

# 训练模型
results = model.train(data="caltech101", epochs=100, imgsz=416)

CLI

# 从预训练 *.pt 模型开始训练
yolo classify train data=caltech101 model=yolo26n-cls.pt epochs=100 imgsz=416

关键参数说明

参数 示例值 说明
data caltech101 数据集名称,首次使用自动下载
model yolo26n-cls.pt 分类任务预训练权重,作为迁移学习起点
epochs 100 训练轮数
imgsz 416 输入图像尺寸。注意:分类任务的默认值是 224(见下文源码说明),显式传入 416 可获得更高的分类精度

源码视角:ClassificationTrainer 的训练链路

model.train(data="caltech101", ...) 在分类任务下会路由到 ClassificationTrainer。其中几个与本文示例直接相关的实现细节:

  • imgsz 默认值ClassificationTrainer.__init__ 中,当 imgsz 未指定时强制设为 224overrides["imgsz"] = 224)。这就是为什么 Caltech-101 文档示例显式指定 imgsz=416——不传的话会以较小的 224 尺寸训练。
  • 类别数自动对齐setup_model 末尾调用 ClassificationModel.reshape_outputs(self.model, self.data["nc"])train.py),把模型输出头重塑为数据集的类别数。对 Caltech-101 而言即 102 个输出通道(101 物体类 + 1 背景类),无需手工配置 nc
  • 数据加载与防御性校验get_dataloader 基于 ClassificationDataset 构建数据集,并在样本的类别索引超出模型 nc 时自动过滤多余类别并告警(train.py),避免训练中出现 CUDA 断言错误;若 train/val/ 目录下找不到任何图像则会抛出 FileNotFoundError 并提示分类数据集格式要求。
  • 模型来源setup_model 还检查模型名是否存在于 torchvision.models 命名空间中——若在,则直接以 ImageNet 预训练权重实例化对应 torchvision 模型,这意味着除 YOLO 分类头外也可用 torchvision 骨干在 Caltech-101 上训练。

训练过程中,分类任务还会通过 plot_training_samples 将带标签的训练批次可视化保存为 train_batch*.jpg,便于检查数据增强与加载是否正常。

手动控制切分(可选)

如前所述,Caltech-101 没有预定义划分,Ultralytics 首次训练时自动按 80/20 切分。若想完全控制划分比例,可以在训练前自行把图像组织到 train/val/ 文件夹中,也可以直接复用仓库提供的通用工具:

from ultralytics.data.split import split_classify_dataset

# 对已下载的 Caltech-101 数据目录执行自定义比例切分
split_classify_dataset("path/to/caltech101", train_ratio=0.75)

数据集样例与引用

Caltech-101 的图像以"物体居中、背景干净"的取景方式著称,这种天然的居中构图使其成为训练鲁棒目标识别模型的干净起点。

若在研究或开发工作中使用了 Caltech-101 数据集,请按学术规范引用其原始论文(Li Fei-Fei, Rob Fergus, Pietro Perona, 2007):

@article{fei2007learning,
  title={Learning generative visual models from few training examples: An incremental Bayesian approach tested on 101 object categories},
  author={Fei-Fei, Li and Fergus, Rob and Perona, Pietro},
  journal={Computer vision and Image understanding},
  volume={106},
  number={1},
  pages={59--70},
  year={2007},
  publisher={Elsevier}
}

FAQ

Caltech-101 在机器学习中用于什么?

Caltech-101 被广泛用于训练和评测图像分类与目标识别模型。它包含 101 个物体类别加 1 个背景类的 9,144 张图像,是评测 CNN、SVM 等算法的经典基准。

如何用 Ultralytics YOLO 模型在 Caltech-101 上训练?

直接使用本文"使用"一节的 Python/CLI 示例即可。数据集在首次使用时自动下载并自动完成 80/20 切分,无需手工准备。完整参数列表见 训练模式文档

Caltech-101 有多少个类别?

101 个物体类别加 1 个 BACKGROUND_Google 背景类,共 102 个类别目录、9,144 张图像。使用 Ultralytics 训练时,模型会学习全部 102 个类别(由 reshape_outputs 自动对齐输出头),各类别数量从约 40 张到 800 张不等,呈不平衡分布。

Caltech-101 如何划分训练集与验证集?

该数据集没有预定义划分。首次训练时 Ultralytics 自动按 80% 训练 / 20% 验证切分(约 7,280 张训练、1,864 张验证),无需手工创建划分;如需自行控制,可在训练前把图像组织进 train/val/ 文件夹,或调用 split_classify_dataset 自定义比例。

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