Ultralytics YOLO27:

Fast セグメント・エニシング・モデル (FastSAM)#

Fast セグメント・エニシング・モデル (FastSAM) は、Segment Anythingタスク向けの新しいリアルタイムCNNベースのソリューションです。このタスクは、さまざまなユーザーインタラクションプロンプトに基づいて、画像内の任意のオブジェクトをセグメントするように設計されています。FastSAMは、競争力のある性能を維持しながら計算負荷を大幅に削減するため、さまざまなビジョンタスクに実用的な選択肢となります。



Watch: Object Tracking using FastSAM with Ultralytics

モデルアーキテクチャ#

Fast セグメント・エニシング・モデル (FastSAM) のアーキテクチャ概要

概要#

FastSAMは、計算リソース要件の大きい重量級のTransformerモデルであるセグメント・エニシング・モデル (SAM)の制限に対処するように設計されています。FastSAMは、セグメント・エニシングタスクを、すべてのインスタンスセグメンテーションとプロンプトガイド選択という2つの順次ステージに分離します。第1ステージではYOLOv8-segを使用して、画像内のすべてのインスタンスのセグメンテーションマスクを生成します。第2ステージでは、プロンプトに対応する関心領域を出力します。

主な特徴#

  1. リアルタイムソリューション: CNNの計算効率を活用することで、FastSAMはセグメント・エニシングタスク向けのリアルタイムソリューションを提供し、迅速な結果が求められる産業用アプリケーションで有用です。

  2. 効率と性能: FastSAMは、性能品質を損なうことなく、計算負荷とリソース要件を大幅に削減します。SAMと同等の性能を、はるかに少ない計算リソースで実現し、リアルタイムアプリケーションを可能にします。

  3. プロンプトガイドセグメンテーション: FastSAMは、さまざまなユーザーインタラクションプロンプトに基づいて画像内の任意のオブジェクトをセグメントできるため、さまざまなシナリオに柔軟かつ適応的に対応できます。

  4. YOLOv8-segベース: FastSAMは、インスタンスセグメンテーションブランチを備えたオブジェクト検出器であるYOLOv8-segをベースとしています。これにより、画像内のすべてのインスタンスのセグメンテーションマスクを効果的に生成できます。

  5. ベンチマークでの競争力のある結果: MS COCOのオブジェクトプロポーザルタスクにおいて、FastSAMは単一のNVIDIA RTX 3090上でSAMより大幅に高速に、高いスコアを達成し、その効率と能力を実証しています。

  6. 実用的なアプリケーション: 提案手法は、多数のビジョンタスクに対して、現在の手法より数十倍から数百倍高速な、非常に高速で実用的な新しいソリューションを提供します。

  7. モデル圧縮の実現可能性: FastSAMは、構造に人工的な事前情報を導入することで計算量を大幅に削減できるアプローチの実現可能性を示し、一般的なビジョンタスク向けの大規模モデルアーキテクチャに新たな可能性を開きます。

利用可能なモデル、対応タスク、動作モード#

この表では、利用可能なモデルとそれぞれの事前学習済みウェイト、対応タスク、および推論検証学習エクスポートなどの各動作モードとの互換性を示しています。対応モードには✅、非対応モードには❌の絵文字が表示されます。

モデルタイプ事前学習済み重みサポートされているタスクトレーニング検証推論エクスポート
FastSAM-sFastSAM-s.ptインスタンスセグメンテーション
FastSAM-xFastSAM-x.ptインスタンスセグメンテーション

YOLOとのFastSAMの比較#

ここでは、FastSAM-sとMetaのSAMのバリエーション、およびYOLO26n-segを含むUltralyticsセグメンテーションモデルを比較します:

モデルサイズ
(MB)
パラメーター数
(M)
速度 (CPU)
(ms/im)
Meta SAM-b37593.741703
Meta SAM2-b16280.828867
Meta SAM2-t78.138.923430
MobileSAM40.710.123802
YOLOv8 バックボーンを使用した FastSAM-s23.911.858.0
Ultralytics YOLOv8n-seg7.1(11.0倍小型化)3.4(11.4倍削減)24.8(945倍高速化)
Ultralytics YOLO11n-seg6.2 (12.6倍小型)2.9(13.4倍削減)24.3 (964倍高速)
Ultralytics YOLO26n-seg6.7(11.7倍小型化)2.7 (14.4倍少ない)25.2(930倍高速化)

この比較から、SAM の各バリアントと YOLO セグメンテーションモデルの間には、モデルサイズと速度に大きな違いがあることが分かります。SAM は独自の自動セグメンテーション機能を提供しますが、YOLO モデル、特に YOLOv8n-seg、YOLO11n-seg、YOLO26n-seg は、大幅に小型で高速かつ計算効率に優れています。

SAM の速度は PyTorch で、YOLO の速度は ONNX Runtime で測定しました。テストは、torch==2.10.0ultralytics==8.4.31onnxruntime==1.24.4 を使用し、16GB の RAM を搭載した 2025 Apple M4 Air 上で実行しました。このテストを再現するには、次の手順を実行します:

from ultralytics import ASSETS, SAM, YOLO, FastSAM

# Profile SAM2-t, SAM2-b, SAM-b, MobileSAM
for file in ["sam_b.pt", "sam2_b.pt", "sam2_t.pt", "mobile_sam.pt"]:
    model = SAM(file)
    model.info()
    model(ASSETS)

# Profile FastSAM-s
model = FastSAM("FastSAM-s.pt")
model.info()
model(ASSETS)

# Profile YOLO models (ONNX)
for file_name in ["yolov8n-seg.pt", "yolo11n-seg.pt", "yolo26n-seg.pt"]:
    model = YOLO(file_name)
    model.info()
    onnx_path = model.export(format="onnx", dynamic=True, nms=False)  # YOLO26 NMS-free head; no-op for YOLOv8/YOLO11
    model = YOLO(onnx_path)
    model(ASSETS)

使用例#

FastSAMモデルは、Pythonアプリケーションに簡単に統合できます。Ultralyticsは、開発を効率化する使いやすいPython APIとCLIコマンドを提供しています。

Predictの使用方法#

画像をセグメント化するには、以下に示すようにpredictメソッドを使用します:

from ultralytics import FastSAM

# Define an inference source
source = "path/to/bus.jpg"

# Create a FastSAM model
model = FastSAM("FastSAM-s.pt")  # or FastSAM-x.pt

# Run inference on an image
everything_results = model(source, device="cpu", retina_masks=True, imgsz=1024, conf=0.4, iou=0.9)

# Run inference with bboxes prompt
results = model(source, bboxes=[439, 437, 524, 709])

# Run inference with points prompt
results = model(source, points=[[200, 200]], labels=[1])

# Run inference with texts prompt
results = model(source, texts="a photo of a dog")

# Run inference with bboxes and points and texts prompt at the same time
results = model(source, bboxes=[439, 437, 524, 709], points=[[200, 200]], labels=[1], texts="a photo of a dog")

このスニペットでは、事前学習済みモデルを読み込み、画像に対して予測を実行する簡単な方法を示します。

FastSAMPredictorの例

この方法では、画像に対して推論を実行してすべてのセグメント results を取得した後、推論を複数回実行することなく、プロンプト推論を複数回実行できます。

from ultralytics.models.fastsam import FastSAMPredictor

# Create FastSAMPredictor
overrides = {"conf": 0.25, "task": "segment", "mode": "predict", "model": "FastSAM-s.pt", "save": False, "imgsz": 1024}
predictor = FastSAMPredictor(overrides=overrides)

# Segment everything
everything_results = predictor("ultralytics/assets/bus.jpg")

# Prompt inference
bbox_results = predictor.prompt(everything_results, bboxes=[[200, 200, 300, 300]])
point_results = predictor.prompt(everything_results, points=[200, 200])
text_results = predictor.prompt(everything_results, texts="a photo of a dog")
注記

上記の例で返されるresultsはすべてResultsオブジェクトであり、予測されたマスクと元画像に簡単にアクセスできます。

Valの使用方法#

FastSAMは、単一クラスのオブジェクトの検出とセグメンテーションのみをサポートしている点に注意してください。つまり、すべてのオブジェクトを同じクラスとして認識し、セグメントします。そのため、データセットを準備する際は、すべてのオブジェクトカテゴリIDを0に変換する必要があります。

データセット上でのモデルの検証は、次のように実行できます。

from ultralytics import FastSAM

# Create a FastSAM model
model = FastSAM("FastSAM-s.pt")  # or FastSAM-x.pt

# Validate the model
results = model.val(data="coco8-seg.yaml")

Trackの使用方法#

画像に対してオブジェクトトラッキングを実行するには、以下に示すようにtrackメソッドを使用します。

from ultralytics import FastSAM

# Create a FastSAM model
model = FastSAM("FastSAM-s.pt")  # or FastSAM-x.pt

# Track with a FastSAM model on a video
results = model.track(source="path/to/video.mp4", imgsz=640)

FastSAM公式の使用方法#

FastSAMは、CASIA-LMC-Lab/FastSAMリポジトリからも直接利用できます。FastSAMを使用するために実行する一般的な手順の概要は次のとおりです:

インストール#

  1. FastSAMリポジトリをクローンします。

    git clone https://github.com/CASIA-LMC-Lab/FastSAM.git
  2. Python 3.9でConda環境を作成し、有効化します。

    conda create -n FastSAM python=3.9
    conda activate FastSAM
  3. クローンしたリポジトリに移動し、必要なパッケージをインストールします。

    cd FastSAM
    pip install -r requirements.txt
  4. CLIPモデルをインストールします。

    pip install git+https://github.com/ultralytics/CLIP.git

使用例#

  1. モデルチェックポイントをダウンロードします。

  2. FastSAMを推論に使用します。コマンドの例:

    • 画像内のすべてをセグメントします。

      python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg
    • テキストプロンプトを使用して特定のオブジェクトをセグメントします。

      python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --text_prompt "the yellow dog"
    • バウンディングボックス内のオブジェクトをセグメントします(ボックスの座標はxywh形式で指定します)。

      python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --box_prompt "[570,200,230,400]"
    • 特定のポイント付近のオブジェクトをセグメントします。

      python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --point_prompt "[[520,360],[620,300]]" --point_label "[1,0]"

さらに、CASIA-LMC-LabのColab demoを通じてFastSAMを試すこともできます。

引用と謝辞#

リアルタイムインスタンスセグメンテーション分野における多大な貢献に対し、FastSAMの著者の皆様に謝意を表します。

引用
@misc{zhao2023fast,
      title={Fast Segment Anything},
      author={Xu Zhao and Wenchao Ding and Yongqi An and Yinglong Du and Tao Yu and Min Li and Ming Tang and Jinqiao Wang},
      year={2023},
      eprint={2306.12156},
      archivePrefix={arXiv},
      primaryClass={cs.CV}
}

FastSAMの原論文はarXivで確認できます。著者らは研究成果を一般公開しており、コードベースにはGitHubからアクセスできます。この分野の発展に貢献し、より広いコミュニティが利用できる形で成果を公開した著者らの取り組みに感謝します。

FAQ#

  • FastSAMはFast セグメント・エニシング・モデルの略称で、オブジェクトセグメンテーションタスクで高い性能を維持しながら計算負荷を削減するように設計された、リアルタイムの畳み込みニューラルネットワーク (CNN)ベースのソリューションです。より重いTransformerベースのアーキテクチャを使用するセグメント・エニシング・モデル (SAM)とは異なり、FastSAMはUltralytics YOLOv8-segを活用し、すべてのインスタンスセグメンテーションとプロンプトガイド選択という2つのステージで効率的なインスタンスセグメンテーションを実行します。

  • FastSAMは、セグメンテーションタスクをYOLOv8-segによるすべてのインスタンスセグメンテーションステージと、プロンプトガイド選択ステージに分離することで、リアルタイムセグメンテーションを実現します。CNNの計算効率を活用することで、FastSAMは競争力のある性能を維持しながら、計算負荷とリソース要件を大幅に削減します。この2段階のアプローチにより、迅速な結果が求められるアプリケーションに適した、高速で効率的なセグメンテーションを提供できます。

  • FastSAMは、リアルタイムセグメンテーション性能が求められるさまざまなコンピュータビジョンタスクに実用的です。アプリケーションには次のようなものがあります。

    • 品質管理と品質保証のための産業オートメーション
    • セキュリティと監視のためのリアルタイム動画分析
    • オブジェクト検出とセグメンテーションのための自動運転車
    • 正確かつ迅速なセグメンテーションタスクのための医用画像処理

    さまざまなユーザーインタラクションプロンプトに対応できるため、FastSAMは多様なシナリオに適応でき、さまざまなアプリケーションで柔軟に利用できます。

  • PythonでFastSAMを推論に使用するには、以下の例に従ってください。

    from ultralytics import FastSAM
    
    # Define an inference source
    source = "path/to/bus.jpg"
    
    # Create a FastSAM model
    model = FastSAM("FastSAM-s.pt")  # or FastSAM-x.pt
    
    # Run inference on an image
    everything_results = model(source, device="cpu", retina_masks=True, imgsz=1024, conf=0.4, iou=0.9)
    
    # Run inference with bboxes prompt
    results = model(source, bboxes=[439, 437, 524, 709])
    
    # Run inference with points prompt
    results = model(source, points=[[200, 200]], labels=[1])
    
    # Run inference with texts prompt
    results = model(source, texts="a photo of a dog")
    
    # Run inference with bboxes and points and texts prompt at the same time
    results = model(source, bboxes=[439, 437, 524, 709], points=[[200, 200]], labels=[1], texts="a photo of a dog")

    推論メソッドの詳細については、ドキュメントのPredictの使用方法セクションを確認してください。

  • FastSAMは、セグメンテーションタスクをガイドする複数の種類のプロンプトをサポートしています。

    • Everythingプロンプト: 目に見えるすべてのオブジェクトのセグメンテーションを生成します。
    • バウンディングボックス (BBox)プロンプト: 指定したバウンディングボックス内のオブジェクトをセグメントします。
    • テキストプロンプト: 説明に一致するオブジェクトをセグメントするために、説明的なテキストを使用します。
    • ポイントプロンプト: ユーザーが指定した特定のポイント付近のオブジェクトをセグメントします。

    この柔軟性により、FastSAMは幅広いユーザーインタラクションシナリオに適応でき、さまざまなアプリケーションでの有用性が高まります。これらのプロンプトの使用方法の詳細については、主な機能セクションを参照してください。

コメント