Classification d'images avec Ultralytics YOLO#
La classification d'images est la plus simple des tâches prises en charge et consiste à classifier une image entière dans l'une d'un ensemble de classes prédéfinies.
La sortie d'un classificateur d'images est une étiquette de classe unique et un score de confiance. La classification d'images est utile lorsque tu as seulement besoin de connaître la classe à laquelle 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 de classification YOLO26 utilisent le suffixe -cls, c'est-à-dire yolo26n-cls.pt, et sont pré-entraînés sur ImageNet.
Modèles#
Les modèles de classification pré-entraînés YOLO26 sont présentés ici. Les modèles de détection, de segmentation et de pose sont pré-entraînés sur le jeu de données COCO, les modèles Semantic sont pré-entraînés sur Cityscapes, et les modèles de classification 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) | params (M) | 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 |
- Les valeurs acc correspondent aux précisions des modèles sur l'ensemble de validation du jeu de données ImageNet.
Reproduis avecyolo val classify data=path/to/ImageNet device=0 - Vitesse moyennée sur les images de validation d'ImageNet en utilisant une instance Amazon EC2 P4d.
Reproduis avecyolo val classify data=path/to/ImageNet batch=1 device=0|cpu - Les valeurs de Params et FLOPs concernent le modèle fusionné après
model.fuse(), qui fusionne les couches Conv et BatchNorm. Les points de contrôle pré-entraînés conservent l'architecture d'entraînement complète et peuvent afficher des nombres plus élevés.
Entraîner (Train)#
Entraîne YOLO26n-cls sur le jeu de données MNIST160 pendant 100 époques pour une taille d'image de 64. Pour une 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 YOLO d'Ultralytics 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 rogner des régions importantes des images ayant des rapports d'aspect extrêmes, entraînant potentiellement une perte d'informations visuelles critiques pendant l'entraînement.
Pour préserver l'image complète tout en maintenant ses proportions, pense à utiliser torchvision.transforms.Resize au lieu des transformations de recadrage.
Tu peux implémenter cela 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="imagenet1000", trainer=CustomizedTrainer, epochs=10, imgsz=224, batch=64)
model.val(data="imagenet1000", validator=CustomizedValidator, imgsz=224, batch=64)Format de jeu de données#
Le format du jeu de données de classification YOLO est détaillé dans le Guide des jeux de données. Les jeux de données de classification peuvent également être gérés et étiquetés avec les outils d'annotation d'Ultralytics Platform.
Valider (Val)#
Valide la précision du modèle de classification YOLO26n-cls entraîné sur le jeu de données MNIST160. Aucun argument n'est nécessaire car le model conserve son data et ses arguments d'entraînement en tant qu'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 mentionné dans la section sur 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 sur l'entraînement pour les détails d'implémentation.
Prédire (Predict)#
Utilise un modèle YOLO26n-cls entraîné pour exécuter 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 tous les détails du mode predict dans la page Prédire.
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é des classes et des assistants pour les meilleures prédictions.
| Attribut | Type | Forme | Description |
|---|---|---|---|
result.probs | Probs | (C,) | Probabilités de classe. |
result.probs.data | torch.float32 | (C,) | Probabilité par 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 meilleures classes. |
Pour les champs Results spécifiques à chaque tâche, consulte la section Résultats de prédiction par tâche.
Exporter (Export)#
Exporte un modèle YOLO26n-cls vers un format différent tel que 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 disponibles pour YOLO26-cls se trouvent dans le tableau ci-dessous. Tu peux exporter vers n'importe quel format en utilisant l'argument format, c'est-à-dire format='onnx' ou format='engine'. Tu peux prédire ou valider directement sur des modèles exportés, c'est-à-dire yolo predict model=yolo26n-cls.onnx. Des exemples d'utilisation sont affiché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 |
Consulte tous les détails de export dans la page Exporter.
FAQ#
Les modèles YOLO26, tels que
yolo26n-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ù il suffit de connaître la classe spécifique d'une image, plutôt que d'identifier l'emplacement ou la forme des objets dans l'image.Les modèles de classification YOLO26 pré-entraînés se trouvent dans la section Modèles. Des modèles tels que
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 divers formats en utilisant Python ou des 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 des options d'exportation détaillées, réfère-toi à 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, visite la section Valider.
Pour entraîner un modèle YOLO26, tu peux utiliser des commandes Python ou 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 plus d'options de configuration, visite la page Configuration.