Safie Engineers' Blog!

Safieのエンジニアが書くブログです

Segment Anything Model(SAM)でテキストプロンプトを使う方法

はじめに

セーフィー株式会社の第3開発部 AIVisionグループで画像認識AIの開発エンジニアをしている土井 慎也です。

今回は、Segment Anything Model(SAM)というセグメンテーションモデルで、テキストプロンプトを使用してみたいと思います。

Segment Anything Modelとは

  • Meta社(旧Facebook)が2023年4月に発表
  • ゼロショットセグメンテーションモデル
  • 未知の物体に対して、追加学習を必要としない
  • 1100万枚の画像と10億以上のマスクを使用して学習
  • プロンプトにセグメンテーションを行いたい物体への点や矩形を指定
  • 論文ではテキストをプロンプトとして使用している例があるが、コードは公開されていない

論文ではテキストをプロンプトとして使用している例があるが、コードは公開されていない!

今回、テキストプロンプトを可能にするために、Grounded-Segment-Anything(Grounded-SAM)を代わりに使用する

Grounded-SAMとは

  • Grounded-DINOというテキストプロンプトが利用可能なゼロショット物体検出モデルとSAMを組み合わせたもの
  • Grounded-DINOとSAMの二つのモデルを使うため大きく二つの処理に分かれます。
    • Grounded-DINO
      • 画像と検出したい物体のテキストプロンプトを入力
      • 検出結果として矩形を出力
    • SAM
      • 画像と検出結果の矩形をプロンプトとして入力
      • セグメンテーション結果を出力

実践

環境構築

リポジトリをクローンする

git clone git@github.com:IDEA-Research/Grounded-Segment-Anything.git

リポジトリをクローン後、Grounded-SAM: Installation を参考に環境にあったインストールを実行

モデルダウンロード

cd Grounded-Segment-Anything
wget https://dl.fbaipublicfiles.com/segment_anything/sam_vit_h_4b8939.pth
wget https://github.com/IDEA-Research/GroundingDINO/releases/download/v0.1.0-alpha/groundingdino_swint_ogc.pth

画像とテキストプロンプト、閾値を指定

grounded_sam_simple_demo.py#L31-L35

...

SOURCE_IMAGE_PATH = "./assets/demo2.jpg"
CLASSES = ["The running dog"]
BOX_THRESHOLD = 0.25
TEXT_THRESHOLD = 0.25
NMS_THRESHOLD = 0.8

...

テキストプロンプトはドット(.)区切りで入力することで複数種類の検出が可能

実行

cd Grounded-Segment-Anything
python grounded_sam_simple_demo.py

出力結果

The running dog

Grounded-DINOの出力

**© 2020 IDEA, Inc**. [Apache-2.0 license](https://github.com/IDEA-Research/Grounded-Segment-Anything?tab=Apache-2.0-1-ov-file#). 
© 2020 IDEA, IncApache-2.0 license

Grounded-DINO+SAMの出力

**© 2020 IDEA, Inc**. [Apache-2.0 license](https://github.com/IDEA-Research/Grounded-Segment-Anything?tab=Apache-2.0-1-ov-file#). 
© 2020 IDEA, IncApache-2.0 license

Horse. Clouds. Grasses. Sky. Hill

Grounded-DINOの出力

**© 2020 IDEA, Inc**. [Apache-2.0 license](https://github.com/IDEA-Research/Grounded-Segment-Anything?tab=Apache-2.0-1-ov-file#). 
© 2020 IDEA, IncApache-2.0 license

Grounded-DINO+SAMの出力

**© 2020 IDEA, Inc**. [Apache-2.0 license](https://github.com/IDEA-Research/Grounded-Segment-Anything?tab=Apache-2.0-1-ov-file#). 
© 2020 IDEA, IncApache-2.0 license

まとめ

今回、Grounded-SAMを利用することで自由なテキストプロンプトでSAMを利用できることを紹介しました。

この技術を使用することで、新たなデータセットを作成する際には、ある程度アノテーションを自動的に作成できるようになり、モデル改善などのスピードを上げることができると思います。実際に、アノテーションツールなどに組み込まれていたりします。

また、SAMの精度も十分な精度が出ているように思えますが、下記のようにさらに高精度なセグメンテーションができるSAM-HQという物も発表されています。これもGrounded-SAMで使用することができるので、気になる方はぜひ使ってみてください。

SAMとSAM-HQの比較

**© 2020 IDEA, Inc**. [Apache-2.0 license](https://github.com/IDEA-Research/Grounded-Segment-Anything?tab=Apache-2.0-1-ov-file#). 
© 2020 IDEA, IncApache-2.0 license

**© 2020 IDEA, Inc**. [Apache-2.0 license](https://github.com/IDEA-Research/Grounded-Segment-Anything?tab=Apache-2.0-1-ov-file#). 
© 2020 IDEA, IncApache-2.0 license

最後に

セーフィーではエンジニアを積極的に募集しています。気になる方はこちらをご覧ください!

https://safie.co.jp/teams/engineering/

カジュアル面談から受け付けておりますので、気軽に応募いただければと思います!

最後までお読みいただき、ありがとうございました。

© Safie Inc.