Clasificación de imágenes con Ultralytics YOLO#
La clasificación de imágenes es la más sencilla de las tareas compatibles y consiste en clasificar una imagen completa en una de varias clases predefinidas.
La salida de un clasificador de imágenes es una única etiqueta de clase y una puntuación de confianza. La clasificación de imágenes resulta útil cuando solo necesitas saber a qué clase pertenece una imagen y no necesitas saber dónde están los objetos de esa clase ni cuál es su forma exacta.
Ver: Explora las tareas de Ultralytics YOLO: clasificación de imágenes con Ultralytics Platform
Los modelos YOLO26 Classify usan el sufijo -cls, por ejemplo, yolo26n-cls.pt, y están preentrenados con ImageNet.
Modelos#
A continuación se muestran los modelos YOLO26 Classify preentrenados con el conjunto de datos ImageNet.
Los modelos se descargan automáticamente desde la versión más reciente de Ultralytics al usarlos por primera vez.
| Modelo | tamaño (píxeles) | acc top1 | acc top5 | Velocidad CPU ONNX (ms) | Velocidad T4 TensorRT10 (ms) | parámetros (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 |
- Los valores de acc corresponden a la precisión de los modelos en el conjunto de validación de ImageNet.
Reprodúcelo conyolo classify val data=path/to/ImageNet device=0 - Velocidad media en imágenes de validación de ImageNet, con ONNX en CPU y TensorRT10 en una GPU NVIDIA T4.
Reprodúcela conyolo classify val data=path/to/ImageNet batch=1 device=0|cpu - Los valores de parámetros y FLOPs corresponden al modelo fusionado tras
model.fuse(), que combina las capas Conv y BatchNorm. Los puntos de control preentrenados conservan la arquitectura de entrenamiento completa y pueden mostrar valores más altos.
Consulta la vista previa no publicada de YOLO27 para ver las velocidades preliminares de clasificación y los tamaños de los modelos.
Entrenar#
Entrena YOLO26n-cls con el conjunto de datos MNIST160 durante 100 épocas con un tamaño de imagen de 64. Consulta la página de Configuración para ver la lista completa de argumentos disponibles.
from ultralytics import YOLO
# Cargar un modelo
model = YOLO("yolo26n-cls.yaml") # Crea un modelo nuevo a partir de YAML
model = YOLO("yolo26n-cls.pt") # Carga un modelo preentrenado (recomendado para el entrenamiento)
model = YOLO("yolo26n-cls.yaml").load("yolo26n-cls.pt") # Crea el modelo a partir de YAML y transfiere los pesos
# Entrenar el modelo
results = model.train(data="mnist160", epochs=100, imgsz=64)Consulta todos los detalles del modo train en la página Entrenar. También puedes entrenar modelos de clasificación con el entrenamiento en la nube de Ultralytics Platform.
Formato del conjunto de datos#
Encontrarás todos los detalles sobre el formato de los conjuntos de datos de clasificación YOLO en la Guía de conjuntos de datos. También puedes gestionar y etiquetar conjuntos de datos de clasificación con las herramientas de anotación de Ultralytics Platform.
Transformaciones personalizadas#
La clasificación de Ultralytics YOLO usa torchvision.transforms.RandomResizedCrop para el entrenamiento y torchvision.transforms.CenterCrop para la validación y la inferencia. Estas transformaciones basadas en recortes presuponen entradas cuadradas y pueden recortar regiones importantes de imágenes con relaciones de aspecto extremas. Para conservar la imagen completa, sustituye los recortes por torchvision.transforms.Resize, que cambia el tamaño a imgsz × imgsz en lugar de recortar, mediante un ClassificationDataset, ClassificationTrainer y ClassificationValidator 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 = "", names=None):
"""Initialize a customized classification dataset with enhanced data augmentation transforms."""
super().__init__(root, args, augment, prefix, names)
# Añade aquí tus transformaciones de entrenamiento personalizadas
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),
]
)
# Añade aquí tus transformaciones de validación personalizadas
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)Validar#
Valida la precisión de un modelo YOLO26n-cls entrenado. No se necesitan argumentos, ya que model conserva los atributos de entrenamiento data y sus argumentos: path/to/best.pt del ejemplo de entrenamiento valida con MNIST160. Los pesos oficiales registran una ruta al conjunto de datos de entrenamiento que no existe en tu equipo, así que recurren al valor predeterminado de la tarea imagenet10 y muestran una advertencia. Pasa data para validar con otro conjunto de datos.
from ultralytics import YOLO
# Cargar un modelo
model = YOLO("yolo26n-cls.pt") # carga un modelo oficial
model = YOLO("path/to/best.pt") # cargar un modelo personalizado
# Valida el modelo
metrics = model.val() # no hacen falta argumentos; se recuerdan el conjunto de datos y los ajustes
metrics.top1 # top1 accuracy
metrics.top5 # top5 accuracyUn modelo entrenado con transformaciones personalizadas necesita que se pase el ClassificationValidator correspondiente a val(); de lo contrario, la validación recortará las imágenes que el entrenamiento había redimensionado.
Predecir#
Usa un modelo YOLO26n-cls entrenado para ejecutar predicciones en imágenes.
from ultralytics import YOLO
# Cargar un modelo
model = YOLO("yolo26n-cls.pt") # carga un modelo oficial
model = YOLO("path/to/best.pt") # cargar un modelo personalizado
# Haz predicciones con el modelo
results = model("https://ultralytics.com/images/bus.jpg") # haz una predicción sobre una imagen
# Accede a los resultados
for result in results:
top1 = result.probs.top1 # ID de la clase predicha con mayor puntuación
top1_conf = result.probs.top1conf # confianza de la predicción con mayor puntuación
top1_name = result.names[top1] # nombre de la clase predicha con mayor puntuaciónConsulta todos los detalles del modo predict en la página de predicción.
Resultados de salida#
La clasificación de imágenes devuelve un objeto Results por imagen. El campo principal de predicción es result.probs, que contiene el vector de probabilidades de clase y métodos auxiliares para las predicciones principales.
| Atributo | Tipo | Forma | Descripción |
|---|---|---|---|
result.probs | Probs | (C,) | Probabilidades de clase. |
result.probs.data | torch.float32 | (C,) | Probabilidad por clase. |
result.probs.top1 | int | () | ID de la clase principal. |
result.probs.top1conf | torch.float32 | () | Nivel de confianza principal. |
result.probs.top5 | list[int] | (<=5) | ID de las 5 clases principales. |
Para consultar los campos Results específicos de cada tarea, visita la sección resultados de predicción por tarea.
Exportar#
Exporta un modelo YOLO26n-cls a otro formato, como ONNX, CoreML, etc.
from ultralytics import YOLO
# Cargar un modelo
model = YOLO("yolo26n-cls.pt") # carga un modelo oficial
model = YOLO("path/to/best.pt") # cargar un modelo personalizado
# Exporta el modelo
model.export(format="onnx")Los formatos de exportación disponibles para YOLO26-cls se muestran en la tabla siguiente. Puedes exportar a cualquier formato mediante el argumento format, por ejemplo, format='onnx' o format='engine'. Puedes predecir o validar directamente con los modelos exportados, por ejemplo, yolo predict model=yolo26n-cls.onnx. Cuando termine la exportación, se mostrarán ejemplos de uso para tu modelo.
| Formato | Argumento format | Modelo | Metadatos | Argumentos |
|---|---|---|---|---|
| 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 usa de forma predeterminada salidas sin procesar para NMS externa. Establece nms=False para seleccionar una cabeza sin NMS disponible; los formatos no compatibles recurren a su ruta de salida nativa. Las entradas nms anteriores identifican los formatos que pueden integrar NMS con nms=True.
Consulta todos los detalles de export en la página Exportar.
Preguntas frecuentes#
Los modelos YOLO26, como
yolo26n-cls.pt, están diseñados para clasificar imágenes de forma eficiente. Asignan una única etiqueta de clase a toda la imagen, junto con una puntuación de confianza. Esto resulta especialmente útil en aplicaciones en las que basta con conocer la clase concreta de una imagen, sin identificar la ubicación ni la forma de los objetos que aparecen en ella.Puedes entrenar un modelo YOLO26 con comandos de Python o de la CLI. Por ejemplo, para entrenar un modelo
yolo26n-clscon el conjunto de datos MNIST160 durante 100 épocas y con un tamaño de imagen de 64:Ejemplofrom ultralytics import YOLO # Cargar un modelo model = YOLO("yolo26n-cls.pt") # Carga un modelo preentrenado (recomendado para el entrenamiento) # Entrenar el modelo results = model.train(data="mnist160", epochs=100, imgsz=64)Visita la página de Configuración para ver más opciones de configuración.
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:
Ejemplofrom ultralytics import YOLO # Cargar un modelo model = YOLO("path/to/best.pt") # carga el modelo entrenado # Valida el modelo metrics = model.val() # no se necesitan argumentos; usa el conjunto de datos y la configuración del entrenamiento metrics.top1 # top1 accuracy metrics.top5 # top5 accuracyPara obtener más información, visita la sección Validar.
Puedes exportar un modelo YOLO26 entrenado a varios formatos mediante comandos de Python o CLI. Por ejemplo, para exportar un modelo al formato ONNX:
Ejemplofrom ultralytics import YOLO # Cargar un modelo model = YOLO("yolo26n-cls.pt") # carga el modelo entrenado # Exporta el modelo a ONNX model.export(format="onnx")Para consultar las opciones de exportación detalladas, visita la página Exportar.