mieki256's diary



2023/04/20(木) [n年前の日記]

#1 [cg_tools] ControlNetを試用

画像生成AI、Stable Diffusion web UI は、人物のポーズなどを指定するのが面倒臭い。どういう単語を打ち込めばそれらしいポーズをとってくれるのか分からないので、思いつくまま何かしらの単語を打って、これでもない、これでもないと悩むことになる。

しかし、ControlNet なるものを使えばポーズ等を指定しやすくなるらしい。せっかくだから試用してみることにした。

環境は以下。
自分の環境では、Stable Diffusion web UI を、D:\aiwork\stable-diffusion-webui\ にインストールしてある。

ControlNet の導入方法は、以下の解説記事を参考にさせてもらった。ありがたや。

_ポーズを指定して画像を生成できる「ControlNet」の使い方【Stable Diffusion web UI】 | くろくまそふと

ざっくり書くと、以下をインストールすることになるらしい。

拡張機能のインストール :

巷の解説記事を眺めると、大体は、github のURLをコピペしてインストールする方法が紹介されているのだけど。今回は前述の解説記事に従って、Stable Diffusion web UI の拡張機能タブ → 拡張機能リストで拡張機能の一覧を表示して、インストールする方法を選んでみた。

拡張機能の一覧から、sd-webui-controlnet を探して、右側にあるインストールボタンをクリックすればインストールできる。

しかし、sd-webui-controlnet のインストール時、DOS窓上にエラーが出た。よく分からないので、全部貼り付けてみる。

Error running install.py for extension D:\aiwork\stable-diffusion-webui\extensions\sd-webui-controlnet.
Command: "D:\aiwork\stable-diffusion-webui\venv\Scripts\python.exe" "D:\aiwork\stable-diffusion-webui\extensions\sd-webui-controlnet\install.py"
Error code: 1
stdout: Installing sd-webui-controlnet requirement: mediapipe==0.9.1.0

stderr: Traceback (most recent call last):
  File "D:\aiwork\stable-diffusion-webui\extensions\sd-webui-controlnet\install.py", line 11, in <module>
    launch.run_pip(f"install {lib}", f"sd-webui-controlnet requirement: {lib}")
  File "D:\aiwork\stable-diffusion-webui\launch.py", line 129, in run_pip
    return run(f'"{python}" -m pip {args} --prefer-binary{index_url_line}', desc=f"Installing {desc}", errdesc=f"Couldn't install {desc}")
  File "D:\aiwork\stable-diffusion-webui\launch.py", line 97, in run
    raise RuntimeError(message)
RuntimeError: Couldn't install sd-webui-controlnet requirement: mediapipe==0.9.1.0.
Command: "D:\aiwork\stable-diffusion-webui\venv\Scripts\python.exe" -m pip install mediapipe==0.9.1.0 --prefer-binary
Error code: 1
stdout: Collecting mediapipe==0.9.1.0
  Downloading mediapipe-0.9.1.0-cp310-cp310-win_amd64.whl (49.8 MB)
     ---------------------------------------- 49.8/49.8 MB 9.2 MB/s eta 0:00:00
Requirement already satisfied: protobuf<4,>=3.11 in d:\aiwork\stable-diffusion-webui\venv\lib\site-packages (from mediapipe==0.9.1.0) (3.20.3)
Requirement already satisfied: flatbuffers>=2.0 in d:\aiwork\stable-diffusion-webui\venv\lib\site-packages (from mediapipe==0.9.1.0) (23.3.3)
Requirement already satisfied: attrs>=19.1.0 in d:\aiwork\stable-diffusion-webui\venv\lib\site-packages (from mediapipe==0.9.1.0) (22.2.0)
Requirement already satisfied: matplotlib in d:\aiwork\stable-diffusion-webui\venv\lib\site-packages (from mediapipe==0.9.1.0) (3.7.1)
Requirement already satisfied: numpy in d:\aiwork\stable-diffusion-webui\venv\lib\site-packages (from mediapipe==0.9.1.0) (1.23.3)
Requirement already satisfied: absl-py in d:\aiwork\stable-diffusion-webui\venv\lib\site-packages (from mediapipe==0.9.1.0) (1.4.0)
Collecting opencv-contrib-python
  Downloading opencv_contrib_python-4.7.0.72-cp37-abi3-win_amd64.whl (44.9 MB)
     ---------------------------------------- 44.9/44.9 MB 9.5 MB/s eta 0:00:00
Requirement already satisfied: kiwisolver>=1.0.1 in d:\aiwork\stable-diffusion-webui\venv\lib\site-packages (from matplotlib->mediapipe==0.9.1.0) (1.4.4)
Requirement already satisfied: contourpy>=1.0.1 in d:\aiwork\stable-diffusion-webui\venv\lib\site-packages (from matplotlib->mediapipe==0.9.1.0) (1.0.7)
Requirement already satisfied: python-dateutil>=2.7 in d:\aiwork\stable-diffusion-webui\venv\lib\site-packages (from matplotlib->mediapipe==0.9.1.0) (2.8.2)
Requirement already satisfied: cycler>=0.10 in d:\aiwork\stable-diffusion-webui\venv\lib\site-packages (from matplotlib->mediapipe==0.9.1.0) (0.11.0)
Requirement already satisfied: pyparsing>=2.3.1 in d:\aiwork\stable-diffusion-webui\venv\lib\site-packages (from matplotlib->mediapipe==0.9.1.0) (3.0.9)
Requirement already satisfied: fonttools>=4.22.0 in d:\aiwork\stable-diffusion-webui\venv\lib\site-packages (from matplotlib->mediapipe==0.9.1.0) (4.39.3)
Requirement already satisfied: packaging>=20.0 in d:\aiwork\stable-diffusion-webui\venv\lib\site-packages (from matplotlib->mediapipe==0.9.1.0) (23.0)
Requirement already satisfied: pillow>=6.2.0 in d:\aiwork\stable-diffusion-webui\venv\lib\site-packages (from matplotlib->mediapipe==0.9.1.0) (9.4.0)
Requirement already satisfied: six>=1.5 in d:\aiwork\stable-diffusion-webui\venv\lib\site-packages (from python-dateutil>=2.7->matplotlib->mediapipe==0.9.1.0) (1.16.0)
Installing collected packages: opencv-contrib-python, mediapipe

stderr: ERROR: Could not install packages due to an OSError: [WinError 5] ANZX\u06c2\u0702B: 'D:\\aiwork\\stable-diffusion-webui\\venv\\Lib\\site-packages\\cv2\\cv2.pyd'
Check the permissions.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "D:\aiwork\stable-diffusion-webui\extensions\sd-webui-controlnet\install.py", line 13, in <module>
    print(e)
UnicodeEncodeError: 'cp932' codec can't encode character '\u06c2' in position 2984: illegal multibyte sequence

おそらくだけど…。sd-webui-controlnet という拡張機能を動かすためには、opencv-contrib-python と mediapipe という Pythonのモジュールが必要になるっぽい。しかし、そのモジュールのインストール時にエラーが出てしまったように見える。たぶん。自信無いけど。

試しに、それらのモジュールを、手作業でインストールしてみることにした。

Stable Diffusion web UIを終了させて(DOS窓を閉じて)、別途、DOS窓(cmd.exe) を起動してから、pip を使ってインストール。ただし、(Stable Diffusion web UIインストールフォルダ)\venv\Scripts\ をカレントディレクトリにして作業しないといけない。
cd /d D:\aiwork\stable-diffusion-webui\venv\Scripts

pip install opencv-contrib-python
pip install mediapipe

手作業でインストールする分には、エラーが出ない状態でインストールできた、ような気がする。

ControlNet用モデルデータの入手 :

ControlNetを使うためには、別途、モデルデータが必要。以下からDLする。

_lllyasviel/ControlNet-v1-1 at main

1.45GBぐらいの各ファイル(拡張子は .pth だった)をDL。全部で14ファイルあるけれど、自分が使いそうなモノだけDLすればいいらしい。しかし、どれが何なのか、今の時点では分らないので、とりあえず14ファイル全部をDLしておいた。

これを、以下にコピーする。
(Stable Diffusion web UIインストールフォルダ)\extensions\sd-webui-controlnet\models\

ちなみに、以下のページでも、ファイルサイズが小さくなってるモデルデータがあるのだけど。

_webui/ControlNet-modules-safetensors at main

ファイルの日付が2ヶ月前だったので、こちらは選ばず、前述のページから入手できる、1.45GB のファイル群を選んだ。そちらのファイル群は、7日前に更新されてるっぽいので…。新しいほうがいいのだろうと…。

使ってみた :

インストールに成功すると、Stable Diffusion web UI の、txt2img や img2img のページに、ControlNet という設定項目が増えている。小さい三角をクリックすると、隠れていた設定項目が表示される。
  • ControlNet の設定項目部分に、元ポーズとなる画像をドラッグアンドドロップ。
  • ControlNet を有効に。
  • プリプロセッサ種類で、canny(キャニー)云々を選択。
  • プリプロセッサのモデルで、canny云々を選択。
この状態で、今まで通りに生成処理をさせたら、ポーズが反映された状態で画像が生成された。どうやら一応動いてくれたっぽい。

以下のページで、3種類の動作テスト方法が紹介されていた。

_ControlNet - としあきdiffusion Wiki*

3番目の、img2img タブ上での Inpaint upload は、ちょっとハマった。Inpaint upload には、上に元画像、下にマスク画像、つまり2つの画像を渡してやらないといかんのだな…。マスク画像だけドラッグアンドドロップして、思った通りに動かないなと悩んでしまった。

Openpose Editor もインストール :

毎回、元ポーズとなる画像をどこかから探してきて、ControlNet に渡すのは、ちょっと面倒臭い。任意のポーズを指定できるようにならないものか。

そんな時は、OpenPose というものが使えるらしい。OpenPose用の画像を眺めると、棒人間っぽいものが描かれているけれど、色だのなんだのを使って、「ここが右足」「ここが左目」「ここが左耳」と言った感じで人体のポーズが指定されているのだとか。

なんでも、ControlNet + Openpose が前処理としてやっているのも、元画像からポーズを抽出して OpenPose にする処理だそうで…。つまり、その前処理を、人間様がやってしまったほうが話が早い。毎度毎度、元ポーズ画像を探してくる手間を省ける。

その、OpenPose画像を作るための Stable Diffusion web UI用拡張機能が、Openpose Editor なのだとか。

_GitHub - fkunn1326/openpose-editor: Openpose Editor for AUTOMATIC1111's stable-diffusion-webui

ということで、これもインストール。この拡張機能については、github のURL を、Stable Diffusion web UI の拡張機能タブで貼り付けてインストールしてみた。
https://github.com/fkunn1326/openpose-editor.git

ちなみに、インストール時にエラーは表示されなかった。

  • インストールに成功すると、Openpose Editor というタブが増えている。
  • そこで棒人間の各関節の位置を調整して、ControlNet に画像を送ることができる。
  • ControlNet 側では、プリプロセッサの種類を「None(なし)」に。プリプロセッサのモデルを、「openpose」云々にする。

少し使ってみたけれど、たしかに OpenPose で指定したポーズが生成画像にも反映された。

ブラウザ上でOpenpose画像を作れるサービス :

Stable Diffusion web UI に拡張機能をインストールしなくても、Webブラウザ上で OpenPose を作れるサービスがあると知ったのでメモ。

_3D Openpose Editor
_GitHub - ZhUyU1997/open-pose-editor: online 3d openpose editor for stable diffusion and controlnet
_GitHub - nonnonstop/sd-webui-3d-open-pose-editor: 3d openpose editor for stable diffusion and controlnet
_sd-webui-3d-open-pose-editor/README-ja.md at main - nonnonstop/sd-webui-3d-open-pose-editor - GitHub

  • 肩、肘、腰、膝、等々をクリックすると、x,y,zの回転軸を示す円が表示される。
  • その円をドラッグしてやると、各関節の角度を変更できる。
  • ポーズを作って「生成する」をクリックすると、下のほうに画像のサムネイルができる。
  • 各サムネイルをクリックすると、OpenPose画像をダウンロードできる。
手や足のDepth画像やNormal画像も生成してくれる模様。

余談。VRAMが足りなくなってきた :

ControlNetをインストールしたせいなのか、それとも元から足りなかったのか分からないけど、Stable Diffusion web UI で画像を生成しようとすると、CUDA が Out of memory と言ってくることが多くなってきた。要するに、「VRAMが足りないからこれ以上処理できないよ」と…。「ControlNetを使おうとするとVRAMが更に必要になる」という話をどこかで見かけたけれど、やはり VRAM 6GB では厳しい場面があるらしい…。

特に、Hires.fix を使うと、メモリが足りないと言われてしまう。なかなか厳しい。

ちなみに、VRAM だけではなく、メインメモリも16GBでは足りない感じがしている。気付いたら、Cドライブに、pagefile.sys が8.5GBほど作られていた。つまり、Stable Diffusion web UI を使っているうちに、16GB + 8.5GB ほどのメモリが必要になった瞬間があった、ということだろうなと…。32GB を載せないとダメかな…。

以上です。

過去ログ表示

Prev - 2023/04 - Next
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project