Upscaler

Last-modified: 2023-12-02 (土) 14:57:55

そもそもUpscaler(アップスケーラー)ってなんぞや?

画像の拡大処理に利用するアルゴリズム(計算方法)のこと。Latent、None、ESRGAN_4xなどがある。
Photoshop等の画像編集ソフトで、ニアレストネイバー、バイリニア、バイキュービックなどの拡大処理方法を利用したことがある人もいるだろう。

一般的に、より大きなサイズのAI絵を出力生成すれば、より精細で綺麗な画像を得やすくなる。
しかしこれには3つの問題が付き纏う。

  • 画像サイズを大きくすると、計算の所要時間が長くなる。
  • 画像サイズを大きくすると、必要なVRAM量が多くなる。
  • 画像サイズを大きくすると、勝手に人数が増えたり、人体が破綻しがちになる。何故なら大半のモデルは512x512~768x768程度の画像サイズで学習しており、それ以上のサイズは苦手だからだ。

これらの問題に対し、1111には3種類の拡大機能が用意されている。

  • Extrasタブ
    拡大と補正処理のみを行う、比較的シンプルな機能。アップスケーラーによってピンキリだが、後述の2種に比べ計算時間が遥かに短く、VRAM使用量も少ない。
  • img2img
    拡大と補正処理に加え、その結果にAIによる加筆修正を行って再生成する機能。計算時間はかかるが、精細な結果を得られる。
  • Hires.fix
    txt2imgとimg2imgの2工程を自動的に連続で行う機能。
    大きな画像を出力する際に、工程を2段階に分けることで構図の破綻を抑えるのが狙い。
    まず1段階目はモデルが得意とするサイズで普通に生成(txt2img)し、次にその画像に補正をかけつつ指定した倍率で拡大する(img2img)ものである。
    Hiresfix.png

これら3種類の拡大機能のいずれにおいても、複数のアップスケーラーの中から任意の物を指定して利用することができる。

Upscalerの効果

アップスケールを行う際、使用するアップスケーラーによって完成した画像の塗りや完成度は大きく異なる。

UpscalerとHires steps(高解像度でのステップ数)

Hires stepsはいわばUpscalerというimg2img処理の際のSampling stepsに相当するものになります。ステップ数を増やせば時間がかかりますし極端に減らせば収束しきらない画像が出力されます。
とはいえ元絵があるのでtext2imgほどのステップ数は必要ありません。下で言及されている程度のステップ数で十分な画像が得られるはずですが、画像の一部に色化けなどを生じる場合はステップ数を上げてみてください。

sampling step:30の画像をhires.fixした場合

hires step:0 >sampling stepと同じ30で再サンプリング
hires step:10 >10で再サンプリング
hires step:30~ >30以上で再サンプリング

なのでhires step:0と30以上は元画像から大きく変わるうえに時間がかかる
sampling stepの数値の半分くらいが速度と変化のバランスがいい

体感としては

Sampling steps = 20とした場合
      早い
Hires step 5
Hires step 10
Hires step 15 
Hires step 0(auto)= 20(Sampling stepsと同じ)
Hires step 25
      遅い

UpscalerのDenoising strength(ノイズ除去強度)について

Denoising strengthは直訳するとノイズ除去強度で、なんだかノイズを取り去ってくれそうな名前ですが実際は違います。そもそもアップスケールする直前の生成画像に目立ってノイズが乗っているわけではないですよね?

前置きはさておきこの値はアップスケールする前に生成した画像に対してどのくらいノイズを加えるかの値になります。

そもそもSDの仕組み上ノイズから推論して画像を作るわけですから、アップスケールする際にもノイズを加えて推論から画像を拡大するという処理を行います。0に設定した場合はノイズを加えません、対して1はすべてノイズに置き換えることになります。

0かそれに近い場合はノイズをほぼ加えませんのでアップスケール直前の出力画像に忠実になりますが、ノイズによる推論不足のため補間が効かずのっぺりした出力になりやすいです。ちょうどフォトレタッチソフトでバイキュービックなどで拡大したときと同じような雰囲気でしょうか。

1かその付近の場合は出力画像をほぼノイズに置き換えてからアップスケールしますのでそれこそ新規に画像を生成しているのとほぼ等価となります。

Latent系のアップスケーラーはこのDenoising strengthを0.55くらい以上にあげて使わないとぼやけた感じになるのはある程度画像生成をされた方ならわかると思います。0.55以上ともなれば画像の半分以上をノイズに置き換えてからのアップスケールとなるため書き込みが増えてリッチな感じが得られる反面、画像の細部では余計な書き足しが増えて特に指などは破綻しがちというからくりなのです。

これはUpscalerに限らずimg2imgなどにあるDenoising strengthと共通ですからどのくらい書き換わるかはこの値が大きな鍵となります。

512x512で出力し、Upscaleで2倍に拡大して1024x1024にする場合。

・Latent系(デフォルトのアップスケーラー)
0.5を下回るあたりで滲みやノイズが発生するので基本的に高めで使う(0.5~0.7)。
その時に元画像から変化する部分がでてしまうのでHiresオフで生成ガチャをして
気に入った画像をアップスケールする方法にはあまり向かない。

・ESRGAN系・SwinIR・Ultrasharp・fatal_anime
滲みやノイズはほぼ発生しない、
Hiresオフで生成した画像を維持したままアップスケールしたいならこちらがおすすめ。
数値を上げるほど精細な画像にできるが元画像との変化が発生する。
0.4以下ならほぼ元画像のまま拡大処理ができる、
0.5あたりで顔のアップや細かい部分で変化する部分が目立ち、
0.7で精細な画像にはなるが背景やポーズなどで変化する部分が目立つ。

img2imgでのUpscaler

・img2imgで使用するアップスケーラーは
Settings>Upscaling>Upscaler for img2img (設定>アップスケール>img2imgで使うアップスケーラー)
で設定できる。
txt2imgで使用しているアップスケーラーと揃えておくといいかもしれない。

・img2imgで拡大する場合はtxt2imgでのhires.fixと違い別のseedで拡大することができる。

Upscalerの追加方法

AUTOMATIC WEB UI 1111へのアップスケーラーの追加方法は2種類ある。
・一つはダウンロードしたpthファイルを
stable-diffusion-webui\models\ESRGAN
の中に配置すると使えるようになる。

・もう一つは拾った画像を再生成?
項目作成者はこのやり方ではうまくいってないので要追記

現在流行のUpscalerの一覧

(2023/12) 現在メジャーなアップスケーラーの配布場所の一つは
https://openmodeldb.info/

ただ、数があまりにも多いので、影響力のあるアップスケーラーをいくつか下記に抜粋する。

Upscaler得意画風特徴・備考配布場所
Latentイラスト基本のやつデフォ
ESRGAN_4xイラスト微妙だけど軽いデフォ
4x_fatal_Anime_500000_Gアニメ系最近かなり有名なやつリンク
4x-UltraSharpアニメ・実写背景までクッキリ。遠近感出したいときは✕リンク

コメント欄(アップスケーラーなどに関する情報交換)

  • upscale.wikiはOpenModelDB(alphaバージョン)に移動したようだ。 https://openmodeldb.info/ 一応旧バージョンは残っているようだ https://upscale.wiki/w/index.php?title=Model_Database&oldid=1571 -- 2023-12-02 (土) 14:40:07
  • 情報ありがとう。「現在メジャーなアップスケーラーの配布場所~」の箇所を、upscale.wikiからopenmodeldb.infoに書き換えました。 -- 2023-12-02 (土) 14:57:55