Vai al contenuto

Classificazione delle immagini

Classificazione YOLO di oggetti e scene

La classificazione delle immagini è la più semplice delle tre attività e comporta la classificazione di un'intera immagine in una di una serie di 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 è necessario sapere solo a quale classe appartiene un'immagine e non è necessario sapere dove si trovano gli oggetti di quella classe o qual è la loro forma esatta.



Guarda: Esplora le Funzionalità YOLO di Ultralytics: Classificazione di Immagini utilizzando la Piattaforma Ultralytics

Suggerimento

I modelli YOLO26 Classify utilizzano il -cls suffisso, ad esempio, yolo26n-cls.pt, e sono pre-addestrati su ImageNet.

Modelli

I modelli YOLO26 Classify pre-addestrati sono mostrati qui. I modelli Detect, Segment e Pose sono pre-addestrati sul dataset COCO, mentre i modelli Classify sono pre-addestrati sul dataset ImageNet.

I modelli vengono scaricati automaticamente dall'ultima release di Ultralytics al primo utilizzo.

Modellodimensione
(pixel)
acc
top1
acc
top5
Velocità
CPU ONNX
(ms)
Velocità
T4 TensorRT10
(ms)
parametri
(M)
FLOPs
(B) a 224
YOLO26n-cls22471.490.15.0 ± 0.31.1 ± 0.02.80.5
YOLO26s-cls22476.092.97.9 ± 0.21.3 ± 0.06.71.6
YOLO26m-cls22478.194.217.2 ± 0.42.0 ± 0.011.64.9
YOLO26l-cls22479.094.623.2 ± 0.32.8 ± 0.014.16.2
YOLO26x-cls22479.995.041.4 ± 0.93.8 ± 0.029.613.6
  • acc i valori sono le accuratezze del modello sul ImageNet set di convalida del dataset.
    Riproduci tramite yolo val classify data=path/to/ImageNet device=0
  • Velocità calcolata in media sulle immagini ImageNet val utilizzando un Amazon EC2 P4d instance.
    Riproduci tramite yolo val classify data=path/to/ImageNet batch=1 device=0|cpu

Addestramento

Addestra YOLO26n-cls sul dataset MNIST160 per 100 epoche alla dimensione dell'immagine di 64. Per un elenco completo degli argomenti disponibili, consulta la pagina Configurazione.

Esempio

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)
# Build a new model from YAML and start training from scratch
yolo classify train data=mnist160 model=yolo26n-cls.yaml epochs=100 imgsz=64

# Start training from a pretrained *.pt model
yolo classify train data=mnist160 model=yolo26n-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=yolo26n-cls.yaml pretrained=yolo26n-cls.pt epochs=100 imgsz=64

Suggerimento

La classificazione 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 inavvertitamente ritagliare regioni importanti da immagini con proporzioni estreme, causando potenzialmente la perdita di informazioni visive critiche durante l'addestramento. Per preservare l'immagine completa mantenendone le proporzioni, considera l'utilizzo di torchvision.transforms.Resize invece delle trasformazioni di ritaglio.

Puoi implementare questo personalizzando la tua pipeline di aumento tramite un ClassificationDataset e 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("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)

Formato del set di dati

Il formato del dataset di classificazione YOLO può essere trovato in dettaglio nella Guida al dataset.

Valutazione

Valida il modello YOLO26n-cls addestrato accuratezza sul dataset MNIST160. Non sono necessari argomenti poiché il model mantiene il suo training data e gli argomenti come attributi del modello.

Esempio

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 accuracy
yolo classify val model=yolo26n-cls.pt  # val official model
yolo classify val model=path/to/best.pt # val custom model

Suggerimento

Come menzionato in sezione di training, puoi gestire proporzioni estreme durante l'addestramento utilizzando un ClassificationTrainer. È necessario applicare lo stesso approccio per ottenere risultati di convalida coerenti implementando un ClassificationValidator quando si richiama il metodo val() metodo. Fare riferimento all'esempio di codice completo nella sezione di training per i dettagli di implementazione.

Predizione

Utilizza un modello YOLO26n-cls addestrato per eseguire previsioni sulle immagini.

Esempio

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
yolo classify predict model=yolo26n-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

Vedi tutti i predict dettagli della modalità nella Predizione pagina.

Esportazione

Esporta un modello YOLO26n-cls in un formato diverso come ONNX, CoreML, ecc.

Esempio

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")
yolo export model=yolo26n-cls.pt format=onnx  # export official model
yolo export model=path/to/best.pt format=onnx # export custom-trained model

I formati di esportazione YOLO26-cls disponibili sono nella tabella seguente. Puoi esportare in qualsiasi formato utilizzando il format argomento, cioè, format='onnx' oppure format='engine'. È possibile effettuare previsioni o validazioni direttamente sui modelli esportati, cioè, yolo predict model=yolo26n-cls.onnx. Esempi di utilizzo vengono mostrati per il tuo modello dopo che l'esportazione è stata completata.

Formatoformat ArgomentoModelloMetadatiArgomenti
PyTorch-yolo26n-cls.pt-
TorchScripttorchscriptyolo26n-cls.torchscriptimgsz, half, dynamic, optimize, nms, batch, device
ONNXonnxyolo26n-cls.onnximgsz, half, dynamic, simplify, opset, nms, batch, device
OpenVINOopenvinoyolo26n-cls_openvino_model/imgsz, half, dynamic, int8, nms, batch, data, fraction, device
TensorRTengineyolo26n-cls.engineimgsz, half, dynamic, simplify, workspace, int8, nms, batch, data, fraction, device
CoreMLcoremlyolo26n-cls.mlpackageimgsz, dynamic, half, int8, nms, batch, device
TF SavedModelsaved_modelyolo26n-cls_saved_model/imgsz, keras, int8, nms, batch, device
TF GraphDefpbyolo26n-cls.pbimgsz, batch, device
TF Litetfliteyolo26n-cls.tfliteimgsz, half, int8, nms, batch, data, fraction, device
TF Edge TPUedgetpuyolo26n-cls_edgetpu.tfliteimgsz, device
TF.jstfjsyolo26n-cls_web_model/imgsz, half, int8, nms, batch, device
PaddlePaddlepaddleyolo26n-cls_paddle_model/imgsz, batch, device
MNNmnnyolo26n-cls.mnnimgsz, batch, int8, half, device
NCNNncnnyolo26n-cls_ncnn_model/imgsz, half, batch, device
IMX500imxyolo26n-cls_imx_model/imgsz, int8, data, fraction, device
RKNNrknnyolo26n-cls_rknn_model/imgsz, batch, name, device
ExecuTorchexecutorchyolo26n-cls_executorch_model/imgsz, device
Axeleraaxelerayolo26n-cls_axelera_model/imgsz, int8, data, fraction, device

Vedi tutti i export dettagli nella Esportazione pagina.

FAQ

Qual è lo scopo di YOLO26 nella classificazione delle immagini?

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. Ciò è particolarmente utile per le applicazioni in cui è sufficiente conoscere la classe specifica di un'immagine, piuttosto che identificare la posizione o la forma degli oggetti all'interno dell'immagine.

Come si addestra un modello YOLO26 per la classificazione delle immagini?

Per addestrare un modello YOLO26, puoi utilizzare comandi Python o CLI. Ad esempio, per addestrare un yolo26n-cls modello sul dataset MNIST160 per 100 epoche con una dimensione dell'immagine di 64:

Esempio

from 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)
yolo classify train data=mnist160 model=yolo26n-cls.pt epochs=100 imgsz=64

Per ulteriori opzioni di configurazione, visita la pagina Configurazione.

Dove posso trovare modelli di classificazione YOLO26 pre-addestrati?

I modelli di classificazione YOLO26 pre-addestrati possono essere trovati nel Modelli sezione. Modelli come yolo26n-cls.pt, yolo26s-cls.pt, yolo26m-cls.pt, ecc., sono pre-addestrati sul ImageNet dataset e possono essere facilmente scaricati e utilizzati per varie attività di classificazione delle immagini.

Come posso esportare un modello YOLO26 addestrato in diversi formati?

Puoi esportare un modello YOLO26 addestrato in vari formati utilizzando comandi Python o CLI. Ad esempio, per esportare un modello in formato ONNX:

Esempio

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-cls.pt")  # load the trained model

# Export the model to ONNX
model.export(format="onnx")
yolo export model=yolo26n-cls.pt format=onnx # export the trained model to ONNX format

Per opzioni di esportazione dettagliate, consulta la pagina Esportazione.

Come si valida un modello di classificazione YOLO26 addestrato?

Per convalidare l'accuratezza di un modello addestrato su un dataset come MNIST160, puoi utilizzare i seguenti comandi Python o CLI:

Esempio

from 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 accuracy
yolo classify val model=yolo26n-cls.pt # validate the trained model

Per ulteriori informazioni, visita la sezione Convalida.



📅 Creato 2 anni fa ✏️ Aggiornato 2 giorni fa
glenn-jocherBurhan-QLaughing-qambitious-octopuspderrengerpicsalexRizwanMunawarUltralyticsAssistantMatthewNoyceRizwanMunawarfcakyon

Commenti