🐙

Inpainting Anythingをgoogle colabで試してみた。

2023/05/22に公開

Inpainting Anythingとは

Inpainting AnythingとはMetaAIから発表されたSemantic Anything ModelとStable diffusionを組み合わせて色々な物体を消去したり、入れ替えたりすることができるツールです。
https://github.com/geekyutao/Inpaint-Anything

リンク

Colab
github

準備

Google Colabを開き、メニューから「ランタイム→ランタイムのタイプを変更」でランタイムを「GPU」に変更します。

環境構築

インストールの手順です。公式の通りにやるとなんか失敗するので以下の通りにします。

%cd /content
 
!git clone https://github.com/geekyutao/Inpaint-Anything.git
 
%cd /content/Inpaint-Anything

# torchtext.legacy solve: https://github.com/Stability-AI/stablediffusion/issues/8
%cd /content/Inpaint-Anything
 
!pip uninstall yellowbrick imbalanced-learn -y
!python -m pip install -e segment_anything
!python -m pip install pyyaml tqdm easydict==1.9.0 scikit-image scikit-learn albumentations==0.5.2 hydra-core==1.1.0 pytorch-lightning==1.8.3.post0 tabulate kornia==0.5.0 webdataset packaging wldhx.yadisk-direct
!python -m pip install yellowbrick imbalanced-learn
!pip install huggingface-hub

Remove Anything

(1) 学習重みのダウンロード

%cd /content/Inpaint-Anything
 
!mkdir -p pretrained_models
 
!wget -c https://dl.fbaipublicfiles.com/segment_anything/sam_vit_h_4b8939.pth \
      -O ./pretrained_models/sam_vit_h_4b8939.pth
      
# !curl -L $(yadisk-direct https://disk.yandex.ru/d/ouP6l8VJ0HpMZg) -o big-lama.zip
# !unzip big-lama.zip
# !mv big-lama ./pretrained_models
!mkdir -p pretrained_models/big-lama/models
!wget -c https://huggingface.co/camenduru/big-lama/resolve/main/big-lama/models/best.ckpt \
      -O pretrained_models/big-lama/models/best.ckpt
!wget -c https://huggingface.co/camenduru/big-lama/raw/main/big-lama/config.yaml \
      -O pretrained_models/big-lama/config.yaml

(2) ライブラリのインポート

import cv2
from google.colab.patches import cv2_imshow
 
from PIL import Image
import matplotlib.pyplot as plt

(3)消したい物体の中心あたりをプロット

point_x = 58 #@param {type:"slider", min:0, max:800, step:1}
point_y = 688 #@param {type:"slider", min:0, max:800, step:1}
 
img = cv2.imread('/content/Inpaint-Anything/example/remove-anything/person.jpg')
 
cv2.circle(
    img,  
    (point_x, point_y), # 座標
    5,                  # 円の半径 
    (0,0,255),          # カラー
    -1                  # 太さ
    ) 
 
cv2_imshow(img)

こんな感じです。

(4)推論

%cd /content/Inpaint-Anything
 
!python remove_anything.py \
    --input_img /content/Inpaint-Anything/example/remove-anything/person.jpg \
    --point_coords {point_x} {point_y} \
    --coords_type key_in \
    --point_labels 1 \
    --dilate_kernel_size 15 \
    --output_dir ./results \
    --sam_model_type "vit_h" \
    --sam_ckpt ./pretrained_models/sam_vit_h_4b8939.pth \
    --lama_config ./lama/configs/prediction/default.yaml \
    --lama_ckpt ./pretrained_models/big-lama/

推論結果です。

いい感じに消えている。すごいぞ。

Fill Anything

物体を置き換えるFill Anythingについて試してみます。

先ほどに加えてdiffusersやtransformersなどStable diffusionで利用するものをインストールします。

!python -m pip install diffusers transformers accelerate scipy safetensors

入力画像です。

推論の実行です。

%cd /content/Inpaint-Anything

!python fill_anything.py \
    --input_img ./example/fill-anything/sample1.png \
    --coords_type key_in \
    --point_coords 750 500 \
    --point_labels 1 \
    --text_prompt "a teddy bear on a bench" \
    --dilate_kernel_size 50 \
    --output_dir ./results \
    --sam_model_type "vit_h" \
    --sam_ckpt ./pretrained_models/sam_vit_h_4b8939.pth

推論結果です。

おーtedday bearに変わってる。

最後に

今回はstable diffusionやLamaとSAMを組み合わせた画像編集ツールであるInpaint-Anythingを試してみました。小さいObjectだったらもうほとんどgoogle pixelの消しゴムマジックと変わらんやんっていう精度ですね。画像編集もこのレベルが無料でできちゃうし、OSSで利用できるのはすごくいい世界がきたなという感じです。
zeroshot object detectionやCLIPと組み合わせると面白そうなアプリケーションが出来そうなので時間があったら作ってみます。

今後ともLLM, Diffusion model, Image Analysis, 3Dに関連する試した記事を投稿していく予定なのでよろしくお願いします。

Discussion