Ultralytics YOLO27:

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

Ultralytics 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
(мс)
Скорость
T4 TensorRT10
(мс)
параметры
(M)
FLOPs
(B) при 224
YOLO26n-cls22471.490.15.0 ± 0.31.1 ± 0.02.80.4
YOLO26s-cls22476.092.97.9 ± 0.21.3 ± 0.06.71.5
YOLO26m-cls22478.194.217.2 ± 0.42.0 ± 0.011.64.8
YOLO26l-cls22479.094.623.2 ± 0.32.8 ± 0.014.16.0
YOLO26x-cls22479.995.041.4 ± 0.93.8 ± 0.029.613.5
  • Значения 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. Предварительно обученные контрольные точки сохраняют полную архитектуру обучения и могут показывать большее количество параметров и операций.

Ознакомься с предварительным обзором невыпущенного YOLO27, чтобы узнать предварительную скорость классификации и размеры моделей.

Обучение#

Обучи 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="imagenet", trainer=CustomizedTrainer, epochs=10, imgsz=224, batch=64)
model.val(data="imagenet", validator=CustomizedValidator, imgsz=224, batch=64)

Формат датасета#

Подробное описание формата набора данных для классификации YOLO приведено в руководстве по наборам данных. Наборы данных для классификации также можно управлять и размечать с помощью инструментов аннотации Ultralytics Platform.

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

Predict#

Используй обученную модель 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)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
Apple Core AIcoreaiyolo26n-cls.aimodelimgsz, batch, quantize

nms=None по умолчанию выдает сырые результаты для внешнего NMS. Установи nms=False, чтобы выбрать доступный головной модуль без NMS; неподдерживаемые форматы возвращаются к своему родному пути вывода. Записи nms выше определяют форматы, которые могут встраивать NMS с помощью nms=True.

Полное описание export см. на странице Экспорт.

Часто задаваемые вопросы#

  • Модели 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 для классификации находятся в разделе Models. Такие модели, как 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.

Комментарии