画像を指定して似た様な画像を生成できるAI「ControlNet」の使い方
プログラミングができない人でもできる! 第2弾。
なのでやっぱり技術的な事や歴史的な事は端折ります。
Contents
ControlNetでできること
- Canny Edge
- 指定された画像からエッジを抽出し、入力された呪文(プロンプト)に合わせて別の画像を生成する
- M-LSD Lines
- 指定された画像から直線を抽出し、入力されたプロンプトに合わせて別の画像を生成する
- Human Pose
- 指定された画像から人間の姿勢を抽出し、入力されたプロンプトに合わせて別の画像を生成する
他にも色々あるのですが、まだ自分も全部読めていないので、詳細は以下のページへ。
英語ですが画像付きなので、上の適当な日本語要約よりは解りやすいかも。
GitHub - lllyasviel/ControlNet: Let us control diffusion models!Let us control diffusion models! Contribute to lllyasviel/ControlNet development by creating an account on GitHub.
例えばこの画像から、

こんな画像が作れます。

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

2023年2月19日現在は、Stable Diffusion v1.5を利用したモデルが配布されています。
本記事で入力に使用している画像は、全て自作の画像(Sophiaが撮影・加工、またはそもそもStable Diffusion等のツールで作成した画像)を使用しております。
ControlNetの使い方
ここでは各モデルに共通する使い方を説明します。
モデルごとに異なる部分は次のセクションに記載します。
以下の記事を参考にしました。
Google Colab で ControlNet によるpix2pixを試す|npaka|note「Google Colab」で「ControlNet」によるpix2pixを試したので、まとめました。 1. ControlNet 「ControlNet」は、入力に対して画像で条件づけするDiffusionモデルです。入力画像の構造を維持したまま、pix2pixできます。 構造を維持するために、以下の10種類の手法が提案されています。 ・Canny Edge ・M-LSD Lines
Google Colabの標準GPUでできる範囲であれば無料で使えます。
コピペが面倒な人用にNotebookを用意したので、コピーしてお使いください。
但しNotebook外での作業もしないと動きませんので、詳細は以下の使い方をお読みください。
ランタイムを設定する
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フォルダ内にアップロードします。
lllyasviel/ControlNet at mainWe’re on a journey to advance and democratize artificial intelligence through open source and open science.
どのモデルをダウンロードすべきかは後述します。
モデルファイルは各6GBくらいあるので、Googleドライブの容量には注意してください。
この後で行うスクリプトの実行中にも追加でモデルがダウンロードされます。
スクリプトの修正
スクリプトの最後の行を、以下のように修正します。
修正前
block.launch(server_name='0.0.0.0')
修正後
block.launch(auth=("username", "password"), share=True)
username
、password
はそれぞれお好きな文字列に変更してください。
どのスクリプトを修正すべきかは後述します。
スクリプトの実行
スクリプトを実行し、画像生成の為の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
使用例
写真を突っ込んだのが悪そう #ControlNet pic.twitter.com/nJaLNCdsCD
— Sophia / ほしがみちえ (@CosmossoahC) February 18, 2023
※私が使用するモデルを間違えていただけで、このモデルは写真を突っ込めば写真っぽいのが出てきて正解です。
Human Pose
モデルとスクリプト
- ダウンロードするモデル
- control_sd15_openpose.pth
- 修正・実行するスクリプト
- gradio_pose2image.py
トラブルシューティング
スクリプト実行時に
No module named 'basicsr'
というエラーが出た場合は、以下を実行してから、スクリプトを再度実行してください。
!pip install basicsr
私の記事では最初から requirements.txt に含めているのですが、他の方のを参考にしていると抜けている場合があります。
使用例
StableDiffuson v1.4で作った左の画像をControlNet Human Poseに突っ込むと右が出来た pic.twitter.com/I06yDKVMtE
— Sophia / ほしがみちえ (@CosmossoahC) February 19, 2023
入力画像の解像度を768x512にすると横長で生成してくれるようです。
注意点:今回の方法ではカラフル棒人間の入力は上手くいきません
なんか全然違うポーズになるんだが #ControlNet
— Sophia / ほしがみちえ (@CosmossoahC) February 18, 2023
そしてまたもろはちゃんを作ろうとしている… pic.twitter.com/lCsgAVKzgf
理由は、以下の記事にある通り、カラフル棒人間を使う場合はPreprocessorをnoneにする必要があるのですが、今回のシステムでは立ち上げたWeb UI上で設定を変更することが出来ないからです。
ControlNet導入&使い方解説 3D人形・実写画像等から姿勢を入力し画像生成 webUI(1111)用Stable Diffusion web UI(AUTOMATIC1111)の拡張機能(Extension)「ControlNet」をインストールし、姿勢を棒人間や実写・二次元画像、3D デッサン人形などから指定して画像を生成する方法を解説
AUTOMATIC1111の方では利用できます。
全く絵が描けないマンは、まずポーズ画像を用意するのが大変ですね…。
まだ試せていないのですが、人物写真や3Dモデルなどを入力すれば、今回のUIでも上手くいくはずです。
POSEMANIACSさんの資料をAIの入力に使うのはOKのようです。
【お願い】
— posemaniacs - ポーマニ (@posemaniacs) February 14, 2023
新しいAI技術(ControlNet)でポーズ指定生成ができるように。AIアートの実験にポーマニを使うこともOKです。ただし、全データぶっこ抜きを捌く体力はないので、そういう点だけご配慮ください。https://t.co/1yJekbRC21
POSEMANIACS - Royalty free 3d pose reference for all artistsPosemaniacs.com is a royalty free pose reference for all artists. Our mission is “to create free learning materials for all people who want to be an artist.” We are small teams it would be great if yo