コンテンツへスキップ

高速セグメント何でもモデル (FastSAM)

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



見るんだ: FastSAM を使った物体追跡Ultralytics

モデル建築

高速セグメント何でもモデル (FastSAM) アーキテクチャ概要

概要

FastSAM は、Segment Anything Model (SAM) の限界に対処するために設計されている。Segment Anything Model は、計算リソースを大量に必要とする重いTransformerモデルである。FastSAM は、segment anything タスクを、全インスタンスのセグメンテーションとプロンプトガイド付き選択という2つの連続した段階に切り離す。最初のステージでは、YOLOv8-segを使用して、画像内のすべてのインスタンスのセグメンテーションマスクを生成する。第2段階では、プロンプトに対応する関心領域を出力する。

主な特徴

  1. リアルタイム・ソリューション:CNNの計算効率を活用することで、FastSAM 、セグメント・エニシング・タスクのリアルタイム・ソリューションを提供し、迅速な結果を必要とする産業用アプリケーションに利用価値がある。

  2. 効率と性能: FastSAM は、性能の質を落とすことなく、計算量とリソースの需要を大幅に削減します。SAM に匹敵するパフォーマンスを達成しながら、計算リソースを大幅に削減し、リアルタイムアプリケーションを可能にします。

  3. プロンプトガイドによるセグメンテーション: FastSAM は、さまざまなユーザーインタラクションプロンプトによって誘導される画像内のあらゆるオブジェクトをセグメンテーションすることができ、さまざまなシナリオにおいて柔軟性と適応性を提供する。

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

  5. ベンチマークでの競争結果:MS COCOのオブジェクト提案タスクにおいて、FastSAM は、 RTX 3090を1台使用した場合よりも大幅に速い速度で高いスコアを達成しました。 SAMNVIDIA RTX 3090を使用した場合よりも大幅に高速で高スコアを達成し、その効率性と能力を実証しています。

  6. 実用的なアプリケーション提案されたアプローチは、多くのビジョンタスクに対して、現在の手法の数十倍から数百倍という高速で、新しい実用的なソリューションを提供する。

  7. モデル圧縮の実現可能性: FastSAM は、人工的な先行構造を導入することで計算量を大幅に削減できるパスの実現可能性を示し、一般的な視覚タスクのための大規模モデルアーキテクチャの新たな可能性を開く。

利用可能なモデル、サポートされるタスク、および動作モード

この表は、利用可能なモデルを、特定の事前訓練された重み、サポートするタスク、および推論検証トレーニングエクスポートなどのさまざまな操作モードとの互換性を示しています。

モデル・タイプ事前に訓練されたウェイト対応タスク推論バリデーショントレーニング輸出
FastSAM-sFastSAM-S.PTインスタンスのセグメンテーション
FastSAM-xFastSAM-x.ptインスタンスのセグメンテーション

使用例

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 上記の例では 結果 このオブジェクトは、予測されるマスクとソース画像に簡単にアクセスすることができます。

バルの使用

データセットに対するモデルの検証は、以下のように行うことができる:

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/file.mp4" imgsz=640

FastSAM 公式使用法

FastSAM はhttps://github.com/CASIA-IVA-Lab/FastSAMリポジトリからも直接入手できる。以下は、FastSAM を使用するための典型的な手順の概要である:

インストール

  1. FastSAM リポジトリをクローンする:

    git clone https://github.com/CASIA-IVA-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]"
      

さらに、Colabのデモや HuggingFace のウェブデモで、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 との違いは?

FastSAMFast Segment Anything Model の略で、オブジェクトのセグメンテーションタスクで高いパフォーマンスを維持しながら、計算負荷を軽減するように設計された、リアルタイムの畳み込みニューラルネットワーク(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 は、セグメンテーション作業を誘導するための複数のプロンプトタイプをサポートしている:

  • すべてのプロンプト:すべての可視オブジェクトのセグメンテーションを生成します。
  • バウンディングボックス(BBox)プロンプト:指定されたバウンディングボックス内でオブジェクトをセグメント化します。
  • テキストプロンプト:説明テキストを使用して、説明に一致するオブジェクトをセグメント化します。
  • ポイントプロンプト特定のユーザー定義ポイント付近のオブジェクトをセグメント化します。

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

📅作成 1年前 ✏️更新:1ヶ月前

コメント