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 se encuentran los objetos de esa clase ni cuál es su forma exacta.
Watch: Explore Ultralytics YOLO Tasks: Image Classification using Ultralytics Platform
Los modelos Classify de YOLO26 utilizan el sufijo -cls, es decir, yolo26n-cls.pt, y están preentrenados con ImageNet.
Modelos#
Aquí se muestran los modelos Classify preentrenados de YOLO26. Los modelos Detect, Segment y Pose están preentrenados con el conjunto de datos COCO, los modelos Semantic están preentrenados con Cityscapes y los modelos Classify están preentrenados con el conjunto de datos ImageNet.
Los modelos se descargan automáticamente desde la versión más reciente de Ultralytics al utilizarlos 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 son las precisiones de los modelos en el conjunto de validación de ImageNet.
Reprodúcelo conyolo val classify data=path/to/ImageNet device=0 - Speed es la velocidad media calculada sobre imágenes de validación de ImageNet usando una instancia Amazon EC2 P4d.
Reprodúcelo conyolo val classify data=path/to/ImageNet batch=1 device=0|cpu - Los valores de Params y FLOPs corresponden al modelo fusionado después de
model.fuse(), que combina las capas Conv y BatchNorm. Los checkpoints preentrenados conservan la arquitectura completa de entrenamiento y pueden mostrar recuentos superiores.
Consulta la vista previa inédita de YOLO27 para ver la velocidad preliminar de clasificación y los tamaños de los modelos.
Entrenar#
Entrena YOLO26n-cls en el conjunto de datos MNIST160 durante 100 épocas con un tamaño de imagen de 64. Para consultar la lista completa de argumentos disponibles, visita la página de Configuración.
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)La clasificación de Ultralytics YOLO utiliza 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 involuntariamente regiones importantes de imágenes con relaciones de aspecto extremas, lo que puede provocar la pérdida de información visual crítica durante el entrenamiento.
Para conservar la imagen completa manteniendo sus proporciones, considera usar torchvision.transforms.Resize en lugar de transformaciones de recorte.
Puedes implementarlo personalizando tu pipeline de aumento mediante un ClassificationDataset y un 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 del conjunto de datos#
El formato de los conjuntos de datos de clasificación de YOLO se explica detalladamente en la Guía de conjuntos de datos. Los conjuntos de datos de clasificación también se pueden gestionar y etiquetar con las herramientas de anotación de Ultralytics Platform.
Val#
Valida la precisión del modelo YOLO26n-cls entrenado en el conjunto de datos MNIST160. No se necesitan argumentos, ya que model conserva su data de entrenamiento y sus argumentos como atributos del modelo.
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 accuracyComo 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 coherentes, implementando un ClassificationValidator personalizado al llamar al método val(). Consulta el ejemplo de código completo de la sección de entrenamiento para obtener información sobre la implementación.
Predecir#
Utiliza un modelo YOLO26n-cls entrenado para ejecutar predicciones sobre imágenes.
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 nameConsulta todos los detalles del modo predict en la página Predecir.
Salida de resultados#
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 probabilidades de clase y funciones 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 | () | Confianza principal. |
result.probs.top5 | list[int] | (<=5) | ID de las 5 clases principales. |
Para consultar los campos específicos de la tarea de Results en todas las tareas, visita la sección Resultados de predicción por tarea.
Exportar#
Exporta un modelo YOLO26n-cls a un formato diferente, como ONNX, CoreML, etc.
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 muestran en la tabla siguiente. Puedes exportar a cualquier formato utilizando el argumento format, es decir, format='onnx' o format='engine'. Puedes predecir o validar directamente con los modelos exportados, es decir, yolo predict model=yolo26n-cls.onnx. Una vez finalizada la exportación, se muestran 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 |
| TF SavedModel | saved_model | yolo26n-cls_saved_model/ | ✅ | imgsz, keras, 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 |
| 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 |
| LiteRT | litert | yolo26n-cls.tflite | ✅ | imgsz, quantize, batch, data, fraction, device |
| Hailo | hailo | yolo26n-cls_hailo_model/ | ✅ | imgsz, name, quantize, data, fraction, simplify, conf, iou |
| Huawei Ascend | ascend | yolo26n-cls_ascend_model/ | ✅ | imgsz, batch, name, quantize, opset, simplify, nms |
| Apple Core AI | coreai | yolo26n-cls.aimodel | ✅ | imgsz, batch, quantize |
nms=None se establece por defecto en salidas sin procesar para la NMS externa. Configura nms=False para seleccionar una cabeza libre de NMS disponible; los formatos no compatibles recurren a su ruta de salida nativa. Las entradas nms anteriores identifican los formatos que pueden incrustar la 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 una imagen completa junto con una puntuación de confianza. Esto resulta especialmente útil en 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 que contiene.Para entrenar un modelo YOLO26, puedes utilizar Python o comandos de CLI. Por ejemplo, para entrenar un modelo
yolo26n-clsen el conjunto de datos MNIST160 durante 100 épocas con un tamaño de imagen de 64:Ejemplofrom 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 consultar más opciones de configuración, visita la página de Configuración.
Los modelos de clasificación YOLO26 preentrenados se encuentran en la sección Modelos. Modelos como
yolo26n-cls.pt,yolo26s-cls.pt,yolo26m-cls.pt, etc., están preentrenados con el conjunto de datos ImageNet y se pueden descargar y utilizar fácilmente para diversas 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:
Ejemplofrom 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 consultar las opciones de exportación detalladas, visita la página Exportar.
Para validar la precisión de un modelo entrenado en un conjunto de datos como MNIST160, puedes utilizar los siguientes comandos de Python o CLI:
Ejemplofrom 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 accuracyPara obtener más información, visita la sección Validar.