Link to this sectionКлассификация изображений#
Классификация изображений — это простейшая из поддерживаемых задач, которая заключается в отнесении целого изображения к одному из набора предопределенных классов.
Результатом работы классификатора изображений является одна метка класса и показатель достоверности (confidence score). Классификация изображений полезна, когда тебе нужно знать только то, к какому классу принадлежит изображение, и не требуется определять местоположение объектов этого класса или их точную форму.
Watch: Explore Ultralytics YOLO Tasks: Image Classification using Ultralytics Platform
Модели YOLO26 Classify используют суффикс -cls, например yolo26n-cls.pt, и предобучены на ImageNet.
Link to this sectionМодели#
Здесь представлены предобученные модели YOLO26 Classify. Модели для задач детекции, сегментации и оценки позы (Pose) предобучены на наборе данных COCO, модели Semantic предобучены на Cityscapes, а модели Classify — на наборе данных ImageNet.
Модели при первом использовании загружаются автоматически из последнего релиза Ultralytics.
| Модель | размер (пиксели) | acc top1 | acc top5 | Скорость CPU ONNX (мс) | Скорость T4 TensorRT10 (мс) | параметры (М) | 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 - Скорость усреднена по изображениям валидационного набора ImageNet с использованием инстанса Amazon EC2 P4d.
Воспроизведи результат командойyolo val classify data=path/to/ImageNet batch=1 device=0|cpu - Значения Params и FLOPs указаны для объединенной (fused) модели после
model.fuse(), которая объединяет слои Conv и BatchNorm. Предобученные чекпоинты сохраняют полную архитектуру обучения и могут показывать более высокие значения.
Link to this sectionОбучение#
Обучи 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):
"""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="imagenet1000", trainer=CustomizedTrainer, epochs=10, imgsz=224, batch=64)
model.val(data="imagenet1000", validator=CustomizedValidator, imgsz=224, batch=64)Link to this sectionФормат набора данных#
Подробно формат набора данных классификации YOLO описан в Руководстве по датасетам. Наборы данных для классификации также можно управлять и размечать на платформе Ultralytics.
Link to this sectionВалидация#
Проверь точность обученной модели 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(). Подробности реализации смотри в полном примере кода в разделе обучения.
Link to this sectionПредсказание#
Используй обученную модель 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.
Link to this sectionВывод результатов#
Классификация изображений возвращает один объект Results на изображение. Основным полем предсказания является result.probs, которое содержит вектор вероятностей классов и вспомогательные инструменты для получения топовых предсказаний.
| Атрибут | Тип | Форма (Shape) | Описание |
|---|---|---|---|
result.probs | Probs | (C,) | Вероятности классов. |
result.probs.data | torch.float32 | (C,) | Вероятность для каждого класса. |
result.probs.top1 | int | () | ID топового класса. |
result.probs.top1conf | torch.float32 | () | Топовая уверенность (confidence). |
result.probs.top5 | list[int] | (<=5) | ID 5 топовых классов. |
Для получения информации о специфичных для задачи полях Results см. раздел Предсказания по задачам.
Link to this sectionЭкспорт#
Экспортируй модель 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, int8, dynamic, simplify, opset, nms, batch, data, fraction, 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, int8, data, fraction, 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 |
| Qualcomm QNN | qnn | yolo26n-cls_qnn_model/ | ✅ | imgsz, batch, name, int8, data, fraction, device |
Смотри подробную информацию об export на странице Export.
Link to this sectionFAQ#
Link to this sectionКакова цель YOLO26 в классификации изображений?#
Модели YOLO26, такие как yolo26n-cls.pt, предназначены для эффективной классификации изображений. Они присваивают одну метку класса целому изображению вместе с показателем уверенности. Это особенно полезно для приложений, где достаточно знать конкретный класс изображения, а не определять местоположение или форму объектов внутри него.
Link to this sectionКак мне обучить модель 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)Для получения дополнительных опций конфигурации посети страницу Конфигурация.
Link to this sectionГде я могу найти предобученные модели классификации YOLO26?#
Предобученные модели классификации YOLO26 можно найти в разделе Модели. Модели вроде yolo26n-cls.pt, yolo26s-cls.pt, yolo26m-cls.pt и другие предобучены на наборе данных ImageNet и могут быть легко загружены и использованы для различных задач классификации изображений.
Link to this sectionКак я могу экспортировать обученную модель 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")Подробные параметры экспорта см. на странице Экспорт.
Link to this sectionКак мне проверить обученную модель классификации 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Для получения дополнительной информации посети раздел Валидация.