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 utilisantyolo 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 utilisantyolo 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.