Cosmos and Chaos
Eyecatch

画像を指定して似た様な画像を生成できるAI「ControlNet」の使い方

プログラミングができない人でもできる! 第2弾。
なのでやっぱり技術的な事や歴史的な事は端折ります。

ControlNetでできること

Canny Edge
指定された画像からエッジを抽出し、入力された呪文(プロンプト)に合わせて別の画像を生成する
M-LSD Lines
指定された画像から直線を抽出し、入力されたプロンプトに合わせて別の画像を生成する
Human Pose
指定された画像から人間の姿勢を抽出し、入力されたプロンプトに合わせて別の画像を生成する

他にも色々あるのですが、まだ自分も全部読めていないので、詳細は以下のページへ。
英語ですが画像付きなので、上の適当な日本語要約よりは解りやすいかも。

例えばこの画像から、

ControlNet入力画像(『Vampire Night』のジャケット画像)

こんな画像が作れます。

ControlNetの出力画像

(これはエッジ抽出で変なところまで線を引っ張ってしまった結果、美少女が錬成されただけですが…。)

ControlNet Web UI

2023年2月19日現在は、Stable Diffusion v1.5を利用したモデルが配布されています。

本記事で入力に使用している画像は、全て自作の画像(Sophiaが撮影・加工、またはそもそもStable Diffusion等のツールで作成した画像)を使用しております。

ControlNetの使い方

ここでは各モデルに共通する使い方を説明します。
モデルごとに異なる部分は次のセクションに記載します。
以下の記事を参考にしました。

Google Colabの標準GPUでできる範囲であれば無料で使えます。
コピペが面倒な人用にNotebookを用意したので、コピーしてお使いください。
但しNotebook外での作業もしないと動きませんので、詳細は以下の使い方をお読みください。

Open In Colab

ランタイムを設定する

Google Colaboratoryの編集画面のメニューの編集→ノートブックの設定で、ハードウェア アクセラレータをGPUにします。

(初回のみ)Googleドライブにインストール用のディレクトリを用意する

ブラウザ上で手動で行っても構いませんが、Google Colab上でも実行できます。
Googleドライブアプリを使ってローカルと同期している人は、PC上で行っても構いません。

Colabから行う場合は以下のコードを実行します。
アクセス許可を求められるので許可してください。

from google.colab import drive
drive.mount("/content/drive")
import os
os.makedirs("/content/drive/My Drive/Colab Notebooks", exist_ok=True)

最後の行os.makedirs("/content/drive/My Drive/Colab Notebooks", exist_ok=True)Colab Notebooksの部分は好きなフォルダ名で構いません。
フォルダ名を変更した場合は、以下の指示中に出てくるフォルダ名も変更して実行するようにしてください。

(初回のみ)ControlNetをダウンロード

こちらも知識のある方は直接ダウンロードして設置してもOK。
Google Colabでダウンロードする場合は、以下を実行します。

%cd "/content/drive/My Drive/Colab Notebooks"
!git clone https://github.com/lllyasviel/ControlNet.git

必要なライブラリをインストール

(初回のみ)まずは以下の内容の「requirements.txt」というファイルを作成し、Googleドライブ上のマイドライブ→Colab Notebooks→ControlNetフォルダ内にアップロードします。
PC上で作成して、ブラウザでGoogleドライブにアップロードすればOK。

ファイルに記載する内容
gradio
albumentations
opencv-contrib-python
imageio
imageio-ffmpeg
pytorch-lightning
omegaconf
test-tube
streamlit
einops
transformers
webdataset
kornia
open_clip_torch
invisible-watermark
streamlit-drawable-canvas
torchmetrics
timm
addict
yapf
prettytable
basicsr
xformers
triton == 2.0.0.dev20230217

その後以下を実行します。
初回は既にGoogleドライブがマウントされているので、上の2行は不要です。

from google.colab import drive
drive.mount("/content/drive")
%cd "/content/drive/My Drive/Colab Notebooks/ControlNet"
!pip install -r requirements.txt

ライブラリインストール時の依存関係のエラーは、私の環境では無視しても動きました。

(各モデルの初回のみ)モデルファイルをダウンロード

以下のページから、使いたい変換処理に対応するモデルをダウンロードし、Googleドライブ上のマイドライブ→Colab Notebooks→ControlNet→modelsフォルダ内にアップロードします。

どのモデルをダウンロードすべきかは後述します。

モデルファイルは各6GBくらいあるので、Googleドライブの容量には注意してください。
この後で行うスクリプトの実行中にも追加でモデルがダウンロードされます。

スクリプトの修正

スクリプトの最後の行を、以下のように修正します。

修正前

block.launch(server_name='0.0.0.0')

修正後

block.launch(auth=("username", "password"), share=True)

usernamepasswordはそれぞれお好きな文字列に変更してください。

どのスクリプトを修正すべきかは後述します。

スクリプトの実行

スクリプトを実行し、画像生成の為のWeb UIを立ち上げます。

!python gradio_canny2image.py

上記のコマンドでしているファイル名は、例としてCanny Edge用です。
どのスクリプトを実行すべきかは後述します。

Web UI上で画像生成

スクリプトが正常に実行されると、ログ中にRunning on public URL:で始まる行が表示されます。
続くURLをクリックし、自分で設定したログイン情報でログインすると、画像生成画面に移動します。

基本的な使い方は画像をアップロードしてプロンプトを入力→実行するだけなので、見れば解ると思います。

使い終わったら実行を止める

止める時は、実行ボタンの所が停止ボタンのようになっているので、そこを押せばキャンセルとなります。

スクリプトが停止すると、ControlNetの画面にアクセスできなくなります。

各モデルごとの使い方詳細

Canny Edge

モデルとスクリプト

ダウンロードするモデル
control_sd15_canny.pth
修正・実行するスクリプト
gradio_canny2image.py

使用例

※私が使用するモデルを間違えていただけで、このモデルは写真を突っ込めば写真っぽいのが出てきて正解です。

Human Pose

モデルとスクリプト

ダウンロードするモデル
control_sd15_openpose.pth
修正・実行するスクリプト
gradio_pose2image.py

トラブルシューティング

スクリプト実行時に

No module named 'basicsr'

というエラーが出た場合は、以下を実行してから、スクリプトを再度実行してください。

!pip install basicsr

私の記事では最初から requirements.txt に含めているのですが、他の方のを参考にしていると抜けている場合があります。

使用例

入力画像の解像度を768x512にすると横長で生成してくれるようです。

注意点:今回の方法ではカラフル棒人間の入力は上手くいきません

理由は、以下の記事にある通り、カラフル棒人間を使う場合はPreprocessorをnoneにする必要があるのですが、今回のシステムでは立ち上げたWeb UI上で設定を変更することが出来ないからです。

AUTOMATIC1111の方では利用できます。

全く絵が描けないマンは、まずポーズ画像を用意するのが大変ですね…。
まだ試せていないのですが、人物写真や3Dモデルなどを入力すれば、今回のUIでも上手くいくはずです。

POSEMANIACSさんの資料をAIの入力に使うのはOKのようです。

Sophia

DTMとかやる人。