Bildklassifizierung

YOLO image classification of objects and scenes

Bildklassifizierung ist die einfachste der drei Aufgaben und besteht darin, ein ganzes Bild einer von mehreren vordefinierten Klassen zuzuordnen.

Die Ausgabe eines Bildklassifizierers ist ein einzelnes Klassen-Label und ein Konfidenzwert. Die Bildklassifizierung ist nützlich, wenn du nur wissen musst, zu welcher Klasse ein Bild gehört, und nicht wissen musst, wo sich Objekte dieser Klasse befinden oder wie ihre genaue Form aussieht.



Watch: Explore Ultralytics YOLO Tasks: Image Classification using Ultralytics Platform
Tipp

YOLO26-Klassifizierungsmodelle verwenden das Suffix -cls, z. B. yolo26n-cls.pt, und sind auf ImageNet vortrainiert.

Modelle

Hier sind die vortrainierten YOLO26-Klassifizierungsmodelle aufgeführt. Erkennungs-, Segmentierungs- und Pose-Modelle sind auf dem COCO-Datensatz vortrainiert, semantische Modelle auf Cityscapes und Klassifizierungsmodelle auf dem ImageNet-Datensatz.

Modelle werden bei der ersten Verwendung automatisch vom neuesten Ultralytics-Release heruntergeladen.

ModellGröße
(Pixel)
acc
top1
acc
top5
Geschwindigkeit
CPU ONNX
(ms)
Geschwindigkeit
T4 TensorRT10
(ms)
Parameter
(M)
FLOPs
(B) bei 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-Werte sind die Modellgenauigkeiten auf dem Validierungsset des ImageNet-Datensatzes.
    Reproduziere dies mit yolo val classify data=path/to/ImageNet device=0
  • Geschwindigkeit gemittelt über ImageNet-Validierungsbilder unter Verwendung einer Amazon EC2 P4d-Instanz.
    Reproduziere dies mit yolo val classify data=path/to/ImageNet batch=1 device=0|cpu
  • Params- und FLOPs-Werte beziehen sich auf das fusionierte Modell nach model.fuse(), welches Conv- und BatchNorm-Layer zusammenführt. Vortrainierte Checkpoints behalten die vollständige Trainingsarchitektur bei und können höhere Werte aufweisen.

Trainieren

Trainiere YOLO26n-cls auf dem MNIST160-Datensatz für 100 Epochen bei einer Bildgröße von 64. Eine vollständige Liste der verfügbaren Argumente findest du auf der Seite Konfiguration.

Beispiel
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)
Tipp

Ultralytics YOLO-Klassifizierung verwendet torchvision.transforms.RandomResizedCrop für das Training und torchvision.transforms.CenterCrop für die Validierung und Inferenz. Diese auf Zuschneiden basierenden Transformationen setzen quadratische Eingaben voraus und können unbeabsichtigt wichtige Bereiche von Bildern mit extremen Seitenverhältnissen abschneiden, was möglicherweise zum Verlust kritischer visueller Informationen während des Trainings führt. Um das vollständige Bild unter Beibehaltung seiner Proportionen zu bewahren, erwäge die Verwendung von torchvision.transforms.Resize anstelle von Zuschneide-Transformationen.

Du kannst dies implementieren, indem du deine Augmentierungs-Pipeline durch eine benutzerdefinierte ClassificationDataset und ClassificationTrainer-Klasse anpasst.

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)

Datensatzformat

Das Format für YOLO-Klassifizierungsdatensätze findest du im Detail im Dataset-Guide. Klassifizierungsdatensätze können auch auf der Ultralytics-Plattform verwaltet und gelabelt werden.

Validieren

Validiere die Genauigkeit des trainierten YOLO26n-cls-Modells auf dem MNIST160-Datensatz. Es sind keine Argumente erforderlich, da das model seine Trainings-data und Argumente als Modellattribute beibehält.

Beispiel
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
Tipp

As mentioned in the training section, you can handle extreme aspect ratios during training by using a custom ClassificationTrainer. You need to apply the same approach for consistent validation results by implementing a custom ClassificationValidator when calling the val() method. Refer to the complete code example in the training section for implementation details.

Vorhersage

Verwende ein trainiertes YOLO26n-cls-Modell, um Vorhersagen für Bilder auszuführen.

Beispiel
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

Siehe vollständige predict-Modus-Details auf der Seite Predict.

Exportieren

Exportiere ein YOLO26n-cls-Modell in ein anderes Format wie ONNX, CoreML usw.

Beispiel
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")

Verfügbare YOLO26-cls-Exportformate sind in der Tabelle unten aufgeführt. Du kannst in jedes Format unter Verwendung des format-Arguments exportieren, z. B. format='onnx' oder format='engine'. Du kannst direkt mit exportierten Modellen vorhersagen oder validieren, z. B. yolo predict model=yolo26n-cls.onnx. Verwendungsbeispiele werden für dein Modell nach Abschluss des Exports angezeigt.

Formatformat-ArgumentModellMetadatenArgumente
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, data, fraction, device
TF GraphDefpbyolo26n-cls.pbimgsz, batch, device
TF Litetfliteyolo26n-cls.tfliteimgsz, half, int8, nms, batch, data, fraction, device
TF Edge TPUedgetpuyolo26n-cls_edgetpu.tfliteimgsz, int8, data, fraction, device
TF.jstfjsyolo26n-cls_web_model/imgsz, half, int8, nms, batch, data, fraction, 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, nms, device
RKNNrknnyolo26n-cls_rknn_model/imgsz, batch, name, device
ExecuTorchexecutorchyolo26n-cls_executorch_model/imgsz, batch, device
Axeleraaxelerayolo26n-cls_axelera_model/imgsz, batch, int8, data, fraction, device
DeepXdeepxyolo26n-cls_deepx_model/imgsz, int8, data, optimize, device

Weitere Details zu export findest du auf der Export-Seite.

FAQ

Was ist der Zweck von YOLO26 bei der Bildklassifizierung?

YOLO26-Modelle, wie yolo26n-cls.pt, sind auf eine effiziente Bildklassifizierung ausgelegt. Sie ordnen einem ganzen Bild ein einzelnes Klassen-Label sowie einen Konfidenzwert zu. Dies ist besonders nützlich für Anwendungen, bei denen es ausreicht, die spezifische Klasse eines Bildes zu kennen, anstatt die Position oder Form von Objekten innerhalb des Bildes zu identifizieren.

Wie trainiere ich ein YOLO26-Modell für die Bildklassifizierung?

Um ein YOLO26-Modell zu trainieren, kannst du entweder Python- oder CLI-Befehle verwenden. Zum Beispiel, um ein yolo26n-cls-Modell auf dem MNIST160-Datensatz für 100 Epochen bei einer Bildgröße von 64 zu trainieren:

Beispiel
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)

Für weitere Konfigurationsoptionen besuche die Seite Konfiguration.

Wo finde ich vortrainierte YOLO26-Klassifizierungsmodelle?

Vortrainierte YOLO26-Klassifizierungsmodelle findest du im Bereich Modelle. Modelle wie yolo26n-cls.pt, yolo26s-cls.pt, yolo26m-cls.pt usw. sind auf dem ImageNet-Datensatz vortrainiert und können einfach heruntergeladen und für verschiedene Bildklassifizierungsaufgaben verwendet werden.

Wie kann ich ein trainiertes YOLO26-Modell in verschiedene Formate exportieren?

Du kannst ein trainiertes YOLO26-Modell mit Python- oder CLI-Befehlen in verschiedene Formate exportieren. Zum Beispiel, um ein Modell in das ONNX-Format zu exportieren:

Beispiel
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")

Detaillierte Exportoptionen findest du auf der Seite Exportieren.

Wie validiere ich ein trainiertes YOLO26-Klassifizierungsmodell?

Um die Genauigkeit eines trainierten Modells auf einem Datensatz wie MNIST160 zu validieren, kannst du die folgenden Python- oder CLI-Befehle verwenden:

Beispiel
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

Für weitere Informationen besuche den Abschnitt Validieren.

Kommentare