YOLO Vision 2026:

Классификация изображений с помощью Ultralytics YOLO#

Ultralytics YOLO image classification of objects and scenes

Image classification — это простейшая из поддерживаемых задач, которая заключается в классификации всего изображения в один из предопределенных классов.

Результатом работы классификатора изображений является одна метка класса и показатель достоверности (confidence score). Классификация изображений полезна, когда тебе нужно знать только то, к какому классу принадлежит изображение, и не требуется определять местоположение объектов этого класса или их точную форму.



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.

Models скачиваются автоматически из последнего релиза Ultralytics при первом использовании.

Модельразмер
(пиксели)
acc
top1
acc
top5
Скорость
CPU ONNX
(мс)
Скорость
T4 TensorRT10
(мс)
параметры
(М)
FLOPs
(B) при 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
  • Скорость усреднена по изображениям валидации ImageNet с использованием инстанса Amazon EC2 P4d.
    Воспроизведите с помощью yolo val classify data=path/to/ImageNet batch=1 device=0|cpu
  • Значения Params и FLOPs относятся к объединенной модели после model.fuse(), которая объединяет слои Conv и BatchNorm. Предварительно обученные чекпоинты сохраняют всю архитектуру обучения и могут показывать больший счетчик.

Обучение#

Обучи модель YOLO26n-cls на наборе данных MNIST160 в течение 100 эпох при размере изображения 64. Полный список доступных аргументов см. на странице Configuration.

Пример
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 вместо преобразований обрезки.

Ты можешь реализовать это, настроив конвейер аугментации с помощью пользовательских ClassificationDataset и ClassificationTrainer.

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 Platform.

Валидация#

Выполни валидацию точности обученной модели 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. Тебе нужно применить тот же подход для получения согласованных результатов валидации, реализовав пользовательский ClassificationValidator при вызове метода val(). См. полный пример кода в разделе обучения для получения подробной информации о реализации.

Предсказание#

Используй обученную модель 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 на странице Предсказание.

Вывод результатов#

Классификация изображений возвращает один объект Results на изображение. Основным полем предсказания является result.probs, которое содержит вектор вероятностей классов и вспомогательные средства для топ-предсказаний.

АтрибутТипФормаОписание
result.probsProbs(C,)Вероятности классов.
result.probs.datatorch.float32(C,)Вероятность по каждому классу.
result.probs.top1int()ID главного класса.
result.probs.top1conftorch.float32()Наивысшая достоверность.
result.probs.top5list[int](<=5)ID 5 главных классов.

Информацию о специфичных для задач полях 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 на странице Экспорт.

FAQ#

  • Модели YOLO26, такие как yolo26n-cls.pt, предназначены для эффективной классификации изображений. Они присваивают единую метку класса всему изображению вместе с оценкой уверенности. Это особенно полезно для приложений, где достаточно знать конкретный класс изображения, а не определять местоположение или форму объектов внутри изображения.

  • Чтобы обучить модель YOLO26, ты можешь использовать команды Python или CLI. Например, чтобы обучить модель yolo26n-cls на наборе данных MNIST160 в течение 100 эпох при размере изображения 64:

    Пример
    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)

    Дополнительные параметры конфигурации см. на странице Configuration.

  • Предварительно обученные модели классификации YOLO26 можно найти в разделе Модели. Такие модели, как yolo26n-cls.pt, yolo26s-cls.pt, yolo26m-cls.pt и т. д., предварительно обучены на наборе данных ImageNet и могут быть легко загружены и использованы для различных задач классификации изображений.

  • Ты можешь экспортировать обученную модель YOLO26 в различные форматы, используя Python или CLI-команды. Например, для экспорта модели в формат 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")

    Подробные параметры экспорта см. на странице Export.

  • Чтобы проверить точность обученной модели на наборе данных, таком как 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

    Для получения дополнительной информации посети раздел Validate.

Комментарии