Классификация изображений с Ultralytics YOLO#
Классификация изображений — самая простая из поддерживаемых задач; она заключается в отнесении всего изображения к одному из набора предопределённых классов.
Результат работы классификатора изображений — это одна метка класса и оценка уверенности. Классификация изображений полезна, когда тебе нужно знать только, к какому классу относится изображение, и не нужно определять, где находятся объекты этого класса или какова их точная форма.
Watch: Explore Ultralytics YOLO Tasks: Image Classification using Ultralytics Platform
Модели YOLO26 Classify используют суффикс -cls, то есть yolo26n-cls.pt, и предварительно обучены на наборе данных ImageNet.
Модели#
Здесь представлены предварительно обученные модели YOLO26 Classify. Модели Detect, Segment и Pose предварительно обучены на наборе данных COCO, модели Semantic — на Cityscapes, а модели Classify — на наборе данных ImageNet.
Модели автоматически загружаются из последнего релиза Ultralytics при первом использовании.
| Модель | размер (пиксели) | точность top1 | точность 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.4 |
| YOLO26s-cls | 224 | 76.0 | 92.9 | 7.9 ± 0.2 | 1.3 ± 0.0 | 6.7 | 1.5 |
| YOLO26m-cls | 224 | 78.1 | 94.2 | 17.2 ± 0.4 | 2.0 ± 0.0 | 11.6 | 4.8 |
| YOLO26l-cls | 224 | 79.0 | 94.6 | 23.2 ± 0.3 | 2.8 ± 0.0 | 14.1 | 6.0 |
| YOLO26x-cls | 224 | 79.9 | 95.0 | 41.4 ± 0.9 | 3.8 ± 0.0 | 29.6 | 13.5 |
- Значения 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 указаны для объединённой модели после выполнения
model.fuse(), которая объединяет слои Conv и BatchNorm. Предварительно обученные контрольные точки сохраняют полную архитектуру обучения и могут показывать большее количество параметров и операций.
Ознакомься с предварительным обзором невыпущенного YOLO27, чтобы узнать предварительную скорость классификации и размеры моделей.
Обучение#
Обучи YOLO26n-cls на наборе данных MNIST160 в течение 100 эпох с размером изображения 64. Полный список доступных аргументов приведён на странице Configuration.
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="imagenet", trainer=CustomizedTrainer, epochs=10, imgsz=224, batch=64)
model.val(data="imagenet", validator=CustomizedValidator, imgsz=224, batch=64)Формат датасета#
Подробное описание формата набора данных для классификации YOLO приведено в руководстве по наборам данных. Наборы данных для классификации также можно управлять и размечать с помощью инструментов аннотации Ultralytics Platform.
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
# 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.
Выходные данные результатов#
Классификация изображений возвращает один объект Results для каждого изображения. Основное поле предсказания — result.probs, которое
содержит вектор вероятностей классов и вспомогательные средства для получения лучших предсказаний.
| Атрибут | Тип | Форма | Описание |
|---|---|---|---|
result.probs | Probs | (C,) | Вероятности классов. |
result.probs.data | torch.float32 | (C,) | Вероятность для каждого класса. |
result.probs.top1 | int | () | ID лучшего класса. |
result.probs.top1conf | torch.float32 | () | Наивысшая уверенность. |
result.probs.top5 | list[int] | (<=5) | ID пяти лучших классов. |
Описание специфичных для задач полей Results для всех задач см. в разделе Результаты предсказаний по задачам.
Экспорт#
Экспортируй модель 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, quantize, dynamic, nms, batch, device |
| ONNX | onnx | yolo26n-cls.onnx | ✅ | imgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device |
| OpenVINO | openvino | yolo26n-cls_openvino_model/ | ✅ | imgsz, quantize, dynamic, nms, batch, data, fraction, device |
| TensorRT | engine | yolo26n-cls.engine | ✅ | imgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device |
| CoreML | coreml | yolo26n-cls.mlpackage | ✅ | imgsz, dynamic, quantize, nms, batch, device |
| TF SavedModel | saved_model | yolo26n-cls_saved_model/ | ✅ | imgsz, keras, quantize, opset, nms, batch, data, fraction, device |
| TF GraphDef | pb | yolo26n-cls.pb | ❌ | imgsz, opset, batch, device |
| TF Edge TPU | edgetpu | yolo26n-cls_edgetpu.tflite | ✅ | imgsz, quantize, opset, data, fraction, device |
| PaddlePaddle | paddle | yolo26n-cls_paddle_model/ | ✅ | imgsz, batch, device |
| MNN | mnn | yolo26n-cls.mnn | ✅ | imgsz, batch, dynamic, quantize, simplify, opset, nms, device |
| NCNN | ncnn | yolo26n-cls_ncnn_model/ | ✅ | imgsz, quantize, batch, device |
| IMX500 | imx | yolo26n-cls_imx_model/ | ✅ | imgsz, quantize, data, fraction, nms, device |
| RKNN | rknn | yolo26n-cls_rknn_model/ | ✅ | imgsz, batch, name, quantize, simplify, opset, data, fraction, device |
| ExecuTorch | executorch | yolo26n-cls_executorch_model/ | ✅ | imgsz, batch, device |
| Axelera | axelera | yolo26n-cls_axelera_model/ | ✅ | imgsz, batch, quantize, data, fraction, device |
| DEEPX | deepx | yolo26n-cls_deepx_model/ | ✅ | imgsz, quantize, simplify, opset, data, optimize, device |
| Qualcomm QNN | qnn | yolo26n-cls_qnn.onnx | ✅ | imgsz, batch, name, quantize, simplify, opset, data, fraction, device |
| LiteRT | litert | yolo26n-cls.tflite | ✅ | imgsz, quantize, batch, data, fraction, device |
| Hailo | hailo | yolo26n-cls_hailo_model/ | ✅ | imgsz, name, quantize, data, fraction, simplify, conf, iou |
| Huawei Ascend | ascend | yolo26n-cls_ascend_model/ | ✅ | imgsz, batch, name, quantize, opset, simplify, nms |
| Apple Core AI | coreai | yolo26n-cls.aimodel | ✅ | imgsz, batch, quantize |
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 # 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)Дополнительные параметры конфигурации смотри на странице Configuration.
Ты можешь экспортировать обученную модель 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")Подробные параметры экспорта смотри на странице Export.
Чтобы проверить точность обученной модели на таком наборе данных, как 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Дополнительную информацию смотри в разделе Validate.