Ultralytics YOLO27:
Get Started

Fast Segment Anything Model(FastSAM)#

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



視聴: Ultralytics で FastSAM を使ったオブジェクトトラッキング

モデルアーキテクチャ#

Fast Segment Anything Model(FastSAM)のアーキテクチャ概要

概要#

FastSAMは、計算リソースを大量に必要とする大規模なTransformerモデルであるSegment Anything Model(SAM)の制約に対処するために設計されています。FastSAMは、Segment Anythingタスクを2つの連続したステージ、すなわち全インスタンスセグメンテーションとプロンプトガイド型の選択に分割します。第1ステージではYOLOv8-segを使用し、画像内のすべてのインスタンスのセグメンテーションマスクを生成します。第2ステージでは、プロンプトに対応する関心領域を出力します。

主な機能#

  1. リアルタイムソリューション: CNNの計算効率を活用することで、FastSAMはSegment Anythingタスク向けのリアルタイムソリューションを提供します。そのため、迅速な結果が求められる産業用途で有用です。

  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インスタンスセグメンテーション❌✅✅✅

FastSAMとYOLOの比較#

ここでは、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
FastSAM-sとYOLOv8のバックボーン23.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で測定しました。テストは16GBのRAMを搭載した2025年製Apple M4 Airで、torch==2.10.0、ultralytics==8.4.31、onnxruntime==1.24.4を使用して実施しました。このテストを再現するには、次の手順を実行してください。

例
from ultralytics import ASSETS, SAM, YOLO, FastSAM

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

# FastSAM-sのプロファイルを取得
model = FastSAM("FastSAM-s.pt")
model.info()
model(ASSETS)

# YOLOモデル(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フリーヘッド。YOLOv8/YOLO11では何もしません
    model = YOLO(onnx_path)
    model(ASSETS)

使用例#

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

予測の使用方法#

画像をセグメンテーションするには、以下に示すようにpredictメソッドを使用してください。

例
from ultralytics import FastSAM

# 推論ソースを定義します
source = "path/to/bus.jpg"

# FastSAMモデルを作成します
model = FastSAM("FastSAM-s.pt")  # またはFastSAM-x.pt

# 画像に対して推論を実行する
everything_results = model(source, device="cpu", retina_masks=True, imgsz=1024, conf=0.4, iou=0.9)

# bboxesプロンプトを使用して推論を実行
results = model(source, bboxes=[439, 437, 524, 709])

# ポイントプロンプトを使用して推論を実行します
results = model(source, points=[[200, 200]], labels=[1])

# テキストプロンプトを使用して推論を実行します
results = model(source, texts="a photo of a dog")

# BBox、ポイント、テキストのプロンプトを同時に使用して推論を実行します
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

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

# すべてをセグメンテーションします
everything_results = predictor("ultralytics/assets/bus.jpg")

# プロンプト推論
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オブジェクトであり、予測されたマスクと元画像に簡単にアクセスできます。

検証の使用方法#

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

データセット上でモデルを検証するには、次のようにします。

例
from ultralytics import FastSAM

# FastSAMモデルを作成します
model = FastSAM("FastSAM-s.pt")  # またはFastSAM-x.pt

# モデルを検証します
results = model.val(data="coco8-seg.yaml")

トラッキングの使用方法#

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

例
from ultralytics import FastSAM

# FastSAMモデルを作成します
model = FastSAM("FastSAM-s.pt")  # またはFastSAM-x.pt

# 動画でFastSAMモデルを使用してトラッキングする
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デモで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からアクセスできます。この分野の発展に尽力し、より広いコミュニティが研究成果を利用できるようにしたことに感謝します。

よくある質問#

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

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

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

    • 品質管理と品質保証のための産業オートメーション
    • セキュリティと監視のためのリアルタイム動画解析
    • 物体検出とセグメンテーションのための自動運転車
    • 高精度かつ迅速なセグメンテーションタスクのための医療画像処理

    さまざまなユーザー操作プロンプトに対応できるため、FastSAMは多様なシナリオに適応できる柔軟なモデルです。

  • Pythonで推論にFastSAMを使用するには、次の例を参考にしてください。

    from ultralytics import FastSAM
    
    # 推論ソースを定義します
    source = "path/to/bus.jpg"
    
    # FastSAMモデルを作成します
    model = FastSAM("FastSAM-s.pt")  # またはFastSAM-x.pt
    
    # 画像に対して推論を実行する
    everything_results = model(source, device="cpu", retina_masks=True, imgsz=1024, conf=0.4, iou=0.9)
    
    # bboxesプロンプトを使用して推論を実行
    results = model(source, bboxes=[439, 437, 524, 709])
    
    # ポイントプロンプトを使用して推論を実行します
    results = model(source, points=[[200, 200]], labels=[1])
    
    # テキストプロンプトを使用して推論を実行します
    results = model(source, texts="a photo of a dog")
    
    # BBox、ポイント、テキストのプロンプトを同時に使用して推論を実行します
    results = model(source, bboxes=[439, 437, 524, 709], points=[[200, 200]], labels=[1], texts="a photo of a dog")

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

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

    • すべてを対象とするプロンプト:表示されているすべてのオブジェクトをセグメンテーションします。
    • バウンディングボックス(BBox)プロンプト:指定したバウンディングボックス内のオブジェクトをセグメンテーションします。
    • テキストプロンプト:説明に一致するオブジェクトを、説明テキストを使用してセグメンテーションします。
    • ポイントプロンプト:ユーザーが指定したポイント付近のオブジェクトをセグメンテーションします。

    この柔軟性により、FastSAMは幅広いユーザー操作シナリオに適応し、さまざまな用途での有用性を高めます。これらのプロンプトの使用方法については、主な機能セクションをご覧ください。

コメント