Classificazione delle immagini con Ultralytics YOLO#
La classificazione delle immagini è la più semplice tra le attività supportate e consiste nell'assegnare un'intera immagine a una delle classi predefinite.
L'output di un classificatore di immagini è una singola etichetta di classe e un punteggio di confidenza. La classificazione delle immagini è utile quando ti serve sapere solo a quale classe appartiene un'immagine e non hai bisogno di sapere dove si trovano gli oggetti di quella classe o quale sia la loro forma esatta.
Watch: Explore Ultralytics YOLO Tasks: Image Classification using Ultralytics Platform
I modelli YOLO26 Classify utilizzano il suffisso -cls, ovvero yolo26n-cls.pt, e sono preaddestrati su ImageNet.
Modelli#
Qui sono mostrati i modelli Classify preaddestrati di YOLO26. I modelli Detect, Segment e Pose sono preaddestrati sul dataset COCO, i modelli Semantic sono preaddestrati su Cityscapes e i modelli Classify sono preaddestrati sul dataset ImageNet.
I modelli vengono scaricati automaticamente dalla release più recente di Ultralytics al primo utilizzo.
| Modello | dimensione (pixel) | acc top1 | acc top5 | Velocità CPU ONNX (ms) | Velocità T4 TensorRT10 (ms) | parametri (M) | FLOPs (B) a 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 |
- I valori di acc rappresentano l'accuratezza dei modelli sul set di validazione del dataset ImageNet.
Riproduci conyolo val classify data=path/to/ImageNet device=0 - La velocità è calcolata come media sulle immagini di validazione di ImageNet utilizzando un'istanza Amazon EC2 P4d.
Riproduci conyolo val classify data=path/to/ImageNet batch=1 device=0|cpu - I valori di Params e FLOPs si riferiscono al modello fuso dopo
model.fuse(), che unisce i layer Conv e BatchNorm. I checkpoint preaddestrati conservano l'architettura completa di addestramento e possono mostrare conteggi più elevati.
Consulta l' anteprima di YOLO27 non rilasciata per la velocità di classificazione preliminare e le dimensioni dei modelli.
Addestramento#
Addestra YOLO26n-cls sul dataset MNIST160 per 100 epoche con una dimensione delle immagini pari a 64. Per un elenco completo degli argomenti disponibili, consulta la pagina Configurazione.
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 classificazione di Ultralytics YOLO utilizza torchvision.transforms.RandomResizedCrop per l'addestramento e torchvision.transforms.CenterCrop per la validazione e l'inferenza.
Queste trasformazioni basate sul ritaglio presuppongono input quadrati e possono ritagliare inavvertitamente regioni importanti delle immagini con rapporti d'aspetto estremi, causando potenzialmente la perdita di informazioni visive critiche durante l'addestramento.
Per preservare l'immagine completa mantenendone le proporzioni, valuta l'utilizzo di torchvision.transforms.Resize al posto delle trasformazioni di ritaglio.
Puoi implementare questa soluzione personalizzando la pipeline di aumento dati tramite un ClassificationDataset e un ClassificationTrainer personalizzati.
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)Formato del dataset#
Il formato dei dataset di classificazione YOLO è descritto in dettaglio nella Guida ai dataset. I dataset di classificazione possono anche essere gestiti ed etichettati con gli strumenti di annotazione della piattaforma Ultralytics.
Val#
Valida l'accuratezza del modello YOLO26n-cls addestrato sul dataset MNIST160. Non sono necessari argomenti, poiché model conserva il proprio data di addestramento e gli argomenti come attributi del modello.
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 accuracyCome indicato nella sezione sull'addestramento, durante l'addestramento puoi gestire i rapporti d'aspetto estremi utilizzando un ClassificationTrainer personalizzato. Per ottenere risultati di validazione coerenti, devi applicare lo stesso approccio implementando un ClassificationValidator personalizzato quando chiami il metodo val(). Per i dettagli sull'implementazione, consulta l'esempio di codice completo nella sezione sull'addestramento.
Predizione#
Utilizza un modello YOLO26n-cls addestrato per eseguire predizioni sulle immagini.
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 nameConsulta la pagina Predict per tutti i dettagli sulla modalità predict.
Output dei risultati#
La classificazione delle immagini restituisce un oggetto Results per ogni immagine. Il campo principale della predizione è result.probs, che
contiene il vettore delle probabilità delle classi e strumenti di supporto per le predizioni principali.
| Attributo | Tipo | Forma | Descrizione |
|---|---|---|---|
result.probs | Probs | (C,) | Probabilità delle classi. |
result.probs.data | torch.float32 | (C,) | Probabilità per classe. |
result.probs.top1 | int | () | ID della classe principale. |
result.probs.top1conf | torch.float32 | () | Confidenza principale. |
result.probs.top5 | list[int] | (<=5) | ID delle 5 classi principali. |
Per i campi Results specifici dell'attività in tutte le attività, consulta la sezione Risultati delle predizioni per attività.
Esportazione#
Esporta un modello YOLO26n-cls in un formato diverso, come ONNX, CoreML, ecc.
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")I formati di esportazione YOLO26-cls disponibili sono riportati nella tabella seguente. Puoi esportare in qualsiasi formato utilizzando l'argomento format, ovvero format='onnx' o format='engine'. Puoi eseguire predizioni o validazioni direttamente sui modelli esportati, ovvero yolo predict model=yolo26n-cls.onnx. Al termine dell'esportazione vengono mostrati esempi di utilizzo per il tuo modello.
| Formato | Argomento format | Modello | Metadati | Argomenti |
|---|---|---|---|---|
| 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 utilizza i valori predefiniti per gli output grezzi per la NMS esterna. Imposta nms=False per selezionare una testa senza NMS disponibile; i formati non supportati ricorrono al loro percorso di output nativo. Le voci nms sopra indicano i formati che possono incorporare la NMS con nms=True.
Consulta la pagina Export per tutti i dettagli su export.
FAQ#
I modelli YOLO26, come
yolo26n-cls.pt, sono progettati per una classificazione efficiente delle immagini. Assegnano una singola etichetta di classe a un'intera immagine insieme a un punteggio di confidenza. Questo è particolarmente utile per le applicazioni in cui è sufficiente conoscere la classe specifica di un'immagine, invece di identificare la posizione o la forma degli oggetti al suo interno.Per addestrare un modello YOLO26, puoi utilizzare Python o i comandi CLI. Ad esempio, per addestrare un modello
yolo26n-clssul dataset MNIST160 per 100 epoche con una dimensione delle immagini pari a 64:Esempiofrom ultralytics import YOLO # Load a model model = YOLO("yolo26n-cls.pt") # load a pretrained model (recommended for training) # Train the model results = model.train(data="mnist160", epochs=100, imgsz=64)Per ulteriori opzioni di configurazione, visita la pagina Configurazione.
Puoi esportare un modello YOLO26 addestrato in diversi formati utilizzando Python o i comandi CLI. Ad esempio, per esportare un modello nel formato ONNX:
Esempiofrom ultralytics import YOLO # Load a model model = YOLO("yolo26n-cls.pt") # load the trained model # Export the model to ONNX model.export(format="onnx")Per informazioni dettagliate sulle opzioni di esportazione, consulta la pagina Export.
Per validare l'accuratezza di un modello addestrato su un dataset come MNIST160, puoi utilizzare i seguenti comandi Python o CLI:
Esempiofrom 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 accuracyPer ulteriori informazioni, visita la sezione Validate.