在 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静态方法从数据集字典中取出train与val(或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 train与yolo classify train在分类任务中指向同一训练流程(CLI 解析后最终都调用分类训练器),data='caltech101'为数据集快捷名称,首次运行时若本地不存在会自动下载到数据集目录。
4.2 常用训练参数解析
data、epochs、imgsz只是最基础的三个参数,完整参数列表参见 训练模式文档 与 配置说明。结合分类数据加载源码,以下参数对训练影响显著:
| 参数 | 默认值 | 作用与源码依据 |
|---|---|---|
data | coco8.yaml | 数据集快捷名或路径;分类任务解析为 ImageFolder 根目录 |
epochs | 100 | 训练轮数 |
imgsz | 640 | 训练/推理输入尺寸,Caltech-101 官方示例使用416 |
fraction | 1.0 | 使用的训练数据比例;源码在augment=True且fraction<1.0时对样本做切片(见 ultralytics/data/dataset.py),可用于快速小规模实验 |
cache | False | True/'ram'缓存进内存、'disk'缓存为.npy文件,减少 IO(见 ultralytics/data/dataset.py) |
fliplr/flipud | 0.5/0.0 | 水平/垂直翻转增强概率,传入classify_augmentations |
hsv_h/hsv_s/hsv_v | 0.015/0.7/0.4 | HSV 色彩增强幅度 |
auto_augment | randaugment | 自动增强策略 |
erasing | 0.4 | 随机擦除增强概率 |
crop_fraction | 1.0 | 验证/推理时的中心裁剪比例,作用于classify_transforms |
scale | 0.5 | 训练时的随机缩放下界(源码中固定取(1.0 - args.scale, 1.0),见 ultralytics/data/dataset.py) |
4.3 训练数据加载的底层机制
ClassificationTrainer.get_dataloader的调用链如下(见 ultralytics/models/yolo/classify/train.py):
- 在 DDP 场景下先通过
torch_distributed_zero_first(rank)保证.cache文件只初始化一次; - 调用
build_dataset构造ClassificationDataset(augment=mode=='train'决定是否启用训练增强); - 由
build_dataloader打包为 PyTorch DataLoader; - 非训练模式下,将
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各导出格式支持的参数(如imgsz、half、int8、dynamic等)详见 导出模式文档 与 分类任务文档。
八、引用与致谢
在科研或开发工作中使用 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),仅供参考