YOLO Vision 2026:

Caixas Delimitadoras Orientadas Object Detection#

Ultralytics YOLO oriented bounding box detection of boats in aerial imagery

A detecção orientada de objetos vai um passo além da detecção padrão de objetos ao introduzir um ângulo extra para localizar objetos com mais precisão em uma imagem.

A saída de um detector orientado de objetos é um conjunto de caixas delimitadoras rotacionadas que envolvem precisamente os objetos na imagem, juntamente com rótulos de classe e pontuações de confiança para cada caixa. As caixas delimitadoras orientadas são particularmente úteis quando os objetos aparecem em vários ângulos, como em imagens aéreas, onde as caixas delimitadoras tradicionais alinhadas aos eixos podem incluir fundo desnecessário.

Dica

Os modelos YOLO26 OBB usam o sufixo -obb, ou seja, yolo26n-obb.pt, e são pré-treinados no DOTAv1.



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

Exemplos Visuais#

Detecção de Navios usando OBBDetecção de Veículos usando OBB
Detecção de Navios usando OBBDetecção de Veículos usando OBB

Modelos#

Os modelos OBB pré-treinados do YOLO26 são mostrados aqui, sendo pré-treinados no conjunto de dados DOTAv1.

Os Modelos são baixados automaticamente do lançamento mais recente do Ultralytics no primeiro uso.

Modelotamanho
(pixels)
mAPtest
50-95(e2e)
mAPtest
50(e2e)
Velocidade
CPU ONNX
(ms)
Velocidade
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
  • mAPtest Os valores são para multiescala de modelo único no conjunto de dados DOTAv1.
    Reproduza com yolo val obb data=DOTAv1.yaml device=0 split=test e envie os resultados mesclados para a avaliação do DOTA.
  • Velocidade média sobre imagens de validação do DOTAv1 usando uma instância Amazon EC2 P4d.
    Reproduza com yolo val obb data=DOTAv1.yaml batch=1 device=0|cpu
  • Os valores de Params e FLOPs são para o modelo fundido após model.fuse(), que mescla as camadas Conv e BatchNorm e, para modelos end2end, remove o cabeçote de detecção auxiliar de um para muitos. Os checkpoints pré-treinados retêm a arquitetura de treinamento completa e podem apresentar contagens maiores.

Treinar#

Treina o YOLO26n-obb no conjunto de dados DOTA8 por 100 épocas com tamanho de imagem 640. Para ver uma lista completa de argumentos disponíveis, consulte a página de Configuração.

Nota

Uma OBB e sua rotação de 180° são idênticas, portanto a rotação é definida módulo 180° e a caixa não tem direção. Os rótulos de treinamento são canonizados para a forma de borda longa: a largura da caixa w é o lado mais longo, o ângulo é medido no sentido horário a partir do eixo x positivo até a orientação da borda w, e é armazenado em radianos em [-π/4, 3π/4) ([-45°, 135°)). As previsões não são canonizadas, portanto uma caixa prevista pode relatar a borda curta como w; veja Resultados da Saída. A forma [0°, 90°) é a convenção regularizada no estilo DOTA e não é aplicada no treinamento ou inferência.

Exemplo
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 do conjunto de dados#

O formato de conjunto de dados OBB pode ser encontrado em detalhes no Guia de Conjuntos de Dados. O formato YOLO OBB designa caixas delimitadoras pelos seus quatro pontos de canto com coordenadas normalizadas entre 0 e 1, seguindo esta estrutura. A anotação da Plataforma Ultralytics suporta rótulos OBB com uma ferramenta dedicada de desenho de caixa delimitadora orientada:

class_index x1 y1 x2 y2 x3 y3 x4 y4

Internamente, o YOLO processa perdas e saídas no formato xywhr, que representa o ponto central (xy), largura, altura e rotação da caixa delimitadora.

Validar#

Valida a precisão do modelo YOLO26n-obb treinado no conjunto de dados DOTA8. Nenhum argumento é necessário, pois o model retém seu data de treinamento e os argumentos como atributos do modelo.

Exemplo
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

Prever#

Use um modelo YOLO26n-obb treinado para executar previsões em imagens.

Exemplo
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 os detalhes do modo predict na página Prever.

Saída de Resultados#

A detecção de caixa delimitadora orientada retorna um objeto Results por imagem. O campo de previsão principal é result.obb, que contém caixas rotacionadas, IDs de classe e pontuações de confiança para cada objeto detectado.

AtributoTipoFormaDescrição
result.obbOBB(N)Caixas orientadas.
result.obb.datatorch.float32(N,7/8)Caixas rotacionadas brutas com confiança/classe.
result.obb.xywhrtorch.float32(N,5)caixas rotacionadas xywhr.
result.obb.xyxyxyxytorch.float32(N,4,2)Quatro pontos de canto.
result.obb.conftorch.float32(N,)Pontuações de confiança.

Os rótulos são canonizados para a convenção de borda longa, mas as previsões não, portanto result.obb.xywhr pode relatar w menor que h com a rotação medida a partir da borda curta. Ambas as formas descrevem o mesmo retângulo, então result.obb.xyxyxyxy está correto de qualquer maneira. Converta os cantos de volta quando o código de nível inferior precisar da forma de borda longa, tendo em mente que reescrever os parâmetros da caixa pode deslocar ciclicamente a ordem dos cantos:

from ultralytics.utils.ops import xyxyxyxy2xywhr

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

Para campos de Results específicos de tarefas em cada tarefa, consulta a seção Resultados de Previsão por Tarefa.

Exportar#

Exporte um modelo YOLO26n-obb para um formato diferente como ONNX, CoreML, etc.

Exemplo
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")

Os formatos de exportação disponíveis para o YOLO26-obb estão na tabela abaixo. Podes exportar para qualquer formato usando o argumento format, ou seja, format='onnx' ou format='engine'. Podes prever ou validar diretamente em modelos exportados, ou seja, yolo predict model=yolo26n-obb.onnx. Exemplos de uso são mostrados para o teu modelo após a conclusão da exportação.

FormatoArgumento formatModeloMetadadosArgumentos
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

Consulta todos os detalhes de export na página Exportar.

Aplicações do Mundo Real#

A detecção OBB com YOLO26 possui inúmeras aplicações práticas em diversos setores:

  • Gestão Marítima e Portuária: Detecção de navios e embarcações em vários ângulos para gestão de frotas e monitorização.
  • Planejamento Urbano: Analisando edifícios e infraestrutura a partir de imagens aéreas.
  • Agricultura: Monitorando culturas e equipamentos agrícolas a partir de imagens de drones.
  • Setor de Energia: Inspecionando painéis solares e turbinas eólicas em diferentes orientações.
  • Transporte: Rastreando veículos em estradas e estacionamentos a partir de várias perspectivas.

Essas aplicações se beneficiam da capacidade da OBB de se ajustar precisamente aos objetos em qualquer ângulo, proporcionando uma detecção mais precisa do que as caixas delimitadoras tradicionais.

FAQ#

  • As Caixas Delimitadoras Orientadas (OBB) incluem um ângulo adicional para melhorar a precisão da localização de objetos em imagens. Ao contrário das caixas delimitadoras normais, que são retângulos alinhados aos eixos, as OBBs podem rodar para se adaptarem melhor à orientação do objeto. Isto é particularmente útil para aplicações que exigem colocação precisa de objetos, como imagens aéreas ou de satélite (Guia de Conjuntos de Dados).

  • Para treinar um modelo YOLO26n-obb com um conjunto de dados personalizado, siga o exemplo abaixo usando Python ou CLI:

    Exemplo
    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 mais argumentos de treino, consulta a secção de Configuração.

  • Os modelos YOLO26-OBB são pré-treinados em conjuntos de dados como DOTAv1, mas podes usar qualquer conjunto de dados formatado para OBB. Informações detalhadas sobre os formatos de conjuntos de dados OBB podem ser encontradas no Guia de Conjuntos de Dados.

  • Exportar um modelo YOLO26-OBB para o formato ONNX é simples usando Python ou CLI:

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

    Para mais formatos de exportação e detalhes, consulta a página de Exportação.

  • Para validar um modelo YOLO26n-obb, você pode usar comandos Python ou CLI conforme mostrado abaixo:

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

    Vê os detalhes completos de validação na secção Val.

Comentários