コンテンツへスキップ

Ultralytics Docs: Using YOLO11 with SAHI for Sliced Inference

Welcome to the Ultralytics documentation on how to use YOLO11 with SAHI (Slicing Aided Hyper Inference). This comprehensive guide aims to furnish you with all the essential knowledge you'll need to implement SAHI alongside YOLO11. We'll deep-dive into what SAHI is, why sliced inference is critical for large-scale applications, and how to integrate these functionalities with YOLO11 for enhanced object detection performance.

SAHI スライス推論の概要

SAHIの紹介

SAHI (Slicing Aided Hyper Inference)は、大規模かつ高解像度の画像に対する物体検出アルゴリズムを最適化するために設計された革新的なライブラリです。SAHIのコア機能は、画像を管理可能なスライスに分割し、各スライスに対して物体検出を実行し、結果をつなぎ合わせることにあります。SAHIは、YOLO シリーズを含む様々な物体検出モデルと互換性があるため、計算リソースの最適利用を保証しながら柔軟性を提供します。



見るんだ: Inference with SAHI (Slicing Aided Hyper Inference) using Ultralytics YOLO11

SAHIの主な特徴

  • シームレスな統合:SAHIは、YOLO モデルと簡単に統合できます。つまり、多くのコードを変更することなく、スライスと検出を開始できます。
  • リソース効率:大きな画像を小さなパーツに分割することで、SAHIはメモリ使用量を最適化し、限られたリソースのハードウェアで高品質の検出を実行できます。
  • High Accuracy: SAHI maintains the detection accuracy by employing smart algorithms to merge overlapping detection boxes during the stitching process.

スライス推論とは?

スライス推論とは、大きな画像や高解像度の画像をより小さなセグメント(スライス)に分割し、そのスライス上でオブジェクト検出を行い、スライスを再コンパイルして元の画像上のオブジェクトの位置を再構築することです。このテクニックは、計算リソースが限られている場合や、メモリの問題につながるような非常に高解像度の画像を扱う場合に非常に有効です。

スライス推論の利点

  • 計算負荷の軽減:小さな画像スライスは処理速度が速く、メモリ消費量も少ないため、ローエンドのハードウェアでもスムーズな操作が可能です。

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

  • 拡張性の向上:この技術により、さまざまなサイズや解像度の画像に対して、対象物の検出をより簡単に拡大縮小できるようになり、衛星画像から医療診断まで、幅広い用途に最適です。

YOLO11 without SAHI YOLO11 with SAHI
YOLO11 without SAHI YOLO11 with SAHI

インストールと準備

インストール

まずは、SAHIとUltralytics の最新バージョンをインストールしてください:

pip install -U ultralytics sahi

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

Here's how to import the necessary modules and download a YOLO11 model and some test images:

from sahi.utils.file import download_from_url
from sahi.utils.yolov8 import download_yolov8s_model

# Download YOLO11 model
model_path = "models/yolo11s.pt"
download_yolov8s_model(model_path)

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

Standard Inference with YOLO11

モデルをインスタンス化する

You can instantiate a YOLO11 model for object detection like this:

from sahi import AutoDetectionModel

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

標準的な予測を行う

画像パスまたはnumpy画像を用いて標準的な推論を行う。

from sahi.predict import get_prediction

# With an image path
result = get_prediction("demo_data/small-vehicles1.jpeg", detection_model)

# With a numpy image
result = get_prediction(read_image("demo_data/small-vehicles1.jpeg"), detection_model)

結果を可視化する

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

result.export_visuals(export_dir="demo_data/")
Image("demo_data/prediction_visual.png")

Sliced Inference with YOLO11

スライス寸法とオーバーラップ比を指定してスライス推論を行う:

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

予測結果の取り扱い

SAHIが提供するのは PredictionResult オブジェクトに変換することができる:

# Access the object prediction list
object_prediction_list = result.object_prediction_list

# Convert to COCO annotation, COCO prediction, imantics, and fiftyone formats
result.to_coco_annotations()[:3]
result.to_coco_predictions(image_id=1)[:3]
result.to_imantics_annotations()[:3]
result.to_fiftyone_detections()[:3]

バッチ予測

画像のディレクトリを一括予測する:

from sahi.predict import predict

predict(
    model_type="yolov8",
    model_path="path/to/yolo11n.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,
)

That's it! Now you're equipped to use YOLO11 with SAHI for both standard and sliced inference.

引用と謝辞

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}
}

We extend our thanks to the SAHI research group for creating and maintaining this invaluable resource for the computer vision community. For more information about SAHI and its creators, visit the SAHI GitHub repository.

よくあるご質問

How can I integrate YOLO11 with SAHI for sliced inference in object detection?

Integrating Ultralytics YOLO11 with SAHI (Slicing Aided Hyper Inference) for sliced inference optimizes your object detection tasks on high-resolution images by partitioning them into manageable slices. This approach improves memory usage and ensures high detection accuracy. To get started, you need to install the ultralytics and sahi libraries:

pip install -U ultralytics sahi

Then, download a YOLO11 model and test images:

from sahi.utils.file import download_from_url
from sahi.utils.yolov8 import download_yolov8s_model

# Download YOLO11 model
model_path = "models/yolo11s.pt"
download_yolov8s_model(model_path)

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

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

Why should I use SAHI with YOLO11 for object detection on large images?

Using SAHI with Ultralytics YOLO11 for object detection on large images offers several benefits:

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

スライス推論の利点については、ドキュメントをご覧ください。

Can I visualize prediction results when using YOLO11 with SAHI?

Yes, you can visualize prediction results when using YOLO11 with SAHI. Here's how you can export and visualize the results:

from IPython.display import Image

result.export_visuals(export_dir="demo_data/")
Image("demo_data/prediction_visual.png")

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

What features does SAHI offer for improving YOLO11 object detection?

SAHI (Slicing Aided Hyper Inference) offers several features that complement Ultralytics YOLO11 for object detection:

  • シームレスな統合:SAHIは、YOLO モデルと簡単に統合でき、最小限のコード調整で済みます。
  • リソース効率:大きな画像を小さなスライスに分割し、メモリ使用量と速度を最適化します。
  • 高精度:スティッチングの過程で重複する検出ボックスを効果的にマージすることで、SAHIは高い検出精度を維持します。

詳しくは、SAHIの主な特徴をご覧ください。

How do I handle large-scale inference projects using YOLO11 and SAHI?

To handle large-scale inference projects using YOLO11 and SAHI, follow these best practices:

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

バッチ予測の例:

from sahi.predict import predict

predict(
    model_type="yolov8",
    model_path="path/to/yolo11n.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,
)

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


📅 Created 11 months ago ✏️ Updated 10 days ago

コメント