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

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

Примеры классификации изображений

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

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



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

Совет

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

Модели

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

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

Модель размер
(пиксели)
acc
top1
acc
top5
Скорость
CPU ONNX
(мс)
Скорость
T4 TensorRT10
(мс)
параметры
(M)
FLOPs
(B) при 224
YOLO11n-cls 224 70.0 89.4 5.0 ± 0.3 1.1 ± 0.0 1.6 0.5
YOLO11s-cls 224 75.4 92.7 7.9 ± 0.2 1.3 ± 0.0 5.5 1.6
YOLO11m-cls 224 77.3 93.9 17.2 ± 0.4 2.0 ± 0.0 10.4 5.0
YOLO11l-cls 224 78.3 94.3 23.2 ± 0.3 2.8 ± 0.0 12.9 6.2
YOLO11x-cls 224 79.5 94.9 41.4 ± 0.9 3.8 ± 0.0 28.4 13.7
  • 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

Обучение

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

Пример

from ultralytics import YOLO

# Load a model
model = YOLO("yolo11n-cls.yaml")  # build a new model from YAML
model = YOLO("yolo11n-cls.pt")  # load a pretrained model (recommended for training)
model = YOLO("yolo11n-cls.yaml").load("yolo11n-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=yolo11n-cls.yaml epochs=100 imgsz=64

# Start training from a pretrained *.pt model
yolo classify train data=mnist160 model=yolo11n-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=yolo11n-cls.yaml pretrained=yolo11n-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("yolo11n-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 можно найти в Руководстве по наборам данных.

Валидация

Проверка обученной модели YOLO11n-cls точность на наборе данных MNIST160. Аргументы не требуются, так как model сохраняет свое обучение data и аргументы в качестве атрибутов модели.

Пример

from ultralytics import YOLO

# Load a model
model = YOLO("yolo11n-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=yolo11n-cls.pt  # val official model
yolo classify val model=path/to/best.pt # val custom model

Совет

Как упоминалось в раздел об обучении, вы можете обрабатывать экстремальные соотношения сторон во время обучения, используя пользовательскую ClassificationTrainerВам необходимо применить тот же подход для получения согласованных результатов валидации, внедрив пользовательский ClassificationValidator при вызове метода val() метод. Обратитесь к полному примеру кода в раздел об обучении для получения подробной информации о реализации.

Прогнозирование

Используйте обученную модель YOLO11n-cls для выполнения прогнозов на изображениях.

Пример

from ultralytics import YOLO

# Load a model
model = YOLO("yolo11n-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=yolo11n-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 деталях режима в Прогнозирование странице.

Экспорт

Экспортируйте модель YOLO11n-cls в другой формат, например ONNX, CoreML и т. д.

Пример

from ultralytics import YOLO

# Load a model
model = YOLO("yolo11n-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=yolo11n-cls.pt format=onnx  # export official model
yolo export model=path/to/best.pt format=onnx # export custom trained model

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

Формат format Аргумент Модель Метаданные Аргументы
PyTorch - yolo11n-cls.pt -
TorchScript torchscript yolo11n-cls.torchscript imgsz, half, dynamic, optimize, nms, batch, device
ONNX onnx yolo11n-cls.onnx imgsz, half, dynamic, simplify, opset, nms, batch, device
OpenVINO openvino yolo11n-cls_openvino_model/ imgsz, half, dynamic, int8, nms, batch, data, fraction, device
TensorRT engine yolo11n-cls.engine imgsz, half, dynamic, simplify, workspace, int8, nms, batch, data, fraction, device
CoreML coreml yolo11n-cls.mlpackage imgsz, half, int8, nms, batch, device
TF SavedModel saved_model yolo11n-cls_saved_model/ imgsz, keras, int8, nms, batch, device
TF GraphDef pb yolo11n-cls.pb imgsz, batch, device
TF Lite tflite yolo11n-cls.tflite imgsz, half, int8, nms, batch, data, fraction, device
TF Edge TPU edgetpu yolo11n-cls_edgetpu.tflite imgsz, device
TF.js tfjs yolo11n-cls_web_model/ imgsz, half, int8, nms, batch, device
PaddlePaddle paddle yolo11n-cls_paddle_model/ imgsz, batch, device
MNN mnn yolo11n-cls.mnn imgsz, batch, int8, half, device
NCNN ncnn yolo11n-cls_ncnn_model/ imgsz, half, batch, device
IMX500 imx yolo11n-cls_imx_model/ imgsz, int8, data, fraction, device
RKNN rknn yolo11n-cls_rknn_model/ imgsz, batch, name, device

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

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

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

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

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

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

Пример

from ultralytics import YOLO

# Load a model
model = YOLO("yolo11n-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=yolo11n-cls.pt epochs=100 imgsz=64

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

Где я могу найти предварительно обученные модели классификации YOLO11?

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

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

Вы можете экспортировать обученную модель YOLO11 в различные форматы, используя команды Python или CLI. Например, чтобы экспортировать модель в формат ONNX:

Пример

from ultralytics import YOLO

# Load a model
model = YOLO("yolo11n-cls.pt")  # load the trained model

# Export the model to ONNX
model.export(format="onnx")
yolo export model=yolo11n-cls.pt format=onnx # export the trained model to ONNX format

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

Как проверить обученную модель классификации YOLO11?

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

Пример

from ultralytics import YOLO

# Load a model
model = YOLO("yolo11n-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=yolo11n-cls.pt # validate the trained model

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



📅 Создано 1 год назад ✏️ Обновлено 6 дней назад

Комментарии