Ultralytics YOLO27 :
Get Started

Détection de boîtes englobantes orientées avec Ultralytics YOLO#

Ultralytics YOLO oriented bounding box detection of boats in aerial imagery

La détection d’objets orientés va au-delà de la détection d’objets standard en ajoutant un angle, ce qui permet de localiser les objets avec davantage de précision dans une image.

La sortie d’un détecteur d’objets orientés est un ensemble de boîtes englobantes pivotées qui encadrent 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 classiques alignées sur les axes peuvent inclure des zones d’arrière-plan superflues. Parmi les usages courants figurent la détection de navires et de véhicules à partir d’images satellites et de drones, l’analyse de bâtiments et d’infrastructures pour l’urbanisme, la surveillance des cultures ainsi que l’inspection de panneaux solaires ou d’éoliennes.



Regarder : Comment détecter et suivre des objets avec les boîtes englobantes orientées (OBB) d’Ultralytics YOLO26 | Suivi de navires 🚢
Conseil

Les modèles YOLO26 OBB utilisent le suffixe -obb, par exemple yolo26n-obb.pt, et sont préentraînés sur DOTAv1.

Détection de navires avec OBBDétection de véhicules avec OBB
Détection de navires avec OBBDétection de véhicules avec OBB

Modèles#

Les modèles YOLO26 OBB préentraînés sur le jeu de données DOTAv1 sont présentés ci-dessous.

Les modèles sont automatiquement téléchargés depuis la dernière version d’Ultralytics lors de leur première utilisation.

Modèletaille
(pixels)
mAPtest
50-95(e2e)
mAPtest
50(e2e)
Vitesse
CPU ONNX
(ms)
Vitesse
T4 TensorRT10
(ms)
paramètres
(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
  • Les valeurs mAPtest correspondent à une évaluation multiscalaire avec un seul modèle sur le jeu de données DOTAv1.
    Reproduis ces résultats avec yolo obb val data=DOTAv1.yaml device=0 split=test nms=False et soumets les résultats fusionnés à l’évaluation DOTA.
  • Vitesse moyenne sur les images de validation DOTAv1 avec ONNX sur CPU et TensorRT10 sur un GPU NVIDIA T4.
    Reproduis ces résultats avec yolo obb val data=DOTAv1.yaml batch=1 device=0|cpu nms=False
  • Les valeurs Params et FLOPs correspondent aux modèles fusionnés après la fusion Conv/BatchNorm et la suppression de la branche de détection inutilisée. Les checkpoints préentraînés conservent l’architecture d’entraînement complète et peuvent afficher des valeurs plus élevées.

Consulte l’aperçu de YOLO27 non encore publié pour découvrir les résultats préliminaires sur DOTAv1.

Entraînement#

Entraîne YOLO26n-obb sur le jeu de données DOTA8 pendant 100 époques, avec une taille d’image de 640. Pour obtenir la liste complète des arguments disponibles, consulte la page Configuration.

Remarque

Une 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 normalisées selon la convention du côté long : la largeur de la boîte w correspond au côté le plus long, l’angle est mesuré dans le sens horaire à partir de 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 normalisées selon cette convention ; une boîte prédite peut donc indiquer le côté court comme w ; consulte la page Sortie des résultats. La convention [0°, 90°) est la convention DOTA régularisée et n’est appliquée ni lors de l’entraînement ni lors de l’inférence.

Exemple
from ultralytics import YOLO

# Charger un modèle
model = YOLO("yolo26n-obb.yaml")  # créer un nouveau modèle à partir du fichier YAML
model = YOLO("yolo26n-obb.pt")  # charger un modèle préentraîné (recommandé pour l’entraînement)
model = YOLO("yolo26n-obb.yaml").load("yolo26n-obb.pt")  # créer à partir du fichier YAML et transférer les poids

# Entraîner le modèle
results = model.train(data="dota8.yaml", epochs=100, imgsz=640)


Regarder : Comment entraîner des modèles Ultralytics YOLO-OBB (boîtes englobantes orientées) sur le jeu de données DOTA avec la plateforme Ultralytics

Consulte la page Entraînement pour découvrir tous les détails du mode train. Tu peux aussi entraîner des modèles OBB avec l’entraînement cloud d’Ultralytics Platform.

Format du jeu de données#

Tu trouveras une description détaillée du format des jeux de données OBB dans le Guide des jeux de données. Le format OBB de YOLO représente les boîtes englobantes par les coordonnées de leurs quatre sommets, normalisées entre 0 et 1, selon la structure suivante. L’annotation avec Ultralytics Platform prend en charge les étiquettes OBB grâce à un outil dédié au dessin de boîtes englobantes orientées :

class_index x1 y1 x2 y2 x3 y3 x4 y4

En 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 la précision d’un modèle YOLO26n-obb entraîné sur le jeu de données DOTA8. Transmets explicitement data pour que la validation utilise le fichier YAML du jeu de données voulu.

Exemple
from ultralytics import YOLO

# Charger un modèle
model = YOLO("yolo26n-obb.pt")  # charger un modèle officiel
model = YOLO("path/to/best.pt")  # charger un modèle personnalisé

# Valider le modèle
metrics = model.val(data="dota8.yaml")  # valider sur le jeu de données DOTA8
metrics.box.map  # map50-95(B)
metrics.box.map50  # map50(B)
metrics.box.map75  # map75(B)
metrics.box.maps  # une liste contenant mAP50-95(B) pour chaque catégorie
metrics.box.image_metrics  # dictionnaire de métriques par image comprenant la précision, le rappel, le F1, les TP, FP et FN

Prédiction#

Utilise un modèle YOLO26n-obb entraîné pour effectuer des prédictions sur des images.

Exemple
from ultralytics import YOLO

# Charger un modèle
model = YOLO("yolo26n-obb.pt")  # charger un modèle officiel
model = YOLO("path/to/best.pt")  # charger un modèle personnalisé

# Effectuer des prédictions avec le modèle
results = model("https://ultralytics.com/images/boats.jpg")  # effectuer une prédiction sur une image

# Accéder aux résultats
for result in results:
    xywhr = result.obb.xywhr  # centre-x, centre-y, largeur, hauteur, angle (radians)
    xyxyxyxy = result.obb.xyxyxyxy  # format polygone à 4 points
    names = [result.names[cls.item()] for cls in result.obb.cls.int()]  # nom de classe de chaque boîte
    confs = result.obb.conf  # score de confiance de chaque boîte

Consulte les détails complets du mode predict sur la page Predict.

Passe save_crop=True pour enregistrer un recadrage aligné sur la rotation de chaque OBB à la taille de sa boîte, comme le fait également ObjectCropper.

Sortie des résultats#

La détection de boîtes englobantes orientées renvoie un objet Results par image. Le principal champ de prédiction est result.obb, qui contient les boîtes pivotées, les identifiants de classe et les scores de confiance de chaque objet détecté.

AttributTypeFormeDescription
result.obbOBB(N)Boîtes orientées.
result.obb.datatorch.float32(N,7/8)Boîtes pivotées brutes avec confiance/classe.
result.obb.xywhrtorch.float32(N,5)Boîtes pivotées xywhr.
result.obb.xyxyxyxytorch.float32(N,4,2)Quatre points d’angle.
result.obb.conftorch.float32(N,)Scores de confiance.

Les étiquettes sont normalisées selon la convention du côté long, contrairement aux prédictions ; result.obb.xywhr peut donc indiquer que w est inférieur à h, avec une rotation mesurée à partir du côté court. Les deux représentations décrivent le même rectangle ; result.obb.xyxyxyxy est donc correct dans les deux cas. Si le code en aval a besoin de la représentation selon le côté long, reconvertis les sommets en tenant compte du fait que la réécriture des paramètres de la boîte peut décaler cycliquement l’ordre des sommets :

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 propres à chaque tâche, consulte la section Résultats des prédictions par tâche.

Export#

Exporte un modèle YOLO26n-obb vers un autre format, comme ONNX, CoreML, etc.

Exemple
from ultralytics import YOLO

# Charger un modèle
model = YOLO("yolo26n-obb.pt")  # charger un modèle officiel
model = YOLO("path/to/best.pt")  # charger un modèle personnalisé

# Exporter le modèle
model.export(format="onnx")

Les formats d’export disponibles pour YOLO26-obb sont indiqués dans le tableau ci-dessous. Tu peux exporter vers n’importe quel format à l’aide de l’argument format, par exemple format='onnx' ou format='engine'. Tu peux effectuer des prédictions ou valider directement les modèles exportés, par exemple avec yolo predict model=yolo26n-obb.onnx. Une fois l’export terminé, des exemples d’utilisation de ton modèle s’affichent.

FormatArgument formatModèleMétadonnéesArguments
PyTorch-yolo26n-obb.pt✅-
TorchScripttorchscriptyolo26n-obb.torchscript✅imgsz, quantize, dynamic, nms, batch, device
ONNXonnxyolo26n-obb.onnx✅imgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device
OpenVINOopenvinoyolo26n-obb_openvino_model/✅imgsz, quantize, dynamic, nms, batch, data, fraction, device
TensorRTengineyolo26n-obb.engine✅imgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device
CoreMLcoremlyolo26n-obb.mlpackage✅imgsz, dynamic, quantize, nms, batch, device
Apple Core AIcoreaiyolo26n-obb.aimodel✅imgsz, batch, quantize
TF SavedModelsaved_modelyolo26n-obb_saved_model/✅imgsz, quantize, opset, nms, batch, data, fraction, device
TF GraphDefpbyolo26n-obb.pb❌imgsz, opset, batch, device
TF Edge TPUedgetpuyolo26n-obb_edgetpu.tflite✅imgsz, quantize, opset, data, fraction, device
LiteRTlitertyolo26n-obb.tflite✅imgsz, quantize, batch, data, fraction, device
PaddlePaddlepaddleyolo26n-obb_paddle_model/✅imgsz, batch, device
MNNmnnyolo26n-obb.mnn✅imgsz, 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.onnx✅imgsz, batch, name, quantize, simplify, opset, data, fraction, device
Hailohailoyolo26n-obb_hailo_model/✅imgsz, name, quantize, data, fraction, simplify, conf, iou, device
Huawei Ascendascendyolo26n-obb_ascend_model/✅imgsz, batch, name, quantize, opset, simplify, nms, device
AMD Xilinxxilinxyolo26n-obb_xilinx_model/✅imgsz, name, quantize, data, fraction, opset, simplify, device

nms=None produit par défaut des sorties brutes pour la NMS externe. Définis nms=False pour sélectionner une tête disponible sans NMS ; les formats non pris en charge utilisent leur voie de sortie native. Les entrées nms ci-dessus désignent les formats qui peuvent intégrer la NMS avec nms=True.

Consulte tous les détails de export sur la page Exportation.

FAQ#

  • Les boîtes englobantes orientées (OBB) intègrent un angle supplémentaire pour 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. C’est particulièrement utile pour les applications qui nécessitent un positionnement précis des objets, comme l’imagerie aérienne ou satellitaire (Guide des jeux de données).

  • 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 :

    Exemple
    from ultralytics import YOLO
    
    # Charger un modèle préentraîné
    model = YOLO("yolo26n-obb.pt")
    
    # Entraîner le modèle
    results = model.train(data="path/to/custom_dataset.yaml", epochs=100, imgsz=640)

    Pour découvrir d’autres arguments d’entraînement, consulte la section Configuration.

  • Les modèles YOLO26-OBB sont préentraînés sur des jeux de données comme 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.

  • Pour valider un modèle YOLO26n-obb, tu peux utiliser Python ou les commandes de la CLI, comme indiqué ci-dessous :

    Exemple
    from ultralytics import YOLO
    
    # Charger un modèle
    model = YOLO("yolo26n-obb.pt")
    
    # Valider le modèle
    metrics = model.val(data="dota8.yaml")

    Consulte la section Val pour obtenir tous les détails sur la validation.

  • L’export d’un modèle YOLO26-OBB au format ONNX est simple, que tu utilises Python ou la CLI :

    Exemple
    from ultralytics import YOLO
    
    # Charger un modèle
    model = YOLO("yolo26n-obb.pt")
    
    # Exporter le modèle
    model.export(format="onnx")

    Pour découvrir d’autres formats d’export et en savoir plus, consulte la page Export.

Commentaires