YOLOv8 图像分类完全指南:预训练模型、训练、验证、推理与导出一体化实战 YOLOv8 图像分类完全指南预训练模型、训练、验证、推理与导出一体化实战【免费下载链接】yolov10YOLOv10: Real-Time End-to-End Object Detection [NeurIPS 2024]项目地址: https://gitcode.com/GitHub_Trending/yo/yolov10图像分类Image Classification是 YOLO 系列三种视觉任务中最基础的一种它把整张图片归入预先定义好的若干类别之一输出一个类别标签和对应的置信度分数。当你只关心图中是什么物体、而不需要知道物体在哪、形状如何时分类模型就是最轻量、最直接的选择。本文以 Ultralytics YOLO 仓库本项目为 YOLOv10 发行版内部集成了完整的 YOLOv8 代码体系中的 docs/en/tasks/classify.md 为骨架结合 分类任务源码、模型配置、默认超参数 与 测试用例为你系统讲解 YOLOv8 Classify 模型的模型库、数据格式、训练/验证/推理/导出的完整工作流以及底层实现原理。读完本文你将能独立完成从准备分类数据集到把模型导出为 ONNX/TensorRT 等部署格式的全流程。什么是 YOLOv8 图像分类图像分类是三种任务Detect / Segment / Classify中最简单的一种模型输出仅为一个类别标签和一个置信度分数。与检测输出边界框、可定位多个目标和分割输出像素级掩码、可刻画精确形状不同分类适合以下场景只需要知道图片属于哪个类别不需要定位类别在画面中占主导地位例如这张图里是猫还是狗希望以极低的计算成本获得高吞吐的判别能力。模型命名与预训练数据集YOLOv8 分类模型统一使用-cls后缀命名例如yolov8n-cls.pt。与 Detect、Segment、Pose 模型在 COCO 上预训练不同Classify 模型全部在 ImageNetImageNet-1k1000 类上预训练其默认输入分辨率为 224×224。ImageNet 数据集配置文件位于 ultralytics/cfg/datasets/ImageNet.yaml包含 1000 个类别的完整names列表train 1281167 张、val 50000 张。模型权重在首次使用时会自动从 Ultralytics 官方资产仓库下载无需手动下载。预训练模型库与性能对比官方提供的 YOLOv8 分类预训练模型共 5 个规格n/s/m/l/x模型配置位于 ultralytics/cfg/models/v8/核心定义在 yolov8-cls.yaml。该 YAML 通过scales复合缩放系数控制深度depth与宽度width模型尺寸(像素)acc top1acc top5速度 CPU ONNX(ms)速度 A100 TensorRT(ms)参数(M)FLOPs(B) 640YOLOv8n-cls22469.088.312.90.312.74.3YOLOv8s-cls22473.891.723.40.356.413.5YOLOv8m-cls22476.893.585.40.6217.042.7YOLOv8l-cls22476.893.5163.00.8737.599.7YOLOv8x-cls22479.094.6232.01.0157.4154.8acc为 ImageNet 验证集上的准确率可通过yolo val classify datapath/to/ImageNet device0复现Speed为 Amazon EC2 P4d 实例上对 ImageNet val 图像的平均推理耗时可通过yolo val classify datapath/to/ImageNet batch1 device0|cpu复现。架构说明从 YAML 看分类模型构成从源码结构看YOLOv8 分类模型由YOLOv8 骨干网络Backbone 单层 Classify 分类头Head组成。yolov8-cls.yaml 中 backbone 采用 Conv C2f 的标准结构P1/2 到 P5/32 五个下采样阶段head 仅一行[-1, 1, Classify, [nc]]即对骨干最终特征做全局分类。在 nn/tasks.py 中分类模型由ClassificationModel类实现训练时若数据集的类别数nc与 YAML 中的nc不一致代码会自动打印覆盖信息并以数据集为准tasks.py#L419-L421reshape_outputs则用于把 torchvision 预训练模型如 resnet18的最后一层全连接改为目标类别数tasks.py#L430-L448。训练Train以下示例以 YOLOv8n-cls 在MNIST160数据集上训练100 个 epoch、输入尺寸64为例仅用于快速验证流程生产场景建议按任务规模选择合适的 imgsz。全部可用的训练参数见 docs/en/usage/cfg.md。 Pythonfrom ultralytics import YOLO # 加载模型三种方式 model YOLO(yolov8n-cls.yaml) # 从 YAML 新建模型 model YOLO(yolov8n-cls.pt) # 加载预训练模型推荐用于训练 model YOLO(yolov8n-cls.yaml).load(yolov8n-cls.pt) # 从 YAML 构建并迁移权重 # 训练模型 results model.train(datamnist160, epochs100, imgsz64) CLI# 从 YAML 新建模型并从头训练 yolo classify train datamnist160 modelyolov8n-cls.yaml epochs100 imgsz64 # 从预训练 *.pt 模型开始训练迁移学习 yolo classify train datamnist160 modelyolov8n-cls.pt epochs100 imgsz64 # 从 YAML 构建模型迁移预训练权重后开始训练 yolo classify train datamnist160 modelyolov8n-cls.yaml pretrainedyolov8n-cls.pt epochs100 imgsz64训练底层实现要点分类训练由 ClassificationTrainer 实现其关键行为包括默认输入尺寸ClassificationTrainer.__init__在未显式指定imgsz时自动设为224train.py#L37-L39模型来源多样setup_model支持加载本地.pt权重、从.yaml构建甚至直接使用 torchvision 模型名如resnet18并使用 ImageNet 预训练权重train.py#L60-L79Dropout 正则若设置了dropout参数训练前会把模型中所有torch.nn.Dropout层的p覆盖为配置值train.py#L51-L55数据集类分类数据通过 ClassificationDataset 加载它继承自torchvision.datasets.ImageFolder并额外支持 RAM/磁盘缓存、损坏图片过滤、fraction数据子集采样以及自动下载内置数据集如 mnist160等能力。分类训练专属超参数在 ultralytics/cfg/default.yaml 中以下参数仅对分类训练生效或与分类强相关参数默认值说明dropout0.0分类训练专用dropout 正则化概率auto_augmentrandaugment分类训练自动增强策略可选randaugment/autoaugment/augmixerasing0.4分类训练中 Random Erasing随机擦除概率范围 0-1crop_fraction1.0分类评估/推理时的中心裁剪比例范围 0-1fraction1.0参与训练的数据集比例1.0时训练集按比例截断scale0.5图像缩放增强增益fliplr/flipud0.5 / 0.0水平/垂直翻转概率hsv_h/hsv_s/hsv_v0.015 / 0.7 / 0.4HSV 色彩增强从源码看这些参数在 ClassificationDataset.init中被分别传入classify_augmentations训练时与classify_transforms验证/推理时两个变换管线tests/test_python.py 中的test_classify_transforms_train对randaugment、autoaugment、augmix等增强策略组合做了参数化验证。数据集格式分类数据集采用 torchvision 标准的按类别分目录结构root/ |-- class1/ | |-- img1.jpg | |-- img2.jpg | |-- ... |-- class2/ | |-- img1.jpg | |-- img2.jpg | |-- ... |-- class3/ | |-- img1.jpg | |-- img2.jpg | |-- ... |-- ...root目录下为每个类别建立一个子目录子目录名即类别名其中存放该类别的全部图片通常为 JPEG/PNG。训练时把data参数指向该root目录即可。官方内置支持以下分类数据集均支持自动下载Caltech 101、Caltech 256、CIFAR-10、CIFAR-100、Fashion-MNIST、ImageNet、ImageNet-10、Imagenette、Imagewoof、MNIST详细格式说明与使用方式见 docs/en/datasets/classify/index.md。如果你有自己的数据只要按上述目录结构整理好后将data指向根目录即可直接训练。验证Val验证已训练好的 YOLOv8n-cls 模型在 MNIST160 上的准确率。无需传任何参数——model会自动保留训练时的data与超参作为模型属性。 Pythonfrom ultralytics import YOLO # 加载模型 model YOLO(yolov8n-cls.pt) # 加载官方模型 model YOLO(path/to/best.pt) # 加载自定义模型 # 验证模型无需参数数据集与设置会被自动记住 metrics model.val() metrics.top1 # top1 准确率 metrics.top5 # top5 准确率 CLIyolo classify val modelyolov8n-cls.pt # 验证官方模型 yolo classify val modelpath/to/best.pt # 验证自定义模型验证指标与实现验证由 ClassificationValidator 实现其指标对象为ClassifyMetrics核心指标即top1_acc与top5_accval.py#L37-L39。验证过程中对每个 batch 取每张图预测分数最高的前 5 个类别n5 min(len(names), 5)作为预测val.py#L56-L60使用ConfusionMatrix统计混淆矩阵并在plotsTrue时输出归一化/非归一化两种混淆矩阵图val.py#L64-L72。在仓库测试 tests/test_engine.py 中test_classify以 imagenet10 数据集跑通了 Trainer → Validator → Predictor 的完整链路test_engine.py#L104-L128可作为快速验证环境是否正常的最小示例。预测Predict使用训练好的模型对图片进行预测 Pythonfrom ultralytics import YOLO # 加载模型 model YOLO(yolov8n-cls.pt) # 官方模型 model YOLO(path/to/best.pt) # 自定义模型 # 预测 results model(https://ultralytics.com/images/bus.jpg) # 对单张图片预测 CLIyolo classify predict modelyolov8n-cls.pt sourcehttps://ultralytics.com/images/bus.jpg # 官方模型 yolo classify predict modelpath/to/best.pt sourcehttps://ultralytics.com/images/bus.jpg # 自定义模型predict模式的完整参数说明见 docs/en/modes/predict.md。预测底层实现预测由 ClassificationPredictor 实现预处理非 Tensor 输入会被转换为 RGB 后逐图应用self.transforms推理时为classify_transforms并自动适配 fp16/fp32 精度predict.py#L36-L49后处理将模型输出的概率向量封装为Results对象names来自model.names预测类别可通过results.probs查看predict.py#L51-L61。导出Export将 YOLOv8n-cls 模型导出为 ONNX、CoreML 等部署格式 Pythonfrom ultralytics import YOLO # 加载模型 model YOLO(yolov8n-cls.pt) # 官方模型 model YOLO(path/to/best.pt) # 自定义训练模型 # 导出 model.export(formatonnx) CLIyolo export modelyolov8n-cls.pt formatonnx # 导出官方模型 yolo export modelpath/to/best.pt formatonnx # 导出自定义模型导出完成后可直接对导出模型进行预测或验证例如yolo predict modelyolov8n-cls.onnx。完整export模式说明见 docs/en/modes/export.md各集成环境的详细指南如 OpenVINO见 docs/en/integrations/。支持的全部导出格式格式format参数产物模型Metadata关键参数PyTorch-yolov8n-cls.pt✅-TorchScripttorchscriptyolov8n-cls.torchscript✅imgsz,optimizeONNXonnxyolov8n-cls.onnx✅imgsz,half,dynamic,simplify,opsetOpenVINOopenvinoyolov8n-cls_openvino_model/✅imgsz,half,int8TensorRTengineyolov8n-cls.engine✅imgsz,half,dynamic,simplify,workspaceCoreMLcoremlyolov8n-cls.mlpackage✅imgsz,half,int8,nmsTF SavedModelsaved_modelyolov8n-cls_saved_model/✅imgsz,kerasTF GraphDefpbyolov8n-cls.pb❌imgszTF Litetfliteyolov8n-cls.tflite✅imgsz,half,int8TF Edge TPUedgetpuyolov8n-cls_edgetpu.tflite✅imgszTF.jstfjsyolov8n-cls_web_model/✅imgsz,half,int8PaddlePaddlepaddleyolov8n-cls_paddle_model/✅imgszNCNNncnnyolov8n-cls_ncnn_model/✅imgsz,half说明dynamic用于 ONNX/TensorRT 动态输入尺寸half启用 FP16 半精度simplify调用 ONNX Simplifier 简化计算图int8用于量化workspace设置 TensorRT 可用显存上限。Edge TPU 与 TF.js 依赖 TF Lite 中间产物。快速自检清单对照以下要点检查你的分类工作流是否完整模型选择从yolov8n-cls~yolov8x-cls按精度/速度预算选择规格数据组织数据集按根目录/类别名/图片结构整理训练时data指向根目录训练yolo classify train data... modelyolov8n-cls.pt epochs100 imgsz224验证yolo classify val modelbest.pt关注top1_acc/top5_acc推理yolo classify predict modelbest.pt source...导出yolo export modelbest.pt formatonnx等。本文涉及的源码均在仓库内可直接查阅分类训练、分类验证、分类预测、模型定义、分类数据集、模型 YAML 配置。【免费下载链接】yolov10YOLOv10: Real-Time End-to-End Object Detection [NeurIPS 2024]项目地址: https://gitcode.com/GitHub_Trending/yo/yolov10创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考