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