Ultralytics YOLO27:

Ultralytics YOLOによる指向性バウンディングボックス検出#

Ultralytics YOLO oriented bounding box detection of boats in aerial imagery

回転物体検出は、画像内の物体をより正確に位置特定するために追加の角度を導入することで、標準的な物体検出をさらに発展させたものです。

回転物体検出器の出力は、画像内の物体を正確に囲む回転バウンディングボックスのセットであり、各ボックスのクラスラベルと信頼度スコアも含まれます。回転バウンディングボックスは、物体がさまざまな角度で現れる場合に特に有用です。たとえば航空画像では、従来の軸整列バウンディングボックスに不要な背景が含まれることがあります。

ヒント

YOLO26 OBBモデルでは-obbサフィックスを使用します。つまり、yolo26n-obb.ptです。また、DOTAv1で事前学習されています。



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

ビジュアルサンプル#

OBBを使用した船舶検出OBBを使用した車両検出
OBBを使用した船舶検出OBBを使用した車両検出

モデル#

ここではYOLO26の事前学習済みOBBモデルを示します。これらはDOTAv1データセットで事前学習されています。

モデルは、初回使用時に最新のUltralytics リリースから自動的にダウンロードされます。

モデルサイズ
(ピクセル)
mAPtest
50-95(e2e)
mAPtest
50(e2e)
速度
CPU ONNX
(ms)
速度
T4 TensorRT10
(ms)
パラメーター数
(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
  • **mAPtest**の値は、DOTAv1データセットにおける単一モデルのマルチスケール評価の結果です。
    yolo val obb data=DOTAv1.yaml device=0 split=test nms=Falseで再現し、統合した結果をDOTA評価に提出してください。
  • 速度は、Amazon EC2 P4dインスタンスを使用し、DOTAv1の検証画像で平均した値です。
    yolo val obb data=DOTAv1.yaml batch=1 device=0|cpu nms=Falseで再現してください。
  • Params および FLOPs の値は、Conv/BatchNorm の畳み込みとバッチ正規化の統合(折りたたみ)および未使用の検出ブランチの削除を行った後の、融合済みモデルの値です。事前学習済みチェックポイントは完全な学習アーキテクチャを維持しているため、より高い数値を示す場合があります。

予備的なDOTAv1の結果については、未公開のYOLO27プレビューをご覧ください。

トレーニング#

DOTA8データセットで、画像サイズ640、100エポックのYOLO26n-obbを学習します。使用可能な引数の完全な一覧については、Configurationページを参照してください。

注記

OBBとその180°回転は同一であるため、回転は180°を法として定義され、ボックスに方向はありません。学習ラベルは長辺形式に正規化されます。ボックスの幅wが長い辺となり、角度は正のx軸からw辺の向きまで時計回りに測定され、[-π/4, 3π/4)[-45°, 135°))にラジアン単位で保存されます。予測は正規化されないため、予測ボックスでは短辺がwとして報告される場合があります。Results Outputを参照してください。[0°, 90°)形式は正規化されたDOTA形式の規約であり、学習時や推論時には適用されません。

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

データセット形式#

OBBデータセット形式の詳細はDataset Guideで確認できます。YOLO OBB形式では、座標を0~1に正規化した4つの頂点座標でバウンディングボックスを指定し、次の構造に従います。Ultralytics Platformのアノテーションでは、専用の回転バウンディングボックス描画ツールを使用してOBBラベルに対応できます。

class_index x1 y1 x2 y2 x3 y3 x4 y4

内部的に、YOLOはxywhr形式で損失と出力を処理します。この形式は、バウンディングボックスの中心点(xy)、幅、高さ、回転を表します。

検証#

DOTA8データセットで、学習済みYOLO26n-obbモデルの精度を検証します。modelには学習時のdataと引数がモデル属性として保持されているため、引数は必要ありません。

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 FN

推論#

学習済みのYOLO26n-obbモデルを使用して、画像に対する予測を実行します。

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

Predictページで、predict モードの詳細をすべて確認できます。

結果の出力#

回転バウンディングボックス検出では、画像ごとに1つのResultsオブジェクトが返されます。主な予測フィールドはresult.obbで、検出された各物体の回転ボックス、クラスID、信頼度スコアが含まれます。

属性形状説明
result.obbOBB(N)回転ボックス。
result.obb.datatorch.float32(N,7/8)信頼度とクラスを含む生の回転ボックス。
result.obb.xywhrtorch.float32(N,5)xywhrの回転ボックス。
result.obb.xyxyxyxytorch.float32(N,4,2)4つの頂点座標。
result.obb.conftorch.float32(N,)信頼度スコア。

ラベルは長辺形式に正規化されますが、予測は正規化されないため、result.obb.xywhrではwhより小さく、短辺から測定した回転として報告される場合があります。どちらの形式も同じ長方形を表すため、いずれの場合もresult.obb.xyxyxyxyは正しい値です。後続のコードで長辺形式が必要な場合は、頂点を変換して戻してください。ボックスパラメーターを書き換えると、頂点の順序が循環的にずれる場合があることに注意してください。

from ultralytics.utils.ops import xyxyxyxy2xywhr

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

すべてのタスクにおけるタスク固有の Results フィールドについては、タスク別の予測結果セクションを参照してください。

エクスポート#

YOLO26n-obbモデルをONNX、CoreMLなどの別の形式にエクスポートします。

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

使用可能なYOLO26-obbのエクスポート形式を以下の表に示します。format引数を使用して、format='onnx'またはformat='engine'など、任意の形式にエクスポートできます。エクスポート済みモデルに対して、yolo predict model=yolo26n-obb.onnxなどのコマンドで直接予測または検証を実行できます。エクスポート完了後のモデルについて、使用例が表示されます。

形式format 引数モデルメタデータ引数
PyTorch-yolo26n-obb.pt-
TorchScripttorchscriptyolo26n-obb.torchscriptimgszquantizedynamicnmsbatchdevice
ONNXonnxyolo26n-obb.onnximgszquantizedynamicsimplifyopsetnmsbatchdatafractiondevice
OpenVINOopenvinoyolo26n-obb_openvino_model/imgszquantizedynamicnmsbatchdatafractiondevice
TensorRTengineyolo26n-obb.engineimgszquantizedynamicsimplifyopsetworkspacenmsbatchdatafractiondevice
CoreMLcoremlyolo26n-obb.mlpackageimgszdynamicquantizenmsbatchdevice
TF SavedModelsaved_modelyolo26n-obb_saved_model/imgszkerasquantizeopsetnmsbatchdatafractiondevice
TF GraphDefpbyolo26n-obb.pbimgszopsetbatchdevice
TF Edge TPUedgetpuyolo26n-obb_edgetpu.tfliteimgszquantizeopsetdatafractiondevice
PaddlePaddlepaddleyolo26n-obb_paddle_model/imgszbatchdevice
MNNmnnyolo26n-obb.mnnimgszbatchdynamicquantizesimplifyopsetnmsdevice
NCNNncnnyolo26n-obb_ncnn_model/imgszquantizebatchdevice
IMX500imxyolo26n-obb_imx_model/imgszquantizedatafractionnmsdevice
RKNNrknnyolo26n-obb_rknn_model/imgszbatchnamequantizesimplifyopsetdatafractiondevice
ExecuTorchexecutorchyolo26n-obb_executorch_model/imgszbatchdevice
Axeleraaxelerayolo26n-obb_axelera_model/imgszbatchquantizedatafractiondevice
DEEPXdeepxyolo26n-obb_deepx_model/imgszquantizesimplifyopsetdataoptimizedevice
Qualcomm QNNqnnyolo26n-obb_qnn.onnximgszbatchnamequantizesimplifyopsetdatafractiondevice
LiteRTlitertyolo26n-obb.tfliteimgszquantizebatchdatafractiondevice
Hailohailoyolo26n-obb_hailo_model/imgsznamequantizedatafractionsimplifyconfiou
Huawei Ascendascendyolo26n-obb_ascend_model/imgszbatchnamequantizeopsetsimplifynms
Apple Core AIcoreaiyolo26n-obb.aimodelimgszbatchquantize

nms=None は、外部 NMS の場合は生出力をデフォルトとします。nms=False を設定して利用可能な NMS なしのヘッドを選択します。サポートされていないフォーマットは、ネイティブ出力パスにフォールバックします。上記の nms エントリは、nms=True を使用して NMS を埋め込むことができるフォーマットを特定します。

Exportページで、export の詳細をすべて確認できます。

実世界での用途#

YOLO26によるOBB検出は、さまざまな業界で数多くの実用的な用途があります。

  • 海事・港湾管理:さまざまな角度の船舶を検出し、船隊管理や監視に活用します。
  • 都市計画:航空画像から建物やインフラを分析します。
  • 農業:ドローン映像から作物や農業設備を監視します。
  • エネルギー分野:さまざまな向きの太陽光パネルや風力タービンを検査します。
  • 輸送:さまざまな視点から道路上や駐車場の車両を追跡します。

これらの用途では、OBBがあらゆる角度の物体に正確に適合できるため、従来のバウンディングボックスより高精度な検出が可能になります。

FAQ#

  • 回転バウンディングボックス(OBB)は、画像内での物体位置の特定精度を高めるために、追加の角度を含みます。軸整列した長方形である通常のバウンディングボックスとは異なり、OBBは物体の向きにより適合するよう回転できます。これは、航空画像や衛星画像など、物体の正確な配置が求められる用途で特に有用です(Dataset Guide)。

  • カスタムデータセットを使用してYOLO26n-obbモデルをトレーニングするには、PythonまたはCLIを使用して以下の例に従ってください。

    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)

    その他のトレーニング引数については、設定セクションをご覧ください。

  • YOLO26-OBBモデルはDOTAv1などのデータセットで事前トレーニングされていますが、OBB用にフォーマットされた任意のデータセットを使用できます。OBBデータセット形式の詳細については、データセットガイドをご覧ください。

  • YOLO26-OBBモデルのONNX形式へのエクスポートは、PythonまたはCLIを使用して簡単に実行できます。

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

    その他のエクスポート形式と詳細については、エクスポートページをご覧ください。

  • YOLO26n-obbモデルを検証するには、以下に示すPythonまたはCLIコマンドを使用できます。

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

    検証の詳細については、Valセクションをご覧ください。

コメント