Classificação de Imagem
A classificação de imagens é a mais simples das três tarefas e envolve classificar uma imagem inteira em uma de um conjunto de 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 ou qual é sua forma exata.
Assista: Explore as Tarefas YOLO Ultralytics: Classificação de Imagens usando o Ultralytics HUB
Dica
Os modelos YOLO11 Classify usam o -cls
sufixo, ou seja, yolo11n-cls.pt
e são pré-treinados em ImageNet.
Modelos
Os modelos YOLO11 Classify pré-treinados são mostrados aqui. Os modelos Detect, Segment e Pose são pré-treinados no conjunto de dados COCO, enquanto os modelos Classify são pré-treinados no conjunto de dados ImageNet.
Os Modelos são baixados automaticamente da versão mais recente do Ultralytics no primeiro uso.
Modelo | tamanho (pixels) |
acc top1 |
acc top5 |
Velocidade CPU ONNX (ms) |
Velocidade T4 TensorRT10 (ms) |
parâmetros (M) |
FLOPs (B) a 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 |
- Os valores de acc ImageNet são as precisões do modelo no conjunto de validação do conjunto de dados
Reproduzir poryolo val classify data=path/to/ImageNet device=0
- Velocidade com média nas imagens val do ImageNet usando um Amazon EC2 P4d instância.
Reproduzir poryolo val classify data=path/to/ImageNet batch=1 device=0|cpu
Treinar
Treine o YOLO11n-cls no conjunto de dados MNIST160 por 100 épocas no tamanho de imagem 64. Para uma lista completa de argumentos disponíveis, consulte a página de Configuração.
Exemplo
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
Dica
A classificação Ultralytics YOLO usa torchvision.transforms.RandomResizedCrop
para treino e torchvision.transforms.CenterCrop
para validação e inferência.
Estas transformações baseadas em recorte assumem entradas quadradas e podem inadvertidamente recortar regiões importantes de imagens com proporções extremas, causando potencialmente a perda de informações visuais críticas durante o treino.
Para preservar a imagem completa, mantendo as suas proporções, considere usar torchvision.transforms.Resize
em vez de transformações de recorte.
Você pode implementar isso personalizando seu pipeline de aumento por meio de um 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("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)
Formato do conjunto de dados
O formato do conjunto de dados de classificação YOLO pode ser encontrado em detalhes no Guia do Conjunto de Dados.
Validar
Validar o modelo YOLO11n-cls treinado precisão no conjunto de dados MNIST160. Nenhum argumento é necessário, pois o model
mantém seu treinamento data
e argumentos como atributos do modelo.
Exemplo
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
Dica
Como mencionado em seção de treinamento, você pode lidar com proporções extremas durante o treinamento usando um ClassificationTrainer
. Você precisa aplicar a mesma abordagem para resultados de validação consistentes, implementando um ClassificationValidator
ao chamar o método val()
método. Consulte o exemplo de código completo no seção de treinamento para detalhes de implementação.
Prever
Use um modelo YOLO11n-cls treinado para executar previsões em imagens.
Exemplo
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
Veja todos os detalhes do modo predict
na Prever página.
Exportar
Exporte um modelo YOLO11n-cls para um formato diferente como ONNX, CoreML, etc.
Exemplo
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
Os formatos de exportação YOLO11-cls disponíveis estão na tabela abaixo. Você pode exportar para qualquer formato usando o format
argumento, ou seja, format='onnx'
ou format='engine'
. Você pode prever ou validar diretamente em modelos exportados, ou seja, yolo predict model=yolo11n-cls.onnx
Exemplos de uso são mostrados para seu modelo após a conclusão da exportação.
Formato | format Argumento |
Modelo | Metadados | Argumentos |
---|---|---|---|---|
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 |
Veja todos os detalhes do modo export
detalhes em Exportar página.
FAQ
Qual é o propósito do YOLO11 na classificação de imagens?
Modelos YOLO11, como yolo11n-cls.pt
, são projetados para classificação de imagem eficiente. 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 onde conhecer a classe específica de uma imagem é suficiente, em vez de identificar a localização ou forma de objetos dentro da imagem.
Como posso treinar um modelo YOLO11 para classificação de imagens?
Para treinar um modelo YOLO11, você pode usar comandos Python ou CLI. Por exemplo, para treinar um yolo11n-cls
modelo no conjunto de dados MNIST160 por 100 épocas em um tamanho de imagem de 64:
Exemplo
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
Para mais opções de configuração, visite a página de Configuração.
Onde posso encontrar modelos de classificação YOLO11 pré-treinados?
Modelos de classificação YOLO11 pré-treinados podem ser encontrados na Modelos seção. Modelos como yolo11n-cls.pt
, yolo11s-cls.pt
, yolo11m-cls.pt
, etc., são pré-treinados no ImageNet dataset e podem ser facilmente baixados e usados para várias tarefas de classificação de imagem.
Como posso exportar um modelo YOLO11 treinado para diferentes formatos?
Você pode exportar um modelo YOLO11 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("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
Para opções de exportação detalhadas, consulte a página de Exportação.
Como valido um modelo de classificação YOLO11 treinado?
Para validar a precisão de um modelo treinado em um dataset como MNIST160, você pode usar os seguintes comandos Python ou CLI:
Exemplo
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
Para obter mais informações, visite a seção Validar.