メインコンテンツへスキップ
見出し画像

【イラストAI】ノイズやテクスチャを使って描き込み量をめちゃくちゃに増やそう!3/4

    イラストのディテールを大幅に引き上げる、StableDiffusion向けの特殊なテクニックをご紹介します。(全4回)

    前回までのあらすじ

    第一回では「経緯とStableDiffusionのおおざっぱな仕組み」
    第二回では「ノイズ法のチュートリアルと解説」をお送りしました。
    ここまでにも相当量の解説がありましたが、ノイズ法にはまだ2つ、
    「ノイズ画像の種類」と「ControlNetのモデルの種類」
    という要素があります。
    今回は沼と呼ぶにはあまりに広く苦痛に満ちたこのヘドロの海を、深掘りして解説していきます。

    今回はちょっと網羅的でマニアックな内容なので、
    お急ぎの方は次の『応用編(テクスチャ法)』へどうぞ。

    解説:ノイズ画像編

    ノイズの要素について

    前回までは"ノイズ"と言いつつ、特定の1枚の画像を使い回してきましたが、一口にノイズと言っても様々な種類が存在します。
    「ノイズならなんでも同じじゃないの?」という希望を抱いている方もいらっしゃると思いますが、とんでもございません。
    ノイズを変更することで、画風や配色を大幅に変更することができるのが事実です。
    ノイズの種類によっては写実的になったり、逆にふんわり抽象的な水彩画になったりします。

    じゃあどんな要素が影響してくるのかと言うと、
    ノイズ画像の解像度や粒度、パターンの有無やその種類、色の配置や偏り、構成する色の数、彩度、明度、コントラスト、グラデーション……

    この辺の要素全てが変数になります
    「WeightとStart-Endingのパラメータ比はどうしよう」というだけでも悩ましいのに……どうしてAIはこうもややこしいのかしら?
    これから書くべきことを想像したら少しめまいがしてきました。
    到底解説も検証もしきれるものではありませんが、やってみた範囲で情報をまとめてみることにします。

    画像
    色んなノイズがあるんだなぁ……

    ・ノイズの解像度や細かさ
    細かなノイズは、イラストにすると潰れてしまいます。また、写真の様な質感になります。
    1ドット単位のノイズを読み込ませると、描き込み量や色の数はそんなに増えない一方で、写真の様な質感(コントラストや物体の質感)が出やすくなります。

    一般的な写真も拡大すると細かなノイズが載っているものですし、
    非常に細かいノイズを読み込ませると、そういう写真本来のノイズ・粒子感を思い起こさせるのかもしれませんね。
    リアル系の画像を出したい時は、こういう細かなノイズを使うと質感が改善されるかもしれません。

    ちなみに、SDくんやCNくんは潜在空間に画像を落とし込むときに1/8(64ピクセル程度)にまで画像を縮小しますが、
    色々実験してみたところ、2x2の微細パターンを認識した例もありますので、画像は1ピクセル単位で認識すると思った方がいいようです。

    ・ノイズのパターン
    パターンはない方が好ましいです。
    例えばRGBを規則正しく、サブピクセルのように並べた画像は、縦縞の模様を誘導してしまいます。
    多少ずらそうが何をしようが、パターンで生成したノイズはどこかで
    「お、これはパターンですね!」と見抜かれてしまいます。
    SDくんは大変優秀なのです。

    逆に「格子模様を出したい!」などの明確な目的がある場合は、パターンのあるノイズを採用しても良いかもしれませんが、
    それはノイズ法と言うよりはテクスチャ法の領分になるかと思います。

    そんな感じで、極力まだら模様で不規則なノイズの方が都合がよろしいです。
    でもパターンのあるノイズも、一部構図系のモデルを採用する場合は応用できるかも……しれません。

    ・ノイズの明度
    純粋なノイズは画像を暗くしがちです(tileの場合)。
    縮小して見たときに「グレーっぽいな」と思えるような中性的なノイズは、イラスト向けとしては暗すぎるようです。
    明るいノイズを掛ければ、それだけでふわっとしたイラストになりますし、
    同様に暗いノイズでは、写実的だったり陰鬱な印象を受ける絵が出やすくなります。
    ノイズが明るいにもかかわらず画像が暗くなる場合は、lineart系の副作用という可能性もあります。

    ・ノイズの彩度・色味
    ノイズを構成するノイズの色は、最終的に採用される色に影響を与えます(tileなどの場合)。
    彩度が高いほど、ビビッドな色味の絵を誘導することができますし、
    パステルカラーが並ぶノイズを読ませると、可愛い画風の絵が出やすくなります。
    SDくんのパレットの色を操作するようなイメージでしょうか。

    ノイズの種類による影響を比べた画像。左はギラギラの色彩で、右側は落ち着いた色味のイラスト
    ←ビビッドなノイズの場合|淡く白っぽいノイズの場合→

    色に反応する構図系のモデル(segやdepth)では色味や彩度によって描き込み量や構図への影響が大きく変わりますが、
    一方で彩度情報を無視する構図系のモデル(lineart系など)には影響がありません。

    ・色の割合
    純粋なカラーノイズでは赤色が多すぎるのか、色彩が壊れがちです。
    AIくんの出すノイズって緑が強めの気がします……色調調整のできるソフトを使って、赤色を弱めた方が使いやすいと思います。
    「赤はAIに拾われやすい」のか「赤が拾われると目立つ」のか僕には判断が付きません。AIも血の色で興奮するとかあるのかなぁ?
    逆に色彩感覚を破壊したい時(草を赤で描かせたい等)は、ノイズの色調調整は積極的に行ってもいいと思います。

    ・コントラスト
    コントラストの影響もあります。
    明るい色と暗い色の差が大きいノイズを使うと写真っぽくなります(構図系・色系共に影響ありそうです)。
    プロンプトで様々な画風を出し分けられるのと同様に、CNの干渉によっても画風を変更することができるのだと思います。

    ・グラデーション等
    グラデーションなどの影響も受けます(主にtile系)。
    もともとControlNetは普通の画像を模倣するための機能ですから、当然と言えば当然ですね。
    これは応用編のテクスチャ法で使いますので、覚えておいてください。

    ・まとめ
    大雑把にまとめると、
    「細かすぎず」「配色がランダムでパターンがなく」「明度がやや高めで」「コントラストは低め」「赤色は少なめ」
    のノイズがイラストには最適と思われます。条件多いですね……
    出したい画像の種類によって最適なノイズは変わってくると思いますし、
    使用するモデルやプロンプトやLoRAやControlNetのモデルやパラメータ等によっても違いが……うう変数が、変数が多い……!


    という感じでした。"という感じ"って何だろう?
    書いてる僕もよくわからなくなってきたので、作成したノイズをいくつかまとめてアップロードしました。

    次はあなたの番です。ご報告、お待ちしています。

    温室の中で女の子が佇んでいる絵。もしかすると水中かも知れない
    文字だらけで疲れた目に緑の多い画像は素早く効く
    ちなみにこれはClustered_Adjusted02.png

    解説:コントロールモデルについて

    ※検索でいらした方へ
    ごめんなさい、これは「普通のControlNetの特徴・使い方」ではありません。
    『ノイズ法』や『テクスチャ法(カムカム法)』という、特殊な使い方をしたときの反応をまとめた独自研究データです。詳しくは『第一回』へどうぞ。

    概要

    ControlNetはopenposeに代表されるように構図を定める為のモデルが多く、ノイズやテクスチャを読み込ませたときの反応も様々です。
    ノイズ・テクスチャ法では「輪郭や描き込み量を指定するモデル」と「色を転写するモデル」の2つに分けて考えますが、
    色を転写できるモデルはごく少なく、殆どの場合でtileが第一選択になると思います。(CN1.1時点)

    そのため、ここでは主にControlNetのUnit 0「輪郭や構図、描き込み量を指定するモデル」として、
    プリプロセッサなし、単独でノイズを読み込ませたときの反応を記録しています。

    研究初期のメモを参考に、1~2度ノイズ法でテストしただけなので、設定や状況によって全く違う結果になるかもしれません(特にテスクチャ法では反応が異なるかもしれません)。
    なので参考程度にお願いします……

    パラメータについて

    パラメータの指定は効き目の弱いものを除いて、作例
    (Weight1.0、Starting0.1、Ending0.5~0.7)に準じる感じでいいと思います。
    結局の所、変なデータを入れてノイズが出ればそれで良いのです。違いはあれどもノイズはノイズ、となれば設定は同じでも構わないわけです。

    構図系のモデル

    ・Openpose
    Weight2.0で使えます。人のポーズ(ボーン)を色で塗り分けて表現するモデルです。
    なのでぐちゃぐちゃのカラーノイズを読み込ませると、人体がぐちゃぐちゃに……なるわけでもないです。
    構図が区切られがちで、面白くなります。小さな人が描かれた上でノイズとして背景に塗り込められていく感じでしょうか、
    プロンプトや解像度によっては小人さんが沢山でます。screen系のプロンプトとも相性が良さそうです。

    ・M-LSD
    Weigth2.0で使えます。直線を検出するモデル(Line Segment Detector)です。
    ノイズにはあまり直線が含まれないからでしょうか、強度を高めてもそうそう破綻しません。
    背景に特化したモデルだからか被写体を壊さず背景を書き込んでくれた印象です。結構面白いモデルです。
    細かく小さな直線を拾う影響か、チェック柄やレンガなどが生成されやすいかもしれません。

    ・Scribble
    Weight2.0でも使えます。マウスで描いたような粗雑な線画からイラストを出すモデルです。
    元々胡乱な情報を扱うモデルのためか、そんなにノイズの影響を受けません。
    それでも無誘導と比べると格段に描き込みが上がります。面白みには欠けますが、安定感があります。

    ・Normalbae
    (ノイズの色味やプロンプトによっては)Weight2.0でもいけます。
    "ノーマルマップ"と呼ばれる、凹凸を色で表現した画像を読み込ませるためのモデルで、
    そこにカラーノイズを流し込む事で凹凸の情報をめちゃくちゃにする事ができます。
    とはいえそこまで構図がめちゃくちゃになるわけでもなく、作画が細かくなりがちな有望株です。面白いです。

    ・Depth
    こちらは"デプスマップ"と呼ばれる、凹凸(深度情報)を濃淡で表現した画像を読み込ませるためのモデルです。
    仕組み上、恐らく彩度情報を参照しません。
    ノイズを読み込ませると彩度が上がり、描き込みが細かくなり、また背景が歪むというか、破綻がちになり……
    なんていうか……威圧感にも近い独特の、異様な雰囲気が出たりします。
    本当に独特です。好き。

    Depthモデルで出力した画像。塗りが非常に濃密
    濃密で、執拗で、それでいて破綻がち

    ・Softedge
    CannyやLineart系の線画モデルで、筆で書いたような曖昧な線からイラストを起こすためのモデルです。
    描き込み量が上がり、代わりにコントラストは下がってしまい、水彩のような霞んだふわっとした画風になります。
    描き込み量への影響は大きめ。大変面白いモデルです。

    Softedgeで出力した画像。ややぼやけたふんわりした画風
    綺麗。サンプラーをEuler系にしたらもっと淡い表現が出せたりするかな?

    ・Lineart系
    lineartやlineart_anime, cannyは線画から画像を起こす為のモデルです。
    輪郭線用のモデルと言うことで、入力した画像の彩度情報は無視されますが、
    境界線で色の塗り分けが誘導されるのか、色彩感覚はきちんと強くなってくれます。
    入力画像をtileで読み込ませることで、色と輪郭の両方を指定できるため、特にテクスチャ法に向いたモデルです。
    制御しやすく安定した性能ですが、ノイズの細かさに応じてコントラストが濃く黒くなる欠点があります。

    ・Seg
    Segは色によってオブジェクトの塗り分け(Segmentation)を行うモデルです。
    つまりここにノイズを流し込むと、ノイズの色ごとに物を分けて描こうとしてくれるため、描き込みが非常に多くなります。
    そんな大量の情報を与えられる事を想定していないためでしょう、プリプロセッサを通すと処理にものすごい時間がかかってしまいます。ご注意ください。
    効果量を強くするともれなくお花畑になってしまいますが、うまく制御できればlineartの様な副作用もなく描き込み量を強化できる、
    可能性の塊のようなモデルです。状況によってはWaightを1.0などに強くしても機能します。

    segで出力した画像1
    黒が強調されすぎることもなく美麗
    segで出力した画像2。背景の細かさが強烈
    脅迫的な背景の細かさ

    色系のモデル

    ・Tile
    画像を拡大する為のモデルです。
    色を適用してくれる稀少なモデルで、これと上記の様な輪郭・構図系モデルを組み合わせることで、ノイズ法では色彩の強化、テクスチャ法では描きたい物の再現率の向上が狙えます。
    弱く掛けると色味が薄くなってしまうので、強度1がオススメですが、その場合はEnding0.3くらいが限度のようです(お花畑化を起こしてしまいます)。
    強く短く掛けるべきのモデルだと思います。
    なお、このモデルはDDIM系(UniPC含む)との相性が極めて悪いため、使用する際はDPM系など他のサンプラーを使いましょう。

    注意点として、色がオリジナルのまま渡る訳ではないようです。赤みが強くなるなど、しばしば色味が変化します。
    SDの生成するノイズに合わせて色味を調整してる感じでしょうか……正直全然わかりません。

    ・Shuffle
    これも色を渡してくれるモデルの一種なのですが、
    入力された画像をぐにょっと大きく変形させてバリエーションを作るガチャ用の機能なので、
    配色はオリジナルと比べて大きく変わってしまいます。
    ノイズ法ではそんなに大きな問題にはなりませんが、テクスチャ法では問題点になります。

    ・inpaint
    Weight0.25くらいが適切?本来は差分生成の為の機能です。
    経時的・連続的に変化していくので、強く短く掛けるか、弱く中くらいにかけるのが良いと思います。
    非常に癖が強く、かなり扱いにくいですが、一応彩度情報を参照します。
    色への反応の仕方は独特で、例えばモノクロノイズとカラーノイズを並べた画像を読ませると、モノクロの方は色がくすみがちで、カラーの方に人物が描かれがちというような特徴があります。

    ノイズ画像。彩度への反応を検証するための物
    こんな感じのデータを読み込ませてみると……
    inpaintに上の画像を読み込ませた結果。左右で色味が大きく異なっている。
    上の奇妙なノイズを読み込ませた結果
    左側の色味が明らかに欠落している一方、右側は非常に鮮やか

    特殊なプリプロセッサ

    ・Reference系
    画風を移植する為のプリプロセッサです。モデルがなく、プリプロセッサだけで動作します。
    何をしているかは難解で、あまりよくわかっていないのですが……
    どうやらInterrogatorと似たような感じで「画像に何が写っているか、またどんな画風か」を判断するAIが入っていて、
    そこに目標画像と生成中の画像を一緒に入れて混ぜ合わせた上で更に元画像と比較してSDへ転送しているとか……(?)
    正直全然わからない。僕達は雰囲気でAIをやっている。

    とにかく使う分には簡単です。
    パラメータは輪郭系と同じく、Weight0.5、ステップ0.1-0.6でOKです。
    また、Style Fidelity(画風の影響)というパラメータも追加されていますが……ややこしいので、基本はデフォルトの0.5でいいと思います。

    それと、ものすごく意外なのですが色を転写することができません。
    ピクセルの情報を直接参照しているのではなく、AIによって抽出された「髪の色はこれ」というような、プロンプト的な情報に変換されているのだと思います。

    ・reference adain
    描き込み量が上がりますが、背景がやや崩れがちかもしれません。
    ひょっとすると光の表現に強いかもしれません(偶然かも)。

    ・reference only
    attention層にのみ直接干渉するそうです。adainの方はIn層とかにも干渉するってことなんですかね?(?)
    画風はadainとadain+attnの中間といった感じです。

    ・reference adain+attn
    adainとonlyの両方を適用するものだと思います。
    構図が少し変わり、adainと比べて背景の描き込み量が増える印象です。
    adain等と比べてよりイラストっぽくなるような気がします、記号的になるというか、なんていうか……

    Style Fidelityについては、
    数値が高いと既存の画像のコラージュ的になり、
    数字が小さいと概念の混ざったAI的な絵になる……感じだと思います。
    ノイズやテクスチャを読ませる分には、0.0~0.5の範囲で良いのではないですかね?


    以上、reference系の解説でした。

    ところで、referenceにはVGG-19という画風分類AIが入ってようですが……
    これって「何が写っているか・画風がどんなものかを判断するAIに、ノイズを読ませている」事になるんですよね?
    普通に考えると「ノイズ以外なんの特徴もありませんでした!」って言われてしまってもおかしくない気がしますが……実際に描き込み量には影響が出ます。
    彼はノイズから一体何を読み取っているのでしょう……?

    試しにCLIPくんにノイズ画像を見せて感想を聞いてみたら、
    「めっちゃカラフルな点描」でした。なるほど。
    でもまた別のAIくんに聞いてみたら答えは、
    「女の子。あと後書きのページ」でした。な、何が見えているの……?

    まとめ

    まとめると、
    ・ノイズの色味とかも影響するから、気が向いたら調整しようね。
    ・コントロールモデルを変えると楽しいよ。
    でした(?)

    ノイズ法の解説は以上です。そ、想像の10倍くらい書くことあった……

    検証中に出た綺麗な画像。お花が宙を舞っている
    大変だったけど、検証の過程でいっぱい綺麗な画像と出会えたので僕は幸せです。

    ちなみにプリプロセッサ(30種類くらいある)を通すと結果が変わりますし、Multi ControlNetでは3つ4つとモデルを重ねることもできます。
    そしてUnit毎に別のノイズを読み込ませることもできますし、テクスチャ法と組み合わせるやり方もあります。
    それらの完璧な組み合わせは……頑張って探してくださいね。

    まあ組み合わせは無限大ですが、ノイズ法もテクスチャ法も、重要なのはとにかく「輪郭と色」の二要素を参照するという事につきます。
    これがコアの要素なので、気合いで覚えていってください。

    さあここまでは『ノイズ法』!
    まだまだ行くわよ!次は『テスクチャ法』……三要素指定です!

    →to be continued...


    御月望未(みつきのぞみ)でした!
    いちおう動画投稿者なので、ニコニコ動画とかもよろしくね!

    ・宣伝
    AIに興味のある人に比較的需要のありそうな動画です。よろしくどうぞ。


    ・よければ

    ログインとかしなくても押せるので、よかったら↓の「スキ♡」ボタンを押していってください。
    特に良い事はありませんが、特に悪い事も起こりません。ただ僕の寿命が1年延びます。

    #StableDiffusion #ControlNet #イラストAI #カムカム法


    あなたへのおすすめ