🦾

Matting Anythingを動かしてみる

2025/02/03に公開

はじめに

以前、Matting Anythingの論文読みをしていたので、次は実際に動かしてみます。

記事はこちら↓
https://zenn.dev/sc_tech/articles/75012e5f818806

前提

「google colabで動かそう!」みたいな記事は世の中に割とありそうだったので、以下を前提としました。

  • (クラウド環境でもなんでも)GPUが使える環境がある
  • Nvidia Driverがすでに使える
  • (推奨)Nvidia Dockerを使ってコンテナでGPUが使える
  • コンテナ内でGPUが使える前提で始める
  • OSはLinux

ちなみにgoogle colabでの記事は例えばこちらです!
https://zenn.dev/tatsuromurata/articles/bae41111fbcfee

環境構築

前述の通り、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可能です。
https://github.com/IDEA-Research/GroundingDINO
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で使用する重みをダウンロードします。

  1. まずは重みを入れるフォルダを作成
mkdir checkpoints
cd checkpoints
  1. GroundingDINOの重みをダウンロード
wget https://github.com/IDEA-Research/GroundingDINO/releases/download/v0.1.0-alpha/groundingdino_swint_ogc.pth
  1. MAMの重みダウンロード
    MAMの重みはGoogle Driveからダウンロードします。
    https://drive.google.com/drive/folders/1Bor2jRE0U-U6PIYaCm6SZY7qu_c1GYfq

上記に3つのファイルがあるのでダウンロードし、checkpointsフォルダに配置します。
(Demoではデフォルトでmam_vitb.pthしか使ってなさそうです。)

  1. SAMの重みをダウンロード
    以下のサイトより保存し、Matting-Anything/segment-anything/checkpointsにおいてください。
    https://huggingface.co/datasets/Gourieff/ReActor/blob/main/models/sams/sam_vit_b_01ec64.pth

hugging face登録してないよという方は以下でも良さそうです...
https://dl.fbaipublicfiles.com/segment_anything/sam_vit_b_01ec64.pth

Demoの起動

Matting-Anything ディレクトリ に戻ってからGradioアプリを実行してください。

python gradio_app.py

以下のような画面をブラウザで確認できればOKです!

デフォルトでお姉さんの写真がアップロードされているので、とりあえずPromptを指示通りに入れてRunしてみます。

綺麗に合成できました!

パラメータの意味

GUIで設定できるパラメータの意味について解説します。

Prompt type

  • 物体を認識するためのガイドラインタイプを指定する
  • textを選択した場合、次のパラメータのText Promptを元に物体検出を行うようになる
  • アップロード画像にカーソルを持ってくると落書きできるようになっており、ここで点などを描き、scrible pointなどを選択すると、自分が指定した領域をもとに物体を検出します。以下のDemo動画を見るとイメージしやすいと思います

https://www.youtube.com/watch?v=XY2Q0HATGOk

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