Fast Segment Anything Model (FastSAM)
Fast Segment Anything Model(FastSAM)は、Segment Anythingタスクのための新しいリアルタイムCNNベースのソリューションです。このタスクは、さまざまなユーザーインタラクションプロンプトに基づいて、画像内の任意のオブジェクトをセグメント化するように設計されています。FastSAMは、競争力のあるパフォーマンスを維持しながら、計算量を大幅に削減し、さまざまなビジョンタスクにとって実用的な選択肢となっています。
見る: UltralyticsとFastSAMを使用したオブジェクト追跡
モデルアーキテクチャ
概要
FastSAM は、大きな計算リソースを必要とする重い Transformer モデルである Segment Anything Model (SAM) の制限に対処するように設計されています。FastSAM は、セグメント化タスクを、全インスタンス・セグメンテーションとプロンプト誘導による選択という、2 つの連続した段階に分離します。最初の段階では、YOLOv8-seg を使用して、画像内のすべてのインスタンスのセグメンテーションマスクを生成します。第 2 段階では、プロンプトに対応する関心領域を出力します。
主な特徴
-
リアルタイムソリューション: CNNの計算効率を活用することで、FastSAMはセグメント化タスクに対するリアルタイムソリューションを提供し、迅速な結果を必要とする産業用アプリケーションにとって価値があります。
-
効率と性能: FastSAM は、性能品質を損なうことなく、計算量とリソース要求を大幅に削減します。SAM と同等の性能を達成しながら、計算リソースを大幅に削減し、リアルタイムアプリケーションを可能にします。
-
プロンプト誘導型セグメンテーション: FastSAMは、さまざまなユーザーインタラクションプロンプトによって誘導され、画像内の任意のオブジェクトをセグメント化でき、さまざまなシナリオで柔軟性と適応性を提供します。
-
YOLOv8-segに基づく: FastSAMはYOLOv8-segに基づいており、インスタンスセグメンテーションブランチを備えた物体検出器です。これにより、画像内のすべてのインスタンスのセグメンテーションマスクを効果的に生成できます。
-
ベンチマークにおける競争的結果: MS COCOの物体提案タスクにおいて、FastSAMは単一のNVIDIA RTX 3090上でSAMよりも大幅に高速な速度で高いスコアを達成し、その効率と能力を示しています。
-
実用的な応用例: 提案されたアプローチは、現在の方法よりも数十倍から数百倍も高速に、多数のビジョンタスクに対する新しい実用的なソリューションを提供します。
-
モデル圧縮の実現可能性: FastSAMは、構造に人工的な事前情報を導入することで計算量を大幅に削減できるパスの実現可能性を示しており、一般的なビジョンタスク向けの大型モデルアーキテクチャに新たな可能性を開きます。
利用可能なモデル、サポートされているタスク、および動作モード
この表は、利用可能なモデルと、特定の事前学習済みウェイト、サポートするタスク、および推論、検証、トレーニング、エクスポートなどのさまざまな動作モードとの互換性を示しています。サポートされているモードは✅の絵文字で、サポートされていないモードは❌の絵文字で示されています。
モデルの種類 | 事前学習済み重み | サポートされているタスク | 推論 | 検証 | 学習 | エクスポート |
---|---|---|---|---|---|---|
FastSAM-s | FastSAM-s.pt | インスタンスセグメンテーション | ✅ | ❌ | ❌ | ✅ |
FastSAM-x | FastSAM-x.pt | インスタンスセグメンテーション | ✅ | ❌ | ❌ | ✅ |
FastSAMとYOLOの比較
ここでは、MetaのSAM2モデル(最小のSAM2-tバリアントを含む)と、Ultralyticsの最小セグメンテーションモデルであるYOLO11n-segを比較します。
モデル | サイズ (MB) |
パラメータ (M) |
速度 (CPU) (ms/im) |
---|---|---|---|
Meta SAM-b | 375 | 93.7 | 49401 |
Meta SAM2-b | 162 | 80.8 | 31901 |
Meta SAM2-t | 78.1 | 38.9 | 25997 |
MobileSAM | 40.7 | 10.1 | 25381 |
YOLOv8 バックボーンを備えたFastSAM-s | 23.7 | 11.8 | 55.9 |
Ultralytics YOLOv8n-seg | 6.7 (11.7分の1) | 3.4 (11.4分の1) | 24.5 (1061倍高速) |
Ultralytics YOLO11n-seg | 5.9 (13.2倍小さい) | 2.9 (13.4倍少ない) | 30.1 (864倍高速) |
この比較は、SAMバリアントとYOLOセグメンテーションモデル間のモデルサイズと速度の大きな違いを示しています。SAMは独自の自動セグメンテーション機能を提供しますが、YOLOモデル、特にYOLOv8n-segとYOLO11n-segは、大幅に小型、高速、かつ計算効率が高くなっています。
24GBのRAMを搭載した2025 Apple M4 Proで実行されたテスト。使用 torch==2.6.0
および ultralytics==8.3.90
。このテストを再現するには:
例
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
for file_name in ["yolov8n-seg.pt", "yolo11n-seg.pt"]:
model = YOLO(file_name)
model.info()
model(ASSETS)
使用例
FastSAMモデルは、pythonアプリケーションに簡単に統合できます。Ultralyticsは、開発を効率化するためのユーザーフレンドリーなpython APIおよびCLIコマンドを提供します。
予測の使用方法
実行するには 物体検出 画像に対して、以下を使用します: 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")
# Load a FastSAM model and segment everything with it
yolo segment predict model=FastSAM-s.pt source=path/to/bus.jpg imgsz=640
このスニペットは、事前トレーニング済みのモデルをロードし、画像に対して予測を実行する簡潔さを示しています。
FastSAMPredictor の例
この方法で、画像に対して推論を実行し、すべてのセグメントを取得できます。 results
一度推論を実行すると、複数回推論を実行せずにプロンプト推論を複数回実行できます。
from ultralytics.models.fastsam import FastSAMPredictor
# Create FastSAMPredictor
overrides = dict(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 の使用法
データセットに対するモデルの検証は、次の方法で実行できます。
例
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")
# Load a FastSAM model and validate it on the COCO8 example dataset at image size 640
yolo segment val model=FastSAM-s.pt data=coco8.yaml imgsz=640
FastSAMは、単一クラスのオブジェクトの検出とセグメンテーションのみをサポートしていることに注意してください。つまり、すべてのオブジェクトを同じクラスとして認識し、セグメント化します。したがって、データセットを準備する際は、すべてのオブジェクトカテゴリIDを0に変換する必要があります。
追跡の使用法
画像上でオブジェクト追跡を実行するには、以下を使用します。 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)
yolo segment track model=FastSAM-s.pt 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でアクセスできます。私たちは、この分野を進歩させ、彼らの研究をより広いコミュニティが利用できるようにするための彼らの努力に感謝します。
よくある質問
FastSAM とは何ですか?また、SAM とどのように異なりますか?
Fast Segment Anything Model の略である FastSAM は、オブジェクトセグメンテーションタスクにおいて高い性能を維持しながら、計算量を削減するように設計された、リアルタイムの畳み込みニューラルネットワーク (CNN) ベースのソリューションです。より重い Transformer ベースのアーキテクチャを使用する Segment Anything Model (SAM) とは異なり、FastSAM は Ultralytics YOLOv8-seg を活用して、全インスタンスセグメンテーションに続いてプロンプト誘導選択という 2 段階で効率的なインスタンスセグメンテーションを実現します。
FastSAMはどのようにしてリアルタイムのセグメンテーションパフォーマンスを達成しますか?
FastSAM は、セグメンテーションタスクを YOLOv8-seg による全インスタンス・セグメンテーションと、プロンプト誘導による選択の段階に分離することで、リアルタイム・セグメンテーションを実現します。CNN の計算効率を活用することで、FastSAM は競争力のある性能を維持しながら、計算量とリソース要求を大幅に削減します。この二段階アプローチにより、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 Prompt: 可視のオブジェクトすべてのセグメンテーションを生成します。
- バウンディングボックス(BBox)プロンプト: 指定されたバウンディングボックス内のオブジェクトをセグメント化します。
- Text Prompt: 説明に一致するオブジェクトをセグメント化するために、説明的なテキストを使用します。
- ポイントプロンプト: 特定のユーザー定義ポイントの近くにあるオブジェクトをセグメント化します。
この柔軟性により、FastSAMは幅広いユーザーインタラクションシナリオに適応し、さまざまなアプリケーションでの有用性を高めることができます。これらのプロンプトの使用に関する詳細については、主な機能セクションを参照してください。