公開日:2023年2月15日
最終更新日:2023年2月17日
なにができる?
左が元画像、右が新たに作成した画像です。元画像はぱくたそから使わせて頂きました。
こちらの画像です。
はじめに
ある特定のポーズをとっている画像を作成するときに以前はimg2imgを使っていました。touch-sp.hatenablog.com
それに取って代わる(?)方法として「ControlNet」というのが新たに公開されています。
github.com
PC環境
Windows 11 CUDA 11.6.2 Python 3.10.9
環境構築
まずはPyTorchのインストールpip install torch==1.13.1+cu116 torchvision==0.14.1+cu116 --extra-index-url https://download.pytorch.org/whl/cu116
公式リポジトリにあるconda用「environment.yaml」を参考にしてPyTorch以外に以下をインストールしました。
gradio==3.18.0 albumentations==1.3.0 opencv-contrib-python==4.7.0.68 imageio==2.25.1 imageio-ffmpeg==0.4.8 pytorch-lightning==1.9.1 omegaconf==2.3.0 test-tube==0.7.5 streamlit==1.18.1 einops==0.6.0 transformers==4.26.1 webdataset==0.2.33 kornia==0.6.9 open_clip_torch==2.13.0 invisible-watermark==0.1.5 streamlit-drawable-canvas==0.9.2 torchmetrics==0.11.1 timm==0.6.12 addict==2.4.0 yapf==0.32.0 prettytable==3.6.0 safetensors==0.2.7
実行
リポジトリのクローン
git clone https://github.com/lllyasviel/ControlNet cd ControlNet
gradio_canny2image.py
公開されている様々なスクリプトのうち「gradio_canny2image.py」を使ってみます。学習済みデータのダウンロード
こちらから「control_sd15_canny.pth」をダウンロードして「ControlNet/models」フォルダに保存します。スクリプトの実行
python gradio_canny2image.py
実行後にブラウザで「http://localhost:7860」にアクセスします。
元画像の輪郭を抽出してから新たな画像を作成してくれます。
輪郭の抽出は自動で行われます。
服の色は再現されないのでpromptで別途指定する必要があります。
gradio_pose2image.py
輪郭をもとに画像を生成する以外に関節位置を検出して画像を生成することも可能です。学習済みデータのダウンロード
こちらから「control_sd15_openpose.pth」をダウンロードして「ControlNet/models」フォルダに保存します。こちらから「body_pose_model.pth」と「hand_pose_model.pth」をダウンロードして「ControlNet/annotator/ckpts」フォルダに保存します。
スクリプトの実行
python gradio_pose2image.py
元画像の関節位置を検出してから新たな画像を作成してくれます。
関節位置の検出は自動で行われます。
指の関節までは検出していないので正確に指を再現することはできないようです。
はまりポイント
「Running on local URL: http://0.0.0.0:7860」と表示されます。しかし、実際には「http://localhost:7860」にアクセスする必要がありました。
VRAMはどれだけ必要?
xFormersある、なしで比較しました。xFormersを使いたいときはPython環境にpipでインストールするだけです。とりあえず一番新しいものをインストールしています。pip install xformers==0.0.17.dev451
それだけで自動的に使用されます。
xFormersなし
VRAM使用は10.3GBでした。xFormersあり
VRAM使用は7.7GBでした。関連記事
touch-sp.hatenablog.comtouch-sp.hatenablog.com