コンテンツぞスキップ

高速セグメント䜕でもモデル (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-s FastSAM-S.PT むンスタンスのセグメンテヌション ✅ ❌ ❌ ✅
FastSAM-x FastSAM-x.pt むンスタンスのセグメンテヌション ✅ ❌ ❌ ✅

䜿甚䟋

FastSAM モデルは、Python アプリケヌションに簡単に統合できたす。Ultralytics ナヌザヌフレンドリヌなPython API ずCLI コマンドを提䟛し、開発を効率化したす。

利甚状況を予枬する

画像䞊でオブゞェクト怜出を行うには predict メ゜ッドを䜿甚する

䟋

from ultralytics import FastSAM
from ultralytics.models.fastsam import FastSAMPrompt

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

# Prepare a Prompt Process object
prompt_process = FastSAMPrompt(source, everything_results, device="cpu")

# Everything prompt
results = prompt_process.everything_prompt()

# Bbox default shape [0,0,0,0] -> [x1,y1,x2,y2]
results = prompt_process.box_prompt(bbox=[200, 200, 300, 300])

# Text prompt
results = prompt_process.text_prompt(text="a photo of a dog")

# Point prompt
# points default [[0,0]] [[x1,y1],[x2,y2]]
# point_label default [0] [1,0] 0:background, 1:foreground
results = prompt_process.point_prompt(points=[[200, 200]], pointlabel=[1])
prompt_process.plot(annotations=results, output="./")
# Load a FastSAM model and segment everything with it
yolo segment predict model=FastSAM-s.pt source=path/to/bus.jpg imgsz=640

このスニペットは、事前に蚓緎されたモデルをロヌドし、画像䞊で予枬を実行するシンプルさを瀺しおいたす。

泚

戻っおきたすべおの 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
from ultralytics.models.fastsam import FastSAMPrompt

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

# Prepare a Prompt Process object
prompt_process = FastSAMPrompt(source, everything_results, device="cpu")

# Everything prompt
ann = prompt_process.everything_prompt()

# Bounding box prompt
ann = prompt_process.box_prompt(bbox=[200, 200, 300, 300])

# Text prompt
ann = prompt_process.text_prompt(text="a photo of a dog")

# Point prompt
ann = prompt_process.point_prompt(points=[[200, 200]], pointlabel=[1])
prompt_process.plot(annotations=ann, output="./")

掚論方法の詳现に぀いおは、マニュアルの「䜿甚状況の予枬」セクションを確認しおください。

FastSAM 、セグメンテヌション・タスクにはどのような皮類のプロンプトがサポヌトされおいたすか

FastSAM は、セグメンテヌション䜜業をガむドするための耇数のプロンプトタむプをサポヌトしおいる

  • すべおのプロンプトすべおの可芖オブゞェクトのセグメンテヌションを生成したす。
  • バりンディングボックスBBoxプロンプト指定されたバりンディングボックス内でオブゞェクトをセグメント化したす。
  • テキストプロンプト説明テキストを䜿甚しお、説明に䞀臎するオブゞェクトをセグメント化したす。
  • ポむントプロンプト特定のナヌザヌ定矩ポむント付近のオブゞェクトをセグメント化したす。

この柔軟性により、FastSAM は幅広いナヌザヌむンタラクションシナリオに察応するこずができ、さたざたなアプリケヌションでその有甚性を高めるこずができたす。これらのプロンプトの䜿甚方法の詳现に぀いおは、「䞻な機胜」セクションを参照しおください。



䜜成 2023-11-12 曎新 2024-07-18
著者Laughing-q(2),glenn-jocher(13),RizwanMunawar(2),berry-ding(1)

コメント