Fast Segment Anything Model (FastSAM)#
Fast Segment Anything Model (FastSAM) は、Segment Anythingタスク向けの新しいリアルタイムCNNベースのソリューションです。このタスクは、ユーザーの様々なインタラクションプロンプトに基づいて画像内のあらゆるオブジェクトをセグメント化するように設計されています。FastSAMは計算負荷を大幅に削減しつつ競合力のあるパフォーマンスを維持しており、多様なビジョンタスクにおいて実用的な選択肢となります。
Watch: Object Tracking using FastSAM with Ultralytics
モデルアーキテクチャ#

概要#
FastSAMは、膨大な計算リソースを必要とする重いTransformerモデルであるSegment Anything Model (SAM)の制限に対処するように設計されています。FastSAMは、セグメント・エニシング・タスクを、全インスタンスセグメンテーションとプロンプト誘導型選択の2つの連続したステージに分離します。最初のステージでは、YOLOv8-segを使用して画像内のすべてのインスタンスのセグメンテーションマスクを生成します。2番目のステージでは、プロンプトに対応する関心領域を出力します。
主な特徴#
-
リアルタイムソリューション: CNNの計算効率を活用することで、FastSAMはsegment anythingタスクに対してリアルタイムなソリューションを提供し、迅速な結果を必要とする産業用アプリケーションにおいて価値を発揮します。
-
効率性とパフォーマンス: FastSAMは、パフォーマンス品質を損なうことなく、計算およびリソースの要求を大幅に削減します。SAMと同等のパフォーマンスを達成しながら、計算リソースを劇的に削減し、リアルタイムでの適用を可能にします。
-
プロンプトガイド付きセグメンテーション: FastSAMは、様々なユーザーインタラクションプロンプトによってガイドされ、画像内のあらゆるオブジェクトをセグメント化でき、異なるシナリオにおいて柔軟性と適応性を提供します。
-
YOLOv8-seg ベース: FastSAM は、インスタンスセグメンテーションブランチを備えたオブジェクト検出器である YOLOv8-seg をベースにしています。これにより、画像内のすべてのインスタンスのセグメンテーションマスクを効率的に生成できます。
-
ベンチマークにおける競争力のある結果: MS COCO のオブジェクトプロポーサルタスクにおいて、FastSAM は単一の NVIDIA RTX 3090 上で SAM よりも大幅に高速に高スコアを達成し、その効率性と能力を示しています。
-
実用的なアプリケーション: 提案されたアプローチは、現在の手法よりも数十倍から数百倍高速であり、非常に高速で多数のビジョンタスクに対して新しい実用的なソリューションを提供します。
-
モデル圧縮の実現可能性: FastSAMは、構造に人工的な事前知識を導入することで計算量を大幅に削減できるパスの実現可能性を示しており、一般的なビジョンタスクのための大規模モデルアーキテクチャの新たな可能性を切り拓いています。
利用可能なモデル、サポートされているタスク、および動作モード#
この表では、利用可能なモデルとそれぞれの特定の事前学習済み重み、サポートするタスク、および推論、検証、トレーニング、エクスポートなどのさまざまな操作モードとの互換性を示しています。サポートされているモードは✅絵文字で、サポートされていないモードは❌絵文字で示されます。
| モデルタイプ | 事前学習済みウェイト | サポートされるタスク | トレーニング | バリデーション | 推論 | エクスポート |
|---|---|---|---|---|---|---|
| FastSAM-s | FastSAM-s.pt | Instance Segmentation | ❌ | ✅ | ✅ | ✅ |
| FastSAM-x | FastSAM-x.pt | Instance Segmentation | ❌ | ✅ | ✅ | ✅ |
FastSAMとYOLOの比較#
ここでは、最小の SAM2-t バリアントを含む Meta の SAM 2 モデルと、YOLO26n-seg などの Ultralytics セグメンテーションモデルを比較します:
| モデル | サイズ (MB) | パラメータ (M) | 速度 (CPU) (ms/im) |
|---|---|---|---|
| Meta SAM-b | 375 | 93.7 | 41703 |
| Meta SAM2-b | 162 | 80.8 | 28867 |
| Meta SAM2-t | 78.1 | 38.9 | 23430 |
| MobileSAM | 40.7 | 10.1 | 23802 |
| YOLOv8 backboneを使用したFastSAM-s | 23.9 | 11.8 | 58.0 |
| Ultralytics YOLOv8n-seg | 7.1 (11.0倍小さい) | 3.4 (11.4倍少ない) | 24.8 (945倍高速) |
| Ultralytics YOLO11n-seg | 6.2 (12.6倍小さい) | 2.9 (13.4倍少ない) | 24.3 (964倍高速) |
| Ultralytics YOLO26n-seg | 6.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.0、ultralytics==8.4.31、onnxruntime==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)
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")このコードスニペットは、事前学習済みモデルを読み込み、画像に対して予測を実行するシンプルさを示しています。
この方法により、画像に対して推論を実行してすべてのセグメント 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 は、予測されたマスクとソース画像に簡単にアクセスできるようにする結果オブジェクトです。
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 は、https://github.com/CASIA-IVA-Lab/FastSAM リポジトリから直接取得することもできます。FastSAM を使用する際に実行する一般的な手順の概要は次のとおりです。
インストール#
-
FastSAMリポジトリをクローンします:
git clone https://github.com/CASIA-IVA-Lab/FastSAM.git -
Python 3.9でConda環境を作成し、アクティベートします:
conda create -n FastSAM python=3.9 conda activate FastSAM -
クローンしたリポジトリに移動し、必要なパッケージをインストールします:
cd FastSAM pip install -r requirements.txt -
CLIPモデルをインストールします:
pip install git+https://github.com/ultralytics/CLIP.git
使用例#
-
モデルチェックポイントをダウンロードします。
-
推論に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-IVA-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 からアクセスできます。分野の発展に貢献し、より幅広いコミュニティが研究を利用できるようにしてくださった著者らの努力に感謝いたします。
よくある質問 (FAQ)#
FastSAMとは何ですか?また、SAMとどのように違いますか?#
Fast Segment Anything Model の略である FastSAM は、オブジェクトセグメンテーションタスクで高いパフォーマンスを維持しながら計算要件を削減するように設計された、リアルタイムの畳み込みニューラルネットワーク (CNN) ベースのソリューションです。より重い Transformer ベースのアーキテクチャを使用する Segment Anything Model (SAM) とは異なり、FastSAM は Ultralytics YOLOv8-seg を活用して、全インスタンスセグメンテーションとそれに続くプロンプトガイドによる選択という 2 つのステージで効率的なインスタンスセグメンテーションを行います。
FastSAMはどのようにしてリアルタイムのセグメンテーションパフォーマンスを達成していますか?#
FastSAMは、セグメンテーションタスクをYOLOv8-segによる全インスタンスセグメンテーションとプロンプトガイド付き選択ステージに分離することで、リアルタイムセグメンテーションを達成しています。CNNの計算効率を利用することで、FastSAMは計算とリソースの要求を大幅に削減しつつ、競合するパフォーマンスを維持します。この2ステージアプローチにより、FastSAMは迅速な結果を必要とするアプリケーションに適した高速で効率的なセグメンテーションを実現します。
FastSAMの実用的なアプリケーションは何ですか?#
FastSAM は、リアルタイムのセグメンテーションパフォーマンスを必要とするさまざまなコンピュータビジョンタスクで実用的です。アプリケーションには次のようなものがあります。
- 品質管理および保証のための産業オートメーション
- セキュリティおよび監視のためのリアルタイムビデオ解析
- オブジェクト検出とセグメンテーションのための自動運転車
- 正確かつ迅速なセグメンテーションタスクのための医療画像処理
様々なユーザーインタラクションプロンプトを処理する能力により、FastSAMは多様なシナリオに適応可能で柔軟です。
Pythonで推論に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")推論方法の詳細については、ドキュメントの予測の使用方法セクションをご確認ください。
FastSAMはセグメンテーションタスクに対してどのようなタイプのプロンプトをサポートしていますか?#
FastSAMは、セグメンテーションタスクをガイドするために複数のプロンプトタイプをサポートしています:
- Everythingプロンプト: 表示されているすべてのオブジェクトのセグメンテーションを生成します。
- Bounding Box (BBox) プロンプト: 指定されたバウンディングボックス内のオブジェクトをセグメント化します。
- テキストプロンプト: 説明文を使用して、その説明に一致するオブジェクトをセグメント化します。
- ポイントプロンプト: ユーザーが定義した特定の点付近のオブジェクトをセグメント化します。
この柔軟性により、FastSAM は幅広いユーザーインタラクションシナリオに適応でき、さまざまなアプリケーションにわたってその有用性が高まります。これらのプロンプトの使用方法の詳細については、主な機能セクションを参照してください。