Matting Anythingを動かしてみる
はじめに
以前、Matting Anythingの論文読みをしていたので、次は実際に動かしてみます。
記事はこちら↓
前提
「google colabで動かそう!」みたいな記事は世の中に割とありそうだったので、以下を前提としました。
- (クラウド環境でもなんでも)GPUが使える環境がある
- Nvidia Driverがすでに使える
- (推奨)Nvidia Dockerを使ってコンテナでGPUが使える
- コンテナ内でGPUが使える前提で始める
- OSはLinux
ちなみにgoogle colabでの記事は例えばこちらです!
環境構築
前述の通り、GPUがすでに使える前提で進めます。
仮想環境の作成
venvを使って仮想環境を作ります。環境名はなんでもいいですが、今回は.venv
としましょう。
python -m venv .venv
仮想環境を有効化しておきましょう。
source .venv/bin/activate
依存パッケージのインストール
リポジトリをcloneしつつ、必要なパッケージやライブラリをインストールします。
git clone https://github.com/SHI-Labs/Matting-Anything
cd Matting-Anything
pip install -r requirements.txt
segment-anything のインストール
SAMをインストールします。必要性については前回の記事をご覧ください。
python -m pip install -e segment-anything
GroundingDINO のインストール
ここは初めての話ですが、この後行うDemoで必要になるため、GroundingDINOをインストールします。詳細な説明は避けますが、Grounding DINOはTransformerベースの物体検出モデルで、プロンプトをInput可能です。
DemoではTextでMattingしたい物体を指定する際にGroundingDINOが使われます。export BUILD_WITH_CUDA=True
python -m pip install -e GroundingDINO
diffusers のインストール
ここも初めての話ですね...Demoでは、Mattingした画像を任意の背景と合成するというが可能です。その際、背景をStable Diffusionを使って生成できるというOptionがあるので、インストールしておこうというわけです。
pip install --upgrade diffusers[torch]
モデル重みのダウンロード
Demoで使用する重みをダウンロードします。
- まずは重みを入れるフォルダを作成
mkdir checkpoints
cd checkpoints
- GroundingDINOの重みをダウンロード
wget https://github.com/IDEA-Research/GroundingDINO/releases/download/v0.1.0-alpha/groundingdino_swint_ogc.pth
- MAMの重みダウンロード
MAMの重みはGoogle Driveからダウンロードします。
https://drive.google.com/drive/folders/1Bor2jRE0U-U6PIYaCm6SZY7qu_c1GYfq
上記に3つのファイルがあるのでダウンロードし、checkpoints
フォルダに配置します。
(Demoではデフォルトでmam_vitb.pth
しか使ってなさそうです。)
- SAMの重みをダウンロード
以下のサイトより保存し、Matting-Anything/segment-anything/checkpoints
においてください。
https://huggingface.co/datasets/Gourieff/ReActor/blob/main/models/sams/sam_vit_b_01ec64.pth
hugging face登録してないよという方は以下でも良さそうです...
Demoの起動
Matting-Anything ディレクトリ に戻ってからGradioアプリを実行してください。
python gradio_app.py
以下のような画面をブラウザで確認できればOKです!
デフォルトでお姉さんの写真がアップロードされているので、とりあえずPromptを指示通りに入れてRunしてみます。
綺麗に合成できました!
パラメータの意味
GUIで設定できるパラメータの意味について解説します。
Prompt type
- 物体を認識するためのガイドラインタイプを指定する
- textを選択した場合、次のパラメータのText Promptを元に物体検出を行うようになる
- アップロード画像にカーソルを持ってくると落書きできるようになっており、ここで点などを描き、
scrible point
などを選択すると、自分が指定した領域をもとに物体を検出します。以下のDemo動画を見るとイメージしやすいと思います
Text Prompt
- 前段で
text
を選んだ場合に有効 - このPromptを使って物体検出を行う
- 裏ではGrounding DINOが動いている
Background type
- 背景のタイプを選択する
-
generated_by_text
の場合- 次のパラメータのpromptをもとに画像をランダムで生成する
- 裏ではStable Diffusionが動いている
-
real_world_sample
の場合- すでにある画像にMattingした画像を合成
- このDemoでは、
assets/backgrounds
にある画像からランダムに選択されます
Background prompt
- 前段で
generated_by_text
を選択した場合に有効 - このpromptをもとにStable Diffusionで画像を生成する
最後に
みなさんもDemoを使ってお気に入りの画像をMattingしてみましょう!!
Discussion