Ultralytics YOLO 图像分类训练实战:基于 CIFAR-100 细粒度数据集训练 YOLO 分类模型 Ultralytics YOLO 图像分类训练实战基于 CIFAR-100 细粒度数据集训练 YOLO 分类模型【免费下载链接】ultralyticsUltralytics YOLO26, YOLO11, YOLOv8 — object detection, instance segmentation, semantic segmentation, image classification, pose estimation, object tracking项目地址: https://gitcode.com/GitHub_Trending/ul/ultralytics本文以 Ultralytics 仓库中的 CIFAR-100 数据集文档为核心系统讲解如何在 YOLO 框架上训练一个 100 类的细粒度图像分类模型从数据集的规模、类别组织与官方 train/test 划分讲起给出可直接运行的 Python 与 CLI 训练命令并结合ultralytics源码深入剖析datacifar100背后的自动下载、验证集回退与数据增强实现细节。读完本文你将能够独立完成 CIFAR-100 分类实验并理解框架是如何把一个“目录即数据集”的结构变成训练流水线的。一、CIFAR-100 数据集概览CIFAR-100Canadian Institute For Advanced Research是由 Alex Krizhevsky 等人创建的图像分类基准包含60,000 张 32×32 彩色图像均匀分布在100 个细粒度类别每类 600 张中这 100 个细粒度类别又被进一步归入20 个粗粒度超类superclass是 CIFAR-10 的“更难、更细粒度”的姊妹数据集。数据集的关键特征如下继承自仓库文档 cifar100.md60,000 张 32×32 彩色图像均匀划分到 100 个类别每类恰好 600 张——500 张用于训练、100 张用于测试数据集完全均衡100 个细粒度类别被组织成20 个粗粒度超类支持更高层级的分类研究例如 trees 超类覆盖 maple、oak、palm、pine、willow 等树类数据集自带预定义的训练/测试划分无需手动或自动切分是细粒度图像分类与目标识别研究的标准基准。CIFAR-100 中细粒度类别的例子包括 apple、dolphin、maple tree、motorcycle、rocket 等这类“同一超类下多个近似类别”的设定使得分类器必须具备更精细的判别能力。二、数据集结构与官方划分CIFAR-100 自带官方预定义划分因此不需要像普通文件夹数据集那样做自动切分项目规模类别数100 个细粒度类别归入 20 个粗粒度超类图像总数60,000 张32×32 彩色训练集50,000 张每类 500 张测试集10,000 张每类 100 张验证集回退机制CIFAR-100 没有独立的 validation 文件夹。这一点在源码中有明确实现——check_cls_dataset 在定位验证目录时按val→validation→valid的顺序查找若均未命中则回退使用test目录并打印提示ultralytics/data/utils.py#L725-L740val_set ( data_dir / val if (data_dir / val).exists() else data_dir / validation if (data_dir / validation).exists() else data_dir / valid if (data_dir / valid).exists() else None ) # data/test or data/val test_set data_dir / test if (data_dir / test).exists() else None # data/val or data/test if split val and not val_set: LOGGER.warning(Dataset splitval not found, using splittest instead.) val_set test_set因此文档中的说法得到源码印证用datacifar100训练时框架默认把 10,000 张测试图像当作验证集使用同时学习全部 100 个细粒度类别。自动下载check_cls_dataset还会处理数据集不存在的情况——当本地DATASETS_DIR下找不到cifar100目录时框架自动从 assets 地址下载{dataset}.zip并解压到本地ultralytics/data/utils.py#L698-L713这就是文档 FAQ 中“数据集首次使用时自动下载downloads automatically on first use”的实现来源data_dir (dataset if dataset.is_dir() else (DATASETS_DIR / dataset)).resolve() if not data_dir.is_dir(): ... LOGGER.warning(fDataset not found, missing path {data_dir}, attempting download...) ... download(f{ASSETS_URL}/{dataset}.zip, dirdata_dir.parent)三、在 CIFAR-100 上训练 YOLO 分类模型按仓库文档给出的标准做法加载预训练分类模型yolo26n-cls.pt训练 100 个 epoch图像尺寸设为 32与 CIFAR-100 原图尺寸一致避免不必要的缩放。完整参数清单可参考 训练模式 与 图像分类任务指南。Pythonfrom ultralytics import YOLO # 加载模型 model YOLO(yolo26n-cls.pt) # 加载预训练模型训练时推荐 # 训练模型 results model.train(datacifar100, epochs100, imgsz32)CLI# 从预训练 *.pt 模型开始训练 yolo classify train datacifar100 modelyolo26n-cls.pt epochs100 imgsz32参数说明与源码依据datacifar100分类数据集使用“目录名/路径”而非 YAML。该字符串会进入 check_cls_dataset本地不存在则触发自动下载随后扫描train/val/test子目录并以train目录下子文件夹名的排序结果构建 100 个类别的names字典ultralytics/data/utils.py#L744-L746类别名直接成为模型头部的输出类别。modelyolo26n-cls.ptYOLO26 分类模型带-cls后缀且在 ImageNet 上预训练见 图像分类任务文档。训练入口 ClassificationTrainer.setup_model 会通过ClassificationModel.reshape_outputs把模型输出层从 ImageNet 的 1000 类重建成数据集的nc此处为 100此外它还允许直接传 torchvision 模型名如resnet18按IMAGENET1K_V1权重初始化。imgsz32分类任务的默认图像尺寸是 224见 ClassificationTrainer.init中overrides[imgsz] 224的兜底逻辑。由于 CIFAR-100 原图就是 32×32显式指定imgsz32可避免对小图做放大既保留原始细节又降低计算量。epochs100与仓库文档保持一致的默认实验配置。四、训练流水线源码剖析结合仓库源码yolo classify train datacifar100这条命令的实际执行链路如下1. 数据加载与图像校验每个 batch 由 ClassificationDataset 提供。它包装了 torchvision 的ImageFolder以train训练或val验证目录为根目录组织样本并执行图像完整性校验verify_images多线程扫描全部样本剔除损坏图像并把扫描结果写入*.cache文件下次训练时若样本哈希一致则直接复用缓存ultralytics/data/dataset.py#L1258-L1302可选缓存支持cacheTrueRAM 内单块连续缓冲区跨 DataLoader worker 共享避免 fork 后的内存翻倍与cachedisk以.npy形式落盘两种加速方式类别一致性保护训练器 get_dataloader 还会过滤掉类别索引超出模型nc的样本防止 CUDA 断言错误——对 100 类的 CIFAR-100 而言这保证了nc100与目录名类别数严格对齐。2. 数据增强训练与验证使用不同的 torchvision 变换ultralytics/data/dataset.py#L1196-L1211self.torch_transforms ( classify_augmentations( sizeargs.imgsz, scalescale, # (1.0 - args.scale, 1.0)随机裁剪缩放区间 hflipargs.fliplr, vflipargs.flipud, erasingargs.erasing, auto_augmentargs.auto_augment, hsv_hargs.hsv_h, hsv_sargs.hsv_s, hsv_vargs.hsv_v, ) if augment else classify_transforms(sizeargs.imgsz) )即训练阶段使用随机裁剪类增强默认RandomResizedCrop验证/推理阶段使用CenterCrop。文档中还特别提醒这类基于裁剪的变换假设输入为正方形对于极端宽高比的图像可能裁掉关键区域必要时可考虑改用Resize类变换见 classify.md 的 tip。3. 前向与验证训练循环中 preprocess_batch 把img与cls搬运到计算设备每个 epoch 结束由 ClassificationValidator 在验证集即 CIFAR-100 的 test 目录上计算 top-1 准确率并保存验证曲线图。五、应用场景CIFAR-100 被广泛用于训练与评估图像分类模型——从经典 CNN、SVM 到现代深度架构。其 100 个细粒度类别加上极小的图像尺寸32×32使它成为机器学习研究、算法对比与计算机视觉实验的高难度基准模型不仅要在 20 个超类之间做出正确区分还要在同超类的近义类别之间如不同树种的判别给出正确结果因此非常适合用来检验分类器的细粒度判别能力与正则化效果。六、引用与致谢在研究或开发工作中使用 CIFAR-100 时建议引用以下文献引自 cifar100.mdTECHREPORT{Krizhevsky09learningmultiple, author{Alex Krizhevsky}, title{Learning multiple layers of features from tiny images}, institution{}, year{2009} }同时向 Alex Krizhevsky 致谢感谢其创建并维护 CIFAR-100 数据集使其成为机器学习与计算机视觉研究社区的重要资源。七、常见问题FAQCIFAR-100 在机器学习中有何用途CIFAR-100 广泛用于训练与基准测试细粒度图像分类和目标识别模型。它包含 60,000 张 32×32 彩色图像、100 个类别归入 20 个超类是比 CIFAR-10 更具挑战性的基准可用于评估 CNN、SVM 以及基于 Ultralytics YOLO 构建的深度学习分类模型参见 YOLO26 模型文档。如何训练 YOLO 模型使用第三节的代码片段即可数据集在首次使用时自动下载。完整参数见 训练页面。CIFAR-100 有多少个类别100 个细粒度类别如 apple、dolphin、maple tree、motorcycle、rocket每类恰好 600 张、共 60,000 张这 100 个类别又归入 20 个粗粒度超类例如 trees 超类覆盖 maple、oak、palm、pine、willow。使用datacifar100训练时采用的就是这 100 个细粒度类别。训练/测试集如何划分CIFAR-100 自带 50,000 训练 10,000 测试的预定义划分每类恰好 500 张训练、100 张测试。与框架会自动切分的文件夹式分类数据集不同CIFAR-100 直接沿用官方划分且默认以 test 集充当训练过程中的验证集对应上文check_cls_dataset的 val→test 回退逻辑。更多分类数据集仓库文档的 分类数据集总览 中还收录了 MNIST、CIFAR-10、ImageNet、Caltech-101 等基准可按需替换data参数复用同一套训练流程。【免费下载链接】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),仅供参考