まえがき AdobeのFireflyのBetaが配信されてますますAI絵の凄さがAI絵を触ってない人にも伝わってきたように思います。 私はそんなあとからAI絵について知りたい、簡単にかけるようになりたいという人でもすぐにやれるようにnoteを作っていけたらなあと思ってます。
VRAM問題の解消法 私はRTX3080の10GBを使用してるのですがそれでも始めてからずっと生成に思ったよりも時間がかかったり、生成中にエラーが出たりしてました。 そのため、なんかないかなんかないかってここのところずっとツイッターの先人たちの話を眺めてたり、ブログやYoutubeの情報を漁っていろいろと試してたんですけど全然なおらなかったんですよね。
いつも生成時に9.8GBくらいメモリを使ってた 明らかになにかおかしいなぁって思いながらもサイズをいじったりしてなんとか動かしてたんですけどある日たまたま別件のエラーでTiled Diffusionを使用したときにError Value: float32~って感じのエラーが出てきたんですね。 で調べたら設定画面のfloat32にアップキャストするって部分のチェックを外せばいいらしいということがわかったので外してみたんですよ。そしたら2Kくらいのサイズのものなら以前の10倍くらいの速度で生成できるようになったではありませんか。使用メモリも全然使ってません。もっと早く知っておきたかった…。っていうしょうもない内容のことをcontrolnetの説明の前に自慢話+トホホ話としておいておきます。
まず全表示 ctrl+Fでfloatって検索してチェックを外す 設定を適用を押す(念のためUIの再読み込みをしておく) ControlNet(1.1) 私の中で最強の拡張機能ControlNetを紹介したいと思います。 ぶっちゃけこれがないとAI絵で真っ当に破綻してない絵をStable Diffusion webui(AUTOMATIC1111)だけでは作れません!!!! 作れても構図は同じようなのばっかりだし、細かい姿勢やごてごてした背景とかとにかくいろいろなあの人の絵めっちゃ凝ってるのにどうやって作ってるんだ…ってなります。 そんな悩みを解決するのがControlNet様というわけですね。
インストール方法 を書きたいところなんですけど説明が面倒くさいし先人がいらっしゃいますのでそちらを確認してください。
また、1.1になりモデルが増えてますのでこちらも先人の方のやりかたを参考にしながら入れてください。
あとはControlNetを複数使う場合もありますのでその設定をします。
設定画面のControlNetタブを開く Multi ControlNet: 最大モデル数 (再起動が必要)という部分を3か4くらいにしておく おめー他人のブログに頼りっきりで結局なにも教えてねーじゃねえかって声が聞こえてきそうですけど私が紹介したいのはインストール方法ではなくその使い方やその活用方法ですので許して。。。 というわけで次からは私がよく使うモデルとその活用方法を教えますね。
Tileモデル 私が個人的に一番お世話になってるのはTileモデルです。 元々の使用方法が超低画質の画像をアップスケールするためにあるモデルになってます。 もちろんその通りの使い方でもいいですけどここではちょっと別の用途で使用します。 まあ適当に絵を下みたいに作ります。
1girl, bowing, dynamic pose, coloful background, yellow theme, red theme, Negative prompt: easynegative Steps: 20, Sampler: DPM++ SDE Karras, CFG scale: 7, Seed: 3982442397, Size: 910x512, Model hash: a4ffd69ea9, Model: BreakDomainAnime_breakdomainanime_A0440, Clip skip: 2, Version: v1.2.1 そしたら、t2iのタブのままでいいのでwebuiを下にスクロールするとControlNetの項目があるのでクリックして開きます。 作成した画像を貼り付けて、下記のような設定にしてみてください。
プリプロセッサはtile_resampleでもnoneでもいい 改めてControlNetの有効化にチェックが入ってるかを確認してから再度全く同じプロンプトや設定でいいので生成開始。
1girl, bowing, dynamic pose, coloful background, yellow theme, red theme, Negative prompt: easynegative Steps: 20, Sampler: DPM++ SDE Karras, CFG scale: 7, Seed: 3479762544, Size: 910x512, Model hash: a4ffd69ea9, Model: BreakDomainAnime_breakdomainanime_A0440, Clip skip: 2, Version: v1.2.1, ControlNet 0: "preprocessor: none, model: control_v11f1e_sd15_tile [a371b31b], weight: 1, starting/ending: (0, 1), resize mode: Crop and Resize, pixel perfect: True, control mode: Balanced, preprocessor params: (512, 64, 64)" なんということでしょう…。なんか書き込み量(ディテール)が増えてる感じがしますよね?この絵の場合は書き込みが少ないほうが味があるのでちょっと悪い例な気もしますがこんな感じに書き込み量を増やしたい場合にはとても有効です。 またなんかよくわからないものを読み込ませても適当にそれっぽいものとしてAIが解釈してくれていい感じにしてくれることがありますのでいろんな絵を作成→Tileモデルで生成って感じで遊んでみてください!きっといろんなインスピレーションがもらえると思いますよ! ちなみにCotrol Modeって設定がデフォルトだとバランスになってるんですけど、モデルによってはモデルやプロンプトの設定以上にControlNetの描き方に引っ張られることがあります。そういった場合は真ん中のMy prompt is more importantにしてあげるとちょうどいい塩梅で生成してくれるのでおすすめですね。
My prompt is more important Shuffleモデル 本当はControlNet1.0のころからあるopenposeとか1.1からできたlineartとかも紹介したいんですがそちらは絵師とかの人ほど嬉しい機能で私みたいに絵が描けない人からすると便利なのはわかるけどそもそもそれに使うようの絵を持ってないんだよなぁってなります。 でも、まず大事なのは絵のアイデアと構図や背景、キャラの衣装などではないでしょうか? だって絵の素人なんだもん。だったら適当に書いてそこからアイデアを見つけたりすればいいんですよ! そんなあなたにShuffleモデル~(青ダヌキロボット風の声) まあまずは使ってみましょう!最初はプリプロセッサはNoneでモデルをShuffleでやってみましょう!絵はさっきのままでいいです。
モデルをshuffleに変えただけ そしたら、プロンプトは適当にcat girlにでもして猫娘にでもしてもらいますか。これで生成開始!
cat girl, Negative prompt: easynegative Steps: 20, Sampler: DPM++ SDE Karras, CFG scale: 7, Seed: 874243303, Size: 910x512, Model hash: a4ffd69ea9, Model: BreakDomainAnime_breakdomainanime_A0440, Clip skip: 2, Version: v1.2.1, ControlNet 0: "preprocessor: none, model: control_v11e_sd15_shuffle [526bfdae], weight: 1, starting/ending: (0, 1), resize mode: Crop and Resize, pixel perfect: True, control mode: Balanced, preprocessor params: (512, 64, 64)" すると何枚か作ってみるとわかりますがなんか雰囲気入れた画像と似てませんか? そうですShuffleモデルはその絵の特徴をAIが勝手に判断してその面影を残しながら適当な属性(プロンプト)に置き換えて?生成してくれます。 なので生成するごとに雰囲気は同じなんだけど違う絵が生成されます。 いい感じの絵ができたのにちょっと解釈違いな部分がある絵とかができたときの再利用になりますのでうまく使ってみてください。 また先程も書きましたがControlNetのプロンプト優先にするとプロンプトの言うことを結構聞いていい感じシャッフルした絵ができますのでいろいろ試して遊んでみてください。
プリプロセッサShuffle+Shuffleモデル 先程はプリプロセッサをNoneでやってましたが今回はプリプロセッサをShuffleにしてモデルはそのままShuffleでやってみましょう! とりあえず設定とかはそのまま生成開始!!
cat girl, Negative prompt: easynegative Steps: 20, Sampler: DPM++ SDE Karras, CFG scale: 7, Seed: 1508107673, Size: 910x512, Model hash: a4ffd69ea9, Model: BreakDomainAnime_breakdomainanime_A0440, Clip skip: 2, Version: v1.2.1, ControlNet 0: "preprocessor: shuffle, model: control_v11e_sd15_shuffle [526bfdae], weight: 1, starting/ending: (0, 1), resize mode: Crop and Resize, pixel perfect: True, control mode: Balanced, preprocessor params: (512, 64, 64)" 後ろの猫ちゃんがちょっと潰れてますけどあらあらいい感じの絵ができましたね!しかも背景もそれっぽいペイントアートみたいになってます! 明らかに画像の雰囲気は残ってるのに全然別の絵になりました。 どういうことなのかというとShuffleプリプロセッサにかけると使用した画像は下記のようにぐにゃんぐにゃんにされてしまいます。 このぐにゃんぐにゃんになった絵から絵を再構築してるため色合いとかは残しながら全然違う絵になるわけですね。
ぐにゃんぐにゃんになった使用した絵 この2つのモデルを利用してプロンプトだけでは作りにくい絵を作ってみよう! ではここでちょっとした自分のこの2つの機能を使用したアイデアの出し方について紹介します。 まずは、生成ボタンを押して完了する前に中断させてください。 すると下記のようなモザイク絵ができます。
生成を押してから中断させた絵 そしたらこれをControlNetに入れて再度プリプロセッサShuffle+Shuffleモデルで動かしてみてください。
モザイク絵をいれる すると失敗する絵も多いかもしれませんがときどきいい感じの構図になることがあります。
cat girl, Negative prompt: easynegative Steps: 20, Sampler: DPM++ SDE Karras, CFG scale: 7, Seed: 1143712726, Size: 910x512, Model hash: a4ffd69ea9, Model: BreakDomainAnime_breakdomainanime_A0440, Clip skip: 2, Version: v1.2.1, ControlNet 0: "preprocessor: shuffle, model: control_v11e_sd15_shuffle [526bfdae], weight: 1, starting/ending: (0, 1), resize mode: Crop and Resize, pixel perfect: True, control mode: Balanced, preprocessor params: (512, 64, 64)" 左上や左下、右上なんかはいい感じではないでしょうか(cat girlって言ってるのに猫が出るけど強度を変えたりプロンプト優先とかにしてみましょう) じゃあなんかCDジャケみたいでいい感じなので左下を今回は使ってみましょう。 画像をいれて、プリプロセッサNoneに、モデルはTileにして生成開始!
None+Tileにしてスタート cat girl, Negative prompt: easynegative Steps: 20, Sampler: DPM++ SDE Karras, CFG scale: 7, Seed: 3825093830, Size: 910x512, Model hash: a4ffd69ea9, Model: BreakDomainAnime_breakdomainanime_A0440, Clip skip: 2, Version: v1.2.1, ControlNet 0: "preprocessor: none, model: control_v11f1e_sd15_tile [a371b31b], weight: 1, starting/ending: (0, 1), resize mode: Crop and Resize, pixel perfect: True, control mode: Balanced, preprocessor params: (512, 64, 64)" すると結構また味が違う絵ができましたよね? ただちょっと私的に左のレンガがいらないのでこの絵は一旦ボツにします。 今度は別の絵で試してみましょう。
今度はこっち 構図的にはいいんですけどちょっと顔がつぶれてしまってますね…。 顔が潰れる原因は解像度が低い場合があるので解像度をあげれば改善します。これでもいいならこれでも大丈夫。でも私は頭が見切れているのがちょっと納得行かないので今度は猫の絵で再チャレンジ。ただcat girlではないため、プロンプトはcatにしておきます。
cat girl, Negative prompt: easynegative Steps: 20, Sampler: DPM++ SDE Karras, CFG scale: 7, Seed: 316484214, Size: 910x512, Model hash: a4ffd69ea9, Model: BreakDomainAnime_breakdomainanime_A0440, Clip skip: 2, Version: v1.2.1, ControlNet 0: "preprocessor: none, model: control_v11f1e_sd15_tile [a371b31b], weight: 1, starting/ending: (0, 1), resize mode: Crop and Resize, pixel perfect: True, control mode: Balanced, preprocessor params: (512, 64, 64)" 諦めずにやってみようプロンプトをcatに変更して再チャレンジ cat Negative prompt: easynegative Steps: 20, Sampler: DPM++ SDE Karras, CFG scale: 7, Seed: 807913616, Size: 910x512, Model hash: a4ffd69ea9, Model: BreakDomainAnime_breakdomainanime_A0440, Clip skip: 2, Version: v1.2.1, ControlNet 0: "preprocessor: none, model: control_v11f1e_sd15_tile [a371b31b], weight: 1, starting/ending: (0, 1), resize mode: Crop and Resize, pixel perfect: True, control mode: Balanced, preprocessor params: (512, 64, 64)" あら、いい感じじゃないかしら? といい感じのものができたらあとはアップスケールして最後の仕上げになります(しなくてもいい)
アップスケールして仕上げ できた絵をimg2imgに転送します。
img2imgに転送を押す そしたらサンプリングとかを適当に選びます。 大事なのはノイズ除去強度を0.35 くらいまで下げることとTiled DiffusionをONにすることです。 ノイズ除去強度は ・0:ほぼ何も変化せず ・0.35:多少絵の細かい点が修正される ・0.55:ディテールや輪郭が少し変化する ・0.7~:絵の雰囲気が変わる という認識でいいと思います。 ここでは細かい点の修正を行いながらアップスケールしたいので0.35に設定しています。
ノイズ除去は沼なので上の感覚でいじってみよう Tiled Diffusionはアップスケーラーくらいの設定で十分 Tiled Diffusion内のRenoise strengthもノイズ除去と同じような項目なのだがとりあえずはいじらず、ノイズ除去強度で調整していい では生成開始!
cat Negative prompt: easynegative Steps: 20, Sampler: Euler, CFG scale: 7, Seed: 1760671747, Size: 1808x1024, Model hash: a4ffd69ea9, Model: BreakDomainAnime_breakdomainanime_A0440, Denoising strength: 0.35, Clip skip: 2, Version: v1.2.1, Tiled Diffusion upscaler: 4x-AnimeSharp, Tiled Diffusion scale factor: 2, Tiled Diffusion: "{'Method': 'MultiDiffusion', 'Tile tile width': 96, 'Tile tile height': 96, 'Tile Overlap': 48, 'Tile batch size': 1, 'Upscaler': '4x-AnimeSharp', 'Upscale factor': 2, 'Keep input size': True, 'NoiseInv': True, 'NoiseInv Steps': 10, 'NoiseInv Retouch': 1, 'NoiseInv Renoise strength': 1, 'NoiseInv Kernel size': 64}" ちびねこが生成されてしまった…。 そういうときはTiled Diffusionのタイル幅、タイルの高さ、タイルの重なりを1クリックずつあげて再度生成してみよう。
数値の横に出てくる↑を1クリックずつしていく cat Negative prompt: easynegative Steps: 20, Sampler: Euler, CFG scale: 7, Seed: 1476441406, Size: 1808x1024, Model hash: a4ffd69ea9, Model: BreakDomainAnime_breakdomainanime_A0440, Denoising strength: 0.35, Clip skip: 2, Version: v1.2.1, Tiled Diffusion upscaler: 4x-AnimeSharp, Tiled Diffusion scale factor: 2, Tiled Diffusion: "{'Method': 'MultiDiffusion', 'Tile tile width': 112, 'Tile tile height': 112, 'Tile Overlap': 52, 'Tile batch size': 1, 'Upscaler': '4x-AnimeSharp', 'Upscale factor': 2, 'Keep input size': True, 'NoiseInv': True, 'NoiseInv Steps': 10, 'NoiseInv Retouch': 1, 'NoiseInv Renoise strength': 1, 'NoiseInv Kernel size': 64}" 見事ちびねこも消えて全体的にもいい感じなったのではないだろうか! やったね! とまあこんな感じで私は普段絵を作成している。 今回モザイク絵を利用したがそれこそいろんな色のモザイク絵なり適当な絵を突っ込んでShuffleしてみると自分の想像力を超えた絵ができるぞ! ただ最後にどの絵をいいと思うかはその人次第である。 AIは絵を出力しているがあなたがどんな絵がいいかはわからない。 自分の目を育てることも大切なのでいろんな人の絵をみたりしてインスピレーションを得ると良いのではないだろうか。
あとがき 今回の表紙絵はドラグノイドというテーマで作成した。 もう少し詰めたかったがこの日は0時までに仕上げるというルールで作成していたのでちょっと物足りなさが残った作品だ。
parameters mecha dragon, Over the city, explosion, bombing, hologram, glowing eye, Negative prompt: EasyNegativeV2, watermark, Steps: 20, Sampler: Euler, CFG scale: 7, Seed: 751310082, Size: 3616x2048, Model hash: f183384556, Model: BreakDomainRealistic_breakdomainrealistic_R2333, Denoising strength: 0.55, Clip skip: 2, Version: v1.2.1, Tiled Diffusion upscaler: 4x-UltraSharp, Tiled Diffusion scale factor: 2, Tiled Diffusion: "{'Method': 'MultiDiffusion', 'Tile tile width': 128, 'Tile tile height': 128, 'Tile Overlap': 56, 'Tile batch size': 1, 'Upscaler': '4x-UltraSharp', 'Upscale factor': 2, 'Keep input size': True, 'NoiseInv': True, 'NoiseInv Steps': 10, 'NoiseInv Retouch': 1, 'NoiseInv Renoise strength': 1, 'NoiseInv Kernel size': 64}" 次回は地味にControlnetの本命に近いreference-onlyのプリプロセッサについて紹介したいと思いますので楽しみに待っていてほしい。 いつも見ていただいてありがとうございます。