YOLO Vision 2026:

Detección de Object Detection con cuadros delimitadores orientados#

La detección de objetos orientados va un paso más allá de la detección de objetos estándar al introducir un ángulo adicional para localizar objetos con mayor precisión en una imagen.

La salida de un detector de objetos orientado es un conjunto de cajas delimitadoras rotadas que encierran con precisión los objetos en la imagen, junto con etiquetas de clase y puntuaciones de confianza para cada caja. Las cajas delimitadoras orientadas son particularmente útiles cuando los objetos aparecen en varios ángulos, como en imágenes aéreas, donde las cajas delimitadoras tradicionales alineadas con los ejes pueden incluir fondo innecesario.

Consejo

Los modelos YOLO26 OBB utilizan el sufijo -obb, es decir, yolo26n-obb.pt, y están preentrenados en DOTAv1.



Watch: How to Detect & Track Objects with Ultralytics YOLO26 Oriented Bounding Boxes (OBB) | Ship Tracking 🚢

Muestras visuales#

Detección de barcos mediante OBBDetección de vehículos mediante OBB
Detección de barcos usando OBBDetección de vehículos usando OBB

Modelos#

Aquí se muestran los modelos OBB preentrenados de YOLO26, los cuales están preentrenados en el conjunto de datos DOTAv1.

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

Modelotamaño
(píxeles)
mAPtest
50-95(e2e)
mAPtest
50(e2e)
Velocidad
CPU ONNX
(ms)
Velocidad
T4 TensorRT10
(ms)
params
(M)
FLOPs
(B)
YOLO26n-obb102452.478.997.7 ± 0.92.8 ± 0.02.514.0
YOLO26s-obb102454.880.9218.0 ± 1.44.9 ± 0.19.855.1
YOLO26m-obb102455.381.0579.2 ± 3.810.2 ± 0.321.2183.3
YOLO26l-obb102456.281.6735.6 ± 3.113.0 ± 0.225.6230.0
YOLO26x-obb102456.781.71485.7 ± 11.530.5 ± 0.957.6516.5
  • Los valores de mAPtest corresponden a un modelo único multiescala en el conjunto de datos DOTAv1.
    Reproduce con yolo val obb data=DOTAv1.yaml device=0 split=test y envía los resultados combinados a DOTA evaluation.
  • Velocidad promediada sobre imágenes de validación de DOTAv1 utilizando una instancia Amazon EC2 P4d.
    Reproduce mediante yolo val obb data=DOTAv1.yaml batch=1 device=0|cpu
  • Los valores de Params y FLOPs corresponden al modelo fusionado después de model.fuse(), el cual combina las capas Conv y BatchNorm y, para los modelos end2end, elimina la cabeza de detección auxiliar de uno a muchos. Los puntos de control preentrenados conservan toda la arquitectura de entrenamiento y pueden mostrar recuentos mayores.

Entrenar#

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

Nota

Un OBB y su rotación de 180° son idénticos, por lo que la rotación se define módulo 180° y el cuadro no tiene dirección. Las etiquetas de entrenamiento se canonizan a un formato de borde largo: el ancho del cuadro w es el lado más largo, el ángulo se mide en sentido horario desde el eje x positivo hasta la orientación del borde w, y se almacena en radianes en [-π/4, 3π/4) ([-45°, 135°)). Las predicciones no se canonizan, por lo que un cuadro predicho puede reportar el borde corto como w; consulta Results Output. La forma [0°, 90°) es la convención regularizada de estilo DOTA y no se aplica en el entrenamiento ni en la inferencia.

Ejemplo
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-obb.yaml")  # build a new model from YAML
model = YOLO("yolo26n-obb.pt")  # load a pretrained model (recommended for training)
model = YOLO("yolo26n-obb.yaml").load("yolo26n-obb.pt")  # build from YAML and transfer weights

# Train the model
results = model.train(data="dota8.yaml", epochs=100, imgsz=640)


Watch: How to Train Ultralytics YOLO-OBB (Oriented Bounding Boxes) Models on DOTA Dataset using Ultralytics Platform

Formato del conjunto de datos#

El formato del conjunto de datos OBB se puede consultar en detalle en la Dataset Guide. El formato YOLO OBB designa los cuadros delimitadores mediante sus cuatro puntos de esquina con coordenadas normalizadas entre 0 y 1, siguiendo esta estructura. La Ultralytics Platform annotation admite etiquetas OBB con una herramienta dedicada de dibujo de cuadros delimitadores orientados:

class_index x1 y1 x2 y2 x3 y3 x4 y4

Internamente, YOLO procesa las pérdidas y las salidas en el formato xywhr, el cual representa el punto central (xy), el ancho, la altura y la rotación del bounding box.

Validar#

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

Ejemplo
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-obb.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom model

# Validate the model
metrics = model.val(data="dota8.yaml")  # no arguments needed, dataset and settings remembered
metrics.box.map  # map50-95(B)
metrics.box.map50  # map50(B)
metrics.box.map75  # map75(B)
metrics.box.maps  # a list containing mAP50-95(B) for each category
metrics.box.image_metrics  # per-image metrics dictionary with precision, recall, F1, TP, FP, and FN

Predecir#

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

Ejemplo
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-obb.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/boats.jpg")  # predict on an image

# Access the results
for result in results:
    xywhr = result.obb.xywhr  # center-x, center-y, width, height, angle (radians)
    xyxyxyxy = result.obb.xyxyxyxy  # polygon format with 4-points
    names = [result.names[cls.item()] for cls in result.obb.cls.int()]  # class name of each box
    confs = result.obb.conf  # confidence score of each box


Watch: How to Detect and Track Storage Tanks using Ultralytics YOLO-OBB | Oriented Bounding Boxes | DOTA

Consulta todos los detalles del modo predict en la página Predict.

Resultado de la salida#

La detección de cuadros delimitadores orientados devuelve un objeto Results por imagen. El campo de predicción principal es result.obb, que contiene cuadros rotados, IDs de clase y puntuaciones de confianza para cada objeto detectado.

AtributoTipoFormaDescripción
result.obbOBB(N)Cajas orientadas.
result.obb.datatorch.float32(N,7/8)Cajas rotadas crudas con confianza/clase.
result.obb.xywhrtorch.float32(N,5)Cuadros rotados de xywhr.
result.obb.xyxyxyxytorch.float32(N,4,2)Cuatro puntos de esquina.
result.obb.conftorch.float32(N,)Puntuaciones de confianza.

Las etiquetas se canonizan a la convención de borde largo, pero las predicciones no, por lo que result.obb.xywhr puede reportar que w es más pequeño que h con la medida de rotación desde el borde corto. Ambas formas describen el mismo rectángulo, por lo que result.obb.xyxyxyxy es correcto en ambos casos. Convierte las esquinas de nuevo cuando el código posterior necesite la forma de borde largo, teniendo en cuenta que reescribir los parámetros del cuadro puede desplazar cíclicamente el orden de las esquinas:

from ultralytics.utils.ops import xyxyxyxy2xywhr

xywhr = xyxyxyxy2xywhr(result.obb.xyxyxyxy)  # w >= h, rotation in [-pi/4, 3pi/4)

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-obb a un formato diferente como ONNX, CoreML, etc.

Ejemplo
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-obb.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 de YOLO26-obb disponibles se encuentran 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 en los modelos exportados, es decir, yolo predict model=yolo26n-obb.onnx. Se muestran ejemplos de uso para tu modelo una vez que se complete la exportación.

FormatoArgumento de formatModeloMetadatosArgumentos
PyTorch-yolo26n-obb.pt-
TorchScripttorchscriptyolo26n-obb.torchscriptimgsz, quantize, dynamic, nms, batch, device
ONNXonnxyolo26n-obb.onnximgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device
OpenVINOopenvinoyolo26n-obb_openvino_model/imgsz, quantize, dynamic, nms, batch, data, fraction, device
TensorRTengineyolo26n-obb.engineimgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device
CoreMLcoremlyolo26n-obb.mlpackageimgsz, dynamic, quantize, nms, batch, device
TF SavedModelsaved_modelyolo26n-obb_saved_model/imgsz, keras, quantize, opset, nms, batch, data, fraction, device
TF GraphDefpbyolo26n-obb.pbimgsz, opset, batch, device
TF Edge TPUedgetpuyolo26n-obb_edgetpu.tfliteimgsz, quantize, opset, data, fraction, device
PaddlePaddlepaddleyolo26n-obb_paddle_model/imgsz, batch, device
MNNmnnyolo26n-obb.mnnimgsz, batch, dynamic, quantize, simplify, opset, nms, device
NCNNncnnyolo26n-obb_ncnn_model/imgsz, quantize, batch, device
IMX500imxyolo26n-obb_imx_model/imgsz, quantize, data, fraction, nms, device
RKNNrknnyolo26n-obb_rknn_model/imgsz, batch, name, quantize, simplify, opset, data, fraction, device
ExecuTorchexecutorchyolo26n-obb_executorch_model/imgsz, batch, device
Axeleraaxelerayolo26n-obb_axelera_model/imgsz, batch, quantize, data, fraction, device
DEEPXdeepxyolo26n-obb_deepx_model/imgsz, quantize, simplify, opset, data, optimize, device
Qualcomm QNNqnnyolo26n-obb_qnn.onnximgsz, batch, name, quantize, simplify, opset, data, fraction, device
LiteRTlitertyolo26n-obb.tfliteimgsz, quantize, batch, data, fraction, device
Hailohailoyolo26n-obb_hailo_model/imgsz, name, quantize, data, fraction, simplify, conf, iou
Huawei Ascendascendyolo26n-obb_ascend_model/imgsz, batch, name, quantize, opset, simplify, nms

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

Aplicaciones en el mundo real#

La detección OBB con YOLO26 tiene numerosas aplicaciones prácticas en diversas industrias:

  • Gestión marítima y portuaria: Detección de barcos y embarcaciones en varios ángulos para la fleet management y el seguimiento.
  • Urbanismo: Análisis de edificios e infraestructura a partir de imágenes aéreas.
  • Agricultura: Monitorización de cultivos y equipos agrícolas a partir de grabaciones de drones.
  • Sector energético: Inspección de paneles solares y turbinas eólicas en diferentes orientaciones.
  • Transporte: Seguimiento de vehículos en carreteras y aparcamientos desde varias perspectivas.

Estas aplicaciones se benefician de la capacidad de OBB para ajustar con precisión los objetos en cualquier ángulo, proporcionando una detección más precisa que las cajas delimitadoras tradicionales.

FAQ#

  • Los cuadros delimitadores orientados (OBB) incluyen un ángulo adicional para mejorar la precisión de la localización de objetos en las imágenes. A diferencia de los cuadros delimitadores normales, que son rectángulos alineados con los ejes, los OBB pueden girar para ajustarse mejor a la orientación del objeto. Esto es especialmente útil para aplicaciones que requieren una colocación precisa de objetos, como imágenes aéreas o de satélite (Dataset Guide).

  • Para entrenar un modelo YOLO26n-obb con un conjunto de datos personalizado, sigue el ejemplo a continuación usando Python o CLI:

    Ejemplo
    from ultralytics import YOLO
    
    # Load a pretrained model
    model = YOLO("yolo26n-obb.pt")
    
    # Train the model
    results = model.train(data="path/to/custom_dataset.yaml", epochs=100, imgsz=640)

    Para obtener más argumentos de entrenamiento, consulta la sección Configuration.

  • Los modelos YOLO26-OBB están preentrenados en conjuntos de datos como DOTAv1, pero puedes usar cualquier conjunto de datos formateado para OBB. Se puede encontrar información detallada sobre los formatos de conjuntos de datos OBB en la Dataset Guide.

  • Exportar un modelo YOLO26-OBB al formato ONNX es sencillo utilizando Python o CLI:

    Ejemplo
    from ultralytics import YOLO
    
    # Load a model
    model = YOLO("yolo26n-obb.pt")
    
    # Export the model
    model.export(format="onnx")

    Para obtener más formatos de exportación y detalles, consulta la página Export.

  • Para validar un modelo YOLO26n-obb, puedes usar Python o comandos de CLI como se muestra a continuación:

    Ejemplo
    from ultralytics import YOLO
    
    # Load a model
    model = YOLO("yolo26n-obb.pt")
    
    # Validate the model
    metrics = model.val(data="dota8.yaml")

    Consulta todos los detalles de validación en la sección Val.

Comentarios