Ultralytics YOLO27:
Get Started

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

Ultralytics YOLO image classification of objects and scenes

Классификация изображений — одна из самых простых поддерживаемых задач: она определяет, к какому из заданных классов относится изображение целиком.

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



Смотри: Изучаем задачи Ultralytics YOLO: классификация изображений с помощью платформы Ultralytics
Совет

В названии моделей YOLO26 Classify используется суффикс -cls, например yolo26n-cls.pt; модели предварительно обучены на ImageNet.

Модели#

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

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

Обучение#

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

Пример
from ultralytics import YOLO

# Загрузить модель
model = YOLO("yolo26n-cls.yaml")  # создать новую модель из YAML
model = YOLO("yolo26n-cls.pt")  # загрузить предварительно обученную модель (рекомендуется для обучения)
model = YOLO("yolo26n-cls.yaml").load("yolo26n-cls.pt")  # создать модель из YAML и перенести веса

# Обучить модель
results = model.train(data="mnist160", epochs=100, imgsz=64)

Полное описание режима train см. на странице Обучение. Модели классификации также можно обучать в облаке с помощью платформы Ultralytics.

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

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

Пользовательские преобразования#

Для обучения классификаторов Ultralytics YOLO использует torchvision.transforms.RandomResizedCrop, а для валидации и инференса — torchvision.transforms.CenterCrop. Эти преобразования с обрезкой предполагают квадратный формат входных изображений и могут обрезать важные области изображений с очень вытянутым соотношением сторон. Чтобы сохранить изображение целиком, замени обрезку на torchvision.transforms.Resize, которая масштабирует изображение до imgsz × imgsz, а не обрезает его, используя пользовательские ClassificationDataset, ClassificationTrainer и ClassificationValidator:

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 = "", names=None):
        """Initialize a customized classification dataset with enhanced data augmentation transforms."""
        super().__init__(root, args, augment, prefix, names)

        # Добавь сюда свои пользовательские преобразования для обучения
        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),
            ]
        )

        # Добавь сюда свои пользовательские преобразования для валидации
        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="train" if mode == "train" else self.args.split,
            names=self.data["names"],
        )

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, names=self.names)

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)

Валидация#

Проверь точность обученной модели YOLO26n-cls. Аргументы не нужны: model сохраняет параметры data и аргументы обучения в качестве атрибутов модели; path/to/best.pt из примера обучения выполняет валидацию на MNIST160. В официальных весах записан путь к набору данных для обучения, которого нет на твоём компьютере, поэтому с предупреждением используется значение imagenet10 по умолчанию для этой задачи. Укажи data, чтобы выполнить валидацию на другом наборе данных.

Пример
from ultralytics import YOLO

# Загрузить модель
model = YOLO("yolo26n-cls.pt")  # загрузить официальную модель
model = YOLO("path/to/best.pt")  # загрузить пользовательскую модель

# Валидировать модель
metrics = model.val()  # аргументы не нужны, набор данных и настройки сохранены
metrics.top1  # top1 accuracy
metrics.top5  # top5 accuracy
Совет

Для модели, обученной с пользовательскими преобразованиями, нужно передать соответствующий ClassificationValidator в val(); иначе при валидации будет выполняться обрезка вместо масштабирования, использованного при обучении.

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

Используй обученную модель YOLO26n-cls для предсказаний на изображениях.

Пример
from ultralytics import YOLO

# Загрузить модель
model = YOLO("yolo26n-cls.pt")  # загрузить официальную модель
model = YOLO("path/to/best.pt")  # загрузить пользовательскую модель

# Получи предсказания с помощью модели
results = model("https://ultralytics.com/images/bus.jpg")  # получи предсказание для изображения

# Обратись к результатам
for result in results:
    top1 = result.probs.top1  # ID класса с наивысшей вероятностью
    top1_conf = result.probs.top1conf  # уверенность в предсказании с наивысшей вероятностью
    top1_name = result.names[top1]  # название класса с наивысшей вероятностью

Полное описание режима 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

# Загрузить модель
model = YOLO("yolo26n-cls.pt")  # загрузить официальную модель
model = YOLO("path/to/best.pt")  # загрузить пользовательскую модель

# Экспортировать модель
model.export(format="onnx")

Доступные форматы экспорта для YOLO26-cls перечислены в таблице ниже. Ты можешь экспортировать модель в любой формат с помощью аргумента format, например format='onnx' или format='engine'. Ты можешь напрямую выполнять предсказания или валидацию экспортированных моделей, например yolo predict model=yolo26n-cls.onnx. После завершения экспорта появятся примеры использования твоей модели.

ФорматАргумент formatМодельМетаданныеАргументы
PyTorch-yolo26n-cls.pt✅-
TorchScripttorchscriptyolo26n-cls.torchscript✅imgsz, quantize, dynamic, nms, batch, device
ONNXonnxyolo26n-cls.onnx✅imgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device
OpenVINOopenvinoyolo26n-cls_openvino_model/✅imgsz, quantize, dynamic, nms, batch, data, fraction, device
TensorRTengineyolo26n-cls.engine✅imgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device
CoreMLcoremlyolo26n-cls.mlpackage✅imgsz, dynamic, quantize, nms, batch, device
Apple Core AIcoreaiyolo26n-cls.aimodel✅imgsz, batch, quantize
TF SavedModelsaved_modelyolo26n-cls_saved_model/✅imgsz, quantize, opset, nms, batch, data, fraction, device
TF GraphDefpbyolo26n-cls.pb❌imgsz, opset, batch, device
TF Edge TPUedgetpuyolo26n-cls_edgetpu.tflite✅imgsz, quantize, opset, data, fraction, device
LiteRTlitertyolo26n-cls.tflite✅imgsz, quantize, batch, data, fraction, device
PaddlePaddlepaddleyolo26n-cls_paddle_model/✅imgsz, batch, device
MNNmnnyolo26n-cls.mnn✅imgsz, 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.onnx✅imgsz, batch, name, quantize, simplify, opset, data, fraction, device
Hailohailoyolo26n-cls_hailo_model/✅imgsz, name, quantize, data, fraction, simplify, conf, iou, device
Huawei Ascendascendyolo26n-cls_ascend_model/✅imgsz, batch, name, quantize, opset, simplify, nms, device
AMD Xilinxxilinxyolo26n-cls_xilinx_model/✅imgsz, name, quantize, data, fraction, opset, simplify, device

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
    
    # Загрузить модель
    model = YOLO("yolo26n-cls.pt")  # загрузить предварительно обученную модель (рекомендуется для обучения)
    
    # Обучить модель
    results = model.train(data="mnist160", epochs=100, imgsz=64)

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

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

  • Чтобы проверить точность обученной модели на таком наборе данных, как MNIST160, используй следующие команды Python или CLI:

    Пример
    from ultralytics import YOLO
    
    # Загрузить модель
    model = YOLO("path/to/best.pt")  # загрузи обученную модель
    
    # Валидировать модель
    metrics = model.val()  # аргументы не нужны: используются набор данных и настройки обучения
    metrics.top1  # top1 accuracy
    metrics.top5  # top5 accuracy

    Подробнее см. в разделе Валидация.

  • Ты можешь экспортировать обученную модель YOLO26 в различные форматы с помощью команд Python или CLI. Например, чтобы экспортировать модель в формат ONNX:

    Пример
    from ultralytics import YOLO
    
    # Загрузить модель
    model = YOLO("yolo26n-cls.pt")  # загрузи обученную модель
    
    # Экспортируй модель в ONNX
    model.export(format="onnx")

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

Комментарии