Ultralytics YOLO27:

Detección de cuadros delimitadores orientados con YOLO de Ultralytics#

Ultralytics YOLO oriented bounding box detection of boats in aerial imagery

La detección de objetos orientada va un paso más allá que la detección de objetos estándar al introducir un ángulo adicional para localizar los 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 de la imagen, junto con las etiquetas de clase y las puntuaciones de confianza de cada caja. Las cajas delimitadoras orientadas son especialmente útiles cuando los objetos aparecen en distintos ángulos, como en las imágenes aéreas, donde las cajas delimitadoras tradicionales alineadas con los ejes pueden incluir fondo innecesario.

Consejo

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



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

Ejemplos visuales#

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

Modelos#

Aquí se muestran los modelos OBB preentrenados de YOLO26, que se han preentrenado con el conjunto de datos DOTAv1.

Los modelos se descargan automáticamente de la versión más reciente de Ultralytics durante el primer uso.

Modelotamaño
(píxeles)
mAPtest
50-95(e2e)
mAPtest
50(e2e)
Velocidad
CPU ONNX
(ms)
Velocidad
T4 TensorRT10
(ms)
parámetros
(M)
FLOPs
(B)
YOLO26n-obb102452.478.997.7 ± 0.92.8 ± 0.02.414.8
YOLO26s-obb102454.880.9218.0 ± 1.44.9 ± 0.19.856.7
YOLO26m-obb102455.381.0579.2 ± 3.810.2 ± 0.321.2184.9
YOLO26l-obb102456.281.6735.6 ± 3.113.0 ± 0.225.6232.4
YOLO26x-obb102456.781.71485.7 ± 11.530.5 ± 0.957.6520.1
  • Los valores de mAPtest corresponden a multiescala con un único modelo en el conjunto de datos DOTAv1.
    Reprodúcelo mediante yolo val obb data=DOTAv1.yaml device=0 split=test nms=False y envía los resultados combinados a la evaluación de DOTA.
  • La velocidad se ha calculado como la media de las imágenes de validación de DOTAv1 utilizando una instancia Amazon EC2 P4d.
    Reprodúcela mediante yolo val obb data=DOTAv1.yaml batch=1 device=0|cpu nms=False
  • Los valores de Params y FLOPs corresponden a modelos fusionados después del plegado de Conv/BatchNorm y la eliminación de la rama de detección no utilizada. Los puntos de control preentrenados conservan la arquitectura de entrenamiento completa y pueden mostrar recuentos más altos.

Consulta la vista previa inédita de YOLO27 para ver los resultados preliminares de DOTAv1.

Entrenar#

Entrena YOLO26n-obb en el conjunto de datos DOTA8 durante 100 épocas con un tamaño de imagen de 640. Consulta la página de Configuración para ver la lista completa de argumentos disponibles.

Nota

Un OBB y su rotación de 180° son idénticos, por lo que la rotación se define módulo 180° y la caja no tiene dirección. Las etiquetas de entrenamiento se canonizan según la forma del lado largo: el ancho de la caja w es el lado más largo, el ángulo se mide en el sentido de las agujas del reloj desde el eje x positivo hasta la orientación del lado w, y se almacena en radianes en [-π/4, 3π/4) ([-45°, 135°)). Las predicciones no se canonizan, por lo que una caja predicha puede indicar el lado corto como w; consulta Salida de resultados. La forma [0°, 90°) es la convención regularizada de estilo DOTA y no se aplica durante el entrenamiento ni 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 de los conjuntos de datos OBB se explica detalladamente en la Guía de conjuntos de datos. El formato OBB de YOLO designa las cajas delimitadoras mediante sus cuatro puntos de esquina, con coordenadas normalizadas entre 0 y 1, siguiendo esta estructura. La anotación de Ultralytics Platform admite etiquetas OBB con una herramienta específica para dibujar cajas delimitadoras orientadas:

class_index x1 y1 x2 y2 x3 y3 x4 y4

Internamente, YOLO procesa las pérdidas y las salidas en el formato xywhr, que representa el punto central (xy), la anchura, la altura y la rotación de la caja delimitadora.

Val#

Valida la precisión del modelo YOLO26n-obb entrenado en el conjunto de datos DOTA8. No se necesitan argumentos, ya que 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")  # validate on the DOTA8 dataset
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 Predecir.

Salida de resultados#

La detección de cajas delimitadoras orientadas devuelve un objeto Results por imagen. El campo de predicción principal es result.obb, que contiene las cajas rotadas, los ID de clase y las puntuaciones de confianza de cada objeto detectado.

AtributoTipoFormaDescripción
result.obbOBB(N)Cajas orientadas.
result.obb.datatorch.float32(N,7/8)Cajas giradas sin procesar, con confianza y clase.
result.obb.xywhrtorch.float32(N,5)Cajas giradas xywhr.
result.obb.xyxyxyxytorch.float32(N,4,2)Puntos de las cuatro esquinas.
result.obb.conftorch.float32(N,)Puntuaciones de confianza.

Las etiquetas se canonizan según la convención del lado largo, pero las predicciones no, por lo que result.obb.xywhr puede indicar w menor que h, con la rotación medida desde el lado corto. Ambas formas describen el mismo rectángulo, por lo que result.obb.xyxyxyxy es correcto en ambos casos. Convierte de nuevo las esquinas cuando el código posterior necesite la forma del lado largo, teniendo en cuenta que reescribir los parámetros de la caja 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 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-obb a otro formato, 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 disponibles para YOLO26-obb se muestran en la tabla siguiente. Puedes exportar a cualquier formato mediante 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-obb.onnx. Cuando finalice la exportación, se mostrarán ejemplos de uso para tu modelo.

FormatoArgumento 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
Apple Core AIcoreaiyolo26n-obb.aimodelimgsz, 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.

Aplicaciones en el mundo real#

La detección OBB con YOLO26 tiene numerosas aplicaciones prácticas en diversos sectores:

  • Gestión marítima y portuaria: detección de barcos y embarcaciones en distintos ángulos para la gestión de flotas y la supervisión.
  • Planificación urbana: análisis de edificios e infraestructuras a partir de imágenes aéreas.
  • Agricultura: supervisión de cultivos y equipos agrícolas a partir de imágenes captadas por drones.
  • Sector energético: inspección de paneles solares y turbinas eólicas en distintas orientaciones.
  • Transporte: seguimiento de vehículos en carreteras y aparcamientos desde diversas perspectivas.

Estas aplicaciones se benefician de la capacidad de OBB para ajustarse con precisión a los objetos en cualquier ángulo, lo que proporciona una detección más exacta que las cajas delimitadoras tradicionales.

Preguntas frecuentes#

  • Las cajas delimitadoras orientadas (OBB) incluyen un ángulo adicional para mejorar la precisión de la localización de objetos en las imágenes. A diferencia de las cajas delimitadoras normales, que son rectángulos alineados con los ejes, las OBB pueden rotar para ajustarse mejor a la orientación del objeto. Esto resulta especialmente útil en aplicaciones que requieren una colocación precisa de los objetos, como las imágenes aéreas o de satélite (Guía de conjuntos de datos).

  • Para entrenar un modelo YOLO26n-obb con un conjunto de datos personalizado, sigue el ejemplo siguiente utilizando 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 consultar más argumentos de entrenamiento, revisa la sección Configuración.

  • Los modelos YOLO26-OBB están preentrenados con conjuntos de datos como DOTAv1, pero puedes utilizar cualquier conjunto de datos con formato OBB. Encontrarás información detallada sobre los formatos de conjuntos de datos OBB en la Guía de conjuntos de datos.

  • 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 consultar más formatos de exportación y detalles, visita la página de Exportación.

  • Para validar un modelo YOLO26n-obb, puedes utilizar Python o los comandos de CLI que se muestran 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 la validación en la sección Val.

Comentarios