はじめに
セーフィー株式会社の第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
- 画像と検出結果の矩形をプロンプトとして入力
- セグメンテーション結果を出力
- Grounded-DINO
実践
環境構築
リポジトリをクローンする
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の出力
Grounded-DINO+SAMの出力
Horse. Clouds. Grasses. Sky. Hill
Grounded-DINOの出力
Grounded-DINO+SAMの出力
まとめ
今回、Grounded-SAMを利用することで自由なテキストプロンプトでSAMを利用できることを紹介しました。
この技術を使用することで、新たなデータセットを作成する際には、ある程度アノテーションを自動的に作成できるようになり、モデル改善などのスピードを上げることができると思います。実際に、アノテーションツールなどに組み込まれていたりします。
また、SAMの精度も十分な精度が出ているように思えますが、下記のようにさらに高精度なセグメンテーションができるSAM-HQという物も発表されています。これもGrounded-SAMで使用することができるので、気になる方はぜひ使ってみてください。
SAMとSAM-HQの比較
最後に
セーフィーではエンジニアを積極的に募集しています。気になる方はこちらをご覧ください!
https://safie.co.jp/teams/engineering/
カジュアル面談から受け付けておりますので、気軽に応募いただければと思います!
最後までお読みいただき、ありがとうございました。