Detección de cuadros delimitadores orientados con YOLO de Ultralytics#
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.
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 OBB | Detecció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.
| Modelo | tamaño (píxeles) | mAPtest 50-95(e2e) | mAPtest 50(e2e) | Velocidad CPU ONNX (ms) | Velocidad T4 TensorRT10 (ms) | parámetros (M) | FLOPs (B) |
|---|---|---|---|---|---|---|---|
| YOLO26n-obb | 1024 | 52.4 | 78.9 | 97.7 ± 0.9 | 2.8 ± 0.0 | 2.4 | 14.8 |
| YOLO26s-obb | 1024 | 54.8 | 80.9 | 218.0 ± 1.4 | 4.9 ± 0.1 | 9.8 | 56.7 |
| YOLO26m-obb | 1024 | 55.3 | 81.0 | 579.2 ± 3.8 | 10.2 ± 0.3 | 21.2 | 184.9 |
| YOLO26l-obb | 1024 | 56.2 | 81.6 | 735.6 ± 3.1 | 13.0 ± 0.2 | 25.6 | 232.4 |
| YOLO26x-obb | 1024 | 56.7 | 81.7 | 1485.7 ± 11.5 | 30.5 ± 0.9 | 57.6 | 520.1 |
- Los valores de mAPtest corresponden a multiescala con un único modelo en el conjunto de datos DOTAv1.
Reprodúcelo medianteyolo val obb data=DOTAv1.yaml device=0 split=test nms=Falsey 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 medianteyolo 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.
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.
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 y4Internamente, 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.
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 FNPredecir#
Utiliza un modelo YOLO26n-obb entrenado para ejecutar predicciones en imágenes.
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 boxWatch: 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.
| Atributo | Tipo | Forma | Descripción |
|---|---|---|---|
result.obb | OBB | (N) | Cajas orientadas. |
result.obb.data | torch.float32 | (N,7/8) | Cajas giradas sin procesar, con confianza y clase. |
result.obb.xywhr | torch.float32 | (N,5) | Cajas giradas xywhr. |
result.obb.xyxyxyxy | torch.float32 | (N,4,2) | Puntos de las cuatro esquinas. |
result.obb.conf | torch.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.
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.
| Formato | Argumento format | Modelo | Metadatos | Argumentos |
|---|---|---|---|---|
| PyTorch | - | yolo26n-obb.pt | ✅ | - |
| TorchScript | torchscript | yolo26n-obb.torchscript | ✅ | imgsz, quantize, dynamic, nms, batch, device |
| ONNX | onnx | yolo26n-obb.onnx | ✅ | imgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device |
| OpenVINO | openvino | yolo26n-obb_openvino_model/ | ✅ | imgsz, quantize, dynamic, nms, batch, data, fraction, device |
| TensorRT | engine | yolo26n-obb.engine | ✅ | imgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device |
| CoreML | coreml | yolo26n-obb.mlpackage | ✅ | imgsz, dynamic, quantize, nms, batch, device |
| TF SavedModel | saved_model | yolo26n-obb_saved_model/ | ✅ | imgsz, keras, quantize, opset, nms, batch, data, fraction, device |
| TF GraphDef | pb | yolo26n-obb.pb | ❌ | imgsz, opset, batch, device |
| TF Edge TPU | edgetpu | yolo26n-obb_edgetpu.tflite | ✅ | imgsz, quantize, opset, data, fraction, device |
| PaddlePaddle | paddle | yolo26n-obb_paddle_model/ | ✅ | imgsz, batch, device |
| MNN | mnn | yolo26n-obb.mnn | ✅ | imgsz, batch, dynamic, quantize, simplify, opset, nms, device |
| NCNN | ncnn | yolo26n-obb_ncnn_model/ | ✅ | imgsz, quantize, batch, device |
| IMX500 | imx | yolo26n-obb_imx_model/ | ✅ | imgsz, quantize, data, fraction, nms, device |
| RKNN | rknn | yolo26n-obb_rknn_model/ | ✅ | imgsz, batch, name, quantize, simplify, opset, data, fraction, device |
| ExecuTorch | executorch | yolo26n-obb_executorch_model/ | ✅ | imgsz, batch, device |
| Axelera | axelera | yolo26n-obb_axelera_model/ | ✅ | imgsz, batch, quantize, data, fraction, device |
| DEEPX | deepx | yolo26n-obb_deepx_model/ | ✅ | imgsz, quantize, simplify, opset, data, optimize, device |
| Qualcomm QNN | qnn | yolo26n-obb_qnn.onnx | ✅ | imgsz, batch, name, quantize, simplify, opset, data, fraction, device |
| LiteRT | litert | yolo26n-obb.tflite | ✅ | imgsz, quantize, batch, data, fraction, device |
| Hailo | hailo | yolo26n-obb_hailo_model/ | ✅ | imgsz, name, quantize, data, fraction, simplify, conf, iou |
| Huawei Ascend | ascend | yolo26n-obb_ascend_model/ | ✅ | imgsz, batch, name, quantize, opset, simplify, nms |
| Apple Core AI | coreai | yolo26n-obb.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.
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:
Ejemplofrom 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:
Ejemplofrom 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:
Ejemplofrom 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.

