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】 | くろくまそふと
ざっくり書くと、以下をインストールすることになるらしい。
しかし、ControlNet なるものを使えばポーズ等を指定しやすくなるらしい。せっかくだから試用してみることにした。
環境は以下。
- Windows10 x64 22H2
- Python 3.10.6 x64
- CPU : AMD Ryzen 5 5600X
- RAM : 16GB
- GPU : NVIDIA GeForce GTX 1060 6GB
自分の環境では、Stable Diffusion web UI を、D:\aiwork\stable-diffusion-webui\ にインストールしてある。
ControlNet の導入方法は、以下の解説記事を参考にさせてもらった。ありがたや。
_ポーズを指定して画像を生成できる「ControlNet」の使い方【Stable Diffusion web UI】 | くろくまそふと
ざっくり書くと、以下をインストールすることになるらしい。
- Stable Diffusion web UI で ControlNet を利用するための拡張機能をインストール。
- ControlNet用のモデルデータをインストール。
◎ 拡張機能のインストール :
巷の解説記事を眺めると、大体は、github のURLをコピペしてインストールする方法が紹介されているのだけど。今回は前述の解説記事に従って、Stable Diffusion web UI の拡張機能タブ → 拡張機能リストで拡張機能の一覧を表示して、インストールする方法を選んでみた。
拡張機能の一覧から、sd-webui-controlnet を探して、右側にあるインストールボタンをクリックすればインストールできる。
しかし、sd-webui-controlnet のインストール時、DOS窓上にエラーが出た。よく分からないので、全部貼り付けてみる。
おそらくだけど…。sd-webui-controlnet という拡張機能を動かすためには、opencv-contrib-python と mediapipe という Pythonのモジュールが必要になるっぽい。しかし、そのモジュールのインストール時にエラーが出てしまったように見える。たぶん。自信無いけど。
試しに、それらのモジュールを、手作業でインストールしてみることにした。
Stable Diffusion web UIを終了させて(DOS窓を閉じて)、別途、DOS窓(cmd.exe) を起動してから、pip を使ってインストール。ただし、(Stable Diffusion web UIインストールフォルダ)\venv\Scripts\ をカレントディレクトリにして作業しないといけない。
手作業でインストールする分には、エラーが出ない状態でインストールできた、ような気がする。
拡張機能の一覧から、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しておいた。
これを、以下にコピーする。
ちなみに、以下のページでも、ファイルサイズが小さくなってるモデルデータがあるのだけど。
_webui/ControlNet-modules-safetensors at main
ファイルの日付が2ヶ月前だったので、こちらは選ばず、前述のページから入手できる、1.45GB のファイル群を選んだ。そちらのファイル群は、7日前に更新されてるっぽいので…。新しいほうがいいのだろうと…。
_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 という設定項目が増えている。小さい三角をクリックすると、隠れていた設定項目が表示される。
以下のページで、3種類の動作テスト方法が紹介されていた。
_ControlNet - としあきdiffusion Wiki*
3番目の、img2img タブ上での Inpaint upload は、ちょっとハマった。Inpaint upload には、上に元画像、下にマスク画像、つまり2つの画像を渡してやらないといかんのだな…。マスク画像だけドラッグアンドドロップして、思った通りに動かないなと悩んでしまった。
- 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 の拡張機能タブで貼り付けてインストールしてみた。
ちなみに、インストール時にエラーは表示されなかった。
少し使ってみたけれど、たしかに OpenPose で指定したポーズが生成画像にも反映された。
そんな時は、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
_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画像をダウンロードできる。
◎ 余談。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 を載せないとダメかな…。
特に、Hires.fix を使うと、メモリが足りないと言われてしまう。なかなか厳しい。
ちなみに、VRAM だけではなく、メインメモリも16GBでは足りない感じがしている。気付いたら、Cドライブに、pagefile.sys が8.5GBほど作られていた。つまり、Stable Diffusion web UI を使っているうちに、16GB + 8.5GB ほどのメモリが必要になった瞬間があった、ということだろうなと…。32GB を載せないとダメかな…。
[ ツッコむ ]
#2 [zatta] 自転車用ヘルメットがまだ売ってない
ホームセンターサンデーに寄って、大人向けの自転車用ヘルメットが売ってないか確認してきたのだけど、店頭では一つも売ってなかった。
一応、棚には「大人用」と札も貼ってあったし、わざわざ入り口のあたりにヘルメット売り場を移動していたので、2023/04から着用が努力義務になっていることを店側も把握してるっぽいのだけど…。商品が無いのではなあ…。
どのくらい経てば、在庫が復活するんだろうか。
一応、棚には「大人用」と札も貼ってあったし、わざわざ入り口のあたりにヘルメット売り場を移動していたので、2023/04から着用が努力義務になっていることを店側も把握してるっぽいのだけど…。商品が無いのではなあ…。
どのくらい経てば、在庫が復活するんだろうか。
[ ツッコむ ]
以上、1 日分です。