Ultralytics YOLO27:

Classificação de imagens com Ultralytics YOLO#

Ultralytics YOLO image classification of objects and scenes

A classificação de imagens é a mais simples das tarefas compatíveis e envolve classificar uma imagem inteira em uma das classes predefinidas.

A saída de um classificador de imagens é um único rótulo de classe e uma pontuação de confiança. A classificação de imagens é útil quando você precisa saber apenas a qual classe uma imagem pertence e não precisa saber onde os objetos dessa classe estão localizados nem qual é a sua forma exata.



Watch: Explore Ultralytics YOLO Tasks: Image Classification using Ultralytics Platform
Dica

Os modelos YOLO26 Classify usam o sufixo -cls, ou seja, yolo26n-cls.pt, e são pré-treinados no ImageNet.

Modelos#

Os modelos YOLO26 Classify pré-treinados são apresentados aqui. Os modelos Detect, Segment e Pose são pré-treinados no conjunto de dados COCO, os modelos Semantic são pré-treinados no Cityscapes, e os modelos Classify são pré-treinados no conjunto de dados ImageNet.

Os modelos são baixados automaticamente da versão mais recente do lançamento da Ultralytics na primeira utilização.

Modelotamanho
(píxeis)
acc
top1
acc
top5
Velocidade
CPU ONNX
(ms)
Velocidade
T4 TensorRT10
(ms)
parâmetros
(M)
FLOPs
(B) a 224
YOLO26n-cls22471.490.15.0 ± 0.31.1 ± 0.02.80.4
YOLO26s-cls22476.092.97.9 ± 0.21.3 ± 0.06.71.5
YOLO26m-cls22478.194.217.2 ± 0.42.0 ± 0.011.64.8
YOLO26l-cls22479.094.623.2 ± 0.32.8 ± 0.014.16.0
YOLO26x-cls22479.995.041.4 ± 0.93.8 ± 0.029.613.5
  • Os valores de acc são as precisões dos modelos no conjunto de validação do ImageNet.
    Reproduza com yolo val classify data=path/to/ImageNet device=0
  • A velocidade é calculada como a média sobre as imagens de validação do ImageNet usando uma instância Amazon EC2 P4d.
    Reproduza com yolo val classify data=path/to/ImageNet batch=1 device=0|cpu
  • Os valores de Params e FLOPs correspondem ao modelo fundido após model.fuse(), que combina as camadas Conv e BatchNorm. Os checkpoints pré-treinados mantêm toda a arquitetura de treinamento e podem apresentar contagens maiores.

Consulta a pré-visualização não lançada do YOLO27 para ver a velocidade de classificação preliminar e os tamanhos dos modelos.

Treinar#

Treine YOLO26n-cls no conjunto de dados MNIST160 por 100 épocas com tamanho de imagem 64. Para obter uma lista completa dos argumentos disponíveis, consulte a página de Configuração.

Exemplo
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)
Dica

A classificação da Ultralytics YOLO usa torchvision.transforms.RandomResizedCrop para treinamento e torchvision.transforms.CenterCrop para validação e inferência. Essas transformações baseadas em recorte pressupõem entradas quadradas e podem recortar inadvertidamente regiões importantes de imagens com proporções extremas, causando potencialmente a perda de informações visuais essenciais durante o treinamento. Para preservar a imagem inteira mantendo suas proporções, considere usar torchvision.transforms.Resize em vez das transformações de recorte.

Você pode fazer isso personalizando seu pipeline de aumento de dados por meio de um ClassificationDataset e ClassificationTrainer personalizados.

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 do dataset#

O formato de conjunto de dados de classificação YOLO é descrito em detalhes no Guia de conjuntos de dados. Os conjuntos de dados de classificação também podem ser gerenciados e rotulados com as ferramentas de anotação da Ultralytics Platform.

Validação#

Valide a precisão do modelo YOLO26n-cls treinado no conjunto de dados MNIST160. Nenhum argumento é necessário, pois o model mantém seu data de treinamento e seus argumentos como atributos do modelo.

Exemplo
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
Dica

Conforme mencionado na seção de treinamento, você pode lidar com proporções extremas durante o treinamento usando um ClassificationTrainer personalizado. Para obter resultados de validação consistentes, você precisa aplicar a mesma abordagem implementando um ClassificationValidator personalizado ao chamar o método val(). Consulte o exemplo completo de código na seção de treinamento para obter detalhes de implementação.

Previsão#

Use um modelo YOLO26n-cls treinado para executar previsões em imagens.

Exemplo
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 name

Consulta todos os detalhes do modo predict na página Predict.

Saída dos resultados#

A classificação de imagens retorna um objeto Results por imagem. O campo de previsão principal é result.probs, que contém o vetor de probabilidade das classes e auxiliares para as principais previsões.

AtributoTipoFormaDescrição
result.probsProbs(C,)Probabilidades das classes.
result.probs.datatorch.float32(C,)Probabilidade por classe.
result.probs.top1int()ID da classe principal.
result.probs.top1conftorch.float32()Confiança principal.
result.probs.top5list[int](<=5)IDs das 5 principais classes.

Para consultar os campos Results específicos da tarefa em todas as tarefas, vê a secção Resultados de Previsão por Tarefa.

Exportação#

Exporte um modelo YOLO26n-cls para um formato diferente, como ONNX, CoreML etc.

Exemplo
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")

Os formatos de exportação disponíveis para YOLO26-cls estão na tabela abaixo. Você pode exportar para qualquer formato usando o argumento format, ou seja, format='onnx' ou format='engine'. Você pode prever ou validar diretamente em modelos exportados, ou seja, yolo predict model=yolo26n-cls.onnx. Os exemplos de uso são exibidos para o seu modelo após a conclusão da exportação.

FormatoArgumento formatModeloMetadadosArgumentos
PyTorch-yolo26n-cls.pt-
TorchScripttorchscriptyolo26n-cls.torchscriptimgsz, quantize, dynamic, nms, batch, device
ONNXonnxyolo26n-cls.onnximgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device
OpenVINOopenvinoyolo26n-cls_openvino_model/imgsz, quantize, dynamic, nms, batch, data, fraction, device
TensorRTengineyolo26n-cls.engineimgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device
CoreMLcoremlyolo26n-cls.mlpackageimgsz, dynamic, quantize, nms, batch, device
TF SavedModelsaved_modelyolo26n-cls_saved_model/imgsz, keras, quantize, opset, nms, batch, data, fraction, device
TF GraphDefpbyolo26n-cls.pbimgsz, opset, batch, device
TF Edge TPUedgetpuyolo26n-cls_edgetpu.tfliteimgsz, quantize, opset, data, fraction, device
PaddlePaddlepaddleyolo26n-cls_paddle_model/imgsz, batch, device
MNNmnnyolo26n-cls.mnnimgsz, batch, dynamic, quantize, simplify, opset, nms, device
NCNNncnnyolo26n-cls_ncnn_model/imgsz, quantize, batch, device
IMX500imxyolo26n-cls_imx_model/imgsz, quantize, data, fraction, nms, device
RKNNrknnyolo26n-cls_rknn_model/imgsz, batch, name, quantize, simplify, opset, data, fraction, device
ExecuTorchexecutorchyolo26n-cls_executorch_model/imgsz, batch, device
Axeleraaxelerayolo26n-cls_axelera_model/imgsz, batch, quantize, data, fraction, device
DEEPXdeepxyolo26n-cls_deepx_model/imgsz, quantize, simplify, opset, data, optimize, device
Qualcomm QNNqnnyolo26n-cls_qnn.onnximgsz, batch, name, quantize, simplify, opset, data, fraction, device
LiteRTlitertyolo26n-cls.tfliteimgsz, quantize, batch, data, fraction, device
Hailohailoyolo26n-cls_hailo_model/imgsz, name, quantize, data, fraction, simplify, conf, iou
Huawei Ascendascendyolo26n-cls_ascend_model/imgsz, batch, name, quantize, opset, simplify, nms
Apple Core AIcoreaiyolo26n-cls.aimodelimgsz, batch, quantize

nms=None por padrão utiliza saídas brutas para NMS externo. Define nms=False para selecionar uma cabeça livre de NMS disponível; os formatos não suportados recorrem ao seu caminho de saída nativo. As entradas nms acima identificam formatos que podem incorporar NMS com nms=True.

Consulta todos os detalhes de export na página Export.

Perguntas frequentes#

  • Os modelos YOLO26, como yolo26n-cls.pt, foram projetados para a classificação eficiente de imagens. Eles atribuem um único rótulo de classe a uma imagem inteira, juntamente com uma pontuação de confiança. Isso é particularmente útil para aplicações em que saber a classe específica de uma imagem é suficiente, em vez de identificar a localização ou a forma dos objetos dentro dela.

  • Para treinar um modelo YOLO26, você pode usar comandos Python ou CLI. Por exemplo, para treinar um modelo yolo26n-cls no conjunto de dados MNIST160 por 100 épocas com tamanho de imagem 64:

    Exemplo
    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)

    Para obter mais opções de configuração, visite a página de Configuração.

  • Os modelos YOLO26 de classificação pré-treinados podem ser encontrados na seção Modelos. Modelos como yolo26n-cls.pt, yolo26s-cls.pt, yolo26m-cls.pt etc. são pré-treinados no conjunto de dados ImageNet e podem ser facilmente baixados e usados em várias tarefas de classificação de imagens.

  • Você pode exportar um modelo YOLO26 treinado para vários formatos usando comandos Python ou CLI. Por exemplo, para exportar um modelo para o formato ONNX:

    Exemplo
    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")

    Para obter opções detalhadas de exportação, consulte a página Exportar.

  • Para validar a precisão de um modelo treinado em um conjunto de dados como MNIST160, você pode usar os seguintes comandos Python ou CLI:

    Exemplo
    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

    Para obter mais informações, visite a seção Validar.

Comentários