Classificazione delle immagini con Ultralytics YOLO#
La classificazione delle immagini è il più semplice tra i task supportati 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 soltanto a quale classe appartiene un'immagine e non hai bisogno di conoscere la posizione degli oggetti di quella classe o la loro forma esatta.
Guarda: Scopri i task di Ultralytics YOLO: classificazione delle immagini con la piattaforma Ultralytics
I modelli YOLO26 Classify usano il suffisso -cls, ad esempio yolo26n-cls.pt, e sono preaddestrati su ImageNet.
Modelli#
Di seguito sono mostrati i modelli YOLO26 Classify preaddestrati sul dataset ImageNet.
I modelli vengono scaricati automaticamente dalla più recente release 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 ImageNet.
Riproduci conyolo classify val data=path/to/ImageNet device=0 - Velocità media sulle immagini di validazione ImageNet con ONNX su CPU e TensorRT10 su una GPU NVIDIA T4.
Riproduci conyolo classify val 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 mantengono l'architettura di addestramento completa e possono riportare valori più alti.
Consulta l'anteprima non rilasciata di YOLO27 per i dati preliminari sulla velocità di classificazione e sulle dimensioni dei modelli.
Addestra#
Addestra YOLO26n-cls sul dataset MNIST160 per 100 epoche con una dimensione delle immagini di 64. Per l'elenco completo degli argomenti disponibili, consulta la pagina Configurazione.
from ultralytics import YOLO
# Carica un modello
model = YOLO("yolo26n-cls.yaml") # crea un nuovo modello dal file YAML
model = YOLO("yolo26n-cls.pt") # carica un modello preaddestrato (consigliato per l'addestramento)
model = YOLO("yolo26n-cls.yaml").load("yolo26n-cls.pt") # crea dal file YAML e trasferisci i pesi
# Addestra il modello
results = model.train(data="mnist160", epochs=100, imgsz=64)Consulta la pagina Addestramento per i dettagli completi della modalità train. Puoi addestrare i modelli di classificazione anche con l'addestramento cloud di Ultralytics Platform.
Formato del dataset#
La Guida ai dataset illustra nel dettaglio il formato dei dataset di classificazione YOLO. Puoi anche gestire ed etichettare i dataset di classificazione con gli strumenti di annotazione di Ultralytics Platform.
Trasformazioni personalizzate#
La classificazione Ultralytics YOLO usa 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 eliminare regioni importanti delle immagini con rapporti d'aspetto estremi. Per mantenere l'immagine intera, sostituisci i ritagli con torchvision.transforms.Resize, che ridimensiona a imgsz × imgsz invece di ritagliare, tramite ClassificationDataset, ClassificationTrainer e ClassificationValidator 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 = "", names=None):
"""Initialize a customized classification dataset with enhanced data augmentation transforms."""
super().__init__(root, args, augment, prefix, names)
# Aggiungi qui le tue trasformazioni di addestramento personalizzate
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),
]
)
# Aggiungi qui le tue trasformazioni di validazione personalizzate
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)Convalida#
Convalida l'accuratezza di un modello YOLO26n-cls addestrato. Non servono argomenti, perché model conserva data usato per l'addestramento e i relativi argomenti come attributi del modello: path/to/best.pt dell'esempio di addestramento esegue la validazione su MNIST160. I pesi ufficiali registrano un percorso del dataset di addestramento che non esiste sul tuo computer, quindi, con un avviso, ripiegano sul valore predefinito del task imagenet10. Passa data per eseguire la validazione su un altro dataset.
from ultralytics import YOLO
# Carica un modello
model = YOLO("yolo26n-cls.pt") # carica un modello ufficiale
model = YOLO("path/to/best.pt") # carica un modello personalizzato
# Convalida il modello
metrics = model.val() # non servono argomenti, il dataset e le impostazioni vengono ricordati
metrics.top1 # top1 accuracy
metrics.top5 # top5 accuracyUn modello addestrato con trasformazioni personalizzate richiede di passare a val() il valore corrispondente di ClassificationValidator; altrimenti, la validazione esegue ritagli nei punti in cui l'addestramento aveva ridimensionato l'immagine.
Predici#
Usa un modello YOLO26n-cls addestrato per eseguire predizioni sulle immagini.
from ultralytics import YOLO
# Carica un modello
model = YOLO("yolo26n-cls.pt") # carica un modello ufficiale
model = YOLO("path/to/best.pt") # carica un modello personalizzato
# Esegui previsioni con il modello
results = model("https://ultralytics.com/images/bus.jpg") # esegui una previsione su un’immagine
# Accedi ai risultati
for result in results:
top1 = result.probs.top1 # ID della classe con la predizione più probabile
top1_conf = result.probs.top1conf # confidenza della predizione più probabile
top1_name = result.names[top1] # nome della classe con la predizione più probabileConsulta la pagina Previsione per i dettagli completi sulla modalità predict.
Output dei risultati#
La classificazione delle immagini restituisce un oggetto Results per immagine. Il campo principale della predizione è result.probs, che contiene il vettore delle probabilità delle classi e funzioni helper 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 prime 5 classi. |
Per consultare i campi Results specifici di ogni attività, visita la sezione Risultati delle previsioni per attività.
Esporta#
Esporta un modello YOLO26n-cls in un altro formato, ad esempio ONNX, CoreML, ecc.
from ultralytics import YOLO
# Carica un modello
model = YOLO("yolo26n-cls.pt") # carica un modello ufficiale
model = YOLO("path/to/best.pt") # carica un modello personalizzato
# Esporta il modello
model.export(format="onnx")I formati di esportazione disponibili per YOLO26-cls sono elencati nella tabella seguente. Puoi esportare in qualsiasi formato usando l'argomento format, ad esempio format='onnx' o format='engine'. Puoi eseguire predizioni o validazioni direttamente sui modelli esportati, ad esempio yolo predict model=yolo26n-cls.onnx. Al termine dell'esportazione vengono mostrati esempi d'uso 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 |
| 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 restituisce per impostazione predefinita output grezzi per NMS esterno. Imposta nms=False per selezionare una head disponibile senza NMS; i formati non supportati utilizzano il proprio percorso di output nativo. Le voci nms qui sopra identificano i formati che possono integrare NMS con nms=True.
Consulta i dettagli completi di export nella pagina Esportazione.
Domande frequenti#
I modelli YOLO26, come
yolo26n-cls.pt, sono progettati per classificare le immagini in modo efficiente. Assegnano un'unica etichetta di classe all'intera immagine, insieme a un punteggio di confidenza. Sono particolarmente utili nelle applicazioni in cui è sufficiente conoscere la classe specifica di un'immagine, senza dover identificare la posizione o la forma degli oggetti al suo interno.Per addestrare un modello YOLO26, puoi usare Python o i comandi CLI. Ad esempio, per addestrare un modello
yolo26n-clssul dataset MNIST160 per 100 epoche con una dimensione delle immagini di 64:Esempiofrom ultralytics import YOLO # Carica un modello model = YOLO("yolo26n-cls.pt") # carica un modello preaddestrato (consigliato per l'addestramento) # Addestra il modello results = model.train(data="mnist160", epochs=100, imgsz=64)Per altre opzioni di configurazione, visita la pagina Configurazione.
Per convalidare l'accuratezza di un modello addestrato su un dataset come MNIST160, puoi usare i seguenti comandi Python o CLI:
Esempiofrom ultralytics import YOLO # Carica un modello model = YOLO("path/to/best.pt") # carica il modello addestrato # Convalida il modello metrics = model.val() # non servono argomenti: usa il dataset e le impostazioni dell'addestramento metrics.top1 # top1 accuracy metrics.top5 # top5 accuracyPer saperne di più, visita la sezione Convalida.
Puoi esportare un modello YOLO26 addestrato in vari formati usando comandi Python o CLI. Ad esempio, per esportare un modello in formato ONNX:
Esempiofrom ultralytics import YOLO # Carica un modello model = YOLO("yolo26n-cls.pt") # carica il modello addestrato # Esporta il modello in ONNX model.export(format="onnx")Per informazioni dettagliate sulle opzioni di esportazione, consulta la pagina Esportazione.