Diffusion】ControlNet1.1のLineartの実験と解説!Lineartの種類や、他の推定法との違いなど深いところまで調査していく。2023/05/03:ラフに関しては未実験項目であることを明記して修正2023/05/02:Lineartにしか出来ないことを「まとめ」に変更して加筆はじめにこの記事はStableDiffusionのエクステンションであるControlNetに関する記事である。その中でもLineartとそれに似た機能の比較を解説していく。機能などを解説した記事は次。読んでない方は次を先に読むことを推奨。謎の技術研究部よってControlNetに関する基本的な内容は解説しないので注意。main次の2つのpthファイルをDLしておく(同名のyamlファイルもDLする)control_v11p_sd15_lineart.pthcontrol_v11p_sd15s2_lineart_anime.pthlineart_animeだけ別pthファイルになっている。Diffusion本体のモデルにanything-v3-full.safetensorsのモデルを使いなさいと書かれている。本記事ではモデルを揃えないと出力画像がバラバラになってしまうので使っていない。Lineartってなにするもの?公式に明確な解説はないが、おそらく元絵から「線画」を推定して抽出する線画で書かれたイラストを入力してAIに色を塗らせるといった目的で使うものだと思われる。鉛筆で書いたような線画をスキャンして入れても良いし、元絵から線画だけを抽出するために使うのも良い。いくつか実用例を出していく。線画を抽出して色トレスイラストレーションやアニメでは線画そのものに色を乗せる「色トレス」という手法があり、非常に重要。AI絵はすべて合成された絵しか出来ないので色トレスは非現実的。そこでこのLineartを使って線画を抽出することができれば、この作業も可能となる。次のようなデータが取れる。抽出した線画を使った色トレス例この作業はPhotoshopなどの別ソフトで行う色トレスについて詳しくは別サイトに譲るが、どことなく柔らかい雰囲気になっているのがわかると思う。このケースでは窓側の光を受けて髪が透き通るような効果を与えられた。Twitter画像右側(千束)の髪に色トレスが入っていて非常に柔らかく感じる。こんな風に最近のイラストではよく使われる。3DCGでも有用かも?3DCGのような線画をつけるのが困難な素材に合成する目的でも大きな可能性がある。元画像(3DCG)AIで出した線画を別ソフトで合成このケースだと抽出される線画そのものが細いので、更に太くするなどの加工も必要かと思う。3DCG側のソフトでも線画をつけることはできるがコントロールが難しく、処理が重い。言えこの方法もコントロールが難しく合成も大変。色の塗り直しに線画をControlNetに渡してやれば塗り絵するような動作をする。色の塗り直しができる。色系のpromptで再生成(Lineart)このように殆ど同じキャラクター(線画)を維持しながらも色だけ塗り直すことができている。生成された画像をControlNetに入れてLineart系に設定(PreprocessorとModel両方設定)Seedは固定していなくても良いが、絵が変わりすぎないか不安なら固定Promptに色が変化しそうな命令を追加して実行。Fixを併用すると良いかも。逆に想定以上に変わることもあるので注意。デメリット背景が変わってしまっているのがわかると思う。Strengthを上げた状態だとこうなる。この特徴は頭の片隅においておいたほうが良いかと思う。書き足しにフルカラーのAI絵に加筆するのは大変だが、線画を書き換えるぐらいなら可能な人も多いと思う。胸元にハートのアクセサリを書き足した。手書きはかなり雑だが、結果にハートのアクセサリが反映されている。プロンプトにnecklessなどを入れないと消えることもあるこれを応用すれば、比較的簡単に手指の補正も可能。この手法で手を直した後、さらに加筆している。chichi-pui(ちちぷい)AIイラスト専用の投稿サイトたくさん種類があるLineartだけでも次の5種類がある。line)これが混乱させる理由でもあるので比較してみる。Seed固定で試している。fixはControlNetの適用が終わった後に走るので、拡大処理中に絵が変化してしまうため比較にならなくなる。lineart_animelineart_courselineart_realisticlineart_standard何が違う?見てみると抽出される線画に明らかな違いがある。全体の線の数は少なくなる。Standard:線だけでなく色の濃淡まで入っている線画そのものをなにか別ソフトで使う場合は上の画像一覧が参考になると思う。出力されるイラストの違いはどうなる?線画に明らかな違いが出たこと対して絵の出力に明確な違いはAnimeだけ。Animeは90年代のアニメのような塗となったので非常に面白い。念のため別画像でテスト。lineart_animelineart_standardやはりアニメのほうが色収差がついたような画風になる?Animeはanything-v3-full.safetensorsをメインのモデルに設定する必要があると公式にある。今回はそれを使用せず行ったからかもしれないので注意。それ以外のケースでも書き出す対象に応じて様々な変化が出そう。現時点では断定するのが難しい。予想だが、次のようなケースで使うと良い?Anime:細かい線を無視し、アニメ塗りに近づけたい場合?鉛筆のかすれのような部分が影響して出力にクセが出る傾向がある。Course:現時点で具体的な実用例は謎。スタイルを変化させたい場合?Realistic:細い線も太い線も均一な線で拾いたい場合。安定しているので迷ったらコレ!Standard:元となる絵をできるだけ維持したい時に使えるかも?加筆には不向き。別ソフトに線画を持っていく場合に濃淡がついている不思議な効果を狙える。これは自信がないので今後の実験で要研究lineart_anime_denoiselineart_anime_denoiseだけ少し特殊。黒背景の画像のような一部の画像はLineartを通した時に白いノイズのようなものが浮いてくることがある。このノイズを軽減する処理が入っている。2048サイズ生成:ノイズが味になった1024サイズだとlineart_anime_denoiseを使わないと生成画像にもノイズが乗ってしまうことが分かった。逆に2048サイズにすると、このノイズがいい感じに水彩タッチに変化したので使わないほうが良いパターンもある。具体的にどのようなものがノイズになるのかは今のところ明確にはわからない。経験上、背景がベタ塗りになっている箇所に発生しやすい。色の塗り直しはLineartでなくても良いControlNetには線画抽出に似た機能がいくつか入っているので混乱しやすい。Lineart単体の解説とは外れるが、それぞれの特徴を比較する。次のいずれを使っても塗り直しのような事は可能。softedge(hed)Lineartが拾わない線も拾う。筆者が最もよく使う推定。softとあるので線がぼやけるのではと思いがちだが、そうはならない。線が通る道に余裕ができるといったイメージ。softedge(hedsafe)通常のhedだとグレースケールの曖昧さでエラーがでることがあるとのこと。それを修正したものだが、精度にかける。画像を見てわかるように前髪が壊れている。softedge(pidinet)hedよりも精度が高いとのこと。忠実に元絵を再現できそう。softedge(pidisafe)safeはhedと同じで精度を下げてエラーを減らしたもの。精度が下がったため、無駄な手が描かれてしまっている。canny線自体は綺麗に拾うが、線同士がぶつかるエリアで絵が迷う。元絵から思ったより変化してしまうのでおすすめしない。scribble(hed)本来は手書きの落書きから取るモード。Lineartよりも細かい線を無視するので塗りがベタっとなる。手書きではないものから取る場合は「元絵から線が大きく動いてもOK」であるときに使うと良い。線を無視する挙動を逆にメリットと捉えれば、アニメ塗りにできるかも(細い線を消してくれて、塗りを均一にする効果)ただし、顔アップぐらいのズーム限定。scribble(pidinet)scribble(hed)よりもさらに細かい線を無視する。手書きではない物を使う場合、上より少しカメラを引けるがバストアップぐらいまでが許容範囲。こちらも「元絵から線が大きく動いてもOK」であるときに使う。scribble(xdog)実はLineartのように使える優れもの。細筆を走らせたような美しく、細かいラインを描く。線画としても使えそう。個人的に注目している。どれでも塗り直しができるこれらはどれを使っても塗り直しができる。塗り直しといっても、ディティールを再書き込みする動きもあるのでいろいろ試してみると良い。pidinet)なぜならLineartは背景のような薄いラインを無視するから。逆にそれを加味して「背景は線画から書き直してOK」「細かいディティールは捨ててOK」ならLineartでも良い。ある程度線がハッキリしているラフならLineartを使うと線がスッキリして使えるかもしれない(Preprocessorを通す場合)ラフに関しては殆ど試してないのであくまで予想。Scribbleのほうが良い結果が出る可能性があるので両方試してみることを推奨。抽出された線画に加筆して使いたい元絵はAIでも、そこから抽出された線画に加筆して使うテクニックを使えばいくらでも絵は良くなるはずだ。この場合はLineartを使った物が良いだろう(Realisticがおすすめ)人が書く線に最も近くなるのがこれなので、加筆したあとも自然な線が浮いてくると思う。これに関してはScribble(xdog)で出したものに加筆してもよいかもしれない(非常に繊細な線が出るため)筆やペンのような「入抜き」が入った線を好んで使う人は試す価値あり。どのLineartにしようか迷うLineartを使いたい時に種類があってどれにしたらいいかわからない。そんなときはAnimeではなくRealisticを選ぼう。Animeは少し線にカスれ(ノイズ)が入るので個性派向け。Realisticは精度などを含め万能な優等生。lineart_anime_denoiseを使うと鉛筆のカスれているような模様が消えるのでRealisticと合わせて試して見る価値あり。Scribbleも覚えておきたい落書き程度の「線が太い」「線の濃淡に意味がない」ときはScribbleが良い。上で書いたようにラフ画ならこちらも試したい。他にもアニメ塗り化したり、線がある程度動いても良いようなケースにもScribbleが可能性を秘めている。Scribbleについては次の記事でも実際に生成して実験しているので合わせて読んでもらえたらと思う。個人的な注目あまり皆が使ってなさなのに実は面白そうなのがscribble_xdogとlinart_standard。scribble_xdogは「線画を取ってよし、塗り直しに使ってよし」の万能選手かも。linart_standardはLineartなのにhedに近い正確さがでる?出力結果に少し個性が出ているので積極的に試してみたい。線画自体も個性があって面白いのでシンプルな色トレスの実験も追加で行った。元絵linart_standard色トレス広い範囲に柔らかなグラデーションになっている線画なので、重ねると発光しているような効果になった。まとめ:Lineartを使うべきケースというわけでLineartはAI絵から線を抜き出してそれを別ソフトで使う(クオリティアップガチ勢向け)AI絵から線画を抜き出して加筆して戻す(加筆ガチ勢向け)線画を自分で1から書いて、塗りをAIに任せる場合(イラストガチ勢向け)これらの用途で使うと最も良さそうだ(特にガチ勢)現時点でツイッターを眺めていると、AI絵の塗り直しに積極的に使われているようだが、このケースなら私はSoftEdgeに軍配が上がると考えている。無駄な線を無視して「ディティール書き直し+塗り直し」のケースではLineartのほうが使えるので違いを認識しておこう。Lineartで塗り直す手法に関しては次の記事で具体例を掲載しているので合わせて読んでもらえたらと思う。お昼の爽やかなイラストを、ダークな印象に塗り直す方法で使っている。塗り直しは1つ別の裏技的なやり方がある。ControlNetのinpaintを使う方法をメイン記事で紹介している。こちらはあえてマスクを全く書かないという方法。さいごにControlNetのPreprocessorは種類が多すぎて混乱するのでこの記事を書いた。この記事もある程度わたしの勝手な判断が多く含まれているので、あくまで参考にとらえてもらえればと思う。DiffusionAIControlNetこの記事をシェア著者Ultra-Noob謎の技術研究部部長。3DCG以外にもDTMやプログラミング等も研究する。謎の技術研究部とはプライバシーポリシーホーム(自動スクロールなし)ご意見、お問い合わせ。