Classification d’images avec Ultralytics YOLO#
La classification d’images est la plus simple des tâches prises en charge 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 accompagnée d’un score de confiance. La classification d’images est utile lorsque tu as seulement besoin de savoir à quelle classe appartient une image et que tu n’as pas besoin de savoir où se trouvent les objets de cette classe ni quelle est leur forme exacte.
Watch: Explore Ultralytics YOLO Tasks: Image Classification using Ultralytics Platform
Les modèles YOLO26 Classify utilisent le suffixe -cls, c’est-à-dire yolo26n-cls.pt, et sont préentraînés sur ImageNet.
Modèles#
Les modèles YOLO26 Classify préentraînés sont présentés ici. Les modèles Detect, Segment et Pose sont préentraînés sur le jeu de données COCO, les modèles sémantiques sont préentraînés sur Cityscapes, et les modèles Classify sont préentraînés sur le jeu 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 |
|---|---|---|---|---|---|---|---|
| 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 |
- Les valeurs acc correspondent aux précisions des modèles sur l’ensemble de validation du jeu de données ImageNet.
Reproduis-les avecyolo val classify data=path/to/ImageNet device=0 - La vitesse est calculée comme la moyenne sur les images de validation d’ImageNet à l’aide d’une instance Amazon EC2 P4d.
Reproduis-la avecyolo val classify data=path/to/ImageNet batch=1 device=0|cpu - Les valeurs de Params et de FLOPs correspondent au modèle fusionné après
model.fuse(), qui fusionne les couches Conv et BatchNorm. Les checkpoints préentraînés conservent l'architecture complète d'entraînement et peuvent donc afficher des valeurs plus élevées.
Consulte l'aperçu non publié de YOLO27 pour connaître la vitesse de classification préliminaire et les tailles des modèles.
Entraîner#
Entraîne YOLO26n-cls sur le jeu de données MNIST160 pendant 100 époques, avec une taille d’image de 64. Pour obtenir la liste complète des arguments disponibles, consulte la page 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)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 que les entrées sont carrées et peuvent recadrer involontairement des régions importantes des images présentant des rapports d’aspect extrêmes, ce qui peut entraîner la perte d’informations visuelles critiques pendant l’entraînement.
Pour préserver l’image entière tout en conservant ses proportions, envisage d’utiliser torchvision.transforms.Resize à la place des transformations de recadrage.
Tu peux mettre cela en œuvre en personnalisant ton pipeline d’augmentation via un ClassificationDataset et un ClassificationTrainer personnalisés.
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)Format du dataset#
Le format des jeux de données de classification YOLO est décrit en détail dans le Guide des jeux de données. Les jeux de données de classification peuvent également être gérés et annotés avec les outils d’annotation d’Ultralytics Platform.
Validation#
Valide l’exactitude du modèle YOLO26n-cls entraîné sur le jeu de données MNIST160. Aucun argument n’est nécessaire, car le model conserve son data d’entraînement et ses arguments comme attributs du modèle.
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 accuracyComme indiqué dans la section consacrée à l’entraînement, tu peux gérer les rapports d’aspect extrêmes pendant l’entraînement en utilisant un ClassificationTrainer personnalisé. Tu dois appliquer la même approche pour obtenir des résultats de validation cohérents, en implémentant un ClassificationValidator personnalisé lors de l’appel de la méthode val(). Consulte l’exemple de code complet dans la section consacrée à l’entraînement pour les détails de mise en œuvre.
Prédiction#
Utilise un modèle YOLO26n-cls entraîné pour effectuer des prédictions sur des images.
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 nameConsulte les détails complets du mode predict dans la page Prédiction.
Sortie des résultats#
La classification d’images renvoie un objet Results par image. Le champ de prédiction principal est result.probs, qui
contient le vecteur de probabilités des classes ainsi que des utilitaires pour les prédictions les plus probables.
| Attribut | Type | Forme | Description |
|---|---|---|---|
result.probs | Probs | (C,) | Probabilités des classes. |
result.probs.data | torch.float32 | (C,) | Probabilité pour chaque classe. |
result.probs.top1 | int | () | ID de la classe principale. |
result.probs.top1conf | torch.float32 | () | Confiance principale. |
result.probs.top5 | list[int] | (<=5) | ID des 5 classes principales. |
Pour connaître les champs Results spécifiques à chaque tâche, consulte la section Résultats des prédictions par tâche.
Exportation#
Exporte un modèle YOLO26n-cls vers un autre format, comme ONNX, CoreML, etc.
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")Les formats d’exportation YOLO26-cls disponibles figurent dans le tableau ci-dessous. Tu peux exporter vers n’importe quel format à l’aide de l’argument format, c’est-à-dire format='onnx' ou format='engine'. Tu peux effectuer des prédictions ou valider directement sur les modèles exportés, c’est-à-dire yolo predict model=yolo26n-cls.onnx. Des exemples d’utilisation sont présentés pour ton modèle une fois l’exportation terminée.
| Format | Argument format | Modèle | Métadonnées | Arguments |
|---|---|---|---|---|
| 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 utilise par défaut des sorties brutes pour NMS externe. Définis nms=False pour sélectionner une tête sans NMS disponible ; les formats non pris en charge reviennent à leur chemin de sortie natif. Les entrées nms ci-dessus identifient les formats capables d'intégrer NMS avec nms=True.
Consulte les détails complets du mode export dans la page Exportation.
FAQ#
Les modèles YOLO26, comme
yolo26n-cls.pt, sont conçus pour effectuer efficacement la classification d’images. Ils attribuent une seule étiquette de classe à une image entière, accompagnée d’un score de confiance. Cela est particulièrement utile pour les applications où il suffit de connaître la classe précise d’une image, plutôt que d’identifier l’emplacement ou la forme des objets qu’elle contient.Les modèles de classification YOLO26 préentraînés se trouvent dans la section Modèles. Des modèles comme
yolo26n-cls.pt,yolo26s-cls.pt,yolo26m-cls.pt, etc., sont préentraînés sur le jeu de données ImageNet et peuvent être facilement téléchargés et utilisés pour diverses tâches de classification d’images.Tu peux exporter un modèle YOLO26 entraîné vers différents formats à l’aide de Python ou de commandes CLI. Par exemple, pour exporter un modèle au format ONNX :
Exemplefrom ultralytics import YOLO # Load a model model = YOLO("yolo26n-cls.pt") # load the trained model # Export the model to ONNX model.export(format="onnx")Pour connaître les options d’exportation détaillées, consulte la page Exportation.
Pour valider la précision d’un modèle entraîné sur un jeu de données comme MNIST160, tu peux utiliser les commandes Python ou CLI suivantes :
Exemplefrom 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 accuracyPour plus d’informations, consulte la section Validation.
Pour entraîner un modèle YOLO26, tu peux utiliser Python ou des commandes CLI. Par exemple, pour entraîner un modèle
yolo26n-clssur le jeu de données MNIST160 pendant 100 époques, avec une taille d’image de 64 :Pour davantage d’options de configuration, consulte la page Configuration.