Classification d’images avec Ultralytics YOLO#
La classification d’images est la plus simple des tâches prises en charge ; elle consiste à classer une image entière dans une classe parmi un ensemble de classes prédéfinies.
Un classificateur d’images renvoie une seule étiquette de classe et un score de confiance. La classification d’images est utile lorsque tu as seulement besoin de connaître la classe d’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.
Regarder : Découvre les tâches Ultralytics YOLO : classification d’images avec la plateforme Ultralytics
Les modèles YOLO26 Classify utilisent le suffixe -cls, par exemple yolo26n-cls.pt, et sont préentraînés sur ImageNet.
Modèles#
Les modèles YOLO26 Classify préentraînés sur le jeu de données ImageNet sont présentés ci-dessous.
Les modèles sont automatiquement téléchargés depuis la dernière version d’Ultralytics lors de leur 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 le jeu de validation ImageNet.
Reproduis les résultats avecyolo classify val data=path/to/ImageNet device=0 - Vitesse moyenne sur les images de validation ImageNet avec ONNX sur CPU et TensorRT10 sur un GPU NVIDIA T4.
Reproduis les résultats avecyolo classify val 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 d’entraînement complète et peuvent donc afficher des valeurs plus élevées.
Consulte l’aperçu non publié de YOLO27 pour découvrir les premières mesures de vitesse de classification et les tailles des modèles.
Entraînement#
Entraîne YOLO26n-cls sur le jeu de données MNIST160 pendant 100 époques, avec une taille d’image de 64. Consulte la page Configuration pour obtenir la liste complète des arguments disponibles.
from ultralytics import YOLO
# Charger un modèle
model = YOLO("yolo26n-cls.yaml") # créer un nouveau modèle à partir du fichier YAML
model = YOLO("yolo26n-cls.pt") # charger un modèle préentraîné (recommandé pour l’entraînement)
model = YOLO("yolo26n-cls.yaml").load("yolo26n-cls.pt") # créer à partir du fichier YAML et transférer les poids
# Entraîner le modèle
results = model.train(data="mnist160", epochs=100, imgsz=64)Consulte la page Entraînement pour obtenir tous les détails du mode train. Les modèles de classification peuvent aussi être entraînés dans le cloud avec Ultralytics Platform.
Format du jeu de données#
Le Guide des jeux de données décrit en détail le format des jeux de données de classification YOLO. Les jeux de données de classification peuvent aussi être gérés et annotés avec les outils d’annotation d’Ultralytics Platform.
Transformations personnalisées#
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 éliminer des régions importantes des images aux rapports d’aspect extrêmes. Pour conserver l’image entière, remplace les recadrages par torchvision.transforms.Resize, qui redimensionne en imgsz × imgsz au lieu de recadrer, à l’aide d’un ClassificationDataset, d’un ClassificationTrainer et d’un ClassificationValidator 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 = "", names=None):
"""Initialize a customized classification dataset with enhanced data augmentation transforms."""
super().__init__(root, args, augment, prefix, names)
# Ajoute ici tes transformations personnalisées d’entraînement
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),
]
)
# Ajoute ici tes transformations personnalisées de validation
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="train" if mode == "train" else self.args.split,
names=self.data["names"],
)
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, names=self.names)
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)Validation#
Valide la précision du modèle YOLO26n-cls entraîné. Aucun argument n’est nécessaire, car le model conserve ses data d’entraînement et ses arguments comme attributs du modèle : path/to/best.pt de l’exemple d’entraînement valide le modèle sur MNIST160. Les poids officiels enregistrent un chemin vers le jeu de données d’entraînement qui n’existe pas sur ta machine ; ils utilisent donc le imagenet10 par défaut de la tâche et affichent un avertissement. Transmets data pour valider le modèle sur un autre jeu de données.
from ultralytics import YOLO
# Charger un modèle
model = YOLO("yolo26n-cls.pt") # charger un modèle officiel
model = YOLO("path/to/best.pt") # charger un modèle personnalisé
# Valider le modèle
metrics = model.val() # aucun argument nécessaire, le jeu de données et les paramètres sont mémorisés
metrics.top1 # top1 accuracy
metrics.top5 # top5 accuracyUn modèle entraîné avec des transformations personnalisées nécessite que le ClassificationValidator correspondant soit transmis à val() ; sinon, la validation recadre les images alors que l’entraînement les redimensionnait.
Prédiction#
Utilise un modèle YOLO26n-cls entraîné pour effectuer des prédictions sur des images.
from ultralytics import YOLO
# Charger un modèle
model = YOLO("yolo26n-cls.pt") # charger un modèle officiel
model = YOLO("path/to/best.pt") # charger un modèle personnalisé
# Effectuer des prédictions avec le modèle
results = model("https://ultralytics.com/images/bus.jpg") # effectuer une prédiction sur une image
# Accéder aux résultats
for result in results:
top1 = result.probs.top1 # ID de la classe prédite en première position
top1_conf = result.probs.top1conf # score de confiance de la prédiction en première position
top1_name = result.names[top1] # nom de la classe prédite en première positionConsulte les détails complets du mode predict sur la page Predict.
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 et des assistants pour les prédictions les mieux classées.
| Attribut | Type | Forme | Description |
|---|---|---|---|
result.probs | Probs | (C,) | Probabilités des classes. |
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 classes principales. |
Pour connaître les champs Results propres à chaque tâche, consulte la section Résultats des prédictions par tâche.
Export#
Exporter un modèle YOLO26n-cls vers un autre format comme ONNX, CoreML, etc.
from ultralytics import YOLO
# Charger un modèle
model = YOLO("yolo26n-cls.pt") # charger un modèle officiel
model = YOLO("path/to/best.pt") # charger un modèle personnalisé
# Exporter le modèle
model.export(format="onnx")Les formats d’export disponibles pour YOLO26-cls figurent dans le tableau ci-dessous. Tu peux exporter vers n’importe quel format à l’aide de l’argument format, par exemple format='onnx' ou format='engine'. Tu peux effectuer des prédictions ou valider directement sur les modèles exportés, par exemple yolo predict model=yolo26n-cls.onnx. Des exemples d’utilisation de ton modèle s’affichent une fois l’export terminé.
| 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 |
| Apple Core AI | coreai | yolo26n-cls.aimodel | ✅ | imgsz, batch, quantize |
| TF SavedModel | saved_model | yolo26n-cls_saved_model/ | ✅ | imgsz, 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 |
| LiteRT | litert | yolo26n-cls.tflite | ✅ | imgsz, quantize, batch, 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 |
| Hailo | hailo | yolo26n-cls_hailo_model/ | ✅ | imgsz, name, quantize, data, fraction, simplify, conf, iou, device |
| Huawei Ascend | ascend | yolo26n-cls_ascend_model/ | ✅ | imgsz, batch, name, quantize, opset, simplify, nms, device |
| AMD Xilinx | xilinx | yolo26n-cls_xilinx_model/ | ✅ | imgsz, name, quantize, data, fraction, opset, simplify, device |
nms=None produit par défaut des sorties brutes pour la NMS externe. Définis nms=False pour sélectionner une tête disponible sans NMS ; les formats non pris en charge utilisent leur voie de sortie native. Les entrées nms ci-dessus désignent les formats qui peuvent intégrer la NMS avec nms=True.
Consulte tous les détails de export sur la page Exportation.
FAQ#
Les modèles YOLO26, comme
yolo26n-cls.pt, sont conçus pour classifier efficacement des images. Ils attribuent une seule étiquette de classe à une image entière, accompagnée d’un score de confiance. Cela s’avère particulièrement utile lorsque connaître la classe précise d’une image suffit, sans avoir à identifier l’emplacement ni la forme des objets qu’elle contient.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 :Exemplefrom ultralytics import YOLO # Charger un modèle model = YOLO("yolo26n-cls.pt") # charger un modèle préentraîné (recommandé pour l’entraînement) # Entraîner le modèle results = model.train(data="mnist160", epochs=100, imgsz=64)Pour découvrir d’autres options de configuration, consulte la page Configuration.
Les modèles de classification YOLO26 préentraînés sont disponibles 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.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 # Charger un modèle model = YOLO("path/to/best.pt") # charger le modèle entraîné # Valider le modèle metrics = model.val() # aucun argument nécessaire, utilise le jeu de données et les paramètres de l’entraînement metrics.top1 # top1 accuracy metrics.top5 # top5 accuracyPour en savoir plus, consulte la section Validation.
Tu peux exporter un modèle YOLO26 entraîné vers différents formats à l’aide de commandes Python ou CLI. Par exemple, pour exporter un modèle au format ONNX :
Exemplefrom ultralytics import YOLO # Charger un modèle model = YOLO("yolo26n-cls.pt") # charger le modèle entraîné # Exporter le modèle au format ONNX model.export(format="onnx")Pour connaître les options d’exportation détaillées, consulte la page Exportation.