Перейти к содержанию

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

YOLO -классификация YOLO объектов и сцен

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

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



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

Совет

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

Модели

Предварительно обученные модели YOLO26 Classify показаны здесь. Модели Detect, Segment и Pose предварительно обучены на наборе данных COCO, тогда как модели Classify предварительно обучены на наборе данных ImageNet.

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

Модельразмер
(пиксели)
acc
top1
acc
top5
Скорость
CPU ONNX
(мс)
Скорость
T4 TensorRT10
(мс)
параметры
(M)
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 val с использованием Amazon EC2 P4d instance.
    Воспроизвести с помощью yolo val classify data=path/to/ImageNet batch=1 device=0|cpu

Обучение

Обучите 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)
# Build a new model from YAML and start training from scratch
yolo classify train data=mnist160 model=yolo26n-cls.yaml epochs=100 imgsz=64

# Start training from a pretrained *.pt model
yolo classify train data=mnist160 model=yolo26n-cls.pt epochs=100 imgsz=64

# Build a new model from YAML, transfer pretrained weights to it and start training
yolo classify train data=mnist160 model=yolo26n-cls.yaml pretrained=yolo26n-cls.pt 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 можно найти в Руководстве по наборам данных.

Валидация

Валидируйте обученную модель 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
yolo classify val model=yolo26n-cls.pt  # val official model
yolo classify val model=path/to/best.pt # val custom model

Совет

Как упоминалось в раздел об обучении, вы можете обрабатывать экстремальные соотношения сторон во время обучения, используя пользовательскую 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
yolo classify predict model=yolo26n-cls.pt source='https://ultralytics.com/images/bus.jpg'  # predict with official model
yolo classify predict model=path/to/best.pt source='https://ultralytics.com/images/bus.jpg' # predict with custom model

Смотрите полную информацию о predict деталях режима в Прогнозирование странице.

Экспорт

Экспортируйте модель 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")
yolo export model=yolo26n-cls.pt format=onnx  # export official model
yolo export model=path/to/best.pt format=onnx # export custom-trained model

Доступные форматы экспорта 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, device
TF GraphDefpbyolo26n-cls.pbimgsz, batch, device
TF Litetfliteyolo26n-cls.tfliteimgsz, half, int8, nms, batch, data, fraction, device
TF Edge TPUedgetpuyolo26n-cls_edgetpu.tfliteimgsz, device
TF.jstfjsyolo26n-cls_web_model/imgsz, half, int8, nms, batch, 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, device
RKNNrknnyolo26n-cls_rknn_model/imgsz, batch, name, device
ExecuTorchexecutorchyolo26n-cls_executorch_model/imgsz, device
Axeleraaxelerayolo26n-cls_axelera_model/imgsz, int8, data, fraction, device

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

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

Каково назначение 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)
yolo classify train data=mnist160 model=yolo26n-cls.pt 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")
yolo export model=yolo26n-cls.pt format=onnx # export the trained model to ONNX format

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

Как валидировать обученную модель классификации 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
yolo classify val model=yolo26n-cls.pt # validate the trained model

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



📅 Создано 2 лет назад ✏️ Обновлено 2 дней назад
glenn-jocherBurhan-QLaughing-qambitious-octopuspderrengerpicsalexRizwanMunawarUltralyticsAssistantMatthewNoyceRizwanMunawarfcakyon

Комментарии