SAM 2とは
SAM 2とはMeta社が2024年7月29日に発表した「Segment Anything Model 2(SAM 2)」というAIモデルで名の通り画像を入力すると画像中の物体を"なんでもセグメント化"することができます。
ボックスやポイントなどの入力プロンプトを画像とともに入力することで、指定した箇所にあるオブジェクトマスクを生成したりすることができます。
他にも画像内のすべての物体に自動セグメント化することができます。
このモデルは1,100万枚の画像と11億枚のマスクのデータセットでトレーニングされており、さまざまなセグメンテーションタスクで強力なゼロショットパフォーマンスを発揮します。
SAM 2はGitHubにモデルのソースコードとウェブ上のデモの両方が公開されています。
- GitHub:https://github.com/facebookresearch/sam2?tab=readme-ov-file
- ウェブデモ:https://sam2.metademolab.com/
ウェブデモは動画データを使って物体のクリップ、エフェクトの付与を簡単に試用することができます。
GitHubは直接モデルのプログラム、パラメータを操作することができるので、自由なカスタマイズをすることができます。
実際にSAM 2を動かしてみた
今回GitHubのサンプルコードを動かしてみました。
リポジトリ内にJupyter Notebookのサンプルコードが提供されています。
サンプルコードは画像の自動マスク生成、入力プロンプトを使用した単一画像のマスク生成、動画のマスク生成の3つあります。
今回は入力プロンプトを使用した単一画像のマスク生成をしてみました。
サンプルコードはこちらです。
入力プロンプトは2つあります。
ボックス
画像内の矩形領域を指定して矩形内の物体にマスクを生成する。
ポイント
1点以上の画像の座標を指定してその座標上にある物体にマスクを生成する。
入力画像の準備
SAM 2に入力するための画像を準備します。
今回は以下の猫の画像を用います
目標マスク
今回は猫とクッションのマスクを生成したいと思います。
ボックスプロンプト実行結果
猫、クッション、それぞれ全体を囲うようにボックスを設定します。
すると以下のようにマスクがSAM 2から出力されました。
マスクが猫とクッションをそれぞれ覆うようにうまく出力されました。
ポイントプロンプト実行結果
猫とクッションの中心をポイントとして指定します。
以下の結果がSAM 2から得られました。
マスクが猫とクッションをそれぞれ覆うようにうまく出力されました。
動画のマスク作成のサンプルコード概要
連続するフレームの先頭のフレームに同様にポイントとボックスを指定すると、後続のフレームでマスクした物体を追跡してマスクを生成することができます。
全フレームにポイントとボックスを指定する必要がないので便利な機能が提供されています。
COCO形式への変換
マスクは画像として保存することができます。
マスク画像から物体検出で定番であるCOCO形式に変換したい時はpycocotoolsでRLE形式化してjsonファイルとして保存することができます。
pycocotoolsのmaskのデコード関数を実行すると変換できます。
その他提供ソース
実行ソースだけでなくモデルの再訓練をすることもできるようです。
再訓練して異なる分野で使用ができるモデルが公開されています。
医療向けにモデルが再訓練されているオープンソースがありました。
最後に
今回Meta社のSAM 2を試用してみました。
転移学習いらずに画像から自動的かつ自由にマスクを得られました。
COCO形式にも変換できるので他の検出AIの学習データの作成をするのに使えそうです。
他にもSAM 2使用の幅を感じました。ぜひ皆さんも使用してみてください。