Détection d'objets par boîte englobante orientée avec Ultralytics YOLO#
La détection d'objets orientés va plus loin que la détection d'objets standard en introduisant un angle supplémentaire pour localiser les objets plus précisément dans une image.
La sortie d'un détecteur d'objets orientés est un ensemble de boîtes englobantes pivotées qui entourent précisément les objets de l'image, accompagné des étiquettes de classe et des scores de confiance de chaque boîte. Les boîtes englobantes orientées sont particulièrement utiles lorsque les objets apparaissent sous différents angles, par exemple dans les images aériennes, où les boîtes englobantes traditionnelles alignées sur les axes peuvent inclure un arrière-plan inutile.
Les modèles OBB YOLO26 utilisent le suffixe -obb, c'est-à-dire yolo26n-obb.pt, et sont préentraînés sur DOTAv1.
Watch: How to Detect & Track Objects with Ultralytics YOLO26 Oriented Bounding Boxes (OBB) | Ship Tracking 🚢
Exemples visuels#
| Détection de navires avec OBB | Détection de véhicules avec OBB |
|---|---|
![]() | ![]() |
Modèles#
Les modèles OBB YOLO26 préentraînés sont présentés ici. Ils sont préentraînés sur le jeu de données DOTAv1.
Les modèles sont automatiquement téléchargés depuis la dernière version d’Ultralytics lors de la première utilisation.
| Modèle | taille (pixels) | mAPtest 50-95(e2e) | mAPtest 50(e2e) | Vitesse CPU ONNX (ms) | Vitesse T4 TensorRT10 (ms) | paramètres (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 |
- Les valeurs mAPtest correspondent à une inférence multisc échelle avec un seul modèle sur le jeu de données DOTAv1.
Reproduis-les avecyolo val obb data=DOTAv1.yaml device=0 split=test nms=Falseet soumets les résultats fusionnés à l'évaluation DOTA. - La vitesse est calculée comme la moyenne sur les images de validation de DOTAv1 à l'aide d'une instance Amazon EC2 P4d.
Reproduis-la avecyolo val obb data=DOTAv1.yaml batch=1 device=0|cpu nms=False - Params and FLOPs values are for fused models after Conv/BatchNorm folding and removal of the unused detection branch. Pretrained checkpoints retain the full training architecture and may show higher counts.
Consulte l' aperçu non publié de YOLO27 pour les résultats préliminaires de DOTAv1.
Entraîner#
Entraîne YOLO26n-obb sur le jeu de données DOTA8 pendant 100 époques, avec une taille d'image de 640. Pour consulter la liste complète des arguments disponibles, voir la page Configuration.
Un OBB et sa rotation de 180° sont identiques. La rotation est donc définie modulo 180° et la boîte n'a pas de direction. Les étiquettes d'entraînement sont canonisées selon une convention basée sur le côté le plus long : la largeur de la boîte w est le côté le plus long, l'angle est mesuré dans le sens horaire depuis l'axe x positif jusqu'à l'orientation du côté w, et il est stocké en radians dans [-π/4, 3π/4) ([-45°, 135°)). Les prédictions ne sont pas canonisées : une boîte prédite peut donc indiquer le côté court comme w ; voir Sortie des résultats. La forme [0°, 90°) correspond à la convention DOTA régularisée et n'est pas appliquée pendant l'entraînement ni l'inférence.
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
Format du dataset#
Le format des jeux de données OBB est décrit en détail dans le Guide des jeux de données. Le format YOLO OBB définit les boîtes englobantes par leurs quatre points d'angle, avec des coordonnées normalisées entre 0 et 1, selon la structure suivante. Les annotations de la plateforme Ultralytics prennent en charge les étiquettes OBB avec un outil dédié de dessin de boîtes englobantes orientées :
class_index x1 y1 x2 y2 x3 y3 x4 y4En interne, YOLO traite les pertes et les sorties au format xywhr, qui représente le centre de la boîte englobante (xy), sa largeur, sa hauteur et sa rotation.
Validation#
Valide l'exactitude d'un modèle YOLO26n-obb entraîné sur le jeu de données DOTA8. Aucun argument n'est nécessaire, car model conserve ses data et ses arguments d'entraînement comme attributs du modèle.
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 FNPrédiction#
Utilise un modèle YOLO26n-obb entraîné pour effectuer des prédictions sur des images.
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
Consulte les détails complets du mode predict dans la page Prédiction.
Sortie des résultats#
La détection par boîtes englobantes orientées renvoie un objet Results par image. Le champ de prédiction principal est result.obb,
qui contient les boîtes pivotées, les identifiants de classe et les scores de confiance pour chaque objet détecté.
| Attribut | Type | Forme | Description |
|---|---|---|---|
result.obb | OBB | (N) | Boîtes orientées. |
result.obb.data | torch.float32 | (N,7/8) | Boîtes pivotées brutes avec confiance/classe. |
result.obb.xywhr | torch.float32 | (N,5) | Boîtes pivotées xywhr. |
result.obb.xyxyxyxy | torch.float32 | (N,4,2) | Quatre points d’angle. |
result.obb.conf | torch.float32 | (N,) | Scores de confiance. |
Les étiquettes sont canonisées selon la convention du côté le plus long, contrairement aux prédictions. Ainsi, result.obb.xywhr peut indiquer une valeur de w inférieure à h, avec une rotation mesurée depuis le côté court. Les deux formes décrivent le même rectangle, donc result.obb.xyxyxyxy est correct dans les deux cas. Reconvertis les angles en points d'angle lorsque le code en aval nécessite la forme basée sur le côté le plus long, en gardant à l'esprit que la réécriture des paramètres de la boîte peut décaler cycliquement l'ordre des points d'angle :
from ultralytics.utils.ops import xyxyxyxy2xywhr
xywhr = xyxyxyxy2xywhr(result.obb.xyxyxyxy) # w >= h, rotation in [-pi/4, 3pi/4)Pour connaître les champs Results spécifiques à chaque tâche, consulte la section Résultats des prédictions par tâche.
Exportation#
Exporte un modèle YOLO26n-obb vers un autre format, comme 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")Les formats d'export YOLO26-obb disponibles sont présentés dans le tableau ci-dessous. Tu peux exporter vers n'importe quel format à l'aide de l'argument format, c'est-à-dire format='onnx' ou format='engine'. Tu peux effectuer directement des prédictions ou valider des modèles exportés, c'est-à-dire yolo predict model=yolo26n-obb.onnx. Des exemples d'utilisation de ton modèle sont affichés une fois l'export terminé.
| Format | Argument format | Modèle | Métadonnées | Arguments |
|---|---|---|---|---|
| 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 utilise par défaut des sorties brutes pour NMS externe. Définis nms=False pour sélectionner une tête sans NMS disponible ; les formats non pris en charge reviennent à leur chemin de sortie natif. Les entrées nms ci-dessus identifient les formats capables d'intégrer NMS avec nms=True.
Consulte les détails complets du mode export dans la page Exportation.
Applications concrètes#
La détection OBB avec YOLO26 a de nombreuses applications pratiques dans différents secteurs :
- Gestion maritime et portuaire : détection de navires et de bateaux sous différents angles pour la gestion de flotte et la surveillance.
- Planification urbaine : analyse des bâtiments et des infrastructures à partir d'images aériennes.
- Agriculture : surveillance des cultures et du matériel agricole à partir de séquences capturées par drone.
- Secteur de l'énergie : inspection de panneaux solaires et d'éoliennes selon différentes orientations.
- Transport : suivi des véhicules sur les routes et dans les parkings depuis différentes perspectives.
Ces applications bénéficient de la capacité des OBB à s'ajuster précisément aux objets sous n'importe quel angle, offrant une détection plus précise que les boîtes englobantes traditionnelles.
FAQ#
Les boîtes englobantes orientées (OBB) incluent un angle supplémentaire afin d'améliorer la précision de la localisation des objets dans les images. Contrairement aux boîtes englobantes classiques, qui sont des rectangles alignés sur les axes, les OBB peuvent pivoter pour mieux s'adapter à l'orientation de l'objet. Cela est particulièrement utile pour les applications nécessitant un positionnement précis des objets, comme les images aériennes ou satellitaires (Guide des jeux de données).
Les modèles YOLO26-OBB sont préentraînés sur des jeux de données tels que DOTAv1, mais tu peux utiliser n'importe quel jeu de données au format OBB. Tu trouveras des informations détaillées sur les formats de jeux de données OBB dans le Guide des jeux de données.
L'exportation d'un modèle YOLO26-OBB au format ONNX est simple, que tu utilises Python ou la CLI :
Exemplefrom ultralytics import YOLO # Load a model model = YOLO("yolo26n-obb.pt") # Export the model model.export(format="onnx")Pour plus de formats d'export et de détails, consulte la page Exportation.
Pour valider un modèle YOLO26n-obb, tu peux utiliser Python ou les commandes de la CLI, comme indiqué ci-dessous :
Exemplefrom ultralytics import YOLO # Load a model model = YOLO("yolo26n-obb.pt") # Validate the model metrics = model.val(data="dota8.yaml")Consulte tous les détails de la validation dans la section Val.


Pour entraîner un modèle YOLO26n-obb avec un jeu de données personnalisé, suis l'exemple ci-dessous avec Python ou la CLI :
Pour plus d'arguments d'entraînement, consulte la section Configuration.