【超解像】Stable Diffusion で Hires. fix を使って高画質画像を作る

エンタメ
記事内に広告が含まれています。
スポンサーリンク

追記 4/23 Google Colabでstable-diffusion-webuiの文字を含む関数を実行しようとすると警告が出るようになっています。

スポンサーリンク

AI生成画像は小さい

以前こんな記事を書いていました。

当時は NovelAI でのAI画像生成が出てきたばっかりでしたが、最近だと Stable Diffusion という方が通りが良くなってきていますし、 GoogleColab や WebUI などを使って自分で無料で画像生成を気軽にできるようになってきています。

その中でも Automatic1111 の Hires.fix を使うことである程度自然な感じのデカい画像を作成できるので、使い方や実際に使うとどんな感じなのかを書いていきます。

※相変わらずAI生成画像の法律関連はふわふわですが、そのままの画像だと著作権者になれないが、別に基本は載せて大丈夫っぽいので普通に画像も使っていきます。(権利関係の危ない分野を学習しまくったものだとさすがにまずいこともあるらしい)

Automatic1111 の Hires.fix とは

正確性よりもわかりやすさ重視で説明するので、正確なことが知りたいとかの人はバックしてどうぞ。

Automatic1111はなんか画像を良い感じにしてくれる機能詰め合わせパックです。

その中の機能のひとつとして Hires.fix があります。

この Hires.fix はなんやかんやして1回目で出力した画像を良い感じに大きくする機能※です。

一応 Upscale の方法はたくさん用意されていますが、中身については知らなくていいので別に気にしなくてもいいでしょう。

※単純に拡大するわけではないので似たような大きな画像が作成される。

Hires.fix の使い方

以下の話は僕の動作環境での話となります。まあたいてい似たようなものでしょう。

※Google Colab での動作は確認済みですが、ローカルの場合スペックによってはGPUが耐えきれないかもしれません。

画像の赤丸部分が Hires.fix を行うかどうかの設定をするチェックボックスです。

チェックボックスを有効にすると少し下の部分に新しい項目が現れます。

新しく出てきた項目の役割はこんな感じです。

項目説明一言
Upscalerアップスケールの手法二次元キャラならR-ESRGAN 4x+ Anime6Bがよさそう。
Hires stepsアップスケール時のステップ数0だとSampling stepsと同じ。0でいいが10くらいでも十分。
Denoising strengthノイズ除去の強さ小さいほどノイズあり?大きすぎると破綻しやすいので適当に。基本0.5~0.7あたりがオススメ
Upscale by拡大率基本2倍くらいまで。元画像を破綻しない程度にデカいサイズで作っておいた方が良い気がする。
Resize width to横の解像度拡大率を使用せず細かく指定できる。数値が入ってると拡大率は無視される。
Resize height to縦の解像度拡大率を使用せず細かく指定できる。数値が入ってると拡大率は無視される。

数値は使う人が好き勝手いじればいいと思いますが、とりあえず設定しておけばいいと思う箇所としては、Upscalerは“R-ESRGAN 4x+ Anime6B”がよさそうに見えます。ノイズ除去に関しては、0.5くらいだと明らかに四角いノイズが出てくる場合もあるので0.7くらいが妥当じゃないかと思います。

最終的に欲しいサイズが決まっているのであれば、Resize width toとResize height toで値を決め打ちしてもいいが、ざっくりデカい画像を欲しいのであればUpscale byで2.0とかにしておけばいいです。

この時、最終的に欲しい画像のサイズが1200×1800などの場合、600×900で2倍としても良いですが(実際は8の倍数じゃないと設定できないけど)、破綻しない程度の大きなサイズで可能な限り近いアスペクト比にして拡大率を抑える方が元の画像のまま拡大されるのでオススメです。(理由は後述)

とりあえずこの点さえ押さえておけばOKです。

実際に使ってみる

手順としてはこんな感じ

  • 欲しいサイズに近いアスペクト比で可能な限り大きな画像を生成
  • Seed値を変えつつ当たりの画像を待つ(-1でランダム生成)
  • 当たりの画像でSeed値をコピーしてSeedに入れる
  • Hires.fix にチェックをする
  • Upscalerを好みのものにする(R-ESRGAN 4x+ Anime6Bがオススメ)
  • 欲しい画像サイズをResize width toとResize height toを設定する
  • Generateして画像を保存(破綻した場合はSeedガチャに戻るかプロンプトやDenoisingを微妙にいじってリトライ)

以上が流れになります。

欲しいサイズに近いアスペクト比で可能な限り大きな画像を生成

最終的に欲しいサイズに近いアスペクト比で可能な限り大きな画像画像を生成する理由は、拡大時に破綻すると辛いからです。

というのも Hires. fix の2回目の生成はサイズが大きい分時間がかかるので、ここで破綻してしまうとロスが大きくなります。

小さいものを大きくする場合と中くらいのものを大きくする場合、当然ですが中くらいのものを大きくする方が破綻が少ない傾向があります。(元の画像の情報が多いほど拡大時の新しく生成される部分が少ないため)

なので可能な限り大きいサイズで生成しましょう。

ちゃんと調べたわけではありませんが、1024を超えるあたりから腕や胴体がやたらと伸びたりする印象があります。

なので1024くらいまでの大きさで生成するようにしましょう。

また、アスペクト比をそろえる理由は、2回目の生成の際に引き延ばしをして元の画像のアスペクト比が損なわれるのを防ぐためです。

Seed値を変えつつ当たりの画像を待つ(-1でランダム生成)

拡大したいと思う当たり画像に巡り合えるまでひたすらSeed値をガチャします。

手動で変えていってもいいですが、デフォルトの-1ならランダムのSeed値を毎回使ってくれるのでGenerateを連打しましょう。

この時、手あたり次第に最初から Hires. fix をしてもいいですが、生成には時間がかかるのでお気に入りの画像が出るまでは Hires. fix にはチェックをしない方がオススメです。

当たりの画像でSeed値をコピーしてSeedに入れる

お気に入りの画像が出てきたらSeed値をコピーしてSeedに貼り付けます。

画像の赤丸部分にランダム生成の場合でもSeed値が表示されているのでこれをコピーしましょう。

また、画像を保存した場合でも”枚数-乱数.png”の形式で保存されているのでうっかり次の生成をしてしまって分からなくなった場合はそちらを確認しましょう。

Hires.fix にチェックをする

Hires.fix にチェックを入れると専用の項目が出てきます。項目の役割については前の章で説明しているのでそっち見てください。

Upscalerを好みのものにする(R-ESRGAN 4x+ Anime6Bがオススメ)

Sampling Method みたいな感じで好みのものを選べばOKです。

お好きにどうぞって話なんですが、イラストっぽい感じを求めているんであれば、僕が試した感じだと”R-ESRGAN 4x+ Anime6B”がオススメです。

欲しい画像サイズをResize width toとResize height toを設定する

最終的に欲しい画像サイズを入力します。

Upscale byを使うかResize width toとResize height toを使うかは好みの話ですが、Upscale byはアスペクト比が完全に維持される点がメリットです。

対してResize width toとResize height toは最終的な画像のサイズを完璧にコントロールできるところがメリットです。

僕はアスペクト比が狂わないのであれば画像サイズがきれいな方が気持ちが良いのでUpscale byはあまり使っていませんがどっちでもいいと思います。

Generateして画像を保存(破綻した場合はSeedガチャに戻るかプロンプトやDenoisingを微妙にいじってリトライ)

設定が終われば後は普通に生成するだけでOKです。

この時破綻してしまった場合はプロンプトをいじったりDenoisingをいじったりしてリトライします。

破綻してしまった部分に対して有効そうなネガティブプロンプトを書くかDenoisingを下げることで破綻が解消される場合もあるので諦めずにチャレンジするのもアリです。

例えば、Denoisingの値をいじった場合だと画像はこのように変化しました。

左からDenoising0.5、0.7、1.0です。

1.0は論外ですが、0.5も0.7も指がおかしいですね。

また、Denoising0.7のままUpscalerを変えるとこんな感じになります。

左からR-ESRGAN 4x+ Anime6B、Latent、NONEです。

全体的になんとなく変わるものの指の感じは変わりませんね。

プロンプトをいじる場合はこんな感じです。

真ん中はネガティブプロンプトに”too many fingers”を追加したものです。(大失敗)

右はプロンプトに”hand in pocket, arm up”を追加したものです。(イメージしてたキャラ的にはポケットに手なんか入れない気がするけど…)

とりあえずボタンとかの細かいところは置いといて、ぱっと見気になるような破綻はなくなりましたが、最初の画像とは若干ポーズや背景が変わってしまいました。

今回は別に気にしないので良いんですが、このようになかなかうまくいかない事が多々あるので根気と運の戦いですね…

まあ服とかに関しては再現したいキャラがいる場合はLoRAとかぶちこめば即解決するのであまり頑張る必要ないですね。

おまけ1 LoRA使用時の画像

ちなみにLoRAを入れるてちょこちょこいじるとこんな感じ。

なんかボケっとした顔になってしまった気もしますが、任務完了です。

本当にLoRA作成者さんには感謝しかありません。

そんなわけで、LoRAに関するこんな記事も書いてます。

おまけ2 Hires. fixを使わずにデカくした場合

左がLoRA有、右がLoRAなし。

LoRA有の方は上の方に顔があるだけで謎の靄に包まれてるし、LoRAなしの方はわかりやすく崩壊してますね。

最後のまとめ

今回は「【超解像】Stable Diffusion で Hires. fix を使って高画質画像を作る」というタイトルで Hires. fix の使い方を説明しました。

前回書いた waifu2x を使う方法とは別に自分で Stable Diffusion で画像を作ってる人向けの記事になっています。

Automatic1111 の Hires.fix は小さい画像を生成してからその画像をもとに高画質化してくれる機能です。

Hires.fix のチェックを入れた際に新しく表れる項目の簡単な説明は以下の通りです。

項目説明一言
Upscalerアップスケールの手法二次元キャラならR-ESRGAN 4x+ Anime6Bがよさそう。
Hires stepsアップスケール時のステップ数0だとSampling stepsと同じ。0でいいが10くらいでも十分。
Denoising strengthノイズ除去の強さ小さいほどノイズあり?大きすぎると破綻しやすいので適当に。基本0.5~0.7あたりがオススメ。
Upscale by拡大率基本2倍くらいまで。元画像を破綻しない程度にデカいサイズで作っておいた方が良い気がする。
Resize width to横の解像度拡大率を使用せず細かく指定できる。数値が入ってると拡大率は無視される。
Resize height to縦の解像度拡大率を使用せず細かく指定できる。数値が入ってると拡大率は無視される。

実際の使い方に関しても画像付きで丁寧に説明しているので、参考にしてみてわからないことがあったら気軽に質問してください。

waifu2xには自分が生成して無い画像にも使える点や破綻しない点などのメリットもありますが、そもそもの生成の部分で高画質化できる Hires.fix は非常に優秀なのでどちらもうまく使っていきたいですね。

こんな記事も書いてます。

コメント

タイトルとURLをコピーしました