Ultralytics YOLOによる回転バウンディングボックス検出#
回転オブジェクト検出では、角度を追加することで標準的な物体検出をさらに発展させ、画像内のオブジェクトの位置をより正確に特定します。
回転オブジェクト検出器の出力は、画像内のオブジェクトを正確に囲む回転バウンディングボックスのセットで、各ボックスのクラスラベルと信頼度スコアも含まれます。回転バウンディングボックスは、航空画像のようにオブジェクトがさまざまな角度で現れる場合に特に有用です。このような画像では、従来の軸に沿ったバウンディングボックスに不要な背景が含まれることがあります。代表的な用途として、衛星やドローン画像からの船舶・車両の検出、都市計画向けの建物・インフラ分析、作物のモニタリング、太陽光パネルや風力タービンの点検があります。
視聴: Ultralytics YOLO26 の回転バウンディングボックス(OBB)で物体を検出・追跡する方法 | 船舶追跡 🚢
YOLO26 OBBモデルでは、-obbサフィックス(例:yolo26n-obb.pt)が使用され、DOTAv1で事前学習されています。
| OBBを使用した船舶検出 | OBBを使用した車両検出 |
|---|---|
![]() | ![]() |
モデル#
DOTAv1データセットで事前学習されたYOLO26 OBBモデルを以下に示します。
モデルは、初回使用時に最新のUltralytics リリースから自動的にダウンロードされます。
| モデル | サイズ (ピクセル) | mAPテスト 50-95(e2e) | mAPテスト 50(e2e) | 速度 CPU ONNX (ms) | 速度 T4 TensorRT10 (ms) | パラメーター (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 |
- mAPtestの値は、DOTAv1データセットで、単一モデル・マルチスケールを使用した場合のものです。
yolo obb val data=DOTAv1.yaml device=0 split=test nms=Falseで再現し、統合した結果をDOTA評価に提出してください。 - 速度は、DOTAv1の検証画像をONNX(CPU)およびTensorRT10(NVIDIA T4 GPU)で処理した場合の平均値です。
yolo obb val data=DOTAv1.yaml batch=1 device=0|cpu nms=Falseで再現できます - ParamsとFLOPsの値は、Conv/BatchNormのfoldingと未使用の検出ブランチの削除を適用した後の、融合済みモデルの値です。事前学習済みチェックポイントにはトレーニング時のアーキテクチャ全体が保持されているため、より大きな値が表示される場合があります。
予備的なDOTAv1の結果については、未リリースのYOLO27プレビューをご覧ください。
学習#
DOTA8データセットでYOLO26n-obbを、画像サイズ640、100エポックで学習します。使用可能な引数の一覧は、設定ページをご覧ください。
OBBとその180°回転は同一であるため、回転は180°を法として定義され、ボックスに方向性はありません。学習ラベルは長辺形式に正規化されます。ボックスの幅wは長辺であり、角度は正のx軸からw辺の向きまで時計回りに測定され、ラジアン単位で[-π/4, 3π/4)([-45°, 135°))に格納されます。予測は正規化されないため、予測ボックスでは短辺がwとして報告される場合があります。詳細については、結果の出力をご覧ください。[0°, 90°)形式は、正規化されたDOTAスタイルの規約であり、学習時にも推論時にも適用されません。
from ultralytics import YOLO
# モデルを読み込む
model = YOLO("yolo26n-obb.yaml") # YAMLから新しいモデルを構築します
model = YOLO("yolo26n-obb.pt") # 事前トレーニング済みモデルを読み込みます(トレーニングにはこちらを推奨します)
model = YOLO("yolo26n-obb.yaml").load("yolo26n-obb.pt") # YAMLからモデルを構築し、重みを転送します
# モデルをトレーニングする
results = model.train(data="dota8.yaml", epochs=100, imgsz=640)視聴: Ultralytics Platform を使って DOTA データセットで Ultralytics YOLO-OBB(回転バウンディングボックス)モデルをトレーニングする方法
trainモードの詳細については、学習ページをご覧ください。OBBモデルは、Ultralytics Platformのクラウドトレーニングでも学習できます。
データセットのフォーマット#
OBBデータセット形式の詳細については、データセットガイドをご覧ください。YOLO OBB形式では、座標を0から1の範囲に正規化した4つの頂点でバウンディングボックスを指定し、次の構造に従います。Ultralytics Platformのアノテーションは、専用の回転バウンディングボックス描画ツールを使ったOBBラベル付けに対応しています。
class_index x1 y1 x2 y2 x3 y3 x4 y4内部では、YOLOは損失と出力をxywhr形式で処理します。この形式は、バウンディングボックスの中心点(xy)、幅、高さ、回転を表します。
検証#
DOTA8データセットで、学習済みのYOLO26n-obbモデルの精度を検証します。検証で意図したデータセットYAMLを使用するよう、dataを明示的に指定してください。
from ultralytics import YOLO
# モデルを読み込む
model = YOLO("yolo26n-obb.pt") # 公式モデルを読み込みます
model = YOLO("path/to/best.pt") # カスタムモデルを読み込む
# モデルを検証します
metrics = model.val(data="dota8.yaml") # DOTA8データセットで検証します
metrics.box.map # map50-95(B)
metrics.box.map50 # map50(B)
metrics.box.map75 # map75(B)
metrics.box.maps # 各カテゴリのmAP50-95(B)を含むリスト
metrics.box.image_metrics # 画像ごとのprecision、recall、F1、TP、FP、FNを含む指標辞書推論#
学習済みのYOLO26n-obbモデルを使用して、画像に対する予測を実行します。
from ultralytics import YOLO
# モデルを読み込む
model = YOLO("yolo26n-obb.pt") # 公式モデルを読み込みます
model = YOLO("path/to/best.pt") # カスタムモデルを読み込む
# モデルで予測します
results = model("https://ultralytics.com/images/boats.jpg") # 画像に対して予測します
# 結果にアクセスします
for result in results:
xywhr = result.obb.xywhr # 中心x、中心y、幅、高さ、角度(ラジアン)
xyxyxyxy = result.obb.xyxyxyxy # 4点のポリゴン形式
names = [result.names[cls.item()] for cls in result.obb.cls.int()] # 各ボックスのクラス名
confs = result.obb.conf # 各ボックスの信頼度スコアPredictページでpredictモードの詳細をご確認ください。
save_crop=True を渡すと、ObjectCropper と同様に、各OBBをボックスサイズで回転位置合わせしたクロップとして保存します。
結果の出力#
回転バウンディングボックス検出では、画像ごとに1つのResultsオブジェクトが返されます。主な予測フィールドはresult.obbで、検出された各オブジェクトの回転ボックス、クラスID、信頼度スコアが含まれます。
| 属性 | 種類 | 形状 | 説明 |
|---|---|---|---|
result.obb | OBB | (N) | 方向付きボックスです。 |
result.obb.data | torch.float32 | (N,7/8) | 信頼度/クラスを含む、回転ボックスの生データです。 |
result.obb.xywhr | torch.float32 | (N,5) | xywhrの回転ボックスです。 |
result.obb.xyxyxyxy | torch.float32 | (N,4,2) | 4つのコーナー点です。 |
result.obb.conf | torch.float32 | (N,) | 信頼度スコアです。 |
ラベルは長辺規約に正規化されますが、予測は正規化されません。そのため、result.obb.xywhrではwがhより小さく、短辺から測定した回転として報告される場合があります。どちらの形式も同じ長方形を表すため、どちらの場合もresult.obb.xyxyxyxyは正しい値です。後続のコードで長辺形式が必要な場合は、頂点の順序が循環的にシフトする可能性があることに注意しながら、頂点を元に戻してください。
from ultralytics.utils.ops import xyxyxyxy2xywhr
xywhr = xyxyxyxy2xywhr(result.obb.xyxyxyxy) # w >= h、回転角は[-pi/4, 3pi/4)ですすべてのタスクにおける、タスク固有のResultsフィールドについては、タスク別の予測結果セクションをご覧ください。
エクスポート#
YOLO26n-obbモデルをONNXやCoreMLなどの別の形式にエクスポートします。
from ultralytics import YOLO
# モデルを読み込む
model = YOLO("yolo26n-obb.pt") # 公式モデルを読み込みます
model = YOLO("path/to/best.pt") # カスタムモデルを読み込む
# モデルをエクスポートする
model.export(format="onnx")利用可能なYOLO26-obbのエクスポート形式を以下の表に示します。format引数を使用して、任意の形式にエクスポートできます。たとえば、format='onnx'またはformat='engine'を指定します。エクスポートしたモデルで直接推論または検証できます。たとえば、yolo predict model=yolo26n-obb.onnxを指定します。エクスポートが完了すると、モデルの使用例が表示されます。
| 形式 | format引数 | モデル | メタデータ | 引数 |
|---|---|---|---|---|
| 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 |
| Apple Core AI | coreai | yolo26n-obb.aimodel | ✅ | imgsz, batch, quantize |
| TF SavedModel | saved_model | yolo26n-obb_saved_model/ | ✅ | imgsz, 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 |
| LiteRT | litert | yolo26n-obb.tflite | ✅ | imgsz, quantize, batch, 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 |
| Hailo | hailo | yolo26n-obb_hailo_model/ | ✅ | imgsz, name, quantize, data, fraction, simplify, conf, iou, device |
| Huawei Ascend | ascend | yolo26n-obb_ascend_model/ | ✅ | imgsz, batch, name, quantize, opset, simplify, nms, device |
| AMD Xilinx | xilinx | yolo26n-obb_xilinx_model/ | ✅ | imgsz, name, quantize, data, fraction, opset, simplify, device |
nms=None は外部NMS向けにraw出力をデフォルトで使用します。利用可能なNMSフリーヘッドを選択するには、nms=Falseを設定してください。未対応のフォーマットでは、ネイティブの出力パスにフォールバックします。上記のnmsの項目は、nms=Trueを使用してNMSを埋め込めるフォーマットを示しています。
詳細なexport情報については、Exportページをご覧ください。
よくある質問#
Oriented Bounding Boxes(OBB)は、画像内の物体の位置特定精度を高めるための角度情報を追加で含みます。軸に沿った長方形である通常のバウンディングボックスとは異なり、OBBは物体の向きにより適合するよう回転できます。これは、航空画像や衛星画像など、物体の位置を正確に特定する必要がある用途で特に役立ちます(データセットガイド)。
カスタムデータセットを使用してYOLO26n-obbモデルをトレーニングするには、以下の例に従ってPythonまたはCLIを使用してください。
例from ultralytics import YOLO # 事前トレーニング済みモデルを読み込む model = YOLO("yolo26n-obb.pt") # モデルをトレーニングする results = model.train(data="path/to/custom_dataset.yaml", epochs=100, imgsz=640)トレーニング引数の詳細については、設定セクションをご確認ください。
以下に示すように、PythonまたはCLIコマンドを使用してYOLO26n-obbモデルを検証できます。
例from ultralytics import YOLO # モデルを読み込む model = YOLO("yolo26n-obb.pt") # モデルを検証します metrics = model.val(data="dota8.yaml")検証の詳細については、Valセクションをご覧ください。
PythonまたはCLIを使用すると、YOLO26-OBBモデルを簡単にONNX形式にエクスポートできます。
例from ultralytics import YOLO # モデルを読み込む model = YOLO("yolo26n-obb.pt") # モデルをエクスポートする model.export(format="onnx")その他のエクスポート形式と詳細については、Exportページをご覧ください。

