2023/04/25(火) [n年前の日記]
#1 [cg_tools] 実写風画像から線画イラストを生成してみたい
_昨日の実験
で、画像生成AI、Stable Diffusion web UI + Anime Lineart Style LORA を使うと、線画イラストっぽい画像を生成できることが分かったけれど、これを使ったら実写風画像から線画イラストっぽい画像を生成できるのかなと疑問が湧いたので、そのあたりを試してみた。
環境は、Windows10 x64 22H2, CPU: AMD Ryzen 5 5600X, RAM: 16GB, GPU: NVIDIA GeForce GTX 1060 6GB。
元画像は以下。basil_mix という学習モデルデータを使って、txt2imgで生成。
この画像を、線画イラスト風にして出力したい。線画イラスト風を出力しやすくするために、学習モデルデータとVAEを変更する。
そして、前述の元画像を、txt2img の ControlNet の画像入力欄にドラッグアンドドロップ。
プロンプトに、"<lora:animeLineartMangaLike_v30MangaLike:1>, lineart, " を追加しつつ、生成したら以下になった。
結構イイ感じかもしれない…。
環境は、Windows10 x64 22H2, CPU: AMD Ryzen 5 5600X, RAM: 16GB, GPU: NVIDIA GeForce GTX 1060 6GB。
元画像は以下。basil_mix という学習モデルデータを使って、txt2imgで生成。
1 girl, beautiful, school uniform, upper body, masterpiece, best quality, highres, Negative prompt: EasyNegative, (worst quality:1.4), (low quality:1.4), (normal quality:1.4), lowers, Steps: 25, Sampler: DPM++ SDE Karras, CFG scale: 5, Seed: 3864758789, Size: 512x512, Model hash: 0ff127093f, Model: Basil_mix_fixed
この画像を、線画イラスト風にして出力したい。線画イラスト風を出力しやすくするために、学習モデルデータとVAEを変更する。
- 学習モデルデータ : anything-v4.5.safetensors
- VAE : anything-v4.0.vae.pt
そして、前述の元画像を、txt2img の ControlNet の画像入力欄にドラッグアンドドロップ。
- プリプロセッサ : softedge_pidisafe
- モデル : control_v11p_sd15_softedge
プロンプトに、"<lora:animeLineartMangaLike_v30MangaLike:1>, lineart, " を追加しつつ、生成したら以下になった。
1 girl, beautiful, school uniform, upper body, masterpiece, best quality, highres, <lora:animeLineartMangaLike_v30MangaLike:1>, lineart, monochrome, greyscale, Negative prompt: EasyNegative, (worst quality:1.4), (low quality:1.4), (normal quality:1.4), lowers, Steps: 25, Sampler: DPM++ SDE Karras, CFG scale: 5, Seed: 331652086, Size: 512x512, Model hash: 1d1e459f9f, Model: anything-v4.5, ControlNet Enabled: True, ControlNet Module: softedge_pidisafe, ControlNet Model: control_v11p_sd15_softedge [a8575a2a], ControlNet Weight: 1, ControlNet Guidance Start: 0, ControlNet Guidance End: 1
結構イイ感じかもしれない…。
◎ 解像度を上げると変わってしまう :
txt2img の Hires.fix を使って、512x512 の画像を 1024x1024 として生成してみたところ、以下のような結果になった。
前述の生成画像と比べると、随分と絵柄が変わってしまった。これがもし手描きイラストだったら「別の方が描きましたか?」って言われそう。
解像度を上げて生成するだけでも、これほど絵柄が変わってしまうのでは、漫画やアニメのように、ある程度絵柄の統一が期待されるメディアでは使えないよなと思えてきた。いやまあ、背景だけとか、そういう部分では使えるかもしれないけれど。 *1
余談。そういえば、背景制作の一部にAIを使ってみたアニメ作品がある、という話を以前ネットで見かけた気がする。もしかすると、「キャラは絵柄が安定しないから使えないけど、背景だけなら大体は一枚絵で済むし使えなくもないかも」ということだったのかもしれない。分らんけど。
1 girl, beautiful, school uniform, upper body, masterpiece, best quality, highres, <lora:animeLineartMangaLike_v30MangaLike:1>, lineart, monochrome, greyscale, Negative prompt: EasyNegative, (worst quality:1.4), (low quality:1.4), (normal quality:1.4), lowers, Steps: 25, Sampler: DPM++ SDE Karras, CFG scale: 5, Seed: 331652086, Size: 512x512, Model hash: 1d1e459f9f, Model: anything-v4.5, Denoising strength: 0.7, ControlNet Enabled: True, ControlNet Module: softedge_pidisafe, ControlNet Model: control_v11p_sd15_softedge [a8575a2a], ControlNet Weight: 1, ControlNet Guidance Start: 0, ControlNet Guidance End: 1, Hires upscale: 2, Hires steps: 8, Hires upscaler: Latent (bicubic antialiased)
前述の生成画像と比べると、随分と絵柄が変わってしまった。これがもし手描きイラストだったら「別の方が描きましたか?」って言われそう。
解像度を上げて生成するだけでも、これほど絵柄が変わってしまうのでは、漫画やアニメのように、ある程度絵柄の統一が期待されるメディアでは使えないよなと思えてきた。いやまあ、背景だけとか、そういう部分では使えるかもしれないけれど。 *1
余談。そういえば、背景制作の一部にAIを使ってみたアニメ作品がある、という話を以前ネットで見かけた気がする。もしかすると、「キャラは絵柄が安定しないから使えないけど、背景だけなら大体は一枚絵で済むし使えなくもないかも」ということだったのかもしれない。分らんけど。
◎ img2imgでは線画にならない :
img2imgだけで ―― ControlNet は未使用状態で試してみたけど、なかなか厳しい結果になった。
白黒イラストっぽいけれど、これは線画じゃないなと。いやまあ、改めて見直してみたら、前述の2つの生成事例も全然線画じゃない気がしてきたけど…。
ちなみに、最初に試してみた際には、うっすら色がついた感じの画像が生成されてしまった。プロンプトに "monochrome, greyscale," を追加してやることで、無理矢理だけど白黒画像にできた。でも、コレは線画じゃない。
カラーイラスト風で生成するのであれば、img2imgでもイケるのだろうけど…。例えば、下のような結果でも良いのであれば…。
余談。AIの生成画像なので、やっぱり指がおかしいですね。
1 girl, beautiful, school uniform, upper body, masterpiece, best quality, highres, <lora:animeLineartMangaLike_v30MangaLike:1>, lineart, monochrome, greyscale, Negative prompt: EasyNegative, (worst quality:1.4), (low quality:1.4), (normal quality:1.4), lowers, Steps: 25, Sampler: DPM++ SDE Karras, CFG scale: 7, Seed: 1475614968, Size: 512x512, Model hash: 1d1e459f9f, Model: anything-v4.5, Denoising strength: 0.55
白黒イラストっぽいけれど、これは線画じゃないなと。いやまあ、改めて見直してみたら、前述の2つの生成事例も全然線画じゃない気がしてきたけど…。
ちなみに、最初に試してみた際には、うっすら色がついた感じの画像が生成されてしまった。プロンプトに "monochrome, greyscale," を追加してやることで、無理矢理だけど白黒画像にできた。でも、コレは線画じゃない。
カラーイラスト風で生成するのであれば、img2imgでもイケるのだろうけど…。例えば、下のような結果でも良いのであれば…。
1 girl, beautiful, school uniform, upper body, masterpiece, best quality, highres, Negative prompt: EasyNegative, (worst quality:1.4), (low quality:1.4), (normal quality:1.4), lowers, Steps: 25, Sampler: DPM++ SDE Karras, CFG scale: 7, Seed: 1520341489, Size: 512x512, Model hash: eb4099ba9c, Model: abyssorangemix3AOM3_aom3a3, Denoising strength: 0.58
余談。AIの生成画像なので、やっぱり指がおかしいですね。
◎ cannyで試してみた :
ControlNet のプリプロセッサ種類で、softedge_pidisafe を選んでるのがよろしくないのではないか、canny だったら違うのではと思えてきたので試してみた。txt2img で生成。
髪のあたりは線画っぽくなったけど、服の部分は線画のソレではないな…。元画像の服の部分が黒すぎるのだろうか。それはともかく、やっぱり指がおかしいですな。
- ControlNet を有効化。
- プリプロセッサ : canny
- モデル : control_v11p_sd15_canny
1 girl, beautiful, school uniform, upper body, masterpiece, best quality, highres, <lora:animeLineartMangaLike_v30MangaLike:1>, lineart, monochrome, greyscale, Negative prompt: EasyNegative, (worst quality:1.4), (low quality:1.4), (normal quality:1.4), lowers, Steps: 25, Sampler: DPM++ SDE Karras, CFG scale: 5, Seed: 331652086, Size: 512x512, Model hash: 1d1e459f9f, Model: anything-v4.5, ControlNet Enabled: True, ControlNet Module: canny, ControlNet Model: control_v11p_sd15_canny [d14c016b], ControlNet Weight: 1, ControlNet Guidance Start: 0, ControlNet Guidance End: 1
髪のあたりは線画っぽくなったけど、服の部分は線画のソレではないな…。元画像の服の部分が黒すぎるのだろうか。それはともかく、やっぱり指がおかしいですな。
◎ 実験結果 :
結論としては…。
まあ、仮に線画イラストを生成できたとしても、ソレを一体何に使うのと問われたら、現時点では使い道が思いつかないのだけど…。それに、権利的にも、これらの学習モデルデータは色々アウトだろうから、そういった面でも使い道は無いよなと…。
- 何もない状態から、txt2img + Anime Lineart Style LORA を使って、線画イラスト風画像を生成できることは分かった。
- 実写風画像を img2img に渡して、カラーイラスト風画像を生成することもできると分かった。
- しかし、実写風画像を元にして、線画イラスト風を生成するのは難しい。グレースケール画像っぽいイラスト風なら生成できるけど、線画イラスト風にはなってくれない。
まあ、仮に線画イラストを生成できたとしても、ソレを一体何に使うのと問われたら、現時点では使い道が思いつかないのだけど…。それに、権利的にも、これらの学習モデルデータは色々アウトだろうから、そういった面でも使い道は無いよなと…。
◎ VRAMが足りない :
Hires.fix を使って 1024x1024の画像を出力しようとしたら、NaN が大量発生しただの、VRAM が足りないだのエラーが出て処理が中断されてしまった。GTX 1060 6GB では、やはり厳しいのか…。
webui-user.bat 内の指定を変えればVRAMが少ない環境でも動くかも、という話を見かけたので試してみた。
webui-user.bat の2行目に以下を追加。なんでも、VRAM に対してガベージコレクションを行う頻度を指定しているらしい。
加えて、webui-user.bat内の、COMMANDLINE_ARGS の指定を増やした。
上記の指定をしたところ、Hires.fix を使って、512x512の画像を1024x1024として出力することができた。
もっとも、前述の通り、生成される画像は結構盛大に変わってしまうので、処理時間がかかった割に「コレジャナイ」感が…。うーん。
webui-user.bat 内の指定を変えればVRAMが少ない環境でも動くかも、という話を見かけたので試してみた。
webui-user.bat の2行目に以下を追加。なんでも、VRAM に対してガベージコレクションを行う頻度を指定しているらしい。
set PYTORCH_CUDA_ALLOC_CONF=garbage_collection_threshold:0.6, max_split_size_mb:128
加えて、webui-user.bat内の、COMMANDLINE_ARGS の指定を増やした。
@rem set COMMANDLINE_ARGS= set COMMANDLINE_ARGS= --xformers --no-half-vae --medvram
- --xformers : xformers を使うことで処理が速くなる。その代わり、同じ乱数シードを与えてもビミョーに違う生成画像になる。
- --no-half-vae : NaN とやらが大量に出て処理が止まってしまう場合、これをつけることで fp16 とやらが fp32 になって、処理が通るかもしれない、ということらしい。
- --medvram : VRAMが4GBしかない時はコレをつけてみよ、ということらしい。その分処理速度は遅くなるそうで。
上記の指定をしたところ、Hires.fix を使って、512x512の画像を1024x1024として出力することができた。
もっとも、前述の通り、生成される画像は結構盛大に変わってしまうので、処理時間がかかった割に「コレジャナイ」感が…。うーん。
*1: もっとも、背景として使うとしても、パースがめちゃくちゃな画像が平気で生成されたりするらしいので、やっぱり漫画には使えないよ、という話もどこかで見かけた気がする。パース云々が絡んでくると、3DCGを活用するのが妥当という話になるのだろうなと。3DCGであれば、活用している漫画家さんも既に居るから、実績があるし。
[ ツッコむ ]
以上です。