在 YOLOv10 中基于 Caltech-101 数据集训练图像分类模型:数据集解析与完整实操指南
2026/9/15 17:54:00 网站建设 项目流程

在 YOLOv10 中基于 Caltech-101 数据集训练图像分类模型:数据集解析与完整实操指南

【免费下载链接】yolov10YOLOv10: Real-Time End-to-End Object Detection [NeurIPS 2024]项目地址: https://gitcode.com/GitHub_Trending/yo/yolov10

本文以 Caltech-101 图像分类数据集为切入点,完整讲解该数据集的来源背景、目录结构、在 Ultralytics YOLO(当前仓库 yolov10 项目)分类任务中的自动下载与训练流程,并结合 分类数据集基类实现 与 分类训练器 源码,给出从数据准备、训练、验证到预测的端到端实战方案。

一、Caltech-101 数据集概述

Caltech-101 是计算机视觉领域广泛使用的目标识别基准数据集,由加州理工学院维护(数据集主页可见于官方 Caltech Data 记录)。它包含约 9,000 张彩色图像,覆盖 101 个物体类别,类别选取刻意覆盖真实世界中形形色色的物体,且图像经过精心挑选与标注,构成了一个具有挑战性的目标识别基准。

关键特性(Key Features)

  • 规模:约 9,000 张彩色图像,划分为 101 个类别;
  • 类别多样性:覆盖动物、交通工具、家居用品、人物等广泛对象;
  • 类别不均衡:每个类别的图像数量在约 40~800 张之间变化,属于典型的小样本/长尾分布场景;
  • 图像分辨率:图像尺寸不一,多数为中等分辨率;
  • 用途:在机器学习领域,尤其是目标识别任务中广泛用于训练与测试。

二、数据集结构:没有官方划分,自己切分

与许多自带 train/test 划分的数据集不同,Caltech-101 没有官方固定的训练集与测试集划分,使用者通常根据自身需求自行划分。一种常见做法是:每类随机抽取固定数量(例如每类 30 张)作为训练集,其余图像作为测试集。

从源码看 YOLO 分类数据集的目录规范

虽然 Caltech-101 官方没有划分,但在 Ultralytics YOLO 的分类流程中,数据必须组织成 torchvision 标准的 ImageFolder 格式:根目录下每个类一个子目录,子目录名即类别名,内部存放该类所有图像(JPEG/PNG 等)。这也是 分类数据集格式指南 中定义的通用规范:

root/ |-- class1/ | |-- img1.jpg | |-- img2.jpg | |-- ... |-- class2/ | |-- img1.jpg | |-- img2.jpg | |-- ... |-- class3/ | |-- img1.jpg | |-- img2.jpg | |-- ... |-- ...

这一结构与源码中的ClassificationDataset完全对应——该类直接继承自torchvision.datasets.ImageFolder(见 ultralytics/data/dataset.py),因此data='caltech101'这样的快捷名称在首次使用时会被自动下载并解析为 ImageFolder 形式的本地目录,随后build_dataset会基于该目录构造数据集实例(见 ultralytics/models/yolo/classify/train.py)。

训练/验证路径的解析方式

训练器基类通过get_dataset静态方法从数据集字典中取出trainval(或test)路径(见 ultralytics/engine/trainer.py)。对于 Caltech-101 这类没有独立 val 目录的数据集,实际使用中一般先将 Caltech-101 按自己的比例切分出train/test/两个子目录(各自内部再按类别分子目录),再分别作为训练集与验证集路径传入。

三、应用场景

Caltech-101 被广泛用于深度学习模型的训练与评估,覆盖目标识别领域的典型算法:

  • 卷积神经网络(CNNs):如图像分类骨干网络的特征提取能力对比;
  • 支持向量机(SVMs):传统机器学习方法在视觉特征(如 HOG、SIFT 编码)上的分类性能验证;
  • 其他机器学习与计算机视觉算法:其类别多样、图像质量高,是研究与开发阶段的理想基准。

从当前仓库看,Caltech-101 与 ImageNet 等一起被列为分类任务支持自动下载的数据集(见 分类数据集索引),并挂载在文档导航中(见 mkdocs.yml)。需要注意的是,分类任务官方预训练权重(yolov8n-cls.pt等)基于 ImageNet 训练,Caltech-101 更适合作为迁移学习或小样本分类的下游基准。

四、在 YOLOv10 仓库中训练:完整命令与参数

4.1 使用预训练模型训练 100 个 epoch

原文档给出两种等价的启动方式,分别对应 Python API 与 CLI 接口:

Python 方式

from ultralytics import YOLO # 加载模型(推荐使用预训练模型作为起点) model = YOLO('yolov8n-cls.pt') # 训练模型 results = model.train(data='caltech101', epochs=100, imgsz=416)

CLI 方式

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

说明:yolo detect trainyolo classify train在分类任务中指向同一训练流程(CLI 解析后最终都调用分类训练器),data='caltech101'为数据集快捷名称,首次运行时若本地不存在会自动下载到数据集目录。

4.2 常用训练参数解析

dataepochsimgsz只是最基础的三个参数,完整参数列表参见 训练模式文档 与 配置说明。结合分类数据加载源码,以下参数对训练影响显著:

参数默认值作用与源码依据
datacoco8.yaml数据集快捷名或路径;分类任务解析为 ImageFolder 根目录
epochs100训练轮数
imgsz640训练/推理输入尺寸,Caltech-101 官方示例使用416
fraction1.0使用的训练数据比例;源码在augment=Truefraction<1.0时对样本做切片(见 ultralytics/data/dataset.py),可用于快速小规模实验
cacheFalseTrue/'ram'缓存进内存、'disk'缓存为.npy文件,减少 IO(见 ultralytics/data/dataset.py)
fliplr/flipud0.5/0.0水平/垂直翻转增强概率,传入classify_augmentations
hsv_h/hsv_s/hsv_v0.015/0.7/0.4HSV 色彩增强幅度
auto_augmentrandaugment自动增强策略
erasing0.4随机擦除增强概率
crop_fraction1.0验证/推理时的中心裁剪比例,作用于classify_transforms
scale0.5训练时的随机缩放下界(源码中固定取(1.0 - args.scale, 1.0),见 ultralytics/data/dataset.py)

4.3 训练数据加载的底层机制

ClassificationTrainer.get_dataloader的调用链如下(见 ultralytics/models/yolo/classify/train.py):

  1. 在 DDP 场景下先通过torch_distributed_zero_first(rank)保证.cache文件只初始化一次;
  2. 调用build_dataset构造ClassificationDatasetaugment=mode=='train'决定是否启用训练增强);
  3. build_dataloader打包为 PyTorch DataLoader;
  4. 非训练模式下,将torch_transforms挂到模型上用于推理预处理。

ClassificationDataset.verify_images还会为数据集生成.cache缓存文件(含版本号与哈希校验),并对坏图进行过滤,避免损坏图像中断训练(见 ultralytics/data/dataset.py)。对于 Caltech-101 这类来源多样、可能存在少量损坏文件的真实数据集,这套校验机制尤为实用。

五、训练后的验证(Val)

分类任务的验证指标为 top-1 与 top-5 准确率。由于model会保留训练时的data等参数,验证时无需重复指定数据集:

Python 方式

from ultralytics import YOLO # 加载官方模型或自定义训练结果 model = YOLO('yolov8n-cls.pt') # 官方预训练模型 model = YOLO('path/to/best.pt') # 自定义训练模型 # 验证(数据集与设置已被模型记住) metrics = model.val() metrics.top1 # top1 准确率 metrics.top5 # top5 准确率

CLI 方式

yolo classify val model=yolov8n-cls.pt # 验证官方模型 yolo classify val model=path/to/best.pt # 验证自定义模型

六、用训练好的模型做预测(Predict)

Python 方式

from ultralytics import YOLO model = YOLO('path/to/best.pt') # 加载训练好的模型 results = model('path/to/image.jpg') # 对单张图像预测

CLI 方式

yolo classify predict model=path/to/best.pt source='path/to/image.jpg'

七、模型导出(Export)

分类模型可导出为 ONNX、TensorRT、CoreML、OpenVINO、TF Lite 等十余种格式,导出后可直接用于predict/val

# Python model.export(format='onnx') # CLI yolo export model=path/to/best.pt format=onnx

各导出格式支持的参数(如imgszhalfint8dynamic等)详见 导出模式文档 与 分类任务文档。

八、引用与致谢

在科研或开发工作中使用 Caltech-101 数据集,请引用以下论文:

@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} }

该数据集由 Li Fei-Fei、Rob Fergus 与 Pietro Perona 创建并维护,作为机器学习与计算机视觉研究社区的宝贵资源长期开放,具体信息可查阅 Caltech Data 平台上的数据集主页。

九、进一步阅读

  • 分类任务总览(含预训练模型表)
  • 分类数据集格式与全部支持数据集
  • Caltech-256 数据集(Caltech-101 的扩展版本,256 类)
  • ImageNet 数据集(分类预训练权重来源)
  • 训练模式参数总览
  • 配置参数参考

【免费下载链接】yolov10YOLOv10: Real-Time End-to-End Object Detection [NeurIPS 2024]项目地址: https://gitcode.com/GitHub_Trending/yo/yolov10

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询