Ultralytics YOLO 图像分类数据集完整指南目录结构、内置数据集自动下载与训练实操【免费下载链接】ultralyticsUltralytics YOLO26, YOLO11, YOLOv8 — object detection, instance segmentation, semantic segmentation, image classification, pose estimation, object tracking项目地址: https://gitcode.com/GitHub_Trending/ul/ultralytics图像分类classify是 Ultralytics YOLO 系列模型支持的核心任务之一但其数据集组织方式与检测/分割任务截然不同。本文基于官方文档 Image Classification Datasets Overview 并结合仓库源码完整讲解分类数据集的目录结构规范、训练/评估的 Python 与 CLI 用法、内置数据集的自动下载机制以及check_cls_dataset、ClassificationDataset等关键源码如何解析、校验和加载你的数据集帮助你在搭建自定义分类数据集时一次做对并理解训练参数背后的实现逻辑。分类任务的目录结构规范对 Ultralytics YOLO 分类任务而言数据集必须采用按划分split组织的目录结构在数据集根目录root下至少需要train训练集和val验证集可选两个目录可选test目录用于测试阶段。每个划分目录内部再按类别划分每个类别对应一个以其名称命名的子目录子目录中存放该类别的全部图片。图片文件必须命名唯一并使用 JPEG、PNG 等通用格式。以 CIFAR-10 数据集为例标准目录结构如下cifar-10-/ | |-- train/ | |-- airplane/ | | |-- 10008_airplane.png | | |-- 10009_airplane.png | | |-- ... | | | |-- automobile/ | | |-- 1000_automobile.png | | |-- 1001_automobile.png | | |-- ... | | | |-- bird/ | | |-- 10014_bird.png | | |-- 10015_bird.png | | |-- ... | | | |-- ... | |-- test/ | |-- airplane/ | | |-- 10_airplane.png | | |-- 11_airplane.png | | |-- ... | | | |-- automobile/ | | |-- 100_automobile.png | | |-- 101_automobile.png | | |-- ... | | | |-- bird/ | | |-- 1000_bird.png | | |-- 1001_bird.png | | |-- ... | | | |-- ... | |-- val/ (optional) | |-- airplane/ | | |-- 105_airplane.png | | |-- 106_airplane.png | | |-- ... | | | |-- automobile/ | | |-- 102_automobile.png | | |-- 103_automobile.png | | |-- ... | | | |-- bird/ | | |-- 1045_bird.png | | |-- 1046_bird.png | | |-- ... | | | |-- ...这种结构让模型在训练阶段能从组织良好的类别中有效学习并在测试与验证阶段准确评估性能。简化来看三个划分train、test、val可选都遵循“划分目录 → 类别子目录 → 图片文件”的三级组织cifar-10-/ |-- train/ | |-- airplane/ | |-- automobile/ | |-- bird/ | ... |-- test/ | |-- airplane/ | |-- automobile/ | |-- bird/ | ... |-- val/ (optional) | |-- airplane/ | |-- automobile/ | |-- bird/ | ...注意类别名称来自子目录名而非独立的names.yaml类别编号由torchvision.datasets.ImageFolder的字典序扫描确定。若你要复用预训练权重数据集类别数需与模型输出层类别数一致详见下文“类别数不匹配时的行为”。源码视角数据集如何被校验与解析check_cls_dataset入口校验、自动下载与自动拆分训练入口ClassificationTrainer在初始化时会调用 check_cls_dataset由 engine/trainer.py 中data check_cls_dataset(self.args.data)触发验证器 engine/validator.py 亦复用该函数。从源码可以确认以下几个实际行为URL / 压缩包支持如果data参数是http(s)://开头的 URL 或以.zip/.tar/.gz结尾的路径会先经safe_download下载并解压到数据集目录内置数据集名自动下载若data传入的是目录名但该目录不存在例如cifar10、imagenette源码会发出警告并尝试自动下载——imagenet会执行仓库自带的 get_imagenet.sh 脚本其余数据集则从官方资源站下载{dataset}.zip并解压必须是目录而非文件若路径带文件后缀且不存在会抛出ValueError明确提示Classification datasets must be a directory (datapath/to/dir) not a filetrain 目录缺失时的自动拆分若根目录下没有train/但递归扫描发现图片文件会调用 split_classify_dataset 按 80% 比例自动拆出训练集若一张图片都找不到则抛出FileNotFoundErrorval 目录回退机制查找顺序为val/→validation/即验证集目录名写成validation也能被识别见 utils.py返回值一个包含train、val、test路径、nc类别数和names类别名字典的字典nc与names随后被写入模型属性ClassificationTrainer.set_model_attributes将self.data[names]赋给model.names。ClassificationDatasetImageFolder 封装、缓存与数据增强训练器通过 build_dataset 为每个 split 构建 ClassificationDataset。该类封装了torchvision.datasets.ImageFolder并在此之上提供了仓库源码中可确认的以下能力fraction 采样get_split_fraction按args.fraction对 train/val 各自按比例抽取样本便于小规模快速试验缓存机制args.cache支持True/ram解码到内存缓存与disk解码为未压缩.npy文件落盘加速大模型训练的数据加载数据增强管线训练模式augmentTrue下使用classify_augmentations受训练参数fliplr水平翻转、flipud垂直翻转、erasing随机擦除、auto_augment、hsv_h/hsv_s/hsv_v控制验证/测试模式使用classify_transforms即以args.imgsz为边长的确定性预处理single_cls 模式args.single_cls为真时所有样本标签统一改写为 0可用于单类训练图片校验verify_images()会过滤损坏或不可读的图片保证 dataloader 不崩溃。在 get_dataloader 中还有两条值得注意的防护逻辑若某个 split 扫描不到任何图片抛出FileNotFoundError错误信息中直接指向分类数据集格式文档类别数不匹配时的行为若数据集实际类别数dataset_nc大于模型预期类别数nc会按类别索引过滤掉超出部分并打印警告例如Skipping N samples from extra classes: [...]防止 CUDA 断言错误若过滤后样本为空则抛出RuntimeError提示“重置模型类别数或对齐数据集类别索引”。训练与评估用法使用内置数据集名大多数内置数据集名例如cifar10、imagenette、mnist160首次引用时会自动下载并缓存数据只有当你拥有自己整理好的数据集时才把data指向本地文件夹路径。训练示例Python / CLI!!! 示例 Pythonpython from ultralytics import YOLO # 加载预训练模型推荐用于迁移训练 model YOLO(yolo26n-cls.pt) # 开始训练 results model.train(datapath/to/dataset, epochs100, imgsz640) CLIbash # 从预训练 *.pt 模型开始训练 yolo classify train datapath/to/data modelyolo26n-cls.pt epochs100 imgsz640 补充几个源码层面的实现细节帮助理解上述参数分类任务默认imgsz为 224ClassificationTrainer.__init__ 中若未显式指定imgsz会自动设为 224与分类骨干的常规输入尺寸一致。文档示例中显式传入imgsz640属于可选项并非分类任务默认值task 固定为 classifyClassificationTrainer在初始化时强制overrides[task] classify因此通过YOLO(...).train(...)走分类流程时无需手动指定 task支持 torchvision 模型名setup_model 中若model参数是torchvision.models中的模型名如resnet50会直接实例化该 torchvision 模型pretrainedTrue时加载 IMAGENET1K_V1 权重并用ClassificationModel.reshape_outputs将输出层重塑为数据集类别数——这意味着分类训练不限于 YOLO 系列头任意 torchvision 分类骨干都可以复用同一套数据管线训练进度与可视化progress_string输出 Epoch / GPU_mem / loss 等列plot_training_samples会在results/目录下保存train_batch0.jpg等批样本拼图便于人工检查数据加载是否正确。评估val验证走 ClassificationValidator其data参数解析同样复用check_cls_dataset(self.args.data, splitself.args.split)split取值限定为train、val、test之一否则抛出ValueError。对应 CLIyolo classify val datapath/to/data modelpath/to/weights.pt splitval内置支持的分类数据集自动下载Ultralytics 支持以下数据集的自动下载每个数据集在仓库中都有独立文档页数据集说明文档Caltech 101101 个物体类别的图像分类数据集caltech101.mdCaltech 256Caltech 101 的扩展版256 个类别图像更具挑战性caltech256.mdCIFAR-1060K 张 32x32 彩色图像10 个类别每类 6K 张cifar10.mdCIFAR-100CIFAR-10 的扩展版100 个类别每类 600 张cifar100.mdFashion-MNIST70,000 张灰度图像10 个时尚品类fashion-mnist.mdImageNet超大规模图像分类数据集1400 万 图像、20,000 个类别imagenet.mdImageNet-10ImageNet 的 10 类子集适合快速实验与测试imagenet10.mdImagenetteImageNet 子集10 个易区分类别训练/测试更快imagenette.mdImagewoof更具挑战性的 ImageNet 子集10 个犬种类别imagewoof.mdMNIST70,000 张手写数字灰度图像mnist.mdMNIST160取自 MNIST train 与 test 两部分、每个数字0-9前 8 张图像共 160 张适合冒烟测试mnist.md这些数据集在首次传入data参数时由check_cls_dataset自动下载解压imagenet例外走仓库内置的 get_imagenet.sh 脚本因此离线环境下建议预先把数据集整理到本地目录再指向路径。添加自定义数据集若你已有自己的数据集只需保证它符合上文“目录结构规范”train/test/val可选划分目录 每个类别一个子目录 唯一命名的图片文件然后在训练脚本中把data参数指向数据集根目录即可from ultralytics import YOLO # 加载预训练模型推荐 model YOLO(yolo26n-cls.pt) # 开始训练 results model.train(datapath/to/your/dataset, epochs100, imgsz640)两个实用的容错行为均可从源码确认如果你的目录只有按类别组织的子目录而没有train/划分目录check_cls_dataset会自动按 80% 比例拆分出训练集见 split_classify_dataset验证集目录名写成validation/与val/等效。常见问题FAQ如何为 YOLO 分类任务组织数据集遵循 split 目录格式train、test及可选的val三个划分目录每个划分目录下为每个类别建一个以类别名命名的子目录图片放在对应类别子目录中。这样训练与评估流程才能顺利运转。参考上文 CIFAR-10 结构示例。Ultralytics YOLO 支持哪些图像分类数据集支持自动下载的数据集包括 Caltech 101、Caltech 256、CIFAR-10、CIFAR-100、Fashion-MNIST、ImageNet、ImageNet-10、Imagenette、Imagewoof 与 MNIST另见上表 MNIST160。每个数据集页均提供结构与用途的进一步说明。如何使用自定义数据集将数据整理为上述目录格式后将data参数指向数据集根目录即可Python 与 CLI 示例见上文“添加自定义数据集”小节。为什么用 Ultralytics YOLO 做图像分类从仓库文档与源码可确认的主要优势预训练模型加载如yolo26n-cls.pt等预训练权重快速启动训练pretrainedFalse时训练器会对各模块调用reset_parameters重置随机初始化易用性Python API 与 CLI 两条路径同样简洁高性能面向实时应用优化的精度与速度表现多数据集支持与 CIFAR-10、ImageNet 等主流数据集无缝集成自动下载数据管线完善ImageFolder 封装之上的 RAM/磁盘缓存、fraction 采样、随机擦除/AutoAugment/HSV 等增强选项均由训练参数直接控制。如何训练一个模型Python 与 CLI 两条路径# Python from ultralytics import YOLO model YOLO(yolo26n-cls.pt) results model.train(datapath/to/dataset, epochs100, imgsz640)# CLI yolo classify train datapath/to/data modelyolo26n-cls.pt epochs100 imgsz640小结本文覆盖的完整链路是目录结构规范split 类别子目录→check_cls_dataset的校验/下载/自动拆分 →ClassificationDataset的加载/缓存/增强 →ClassificationTrainer的训练与验证。搭建自定义分类数据集时牢记三件事划分目录齐全train必需val建议提供、类别名即子目录名、图片格式通用且命名唯一其余的下载、拆分、校验、增强都已由 ultralytics/data/utils.py、ultralytics/data/dataset.py 与 ultralytics/models/yolo/classify/train.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),仅供参考