Классификация изображений
Классификация изображений — это простейшая из трех задач, заключающаяся в классификации целого изображения в один из заранее определенных классов.
На выходе классификатор изображений выдает одну метку класса и оценку достоверности. Классификация изображений полезна, если тебе нужно знать только то, к какому классу принадлежит изображение, и не требуется знать, где расположены объекты этого класса или какова их точная форма.
Watch: Explore Ultralytics YOLO Tasks: Image Classification using Ultralytics Platform
Модели YOLO26 Classify используют суффикс -cls, например yolo26n-cls.pt, и предварительно обучены на ImageNet.
Модели
Здесь представлены предварительно обученные модели классификации YOLO26. Модели для задач детекции (Detect), сегментации (Segment) и оценки поз (Pose) предварительно обучены на наборе данных COCO, модели Semantic — на Cityscapes, а модели Classify — на наборе данных ImageNet.
Модели автоматически загружаются из последнего релиза Ultralytics при первом использовании.
| Модель | размер (пиксели) | acc top1 | acc top5 | Скорость CPU ONNX (мс) | Скорость T4 TensorRT10 (мс) | параметры (M) | FLOPs (B) при 224 |
|---|---|---|---|---|---|---|---|
| YOLO26n-cls | 224 | 71.4 | 90.1 | 5.0 ± 0.3 | 1.1 ± 0.0 | 2.8 | 0.5 |
| YOLO26s-cls | 224 | 76.0 | 92.9 | 7.9 ± 0.2 | 1.3 ± 0.0 | 6.7 | 1.6 |
| YOLO26m-cls | 224 | 78.1 | 94.2 | 17.2 ± 0.4 | 2.0 ± 0.0 | 11.6 | 4.9 |
| YOLO26l-cls | 224 | 79.0 | 94.6 | 23.2 ± 0.3 | 2.8 ± 0.0 | 14.1 | 6.2 |
| YOLO26x-cls | 224 | 79.9 | 95.0 | 41.4 ± 0.9 | 3.8 ± 0.0 | 29.6 | 13.6 |
- Значения acc — это точность моделей на валидационном наборе данных ImageNet.
Воспроизведи результат с помощьюyolo val classify data=path/to/ImageNet device=0 - Скорость (Speed) усреднена по изображениям из валидационного набора ImageNet с использованием инстанса Amazon EC2 P4d.
Воспроизведи результат с помощьюyolo val classify data=path/to/ImageNet batch=1 device=0|cpu - Значения Params и FLOPs указаны для объединенной модели после вызова
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(). Обратись к полному примеру кода в разделе обучения для получения деталей реализации.
Предсказание (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Смотри все подробности режима 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 | ✅ | - |
| TorchScript | torchscript | yolo26n-cls.torchscript | ✅ | imgsz, half, dynamic, optimize, nms, batch, device |
| ONNX | onnx | yolo26n-cls.onnx | ✅ | imgsz, half, dynamic, simplify, opset, nms, batch, device |
| OpenVINO | openvino | yolo26n-cls_openvino_model/ | ✅ | imgsz, half, dynamic, int8, nms, batch, data, fraction, device |
| TensorRT | engine | yolo26n-cls.engine | ✅ | imgsz, half, dynamic, simplify, workspace, int8, nms, batch, data, fraction, device |
| CoreML | coreml | yolo26n-cls.mlpackage | ✅ | imgsz, dynamic, half, int8, nms, batch, device |
| TF SavedModel | saved_model | yolo26n-cls_saved_model/ | ✅ | imgsz, keras, int8, nms, batch, data, fraction, device |
| TF GraphDef | pb | yolo26n-cls.pb | ❌ | imgsz, batch, device |
| TF Lite | tflite | yolo26n-cls.tflite | ✅ | imgsz, half, int8, nms, batch, data, fraction, device |
| TF Edge TPU | edgetpu | yolo26n-cls_edgetpu.tflite | ✅ | imgsz, int8, data, fraction, device |
| TF.js | tfjs | yolo26n-cls_web_model/ | ✅ | imgsz, half, int8, nms, batch, data, fraction, device |
| PaddlePaddle | paddle | yolo26n-cls_paddle_model/ | ✅ | imgsz, batch, device |
| MNN | mnn | yolo26n-cls.mnn | ✅ | imgsz, batch, int8, half, device |
| NCNN | ncnn | yolo26n-cls_ncnn_model/ | ✅ | imgsz, half, batch, device |
| IMX500 | imx | yolo26n-cls_imx_model/ | ✅ | imgsz, int8, data, fraction, nms, device |
| RKNN | rknn | yolo26n-cls_rknn_model/ | ✅ | imgsz, batch, name, device |
| ExecuTorch | executorch | yolo26n-cls_executorch_model/ | ✅ | imgsz, batch, device |
| Axelera | axelera | yolo26n-cls_axelera_model/ | ✅ | imgsz, batch, int8, data, fraction, device |
| DeepX | deepx | yolo26n-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Для получения дополнительной информации посети раздел Валидация.