Классификация изображений

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. Модели для задач детекции, сегментации и оценки поз предобучены на наборе данных COCO, в то время как модели классификации предобучены на наборе данных ImageNet.

Модели при первом использовании автоматически загружаются из последнего релиза 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 приведены для объединенной (fused) модели после model.fuse(), которая объединяет слои Conv и BatchNorm. Предобученные чекпоинты сохраняют полную архитектуру обучения и могут показывать более высокие значения.

Обучение (Train)

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

Пример
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, mode: str = "train"):
        """Build a customized dataset for classification standalone validation."""
        return CustomizedDataset(root=img_path, args=self.args, augment=mode == "train", 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.

Валидация (Val)

Проверь точность обученной модели 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

Полные детали режима predict смотри на странице Предсказание.

Экспорт (Export)

Экспортируй модель 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, half, dynamic, optimize, nms, batch, device
ONNXonnxyolo26n-cls.onnximgsz, half, dynamic, simplify, opset, nms, batch, device
OpenVINOopenvinoyolo26n-cls_openvino_model/imgsz, half, dynamic, int8, nms, batch, data, fraction, device
TensorRTengineyolo26n-cls.engineimgsz, half, dynamic, simplify, workspace, int8, nms, batch, data, fraction, device
CoreMLcoremlyolo26n-cls.mlpackageimgsz, dynamic, half, int8, nms, batch, device
TF SavedModelsaved_modelyolo26n-cls_saved_model/imgsz, keras, int8, nms, batch, data, fraction, device
TF GraphDefpbyolo26n-cls.pbimgsz, batch, device
TF Litetfliteyolo26n-cls.tfliteimgsz, half, int8, nms, batch, data, fraction, device
TF Edge TPUedgetpuyolo26n-cls_edgetpu.tfliteimgsz, int8, data, fraction, device
TF.jstfjsyolo26n-cls_web_model/imgsz, half, int8, nms, batch, data, fraction, device
PaddlePaddlepaddleyolo26n-cls_paddle_model/imgsz, batch, device
MNNmnnyolo26n-cls.mnnimgsz, batch, int8, half, device
NCNNncnnyolo26n-cls_ncnn_model/imgsz, half, batch, device
IMX500imxyolo26n-cls_imx_model/imgsz, int8, data, fraction, nms, device
RKNNrknnyolo26n-cls_rknn_model/imgsz, batch, name, device
ExecuTorchexecutorchyolo26n-cls_executorch_model/imgsz, batch, device
Axeleraaxelerayolo26n-cls_axelera_model/imgsz, batch, int8, data, fraction, device
DeepXdeepxyolo26n-cls_deepx_model/imgsz, int8, data, optimize, device

Смотри полные сведения об export на странице Экспорт.

Часто задаваемые вопросы (FAQ)

Какова цель YOLO26 в классификации изображений?

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

Как обучить модель YOLO26 для классификации изображений?

Для обучения модели 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)

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

Где найти предобученные модели классификации YOLO26?

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

Как экспортировать обученную модель YOLO26 в различные форматы?

Ты можешь экспортировать обученную модель 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")

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

Как проверить точность обученной модели классификации 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

Дополнительную информацию смотри в разделе Валидация.

Комментарии