Detecção de Caixas Delimitadoras Orientadas com Ultralytics YOLO#
A deteção de objetos orientados vai um passo além da deteção de objetos padrão ao introduzir um ângulo adicional para localizar objetos com maior precisão numa imagem.
O resultado de um detetor de objetos orientados é um conjunto de caixas delimitadoras rodadas que envolvem precisamente os objetos na imagem, juntamente com os rótulos de classe e as pontuações de confiança de 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 pelos eixos podem incluir fundo desnecessário.
Os modelos OBB YOLO26 usam o sufixo -obb, ou seja, yolo26n-obb.pt, e são pré-treinados em DOTAv1.
Watch: How to Detect & Track Objects with Ultralytics YOLO26 Oriented Bounding Boxes (OBB) | Ship Tracking 🚢
Exemplos visuais#
| Deteção de navios com OBB | Deteção de veículos com OBB |
|---|---|
![]() | ![]() |
Modelos#
Os modelos OBB YOLO26 pré-treinados são apresentados aqui; foram pré-treinados no conjunto de dados DOTAv1.
Os modelos são descarregados automaticamente da versão mais recente da Ultralytics na primeira utilização.
| Modelo | tamanho (píxeis) | mAPtest 50-95(e2e) | mAPtest 50(e2e) | Velocidade CPU ONNX (ms) | Velocidade 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 |
- Os valores de mAPtest correspondem a multiescala com um único modelo no conjunto de dados DOTAv1.
Reproduza comyolo val obb data=DOTAv1.yaml device=0 split=test nms=Falsee envie os resultados combinados para a avaliação DOTA. - A velocidade é calculada como a média nas imagens de validação do DOTAv1, utilizando uma instância Amazon EC2 P4d.
Reproduza comyolo val obb data=DOTAv1.yaml batch=1 device=0|cpu nms=False - Os valores de Params e FLOPs são para modelos fundidos após a dobragem de Conv/BatchNorm e a remoção da ramificação de deteção não utilizada. Os pontos de controlo pré-treinados retêm a arquitetura de treino completa e podem apresentar contagens mais elevadas.
Consulta a pré-visualização não lançada de YOLO27 para resultados preliminares do DOTAv1.
Treinar#
Treine YOLO26n-obb no conjunto de dados DOTA8 durante 100 épocas, com um tamanho de imagem de 640. Para obter a lista completa dos argumentos disponíveis, consulte a página de Configuração.
Uma OBB e a sua rotação de 180° são idênticas, pelo que a rotação é definida módulo 180° e a caixa não tem direção. Os rótulos de treino são canonicalizados para uma forma baseada no lado mais longo: a largura da caixa w é o lado mais longo, o ângulo é medido no sentido dos ponteiros do relógio a partir do eixo x positivo até à orientação da aresta w e é armazenado em radianos em [-π/4, 3π/4) ([-45°, 135°)). As previsões não são canonicalizadas, pelo que uma caixa prevista pode indicar a aresta mais curta como w; consulte Saída dos resultados. A forma [0°, 90°) é a convenção regularizada ao estilo DOTA e não é aplicada durante o treino ou a inferência.
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 dataset#
O formato de conjunto de dados OBB é explicado detalhadamente no Guia de conjuntos de dados. O formato YOLO OBB designa as caixas delimitadoras pelos seus quatro pontos de canto, com coordenadas normalizadas entre 0 e 1, seguindo esta estrutura. A anotação na plataforma Ultralytics suporta rótulos OBB com uma ferramenta dedicada para desenhar caixas delimitadoras orientadas:
class_index x1 y1 x2 y2 x3 y3 x4 y4Internamente, o YOLO processa as perdas e as saídas no formato xywhr, que representa o ponto central (xy), a largura, a altura e a rotação da caixa delimitadora.
Validação#
Valide a precisão do modelo YOLO26n-obb treinado no conjunto de dados DOTA8. Não são necessários argumentos, pois o model mantém o seu data de treino e os argumentos como atributos do 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 FNPrevisão#
Utilize um modelo YOLO26n-obb treinado para executar previsões em imagens.
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 os detalhes do modo predict na página Predict.
Saída dos resultados#
A deteção de caixas delimitadoras orientadas devolve um objeto Results por imagem. O campo de previsão principal é result.obb,
que contém caixas rodadas, IDs de classe e pontuações de confiança para cada objeto detetado.
| Atributo | Tipo | Forma | Descrição |
|---|---|---|---|
result.obb | OBB | (N) | Caixas orientadas. |
result.obb.data | torch.float32 | (N,7/8) | Caixas rodadas brutas com confiança/classe. |
result.obb.xywhr | torch.float32 | (N,5) | Caixas rodadas xywhr. |
result.obb.xyxyxyxy | torch.float32 | (N,4,2) | Pontos dos quatro cantos. |
result.obb.conf | torch.float32 | (N,) | Pontuações de confiança. |
Os rótulos são canonicalizados segundo a convenção do lado mais longo, mas as previsões não o são; por isso, result.obb.xywhr pode indicar w menor do que h, com a rotação medida a partir do lado mais curto. Ambas as formas descrevem o mesmo retângulo, pelo que result.obb.xyxyxyxy está correto em ambos os casos. Converta novamente os cantos quando o código a jusante precisar da forma baseada no lado mais longo, tendo em conta que a reescrita dos parâmetros da caixa pode alterar 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 consultar os campos Results específicos da tarefa em todas as tarefas, vê a secção Resultados de Previsão por Tarefa.
Exportação#
Exporte um modelo YOLO26n-obb para um formato diferente, 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")Os formatos de exportação YOLO26-obb disponíveis encontram-se na tabela abaixo. Pode exportar para qualquer formato utilizando o argumento format, ou seja, format='onnx' ou format='engine'. Pode executar previsões ou validar diretamente em modelos exportados, ou seja, yolo predict model=yolo26n-obb.onnx. Os exemplos de utilização do seu modelo são apresentados após a conclusão da exportação.
| Formato | Argumento format | Modelo | Metadados | 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 por padrão utiliza saídas brutas para NMS externo. Define nms=False para selecionar uma cabeça livre de NMS disponível; os formatos não suportados recorrem ao seu caminho de saída nativo. As entradas nms acima identificam formatos que podem incorporar NMS com nms=True.
Consulta todos os detalhes de export na página Export.
Aplicações no mundo real#
A deteção OBB com YOLO26 tem inúmeras aplicações práticas em vários setores:
- Gestão marítima e portuária: deteção de navios e embarcações em vários ângulos para gestão de frotas e monitorização.
- Planeamento urbano: análise de edifícios e infraestruturas a partir de imagens aéreas.
- Agricultura: monitorização de culturas e equipamentos agrícolas a partir de imagens captadas por drones.
- Setor energético: inspeção de painéis solares e turbinas eólicas em diferentes orientações.
- Transportes: acompanhamento de veículos em estradas e parques de estacionamento a partir de várias perspetivas.
Estas aplicações beneficiam da capacidade da OBB de se ajustar precisamente aos objetos em qualquer ângulo, proporcionando uma deteção mais precisa do que as caixas delimitadoras tradicionais.
Perguntas frequentes#
As caixas delimitadoras orientadas (OBB) incluem um ângulo adicional para melhorar a precisão da localização de objetos nas imagens. Ao contrário das caixas delimitadoras regulares, que são retângulos alinhados pelos eixos, as OBB podem rodar para se ajustarem melhor à orientação do objeto. Isto é particularmente útil em aplicações que exigem o posicionamento preciso 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 utilizando Python ou CLI:
Exemplofrom 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 obter mais argumentos de treino, consulte a secção Configuração.
Os modelos YOLO26-OBB são pré-treinados em conjuntos de dados como DOTAv1, mas pode utilizar qualquer conjunto de dados formatado para OBB. Pode encontrar informações detalhadas sobre os formatos de conjuntos de dados OBB no Guia de conjuntos de dados.
A exportação de um modelo YOLO26-OBB para o formato ONNX é simples, utilizando Python ou CLI:
Exemplofrom ultralytics import YOLO # Load a model model = YOLO("yolo26n-obb.pt") # Export the model model.export(format="onnx")Para obter mais formatos de exportação e detalhes, consulte a página Exportação.
Para validar um modelo YOLO26n-obb, pode utilizar comandos Python ou CLI, conforme mostrado abaixo:
Exemplofrom ultralytics import YOLO # Load a model model = YOLO("yolo26n-obb.pt") # Validate the model metrics = model.val(data="dota8.yaml")Consulte todos os detalhes da validação na secção Val.

