YOLO Vision 2026:

图像分类#

YOLO image classification of objects and scenes

图像分类是所支持的任务中最简单的一个,涉及将整个图像分类到一组预定义的类别中。

图像分类器的输出是一个单一的类别标签和一个置信度分数。当你只需要知道图像属于哪个类别,而不需要知道该类别的对象位于何处或其确切形状时,图像分类非常有用。



Watch: Explore Ultralytics YOLO Tasks: Image Classification using Ultralytics Platform
提示

YOLO26 Classify 模型使用 -cls 后缀,即 yolo26n-cls.pt,并且在 ImageNet 上进行了预训练。

模型#

此处展示了 YOLO26 预训练的 Classify 模型。Detect、Segment 和 Pose 模型在 COCO 数据集上进行预训练,Semantic 模型在 Cityscapes 上进行预训练,而 Classify 模型在 ImageNet 数据集上进行预训练。

首次使用时,模型会从最新的 Ultralytics 发布版本中自动下载。

模型尺寸
(像素)
准确率
top1
准确率
top5
速度
CPU ONNX
(ms)
速度
T4 TensorRT10
(ms)
参数量
(M)
FLOPs
(B) at 224
YOLO26n-cls22471.490.15.0 ± 0.31.1 ± 0.02.80.5
YOLO26s-cls22476.092.97.9 ± 0.21.3 ± 0.06.71.6
YOLO26m-cls22478.194.217.2 ± 0.42.0 ± 0.011.64.9
YOLO26l-cls22479.094.623.2 ± 0.32.8 ± 0.014.16.2
YOLO26x-cls22479.995.041.4 ± 0.93.8 ± 0.029.613.6
  • acc 值是模型在 ImageNet 数据集验证集上的准确率。
    通过 yolo val classify data=path/to/ImageNet device=0 复现
  • 速度是通过 Amazon EC2 P4d 实例对 ImageNet 验证集图像取平均值计算得出的。
    通过 yolo val classify data=path/to/ImageNet batch=1 device=0|cpu 复现
  • ParamsFLOPs 值适用于经过 model.fuse() 处理后的融合模型,该操作会合并 Conv 和 BatchNorm 层。预训练检查点保留了完整的训练架构,可能会显示更高的数值。

训练#

在 MNIST160 数据集上以图像尺寸 64 训练 YOLO26n-cls 100 个轮次。有关可用参数的完整列表,请参见配置页面。

示例
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-cls.yaml")  # build a new model from YAML
model = YOLO("yolo26n-cls.pt")  # load a pretrained model (recommended for training)
model = YOLO("yolo26n-cls.yaml").load("yolo26n-cls.pt")  # build from YAML and transfer weights

# Train the model
results = model.train(data="mnist160", epochs=100, imgsz=64)
提示

Ultralytics YOLO 分类使用 torchvision.transforms.RandomResizedCrop 进行训练,使用 torchvision.transforms.CenterCrop 进行验证和推理。 这些基于裁剪的变换假设输入是正方形的,可能会无意中从具有极端宽高比的图像中裁剪掉重要区域,从而可能在训练期间导致关键视觉信息的丢失。 为了在保持其比例的同时保留完整图像,建议使用 torchvision.transforms.Resize 代替裁剪变换。

你可以通过自定义 ClassificationDatasetClassificationTrainer 来定制你的增强管道,从而实现这一点。

import torch
import torchvision.transforms as T

from ultralytics import YOLO
from ultralytics.data.dataset import ClassificationDataset
from ultralytics.models.yolo.classify import ClassificationTrainer, ClassificationValidator

class CustomizedDataset(ClassificationDataset):
    """A customized dataset class for image classification with enhanced data augmentation transforms."""

    def __init__(self, root: str, args, augment: bool = False, prefix: str = ""):
        """Initialize a customized classification dataset with enhanced data augmentation transforms."""
        super().__init__(root, args, augment, prefix)

        # Add your custom training transforms here
        train_transforms = T.Compose(
            [
                T.Resize((args.imgsz, args.imgsz)),
                T.RandomHorizontalFlip(p=args.fliplr),
                T.RandomVerticalFlip(p=args.flipud),
                T.RandAugment(interpolation=T.InterpolationMode.BILINEAR),
                T.ColorJitter(brightness=args.hsv_v, contrast=args.hsv_v, saturation=args.hsv_s, hue=args.hsv_h),
                T.ToTensor(),
                T.Normalize(mean=torch.tensor(0), std=torch.tensor(1)),
                T.RandomErasing(p=args.erasing, inplace=True),
            ]
        )

        # Add your custom validation transforms here
        val_transforms = T.Compose(
            [
                T.Resize((args.imgsz, args.imgsz)),
                T.ToTensor(),
                T.Normalize(mean=torch.tensor(0), std=torch.tensor(1)),
            ]
        )
        self.torch_transforms = train_transforms if augment else val_transforms

class CustomizedTrainer(ClassificationTrainer):
    """A customized trainer class for YOLO classification models with enhanced dataset handling."""

    def build_dataset(self, img_path: str, mode: str = "train", batch=None):
        """Build a customized dataset for classification training and the validation during training."""
        return CustomizedDataset(root=img_path, args=self.args, augment=mode == "train", prefix=mode)

class CustomizedValidator(ClassificationValidator):
    """A customized validator class for YOLO classification models with enhanced dataset handling."""

    def build_dataset(self, img_path: str):
        """Build a customized dataset for classification standalone validation (no augmentation)."""
        return CustomizedDataset(root=img_path, args=self.args, augment=False, prefix=self.args.split)

model = YOLO("yolo26n-cls.pt")
model.train(data="imagenet1000", trainer=CustomizedTrainer, epochs=10, imgsz=224, batch=64)
model.val(data="imagenet1000", validator=CustomizedValidator, imgsz=224, batch=64)

数据集格式#

YOLO 分类数据集格式可以在数据集指南中找到详细说明。分类数据集也可以使用 Ultralytics 平台标注工具进行管理和标注。

验证#

验证训练好的 YOLO26n-cls 模型在 MNIST160 数据集上的准确率。不需要任何参数,因为 model 保留了其训练时的 data 和参数作为模型属性。

示例
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-cls.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom model

# Validate the model
metrics = model.val()  # no arguments needed, dataset and settings remembered
metrics.top1  # top1 accuracy
metrics.top5  # top5 accuracy
提示

正如训练部分中所提到的,你可以通过使用自定义 ClassificationTrainer 来在训练期间处理极端的长宽比。为了获得一致的验证结果,你需要在调用 val() 方法时实现自定义的 ClassificationValidator,以应用相同的方法。有关实现细节,请参考训练部分中的完整代码示例。

预测#

使用已训练的 YOLO26n-cls 模型对图像进行预测。

示例
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-cls.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom model

# Predict with the model
results = model("https://ultralytics.com/images/bus.jpg")  # predict on an image

# Access the results
for result in results:
    top1 = result.probs.top1  # top predicted class ID
    top1_conf = result.probs.top1conf  # top prediction confidence
    top1_name = result.names[top1]  # top predicted class name

查看完整的 predict 模式详情,请访问 Predict 页面。

结果输出#

图像分类为每张图像返回一个 Results 对象。主要的预测字段是 result.probs,它包含类别概率向量以及用于顶级预测的辅助工具。

属性类型形状描述
result.probsProbs(C,)类别概率。
result.probs.datatorch.float32(C,)每个类别的概率。
result.probs.top1int()首选类别 ID。
result.probs.top1conftorch.float32()首选置信度。
result.probs.top5list[int](<=5)前 5 个类别 ID。

有关所有任务特定于任务的 Results 字段,请参阅按任务划分的预测结果部分。

导出#

将 YOLO26n-cls 模型导出为其他格式,例如 ONNX、CoreML 等。

示例
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-cls.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom-trained model

# Export the model
model.export(format="onnx")

可用的 YOLO26-cls 导出格式如下表所示。你可以使用 format 参数导出为任何格式,即 format='onnx'format='engine'。你可以直接对导出的模型进行预测或验证,即 yolo predict model=yolo26n-cls.onnx。导出完成后将显示针对你的模型的使用示例。

格式format 参数模型元数据参数
PyTorch-yolo26n-cls.pt-
TorchScripttorchscriptyolo26n-cls.torchscriptimgsz, quantize, dynamic, nms, batch, device
ONNXonnxyolo26n-cls.onnximgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device
OpenVINOopenvinoyolo26n-cls_openvino_model/imgsz, quantize, dynamic, nms, batch, data, fraction, device
TensorRTengineyolo26n-cls.engineimgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device
CoreMLcoremlyolo26n-cls.mlpackageimgsz, dynamic, quantize, nms, batch, device
TF SavedModelsaved_modelyolo26n-cls_saved_model/imgsz, keras, quantize, opset, nms, batch, data, fraction, device
TF GraphDefpbyolo26n-cls.pbimgsz, opset, batch, device
TF Edge TPUedgetpuyolo26n-cls_edgetpu.tfliteimgsz, quantize, opset, data, fraction, device
PaddlePaddlepaddleyolo26n-cls_paddle_model/imgsz, batch, device
MNNmnnyolo26n-cls.mnnimgsz, batch, dynamic, quantize, simplify, opset, nms, device
NCNNncnnyolo26n-cls_ncnn_model/imgsz, quantize, batch, device
IMX500imxyolo26n-cls_imx_model/imgsz, quantize, data, fraction, nms, device
RKNNrknnyolo26n-cls_rknn_model/imgsz, batch, name, quantize, simplify, opset, data, fraction, device
ExecuTorchexecutorchyolo26n-cls_executorch_model/imgsz, batch, device
Axeleraaxelerayolo26n-cls_axelera_model/imgsz, batch, quantize, data, fraction, device
DEEPXdeepxyolo26n-cls_deepx_model/imgsz, quantize, simplify, opset, data, optimize, device
Qualcomm QNNqnnyolo26n-cls_qnn.onnximgsz, batch, name, quantize, simplify, opset, data, fraction, device
LiteRTlitertyolo26n-cls.tfliteimgsz, quantize, batch, data, fraction, device
Hailohailoyolo26n-cls_hailo_model/imgsz, name, quantize, data, fraction, simplify, conf, iou
Huawei Ascendascendyolo26n-cls_ascend_model/imgsz, batch, name, quantize, opset, simplify, nms

查看完整的 export 详情,请访问 Export 页面。

常见问题解答#

YOLO26 在图像分类中的目的是什么?#

YOLO26 模型(例如 yolo26n-cls.pt)专为高效图像分类而设计。它们将单个类别标签连同置信度分数分配给整个图像。这对于只需知道图像的具体类别、而无需识别图像中对象的位置或形状的应用场景特别有用。

我该如何训练 YOLO26 模型进行图像分类?#

要训练 YOLO26 模型,你可以使用 Python 或 CLI 命令。例如,要在 MNIST160 数据集上以 64 的图像尺寸训练 yolo26n-cls 模型 100 个轮次:

示例
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-cls.pt")  # load a pretrained model (recommended for training)

# Train the model
results = model.train(data="mnist160", epochs=100, imgsz=64)

有关更多配置选项,请访问配置页面。

我在哪里可以找到预训练的 YOLO26 分类模型?#

预训练的 YOLO26 分类模型可以在模型部分找到。诸如 yolo26n-cls.ptyolo26s-cls.ptyolo26m-cls.pt 等模型在 ImageNet 数据集上进行了预训练,可以轻松下载并用于各种图像分类任务。

我该如何将已训练的 YOLO26 模型导出为不同格式?#

你可以使用 Python 或 CLI 命令将已训练的 YOLO26 模型导出为各种格式。例如,要将模型导出为 ONNX 格式:

示例
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-cls.pt")  # load the trained model

# Export the model to ONNX
model.export(format="onnx")

有关详细的导出选项,请参考导出页面。

我该如何验证已训练的 YOLO26 分类模型?#

要验证已训练模型在类似 MNIST160 等数据集上的准确率,你可以使用以下 Python 或 CLI 命令:

示例
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-cls.pt")  # load the trained model

# Validate the model
metrics = model.val()  # no arguments needed, uses the dataset and settings from training
metrics.top1  # top1 accuracy
metrics.top5  # top5 accuracy

有关更多信息,请访问验证部分。

评论