Home Artists Posts Import Register

Content

こんばんは、スタジオ真榊です。今夜はこちらのツリーでも紹介した、線画を使ったAIイラスト生成についての記事です!線画にAIで着色するために必要ないろいろなTIPSや、controlnetの各種設定の方法、線画をできるだけそのままにしながらリッチにスケールアップする方法など、実用的な技術について解説できればと思います。




今回の記事はControlnetを使いますので、まだインストールしていない方は「ControlNet徹底解説!プロンプト苦難の時代が終わる…」から、StableDiffusionWebUI自体が初めての方は「【StableDiffusion導入解説】NovelAI中級者がローカル環境を導入したら別世界に突入した件」からお読みいただけると、スムーズに入れるかと思います。


線画に色を塗ってみよう!


まずは入門編、線画に色を塗る方法です。これは、これまでのControlnet記事を読んでいる方なら解説せずとも分かると思いますが、何事もまずは基本から。こちらに用意した線画を基に着色していく方法を考えてみましょう。(※ちなみにこの線画は、次回紹介する線画LoRAを使って生成しています)




こちらの線画をControlnetに放り込み、preprosessor「canny」、モデルも「canny」で生成します。線画、つまり白い背景のイラストからcanny抽出する場合は、「invert Input color」(色調反転)にチェックを入れておきましょう。



設定は上の通り。ちなみにCanvasのサイズは参照画像(線画と)これから生成するもので比率が一致しているので、いちいち操作する必要はありません。気になるのはAnnotator resolusion(抽出処理)の値。極端に高かったり、低かったりすると失敗するのですが、最適な値がどれくらいなのかよくわかりません。


そこで、実際に実験してみました。こちら(▼)が、Annotator resolusionを100,200,300,400,500,600,700,800,900,1000,1200,1400,1600,1800,2000で生成したX/Yプロットです。ちなみにSEED値は-1(ランダム)としています。




恐らく800~1200くらいまでがちょうどよい値で、低いと輪郭線が十分に認識されず、高すぎると謎のドットが散りばめられてしまう結果になりました。安定値とみられる800~1200でも胸付近に手の破綻が見られますが、何度もガチャることである程度の修正を期待するか、controlnet拡張で手の描写を支配しよう!で紹介したdepthを使った方法で修正すると良いでしょう。



実際に生成した結果


何はともあれ、さきほどのCanny設定で生成すると、下図のような結果が得られます。いずれも768✕512サイズにHiresを強さ0.5で掛けて1.5倍サイズにしたものです。



※Cannyのweightがいずれも「1」なので、細部を見比べると当初の線画からは微妙に離れていることがわかります。より線画を忠実に塗りたい場合は、weightを強めていくことになります。(後述)



特に色を指定しないと、AIはこのように、自由な判断で色を塗ってくれます。プロンプト指定で「red hair」や「Black wear」などと色を指定して、塗りを傾向づけることもできますし、「shiny skin」「cloth reflecting light」「backlighting」「cinematic lighting」「flat color」といったタグで好みの塗り・露光に近づけることも当然可能です。「線画に色を塗る」と紹介しましたが、本質的には「輪郭を固定してイラストを生成する」なので、要するに線画を参照画像にして普段のcannyと同じことをやっているだけなのですよね。


こちらはプロンプト末尾に「flat color」「anime coloring」を追加したもの▼



こちらは「realistic」を追加したもの▼ といっても、あまり大きな変化はありませんでした。もともとフラットな塗りのアニメ調モデルなので、realisticにしてもいきなり人間らしくなったりしませんが、学習モデルを別のものに変えるともっとビビッドに絵柄が変化します。




線画をそのまま塗るためには?


ところで、上の4枚画像を見比べてもらうと、どれも線画を忠実に塗ったわけではなく、それなりに弾力を持ってAIが線を動かしていることが見て取れますね。特に背景のビルは、ほとんど線画を参照してくれていません。


できたイラストと参照元の線画を重ねると…



これくらい線が乖離していることがわかります。


これは、やはりhires.fix(高解像度補助)を掛けている影響が大きいと思われます。また、さきほどは線画をpreprosessor「canny」で検出して、モデル「canny」に読み込ませていたわけですが、よく考えるとpreprosessorで検出せずとも、参考画像は既に線画になっているのですよね。


そこで、「hires:OFF」「preprosessor:none」で生成してみると…



hiresなしなので高精細ではありませんが、線画にかなり忠実な塗りをすることができました。線画と重ねてみたGIF▼を見てみると、特にキャラクターについては線画にあったほとんどの主線が保存されていることがわかります。



せっかくの色塗りなので、前回の記事で紹介したwildcard機能を使って髪と服のカラーをランダムにしてみました。プロンプトによっては夜にしたり、夕焼けにしたりもできそうですね。



細部を細かく見ていくと、例えばビルの解釈が違っていたり、スカートのひだの位置が変わっているなどはありますが、hiresありに比べて遥かに線画のままに塗っている感じがします。


次に、i2iアップスケールをしてもこの主線が保たれるかを確かめます。左下の1枚をi2iに送り、さきほどと全く同じように線画cannyを掛けて、512✕768からノイズ除去強度「0.5」で1.5倍サイズにアップスケールするとこんな感じに。(※変なドットが散りばめられる場合は、cannyのweightを0.6くらいに下げるとうまくいきます)



さらにこれをノイズ除去強度0.5で2倍サイズにアップスケールするとこうなります。



塗りはかなりリッチになりますが、手が崩壊したり手すりの一部が肌色に塗られてしまったりと、絵柄そのものへの侵食も大きいですね。顔もほとんど別人になっていますし、画面右下にも謎の指が…


そもそもこれは線画辞典で背後のバルコニー(?)部分が構図崩壊しているので、どう塗っても完璧な出来にはならないのですが、こういった方法▼であっという間にレタッチすることもできます。


ほいっ!


ということで、クォリティーは多少アレですが、妙だった部分が軽率に直ってしまいました。なんで!?と思うかもしれませんが、種明かしをすれば単純な話。これは、アップスケール前のイラストとアップスケール後のイラストを同じサイズにして重ねて、部分部分を柔らかい消しゴムで消すことでマージする方法、名付けて「人力マージ」です…(笑)


肘から手首の下の謎空間など、マージでもなんとかならない部分は自分でささっと塗りました。所要時間2~3分です。


これはたったニ枚を合成したわけですが、i2iでほぼ同じ構図を大量にガチャっていると部分部分で良いところが出るので、破綻してしまったところを別の良質イラストとマージすることで、ある程度の破綻なら最小限の加筆で直すことができます。両方のイラストがちょっとでもズレるといけないので、線画がぴったり重なるほど強くControlnetが効いているときだけ使える裏技みたいなものですね。



このように、縦2048サイズまで上げてもほとんど主線が離れない結果となりました。


ここまで主線が保存できるとなると、例えば線画レベルで破綻を直したり、背景の線画を空白にしておいて、segmentationなどで好きなものに差し替えたりと、さまざまな活用法が期待できます。特に、画像生成AIをなんとなく「悪いもの」として忌避していた絵心のある人々に「すげぇ!」とか「面白そう!」と思ってもらえるような機能なのではないでしょうか。



おまけ:「weight実験」


さて、hiresを諦めればかなり忠実に塗れることはわかりましたが、hiresを掛けながら線を動かさないことはできないのでしょうか。controlnetには「weight」で影響を強める機能があるので、定番のX/Yプロット実験で試してみました。(※ちなみに大した結果は出ないので、cannyのweight影響が気になる方以外は読み飛ばしてもらっても結構です)


annotator resolusionは安定値とみられる「800」に固定。768✕512サイズにHiresを強さ0.5で掛けて1.5倍サイズにアップスケール指定し、cannyのweightを「0.5,0.6,0.7,0.8,0.9,1.0,1.1,1.2,1.3,1.4,1.5」で実験してみた結果が、下図です。



1.5まで強めましたが、どれも背景はまちまちで、線画に忠実になっているかどうかよくわかりません。最強の1.5に線画を重ねても、これだけ線が離れてしまっています。



ぐぬぬ。ではさらに強めてみます!weightはバーが2.0までしかないのですが、x/yプロット上で2以上にするとどうなるのか実験してみましょう。「wight:1.6,1.7,1.8,1.9,2.0,2.5,3.0」で生成したのがこちらです。



残念な結果となりました。色調がどんどん薄まり、かといって線画への忠実性が増すわけでもなく、ほぼほとんどが破綻状態となってしまいました(だからweight2.0が操作画面上では最大値なんですね)


hiresを掛けながら線画の主線を保持する方法は、他にも「Hed」を試してみるなどいろいろ実験しましたが、良い結果は出ませんでした。Controlnetは短時間でとんでもない進化を遂げているので、来月のいまごろにはこんなことに悩んでいるのがバカバカしくなっているかもしれませんが、3月6日の現在位置はここらへん…ということで、今日の記事は終えたいと思います。



終わりに


最初に紹介したツイートのツリーは、ふだんフォローしていただいている方からすると妙な説明口調で違和感があったと思うのですが、これは画像生成AIになんとなく忌避感のある一般の方向けにツイートしたものでした。露骨にバズり狙いの書き方をしてしまい、恥ずかしく思っています。




AIを使えば確かに他人の著作物のi2iパクリや実在人物のポルノ化など、モラルに反した行為も行えはしますが、本質的には多くの人がイラストを楽しめるようになったり、イラストを嗜んでいる人たちが更に創作性を発揮できるようになったりするための技術なはずです。何より、多くの優れた技術者の方々がControlnetやLoRAといったさまざまな最先端技術を切り拓いてくださっているのに、画像生成AI全体がモラルのない悪徳技術かのように思われてしまうのはとても悲しいことです。画像生成AIの仕組み自体が誤解され、「他人の著作物を無断でコラージュする盗作技術である」と認識されつつあることにも落胆していました。


ただ、絵心のある人がみなAIに敵対心を燃やしているかというと、そんなことはないのではないでしょうか。大部分の人は「よく知らないけどなんとなくダメなもの」とか「みんなが怒っているもの」というふんわりした忌避感を持っている程度なのではないかと思います。


今回紹介した線画着色テクニックは、そうした人たちにも「画像生成AIって他人の絵を盗むだけじゃないんだ」とか「一度くらいやってみたいな」と思ってもらえる内容ではないかなと思い、こうしたバズり狙いツイートをした次第です。AI術師というだけでチクチク言葉を投げられたり、批判されたりするような時代が早く終わればいいなと願っています。


そんなわけで、今日はAIを使って「線画に色塗り」をしてもらおう!でした。

それでは皆様、今週も頑張っていきましょう!スタジオ真榊でした。




ごめんなさいおじさん、ワイはおじさんよりたぶん絵が下手です…。





Files

Comments

z-kumagon

難しい問題ですね。色々。

kaiju

ためになりました。 最後のweight問題、他のControlNetモデルもそうですが、本来ほしい「形状」よりも、元の色に寄っていってしまうんですよね。

KZ

これって逆はできますか?塗は一番個性が出る部分なので自分でやりたいです。 線画は作業ゲーなので機械に任せたいです。 レイヤー分けまでしてくれると自分で分ける手間が省けるので助かります。

スタジオ真榊

カラーイラストの線画化については次の記事で詳しくやりますわ〜。抹茶もなかさん@GianMattya がレイヤー分けの技術開発をされていて、さっきツイートで言及されていましたね。

スタジオ真榊

そうそう、やってみて初めて実感しました。このあたりまだ進化の余地がありそうですけど、しれっと来月できるようになってそう…

ハタケ

解説記事参考になります。ありがとうございます❗ 自分で描いた獣人線画を着色してもらおうとしましたが破綻し中々うまくいきませんでした 線画に合ったモデルやプロンプトがみつかれば もっと使いやすくなりそうですね

sak

お世話になっております。 画像も多く分かりやすい解説記事を作ってくださりありがとうございます。 一週間ほど前にcontrolnetの存在を知ってstable diffusionを試し始めたばかりのものですが、本記事の内容についてひとつ質問させていただけますでしょうか。 私は自分が描いた線画に色を塗る目的で本記事を読ませていただいておりますが、当該部分に記載の内容から「hires. fix」のチェックを外して「preproseccor」の欄で「none」を選んだまま「model」欄で「control_canny-fp16[e3fe7712]」を選び画像を生成すると、全くcontrolnetが機能していないと思われる出力結果が出るようになっております。 『「hires:OFF」「preprosessor:none」で生成』とは上記の操作とは異なる操作なのでしょうか? 以上、お忙しい所恐れ入りますが、ご教示のほど宜しくお願い致します。

スタジオ真榊

獣人はなるほど、かなり難しそうですね。学習モデルはほとんど美少女イラスト特化のものが多いので、獣人ってなんですの!?状態だと思います。獣人Loraをご自分で追加学習させたりすればあるいはといった感じでしょうか…

スタジオ真榊

cannyの画面に読み込ませている線画はどんなものでしょうか?(白背景に黒か、背景透過か、拡張子は何か)また、preprocessorをnoneにして、 annotator resultボタンを押すと線画の右側にどんなものが表示されますか?preprocessorがcannyの場合はどうですか?

sak

早速のお返事ありがとうございます。 cannyの画面に読み込ませているのは白黒の下描きレベルまで整えたラフ画で、jpgファイルです。 内容としてはNSFWの絵で同一人物を複数のアングルから描いた物なので、プロンプトの内容としては「NSFW, good quality, 4 girls, black hair」を入れています。nevative promptについてはnovel AIを利用していた頃に使っていた「longbody, lowres, bad anatomy, bad hands, missing fingers, pubic hair,extra digit, fewer digits, cropped, worst quality, lowquality」を使っていましたが、先日上記コメントをお送りした後に賢木様の記事を更に読ませていただいた結果多重negative promptは良くないとのことだったので、ひとまずnegativeは無しで生成しました。 preprocessorをnoneにした場合は、annotator resultは元の画像と同じものが出て来ます。 preprocessorがcannyの場合の生成結果は、weightの数値により程度の違いもありますが「多少その線画のアタリに即した上で別の絵柄の絵が出来上がる」という具合です。 preprocessorがnoneの場合の生成結果は、ジーンズ生地の様な絵にぼんやりとpromptの内容を意識したであろう女性の姿が浮かび上がってる様な絵が生成されます。

スタジオ真榊

jpgって読み込めないんじゃないかしら?やったことないですが…pngにしてみたらどうでしょう。

スタジオ真榊

白背景の場合はinvert input colorをオンにしてください〜。ネガティブが少ない方がいいのはcheckpointによるので、多い方が良いものができるモデルもありますわ。

Anonymous

自分は絵を描くとき、 最初にカラーラフまで作ってから、 線画の清書をします。 色まで設計段階で考えないと、完成したときの方向性がズレるからです。 これなら手軽に完成図の方向確認ができます。 運良くガチャがハマれば、カラーラフ制作時間を短縮して、他のことに労力をさけるかと。 ありがたい。

sak

返答が遅くなり申し訳ありません。 pngに変換したりinvert input colorをオンにしたところ、preprocessorをnoneのままcontrolnetに入れた画像を読み込むことが出来ていることが確認できましたが、その際の結果も先日試した「preprocessorがcannyの場合」の分とあまり変わらない結果になりました。 上記の通り一枚絵と言うよりは漫画に近い複雑な(と言うかランダム性の強い)構図なので恐らくそのまま塗ったものが出てくることを期待するのは酷なのかなという気もしています。 何度もご回答くださりありがとうございました。 今後ともよろしくお願いいたします。