YOLO Vision 2026:

Clasificación de imágenes con Ultralytics YOLO#

Ultralytics YOLO image classification of objects and scenes

Image classification es la más sencilla de las tareas compatibles e implica clasificar una imagen completa en una de entre un conjunto de clases predefinidas.

El resultado de un clasificador de imágenes es una única etiqueta de clase y una puntuación de confianza. La clasificación de imágenes es útil cuando solo necesitas saber a qué clase pertenece una imagen y no necesitas saber dónde están ubicados los objetos de esa clase ni cuál es su forma exacta.



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

Los modelos YOLO26 Classify utilizan el sufijo -cls, es decir, yolo26n-cls.pt, y están preentrenados en ImageNet.

Modelos#

Los modelos Classify preentrenados de YOLO26 se muestran aquí. Los modelos Detect, Segment y Pose están preentrenados en el conjunto de datos COCO, los modelos Semantic están preentrenados en Cityscapes, y los modelos Classify están preentrenados en el conjunto de datos ImageNet.

Los modelos se descargan automáticamente de la última versión de Ultralytics en el primer uso.

Modelotamaño
(píxeles)
acc
top1
acc
top5
Velocidad
CPU ONNX
(ms)
Velocidad
T4 TensorRT10
(ms)
params
(M)
FLOPs
(B) at 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
  • Los valores acc son las precisiones del modelo en el conjunto de validación del conjunto de datos ImageNet.
    Reproduce con yolo val classify data=path/to/ImageNet device=0
  • Speed promediada sobre imágenes de validación de ImageNet utilizando una instancia de Amazon EC2 P4d.
    Reproduce con yolo val classify data=path/to/ImageNet batch=1 device=0|cpu
  • Los valores de Params y FLOPs son para el modelo fusionado después de model.fuse(), que combina las capas Conv y BatchNorm. Los puntos de control preentrenados conservan toda la arquitectura de entrenamiento y pueden mostrar recuentos más altos.

Entrenar#

Entrena YOLO26n-cls en el conjunto de datos MNIST160 durante 100 epochs con un tamaño de imagen de 64. Para ver una lista completa de los argumentos disponibles, consulta la página Configuration.

Ejemplo
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)
Consejo

La clasificación YOLO de Ultralytics utiliza torchvision.transforms.RandomResizedCrop para el entrenamiento y torchvision.transforms.CenterCrop para la validación y la inferencia. Estas transformaciones basadas en recortes asumen entradas cuadradas y pueden recortar sin querer regiones importantes de imágenes con relaciones de aspecto extremas, lo que podría provocar la pérdida de información visual crítica durante el entrenamiento. Para preservar la imagen completa manteniendo sus proporciones, considera usar torchvision.transforms.Resize en lugar de las transformaciones de recorte.

Puedes implementar esto personalizando tu canalización de aumentos a través de un ClassificationDataset y 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="imagenet1000", trainer=CustomizedTrainer, epochs=10, imgsz=224, batch=64)
model.val(data="imagenet1000", validator=CustomizedValidator, imgsz=224, batch=64)

Formato del conjunto de datos#

El formato del conjunto de datos de clasificación YOLO se puede consultar en detalle en la Dataset Guide. Los conjuntos de datos de clasificación también se pueden gestionar y etiquetar con las herramientas de anotación de Ultralytics Platform.

Validar#

Valida la accuracy del modelo YOLO26n-cls entrenado en el conjunto de datos MNIST160. No se necesitan argumentos, ya que el model conserva su data y sus argumentos de entrenamiento como atributos del modelo.

Ejemplo
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
Consejo

Como se menciona en la sección de entrenamiento, puedes gestionar relaciones de aspecto extremas durante el entrenamiento utilizando un ClassificationTrainer personalizado. Debes aplicar el mismo enfoque para obtener resultados de validación consistentes implementando un ClassificationValidator personalizado al llamar al método val(). Consulta el ejemplo de código completo en la sección de entrenamiento para ver los detalles de implementación.

Predecir#

Utiliza un modelo YOLO26n-cls entrenado para ejecutar predicciones en imágenes.

Ejemplo
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 los detalles del modo predict en la página Predict.

Resultado de la salida#

La clasificación de imágenes devuelve un objeto Results por imagen. El campo de predicción principal es result.probs, que contiene el vector de probabilidad de las clases y funciones auxiliares para las predicciones principales.

AtributoTipoFormaDescripción
result.probsProbs(C,)Probabilidades de clase.
result.probs.datatorch.float32(C,)Probabilidad por clase.
result.probs.top1int()ID de la clase principal.
result.probs.top1conftorch.float32()Confianza principal.
result.probs.top5list[int](<=5)IDs de las 5 clases principales.

Para ver los campos de Results específicos de cada tarea en todas ellas, consulta la sección Predict Results by Task.

Exportar#

Exporta un modelo YOLO26n-cls a un formato diferente como ONNX, CoreML, etc.

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

Los formatos de exportación disponibles para YOLO26-cls se encuentran en la tabla siguiente. Puedes exportar a cualquier formato usando el argumento format, es decir, format='onnx' o format='engine'. Puedes predecir o validar directamente en modelos exportados, es decir, yolo predict model=yolo26n-cls.onnx. Se muestran ejemplos de uso para tu modelo una vez que finaliza la exportación.

FormatoArgumento de formatModeloMetadatosArgumentos
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

Consulta todos los detalles de export en la página Export.

FAQ#

  • Los modelos YOLO26, como yolo26n-cls.pt, están diseñados para una clasificación de imágenes eficiente. Asignan una única etiqueta de clase a una imagen completa junto con una puntuación de confianza. Esto es especialmente útil para aplicaciones en las que basta con conocer la clase específica de una imagen, en lugar de identificar la ubicación o la forma de los objetos dentro de ella.

  • Para entrenar un modelo YOLO26, puedes utilizar comandos de Python o de la CLI. Por ejemplo, para entrenar un modelo yolo26n-cls en el conjunto de datos MNIST160 durante 100 epochs con un tamaño de imagen de 64:

    Ejemplo
    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 más opciones de configuración, visita la página Configuration.

  • Los modelos de clasificación YOLO26 preentrenados se pueden encontrar en la sección Models. Modelos como yolo26n-cls.pt, yolo26s-cls.pt, yolo26m-cls.pt, etc., están preentrenados en el conjunto de datos ImageNet y se pueden descargar y utilizar fácilmente para varias tareas de clasificación de imágenes.

  • Puedes exportar un modelo YOLO26 entrenado a varios formatos utilizando Python o comandos de CLI. Por ejemplo, para exportar un modelo al formato ONNX:

    Ejemplo
    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 conocer las opciones de exportación detalladas, consulta la página Export.

  • Para validar la precisión de un modelo entrenado en un conjunto de datos como MNIST160, puedes usar los siguientes comandos de Python o CLI:

    Ejemplo
    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 obtener más información, visita la sección Validate.

Comentarios