Ultralytics YOLO27:

YOLO26 と SAHI を使用したスライス推論#

Open SAHI for Sliced Inference In Colab

このガイドでは、YOLO26 と SAHI (Slicing Aided Hyper Inference) の使用方法について説明します。SAHI とは何か、大規模アプリケーションにおいてスライス推論がなぜ不可欠なのか、そして object detection のパフォーマンスを向上させるためにこれらの機能を YOLO26 と統合する方法について詳しく解説します。

SAHI の概要#

SAHI(スライス支援ハイパー推論)は、大規模かつ高解像度の画像に対して物体検出アルゴリズムを最適化するために設計された革新的なライブラリです。中核となる機能は、画像を扱いやすいサイズのスライスに分割し、各スライスで物体検出を実行してから、結果を結合することです。SAHI は YOLO シリーズを含むさまざまな物体検出モデルに対応しており、計算リソースを最適に活用しながら柔軟に利用できます。



Watch: How to use SAHI with Ultralytics YOLO26 to Detect Small Objects | Slicing Aided Hyper Inference 🚀

SAHI の主な機能#

  • シームレスな統合: SAHI は YOLO モデルと容易に統合できるため、大幅なコード変更なしでスライスと検出を開始できます。
  • リソース効率: 大きな画像を小さな部分に分割することで、SAHI はメモリ使用量を最適化し、限られたリソースのハードウェアでも高品質な検出を実行できるようにします。
  • 高い 精度: SAHI は、結合処理中に重複する検出ボックスをスマートなアルゴリズムで統合することで、検出精度を維持します。

スライス推論とは#

スライス推論とは、大きな画像または高解像度画像を小さなセグメント(スライス)に分割し、それぞれのスライスで物体検出を実行した後、スライスを再構成して元の画像上の物体位置を復元する手法です。この技術は、計算リソースが限られている場合や、非常に高解像度の画像を扱うことでメモリの問題が発生する可能性がある場合に特に有用です。

スライス推論のメリット#

  • 計算負荷の軽減: 小さな画像スライスは処理が速く、消費メモリも少ないため、低性能のハードウェアでもよりスムーズに動作します。

  • 検出品質の維持: 各スライスは独立して処理されるため、対象物を十分に捉えられる大きさのスライスであれば、物体検出の品質は低下しません。

  • スケーラビリティの向上: この手法により、さまざまなサイズや解像度の画像に対して物体検出を容易にスケールできるため、衛星画像から医療診断まで幅広いアプリケーションに適しています。

YOLO26 without SAHIYOLO26 with SAHI
YOLO26 without SAHIYOLO26 with SAHI

インストールと準備#

インストール#

開始するには、SAHI と Ultralytics の最新バージョンをインストールします。

pip install -U ultralytics sahi

モジュールのインポートとリソースのダウンロード#

テスト画像をダウンロードする方法は次のとおりです。

from sahi.utils.file import download_from_url

# Download test images
download_from_url(
    "https://raw.githubusercontent.com/obss/sahi/main/demo/demo_data/small-vehicles1.jpeg",
    "demo_data/small-vehicles1.jpeg",
)
download_from_url(
    "https://raw.githubusercontent.com/obss/sahi/main/demo/demo_data/terrain2.png",
    "demo_data/terrain2.png",
)

YOLO26 による標準推論#

モデルのインスタンス化#

次のように YOLO26 モデルをインスタンス化して物体検出を実行できます。

from sahi import AutoDetectionModel

detection_model = AutoDetectionModel.from_pretrained(
    model_type="ultralytics",
    model_path="yolo26n.pt",
    confidence_threshold=0.3,
    device="cpu",  # or 'cuda:0'
)

標準予測の実行#

画像パスを使用して標準推論を実行します。

from sahi.predict import get_prediction

result = get_prediction("demo_data/small-vehicles1.jpeg", detection_model)

result.export_visuals(export_dir="demo_data/", hide_conf=True)

結果の可視化#

予測されたバウンディングボックスとマスクをエクスポートして可視化します。

from PIL import Image

# Open the predicted image
processed_image = Image.open("demo_data/prediction_visual.png")

# Display the predicted image
processed_image.show()

YOLO26 によるスライス推論#

スライスのサイズと重複率を指定して、スライス推論を実行します。

from PIL import Image
from sahi.predict import get_sliced_prediction

result = get_sliced_prediction(
    "demo_data/small-vehicles1.jpeg",
    detection_model,
    slice_height=256,
    slice_width=256,
    overlap_height_ratio=0.2,
    overlap_width_ratio=0.2,
)

# Export results
result.export_visuals(export_dir="demo_data/", hide_conf=True)

# Open the predicted image
processed_image = Image.open("demo_data/prediction_visual.png")

# Display the predicted image
processed_image.show()

予測結果の処理#

SAHI は PredictionResult オブジェクトを提供しており、さまざまなアノテーション形式に変換できます。

# Access the object prediction list
object_prediction_list = result.object_prediction_list

# Convert to COCO annotation and COCO prediction formats
result.to_coco_annotations()[:3]
result.to_coco_predictions(image_id=1)[:3]
その他のエクスポート形式

PredictionResult は、result.to_imantics_annotations()result.to_fiftyone_detections() を使用して、検出結果を imantics オブジェクトや FiftyOne オブジェクトに変換することもできます。これらのメソッドにはそれぞれ対応するパッケージが必要なため、まず pip install imantics fiftyone でインストールしてください。

バッチ予測#

画像ディレクトリに対してバッチ予測を実行するには、次のようにします。

from sahi.predict import predict

predict(
    model_type="ultralytics",
    model_path="yolo26n.pt",
    model_device="cpu",  # or 'cuda:0'
    model_confidence_threshold=0.4,
    source="path/to/dir",
    slice_height=256,
    slice_width=256,
    overlap_height_ratio=0.2,
    overlap_width_ratio=0.2,
)

これで、YOLO26 と SAHI を使用して標準推論とスライス推論の両方を実行する準備が整いました。

引用と謝辞#

研究または開発業務で SAHI を使用する場合は、SAHI の原論文を引用し、著者に謝意を示してください。

引用
@article{akyon2022sahi,
  title={Slicing Aided Hyper Inference and Fine-tuning for Small Object Detection},
  author={Akyon, Fatih Cagatay and Altinuc, Sinan Onur and Temizel, Alptekin},
  journal={2022 IEEE International Conference on Image Processing (ICIP)},
  doi={10.1109/ICIP46576.2022.9897990},
  pages={966-970},
  year={2022}
}

コンピュータービジョンコミュニティにこの貴重なリソースを作成・維持してくださった SAHI 研究グループに、心より感謝いたします。SAHI とその開発者について詳しくは、SAHI GitHub リポジトリをご覧ください。

FAQ#

  • スライス推論のために Ultralytics YOLO26 と SAHI(スライス支援ハイパー推論)を統合すると、高解像度画像を扱いやすいサイズのスライスに分割することで、物体検出タスクを最適化できます。このアプローチにより、メモリ使用量が改善され、高い検出精度が確保されます。開始するには、ultralytics ライブラリと sahi ライブラリをインストールします。

    pip install -U ultralytics sahi

    次に、テスト画像をダウンロードします。

    from sahi.utils.file import download_from_url
    
    # Download test images
    download_from_url(
        "https://raw.githubusercontent.com/obss/sahi/main/demo/demo_data/small-vehicles1.jpeg",
        "demo_data/small-vehicles1.jpeg",
    )
    download_from_url(
        "https://raw.githubusercontent.com/obss/sahi/main/demo/demo_data/terrain2.png",
        "demo_data/terrain2.png",
    )

    詳しい手順については、スライス推論ガイドを参照してください。

  • 大きな画像の物体検出で Ultralytics YOLO26 と SAHI を使用すると、次のようなメリットがあります。

    • 計算負荷の軽減: 小さなスライスは処理が速く、消費メモリも少ないため、限られたリソースのハードウェアでも高品質な検出を実行できます。
    • 検出精度の維持: SAHI はインテリジェントなアルゴリズムで重複するボックスを統合し、検出品質を維持します。
    • スケーラビリティの向上: さまざまな画像サイズや解像度にわたって物体検出タスクをスケールできるため、SAHI は衛星画像の分析や医療診断など、さまざまなアプリケーションに適しています。

    ドキュメントのスライス推論のメリットで詳しく学べます。

  • はい、YOLO26 と SAHI を使用する場合でも、予測結果を可視化できます。結果をエクスポートして可視化する方法は次のとおりです。

    from PIL import Image
    
    result.export_visuals(export_dir="demo_data/", hide_conf=True)
    
    processed_image = Image.open("demo_data/prediction_visual.png")
    
    processed_image.show()

    このコマンドは、可視化した予測結果を指定したディレクトリに保存します。その後、画像を読み込んでノートブックやアプリケーションで表示できます。詳しいガイドについては、標準推論のセクションをご覧ください。

  • SAHI(スライス支援ハイパー推論)には、物体検出において Ultralytics YOLO26 を補完する次のような機能があります。

    • シームレスな統合: SAHI は YOLO モデルと容易に統合でき、コードの調整を最小限に抑えられます。
    • リソース効率: 大きな画像を小さなスライスに分割し、メモリ使用量と速度を最適化します。
    • 高い精度: SAHI は結合処理中に重複する検出ボックスを効果的に統合し、高い検出精度を維持します。

    より深く理解するには、SAHI の主な機能をご覧ください。

  • YOLO26 と SAHI を使用する大規模な推論プロジェクトには、次のベストプラクティスに従って対応してください。

    1. 必要なライブラリのインストール: ultralytics と sahi の最新バージョンがインストールされていることを確認します。
    2. スライス推論の設定: プロジェクトに適した最適なスライスサイズと重複率を決定します。
    3. バッチ予測の実行: SAHI の機能を使用して画像ディレクトリに対するバッチ予測を実行し、効率を向上させます。

    バッチ予測の例:

    from sahi.predict import predict
    
    predict(
        model_type="ultralytics",
        model_path="path/to/yolo26n.pt",
        model_device="cpu",  # or 'cuda:0'
        model_confidence_threshold=0.4,
        source="path/to/dir",
        slice_height=256,
        slice_width=256,
        overlap_height_ratio=0.2,
        overlap_width_ratio=0.2,
    )

    詳しい手順については、バッチ予測のセクションをご覧ください。

コメント