Stable Diffusionのtxt2imgで、出力の高画質化をしてみるお話

Stable Diffusionのtxt2imgで、出力の高画質化をしてみるお話

はじめに

いわゆる生成AIと呼ばれる物体を触ってみるお話。
Stable Diffusion Web UIを、とりあえず使えるようになったし、ある程度出力をコントロールできるようになった程度の人向けです。

こういうのを触りたい人ってのは、とりあえずちょっとは開発のようなものが出来るか分るかの人だと思うので、初歩的なお話はかなり端折ってるし、何よりも説明が雑です。なにとぞ。
よくわからんってことは、てきとーに調べてね。

Stable Diffusion web UIってなによ

Stability AIが出してる学習済みAIモデルと呼ばれるものを、AUTOMATIC1111って人がブラウザ上で簡単に触れるようにした物体。
テキストや画像から連想される画像なんかを生成してくれるです。

厳密には、画像を生成してるわけではなく、関数を生成してるわけなんだけど、そのあたりをお話すると長くなるので割愛。
以後、「画像の生成」と言いますが、技術的にはたぶんあまり正しくないです。


前提条件

  • Stable Diffusion Web UIを、ローカルで使えるようになっているPC
  • 基本操作を理解してる人であること

Stable Diffusion Web UI

「はじめに」でも紹介したけれど、画像を生成してくれる物体です。
この記事ではすでにローカル環境にセットアップが完了していることを想定しています。

まだセットアップが完了していない人は、下記をご参照ください。

Stable Diffusion Web UIをローカル環境でセットアップしてみる話
Windowsな環境で、画像っぽいものを生成してくれるStable Diffusion Web UIをセットアップしてみたお話。

基本操作を理解してる人

別に、そんな大層な知識は必要ではないですが、txt2imgの基本的操作を不自由なく行える程度と思ってもらえるとよいかと思います。
用語がわかない・何の操作をしているかがわからないなどの場合には、txt2imgのオプションまとめを書いているので、そちらもご参照ください。

Stable Diffusion Web UIのtxt2imgを使って遊んでみるお話。
Windowsな環境で、画像っぽいものを生成してくれるStable Diffusion Web UIをセットアップしたから、なんかいろいろいじくってみて遊んでみるだけのお話。

基本的な条件と方針

方法としては、promptの見直しに加え、出力時にサンプラーの検討/見直しを行い、Hires. fixで高画質化したうえで、さらにADetailerで仕上げを行うという、覚えれば手軽に行えるような方法をとります。

ゆえに、下記条件を満たすことを求めています。

  1. Sampling methodSchedule typeSampling stepsなど、サンプラーの基本的な特徴をある程度理解できているものとします。
  2. Hires. fixのコントロールも理解できているものとします。
  3. さらにADetailerについても、同様にそれなりに使えるものとします。

とはいっても、以前の記事をざっくり読んでもらえれば、ある程度理解の助けになると思うし、わからないってなった時に調べるで問題ないかとも思います。

Stable Diffusion Web UIのtxt2imgを使って遊んでみるお話。
Windowsな環境で、画像っぽいものを生成してくれるStable Diffusion Web UIをセットアップしたから、なんかいろいろいじくってみて遊んでみるだけのお話。

なお、この記事では、特に断りのない限り、checkpointに「himawarimix_v11」を使用するものとします。
特に思い入れがあるとかそういうわけでもなく、単に使い勝手がいいというそれだけの理由です。

HimawariMix - v11 | Stable Diffusion Checkpoint | Civitai
様々なモデルをマージした背景や細部の表現力が強いVAE内蔵型モデル VAEの内臓はないぞ!と言わせないぞ!!!! Models with built-in VAE with strong expression of backgrounds and details merging various…
natsusakiyomi/HimawariMixs · Hugging Face
We’re on a journey to advance and democratize artificial intelligence through open source and open science.

お好みのcheckpointがある方はそちらを使用したとしても、問題ないとは思いますが、モデルやVAEなどの条件、あるいはPC性能などなど、環境の違いにより得られる結果に差異が生じることがあるかもしれません。
そのあたりは、試行錯誤してよい結果が出るようチューニング頑張ってくださいとしか言えないです。

また、この記事をホストしているサーバの都合により、NSFWな情報については、教唆する程度にとどめておきます。サーバ止められたら悲しいので・・・。


いい感じの構図を探す

無限に時間のある人は別にやらなくていいとは思いますが、いい感じの構図なんかを探すだけなら、手早く済ませたいですよね。
この節では、出力の品質はさておき、いい感じの構図を効率よく探す作業を行います。

具体的には、Promptを検討したうえで、サンプラーを調整、さらに一度の操作で複数の画像を出力させることで「ある程度の品質のいい感じの絵」を効率よく出力させてみます。
その「ある程度の品質のいい感じの絵」から、高精細化していくという手順を踏みます。

この時に気にするべきは、あくまで、全体の雰囲気と構図といったところであって、Stable Diffusionあるあるの、小さく描かれた人物の表情あるいは背景などの書き込みが甘いというようなことは、現時点では気にしないでよいです。

1. Promptの検討

とりあえず、てきとうにseedを回そうって時に、やはり最初に気にするべきは、promptですよね。
のちの高精細化の手順でズレを生まないためにも、出力したい状況をできるだけ具体的に明示する方がよいと思います。
また、シチュエーションがどうにも伝わらないというときには、(short haire)(short haire:1.4)などのように、丸括弧で囲ったりコロンを挟んで重みづけしたりすることもできます。

また、いわゆる必須系プロンプトを入れることも重要ですね。
negative promptを管理してくれるようなpluginなんかもあるみたいですが、細かいコントロールが難しくなる印象があるので、私は使用していません。

・・・とはいっても、毎回毎回打ち込むのはだるいので、プリセットを作っておきましょう。
「Generate」ボタンのすぐ下に「🖌️」のボタンがあるので押しましょう。

押したら、プリセットの名前・プロンプト・ネガティブプロンプトを入れるモーダルが表示されます。
ここに登録しておけば、それ以降、選択するだけで登録したプロンプトを使用することができます。
わたしの環境ではここに11個登録しているようです。

下記、わたしが使ってるものの一部を掲載しておきます。
他にも、自分がよく使うなと思うようなものを登録しておくと、はかどります。

なにするにしても必須系

どんな画像を生成するにしても、とりあえず入れとくといいというレベルの呪文。
ダメ品質な画像や、キュビズム的な画像を排除する。また、文字列なども排除しています。

Negative prompt

error, jpeg artifacts, lowers, blurry, bokeh, abstract, multipul angle, two shot, split view, grid view

品質系

これも、何を生成するにしてもとりあえず入れとくといいんじゃないかな系。
画質などに関する呪文。

Prompt

masterpiece, best quality,((ultra detailed))

Negative prompt

low quality, worst quality, out of focus

文字列の排除

背景に文字っぽいけどなに書いてるかわからない何かとか、元の絵のウォーターマークを抑制するための呪文。
なお、ウォーターマークの入ってるような画像でモデル作っていいのか?という疑念は一旦考えないことにします。

(text, signature, watermark, username, artist name, stamp, title, subtitle, date, footer, header)

人物系

人物を生成するときに使うとよい系。
四肢の数や形、指の数、おかしな体系になったりするのを防ぐための呪文。

Negative prompt

ugly, missing arms, extra_arms, mutated hands, extra_legs, bad hands, bad anatomy, deformed mutated disfigured,  long_neck, long_body, longbody,   poorly_drawn_hands, malformed_hands, missing_limb, floating_limbs, disconnected_limbs,  poorly drawn fingers, (extra_fingers, bad fingers, liquid fingers, missing fingers, extra digit, fewer digits ) ugly face, deformed eyes, partial face, partial head, bad face, inaccurate limb, cropped, ghost

写真系

実写系の画像を得るときに入れとくといい感じにしてくれる呪文。

Prompt

RAW photo, photo-realistic, clear

イラスト系

2次元絵を生成するときに、いい感じにしてくれるかもしれない呪文。
wallpaperに関しては、適宜外してもよろしいかと思います。

Prompt

beautiful illustration, wallpaper

NSFW

Not Safe For Workです。職場では安全じゃないです。なにがとは言わないけど危ないです。
Negativeにいれとくと、とりあえず安全です。
Promptの方に入れると、危ないかもしれないです。使用するモデルによって、安全度が違うっぽいです。

Negative Prompt

NSFW

2. サンプラの調整

プリセットなpromptを併用して、いい感じかなと思ったら、seedを回し始める前にサンプラーの調整を行いましょう。
このタイミングでは、「ある程度の品質のいい感じの絵」を「素早く出力させる」ということを目指しているので、Sampling stepsは低めに設定することにします。
ただし、精細化した時に絵の雰囲気があまりにも変わってしまうと元も子もないので、そのあたりの兼ね合いがちょっと難しいところですが。

使用するcheckpointによっては、サンプラーの指定があるかもしれないので、それに従って使用するでもよろしいかと思いますが、ancestral samplingを行うものは、出力の揺れが大きくなるため、今やろうとしている方法とは相性が悪いかもしれません。

詳しい内容についてはSampling methodによる出力変化や、Schedule typeによる出力変化に記載しています。

Stable Diffusion Web UIのtxt2imgを使って遊んでみるお話。
Windowsな環境で、画像っぽいものを生成してくれるStable Diffusion Web UIをセットアップしたから、なんかいろいろいじくってみて遊んでみるだけのお話。

今回は、とりあえず、いい感じに安定しそうな、下記組み合わせで下絵を走査してみます。

Sampling method Schedule type Sampling steps
DPM++ 2M SDE Karras 20

3. バッチカウント / バッチサイズの調整

サンプラの調整である程度早く回せるようになったかと思いますが、早く回せるということは、それだけボタンをポチポチ幼いといけないということになってしまいます。
ひとつひとつ精査してもいいのですが、ぶっちゃけ、めんどくさいですよね。

ということで、バッチカウントとバッチサイズを増やして、一度に生成できる数を増やしてみます。

お手元のPCのスペックとの兼ね合いとなると思うので、いきなり無茶な数字を入れない方が賢明かと思います。


高画質化

好みの構図/絵柄が出たら、高画質化するプロセスへはいります。
まず、Sampling stepsを上げることでノイズをさらに減らし、サンプラーを再検討することで、さらに出力を整理し、Hires. fixで再描画。さらに、ADetailerで書き込みを増やしていく算段です。
順に見ていきます。

1. Sampling stepsを上げる

いい感じの「それなりの品質の画像」がでたら、まず何よりも最初にseedを固定しましょう。
それから、Sampling stepsを上げてみます。

今回は絵柄が変わってしまいました。あるあるですね。
こういう場合には、Sampling stepsを上げるというのをあきらめてて次に進んでもよいかもしれないし、あるいは、「いい感じの画像」の走査に戻ってもよいと思います。
ある意味で、妥協点を導き出すような作業ですね。

さらに別の構図で試してみました。

stepsを増やしても構図がほぼ壊れないノイズ除去が出来ました。
ただ、背景に文字になってない変な看板のようなものがたくさんあったり、steps60になると手が生えてきてちょっと邪魔な気もしますが、もう回すのがしんどいので、細かいことは気にしないということにして事なきを得ました。

2. サンプラーの再検討

この時点で、改めてSampling methodSchedule typeを変更してみてもよいと思います。
ほぼ同一の、しかし、少しずつ異なる出力がされるはずです。

DPM++ 3M SDEKarras(左下)が一番雰囲気よい気がしたので、これを選択。
これを高画質化していきます。

neonpunk, city, shoes, girl, long hair,, masterpiece, best quality,((ultra detailed)), cute face, beautiful detailed eyes,, beautiful illustration,
Negative prompt: low quality, worst quality, out of focus,, error, jpeg artifacts, lowers, blurry, bokeh, abstract, multipul angle, two shot, split view, grid view, (worst quality:1.4), (low quality:1.4), watermark, username, artist name, stamp, title, subtitle, date, footer, header), ugly, missing arms, extra_arms, mutated hands, extra_legs, bad hands, bad anatomy, deformed mutated disfigured, long_neck, long_body, longbody, poorly_drawn_hands, malformed_hands, missing_limb, floating_limbs, disconnected_limbs, poorly drawn fingers, (extra_fingers, bad fingers, liquid fingers, missing fingers, extra digit, fewer digits ) ugly face, deformed eyes, partial face, partial head, bad face, inaccurate limb, cropped, ghost, ((text, signature))
Steps: 60, Sampler: DPM++ 3M SDE, Schedule type: Karras, CFG scale: 5, Seed: 37588578, Size: 1024x512, Model hash: e12177c4b0, Model: himawarimix_v11, Version: v1.10.1

3. Hires. fixによる高精細化

Hires. fixにて、アップコンバートしていきます。
なお、img2imgでアップコンバートしてもよいのですが、とりあえず今回は、txt2imgでやることにします。

Hires. fixでDenoising strengthを変化させた出力をみてみます。
なお、UpscalerにR-ESRGAN 4x+ Anime6Bを使用してみましたが、プリインストール以外を使ってるなど、お好みのものがあれば、それを使うでよろしいかと思います。

ついでに、Hires stepsも90まで上げてみた結果もみてみます。

質感とノイズの感じを見ながら、調整し、今回はHires steps:90で`Denoising strength:0.63でにコンバートしたものを選択しました。

4. ADetailerで書き込みを上乗せ

最終の仕上げとして、ADetailerで書き込みを増やしていきます。
とりあえず1つめは、顔をターゲットにして適当に表情を変えてみます。

筆者はgrin顔が好きなんです。

続いて、ADetailer2ndで、へんてこな背景に手を加えます。最初からなんだか変だったのはそうなんですが、Hires. fixをかけたころからどんどん悪化してましたね・・。
ここまで目を背けることで事なきを得ていたわけですが、さすがにひどすぎます。

閑話休題。
雰囲気としては、建物の中?に道があり、車が走ってますね。右側に至っては本当に何なのかがわかりません。
看板がたくさん浮いてる???ような謎背景ですね。

右側と左側で整合性がおかしなことになってて、難易度高そうな気がしないでもないですが、せっかくここまで来たので、ごり押しでなんとかしてみます。

いろんな背景を考えて、長ったらしい呪文を作ったりしてみたわけですが、どれもこれもうまくいきませんでした・・・。
仕方がないので、この程度で断念・・・。

まあ、何が何だかわからない看板類が、何が何だかわからない機械類みたいに見えるようになっただけでまあ良しとしましょう。


どうでもいいあとがき

なんというか、人物と背景は、やはり別々で作って後で合成するって方が、手間が少ない気がしました。
あるいは、後で背景を差し替えればいいやと、構図を妥協しちゃいけないですね。

とりあえず、なんとなくの手順なんかが記せたような気がするから、よいことにする。
ああ疲れた。