Passer au contenu

Classification d'images

Exemples de classification d'images

La classification d'images est la plus simple des trois tâches et consiste à classer une image entière dans l'une des classes prédéfinies.

La sortie d'un classificateur d'images est une seule étiquette de classe et un score de confiance. La classification d'images est utile lorsque vous avez seulement besoin de savoir à quelle classe appartient une image et que vous n'avez pas besoin de savoir où se trouvent les objets de cette classe ni quelle est leur forme exacte.



Regarder : Explorez les tâches YOLO Ultralytics : Classification d'images en utilisant Ultralytics HUB

Astuce

Les modèles de classification YOLO11 utilisent le -cls suffixe, c'est-à-dire yolo11n-cls.pt et sont pré-entraînés sur ImageNet.

Modèles

Les modèles de classification YOLO11 pré-entraînés sont présentés ici. Les modèles Detect, Segment et Pose sont pré-entraînés sur l'ensemble de données COCO, tandis que les modèles Classify sont pré-entraînés sur l'ensemble de données ImageNet.

Les modèles sont téléchargés automatiquement depuis la dernière version d'Ultralytics lors de la première utilisation.

Modèle Taille
(pixels)
acc
top1
acc
top5
Vitesse
CPU ONNX
(ms)
Vitesse
T4 TensorRT10
(ms)
paramètres
(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 les valeurs sont les précisions du modèle sur le ImageNet ensemble de données de validation.
    Reproduire en utilisant yolo val classify data=path/to/ImageNet device=0
  • Vitesse moyenné sur les images de validation ImageNet en utilisant un instance Amazon EC2 P4d. instance.
    Reproduire en utilisant yolo val classify data=path/to/ImageNet batch=1 device=0|cpu

Entraîner

Entraînez YOLO11n-cls sur l'ensemble de données MNIST160 pendant 100 epochs à une taille d'image de 64. Pour une liste complète des arguments disponibles, consultez la page Configuration.

Exemple

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

Astuce

La classification Ultralytics YOLO utilise torchvision.transforms.RandomResizedCrop pour l'entraînement et torchvision.transforms.CenterCrop pour la validation et l'inférence. Ces transformations basées sur le recadrage supposent des entrées carrées et peuvent par inadvertance découper des régions importantes d'images avec des rapports d'aspect extrêmes, ce qui peut entraîner une perte d'informations visuelles critiques pendant l'entraînement. Pour préserver l'image entière tout en conservant ses proportions, envisagez d'utiliser torchvision.transforms.Resize au lieu des transformations de recadrage.

Vous pouvez implémenter cela en personnalisant votre pipeline d’augmentation via un ClassificationDataset et 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)

Format du jeu de données

Le format de l'ensemble de données de classification YOLO est décrit en détail dans le Guide de l'ensemble de données.

Valider

Valider le modèle YOLO11n-cls entraîné précision sur l'ensemble de données MNIST160. Aucun argument n'est nécessaire car le model conserve son entraînement data et ses arguments en tant qu'attributs du modèle.

Exemple

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

Astuce

Comme mentionné dans le section de formation, vous pouvez gérer les rapports d'aspect extrêmes pendant l'entraînement en utilisant un ClassificationTrainer. Vous devez appliquer la même approche pour obtenir des résultats de validation cohérents en implémentant un ClassificationValidator lors de l'appel de la méthode val() méthode. Consultez l'exemple de code complet dans le section de formation pour les détails de l'implémentation.

Prédire

Utiliser un modèle YOLO11n-cls entraîné pour exécuter des prédictions sur des images.

Exemple

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

Voir tous les predict détails du mode dans la Prédire page.

Exporter

Exporter un modèle YOLO11n-cls vers un format différent comme ONNX, CoreML, etc.

Exemple

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

Les formats d'exportation YOLO11-cls disponibles sont indiqués dans le tableau ci-dessous. Vous pouvez exporter vers n'importe quel format en utilisant le format argument, c'est-à-dire format='onnx' ou format='engine'. Vous pouvez prédire ou valider directement sur les modèles exportés, c'est-à-dire yolo predict model=yolo11n-cls.onnx. Des exemples d'utilisation sont présentés pour votre modèle une fois l'exportation terminée.

Format format Argument Modèle Métadonnées Arguments
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

Voir tous les export détails dans la section Exporter page.

FAQ

Quel est le but de YOLO11 dans la classification d'images ?

Modèles YOLO11, tels que yolo11n-cls.pt, sont conçus pour une classification d'images efficace. Ils attribuent une seule étiquette de classe à une image entière, ainsi qu'un score de confiance. Ceci est particulièrement utile pour les applications où la connaissance de la classe spécifique d'une image est suffisante, plutôt que d'identifier l'emplacement ou la forme des objets dans l'image.

Comment puis-je entraîner un modèle YOLO11 pour la classification d'images ?

Pour entraîner un modèle YOLO11, vous pouvez utiliser des commandes Python ou CLI. Par exemple, pour entraîner un yolo11n-cls modèle sur l'ensemble de données MNIST160 pendant 100 epochs à une taille d'image de 64 :

Exemple

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

Pour plus d'options de configuration, consultez la page Configuration.

Où puis-je trouver des modèles de classification YOLO11 pré-entraînés ?

Les modèles de classification YOLO11 pré-entraînés sont disponibles dans Modèles section. Modèles comme yolo11n-cls.pt, yolo11s-cls.pt, yolo11m-cls.pt, etc., sont pré-entraînés sur le ImageNet et peut être facilement téléchargé et utilisé pour diverses tâches de classification d'images.

Comment puis-je exporter un modèle YOLO11 entraîné vers différents formats ?

Vous pouvez exporter un modèle YOLO11 entraîné vers différents formats en utilisant des commandes Python ou CLI. Par exemple, pour exporter un modèle au format ONNX :

Exemple

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

Pour des options d'exportation détaillées, consultez la page Exportation.

Comment valider un modèle de classification YOLO11 entraîné ?

Pour valider la précision d'un modèle entraîné sur un ensemble de données comme MNIST160, vous pouvez utiliser les commandes Python ou CLI suivantes :

Exemple

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

Pour plus d'informations, consultez la section Validate.



📅 Créé il y a 1 an ✏️ Mis à jour il y a 6 jours

Commentaires