Home Artists Posts Import Register

Content

アップスケールのやり方ってな…200種類あんねん。


さてこんばんは、スタジオ真榊です。今夜は、最近質問を頂くことが多い「アップスケール」について、さまざまな手法や具体的テクニックなどを紹介したいと思います。


アップスケールと言われると、text2image画面にある「高解像補助(hires.fix)」が思い浮かびますが、「あれって綺麗になるけど時間掛かるしすぐ破綻しちゃうんだよな・・・」と敬遠している人も多いのではないでしょうか。高精細化の手法には、hires.fix以外にも「i2iアップスケール」「SDアップスケール」、拡張機能の「アルティメットSDアップスケール」「multidiffusionアップスケール」といった方法があり、目的によって使い分けることができます。controlnetと組み合わせて崩壊を防いだり、絵柄を変えて緻密化したりするテクニックもあるので、さっそく詳しく見ていきましょう。


【目次】

アップスケールの基本的考え方

基本の「Hires.fix」

アップスケーラーごとの違い

image2imageアップスケール

「疑似マージアップスケール」とは

ピーキーだけど高性能!「SDアップスケール」

アルティメットSDアップスケール

MultiDiffusionアップスケール

おわりに


アップスケールの基本的考え方


アップスケールについて考える前に、まずは基本であるキャンバスサイズの話から入りたいと思います。



AIイラスト画像を生成する上で、キャンバスの縦横比は非常に重要な意味を持ちます。画像生成AIは無数の教師データから特徴を学んでいるので、縦長のキャンバスなら人物が単独で大きく映っているイラストが描かれやすく(上イラスト・左)、横長なら被写体が複数だったり背景が大きく映り込んだりしたものが描かれやすい(同右)といった傾向が現われます。上のイラストはどちらも同じプロンプトですが、右イラストは横長のキャンバスにしたために「1girl」というプロンプトを無視して2人目が生成されています。


正方形からおおむね4:3くらいまでの比率なら生成結果が比較的安定するようですが、教師データにないような極端な縦横比のイラストを描かせようとすると、うまく構図を作ることができず、画面が崩壊しがちになります。



キャンバスの比率だけでなく、サイズそのものも大切です。たとえ比率が4:3でも、いきなり長辺が1200pixelを大きく超えるような画像を描かせようとすると、

「絵柄が崩壊しやすい」「不自然なポーズや大量の被写体などが描かれる」「1枚あたりの生成に時間が掛かる」「出力されたイラストを気軽にレタッチできなくなってしまう」…といったデメリットが生じます。


要するに、「できるだけ常識的な縦横比で、小さく作って大きくアップスケールする」がAIイラストの基本になるわけです。


ただ、小さいサイズで生成すると、どうしてもキャラクターを中央に大きく描く構図(▲)になりがちです。こうした構図から外したい場合は、あえて「基本」から離れないといけないこともあります。


どんなサイズで生成するのが良いかは術師さんによっていろいろな考え方がありますが、賢木はNovelAIにおける「Normal」サイズである768×512pixelを基本にしています。いずれも64の倍数なのでWebUI上の拡張機能で扱いやすい、というのがその理由

。この縦横比のまま1.5倍にすると1152×768pixel、それをimg2imgの既定値の最大サイズにするなら2048×1360pixel。(※これだけ64の倍数ではなくなります)


最終的にイラストに整える場合は拡大しても見やすいようにもう少しキャンバスサイズを落としますが、このあたりの数字を覚えておいて、イラストによってアップスケール方法を使い分けることにしています。


ここまでがアップスケールの基本。では、具体的な手法について見ていきましょう。



基本の「Hires.fix」


多くの方が最初に試すアップスケールが「高解像度補助(Hires.fix)」ではないでしょうか。Text2imageで画像生成する際、同時に等倍アップスケールを掛けることができる機能です。「Latent」「Real-ESRGAN 4x plus anime 6B」など10種類以上ある「アップスケーラー」から好みのアルゴリズムを選べるのが特色で、「アップスケール倍率」で何倍に引き伸ばすかを選び、「ノイズ除去強度」で影響度を決定します。


高解像度でのステップ数(Hires steps) は「0」にすると本生成のSTEP数と同じ回数だけ高解像度化処理が行われますが、生成結果はある程度で飽和するようなので、賢木は20以下にすることが多いです。ノイズ除去強度は0.5より低いと逆に低劣化して線がジャギジャギになりますし、高すぎると崩壊するので、0.5~0.65が目安。手が映り込むイラストの場合は崩壊しやすくなるので、0.5を選ぶことが多いです。キャンバスサイズをサイズアップしすぎるとその後の加工がしにくくなるので、倍率は×1.5か×2程度にしておくのが良いでしょう。


通常のt2i生成に引き続いて自動で高画質化が行われるため、Forever生成を掛けて外出しても、1枚1枚同じ設定でアップスケールを掛けることができるのは大きなメリット。あまり強く掛けるとアップスケール時に絵柄が崩壊することも多いですが、大量生成するならその中から崩壊していないものを選び出せば良いので、「数打ちゃ当たる」式の生成が可能です。初心者にも優しいアップスケール方法と言えるでしょう。



こちらの比較画像は、「Latent」✕「倍率2倍」でノイズ除去強度を比べた実験。低すぎるとジャギジャギ、高すぎると崩壊(元の絵と似ても似つかないものが出る)というのがよく分かると思います。


アップスケーラーごとの違い



では、さきほどのメイドさんイラスト(▲768✕512pixel)を使って、アップスケーラーの総当りを試してみましょう。ちなみにX/Y/Zプロットでこうした総当りを試すときは、右側の黄色いボタン(▼)を押すと、現在使用できるすべての値が欄に自動記入されます。



倍率は768✕512pixelから2倍、ノイズ除去強度は0.5固定で比較実験したのがこちら。(適宜拡大してご覧ください)




ほとんど同じに見えますが、青い髪の女の子の左手にご注目下さい。元画像は左手が消滅してしまっているミス画像なのですが、アップスケーラーによっては描き込みを増やす過程で、元画像にはなかった手がちゃんと描かれています。一方、黒髪の女の子の右手が6本指になっているケースもあり、どれも細部が微妙に異なっています。元画像をできるだけそのまま拡大するアップスケーラーもあれば、独自解釈で描き込みを増やそうとするアップスケーラーもあることが分かると思います。


どのアップスケーラーが優れているとは一概に言えないのですが、個人的な感想としては、latentがバランス型で、ややリアル寄りなモデルはlatent(バイキュービック)latent(ニアレストイグザクト)がより良い結果が出ることが多いイメージ。また、GPUへの負担が大きく時間が掛かりますが、「Real-ESRGAN 4x plus anime 6B」は元イラストに準拠しながらリッチな生成結果が期待できるのでオススメです。ただ、4枚同時生成時にこれを掛けると、RTX3060(VRAM12GB)でもメモリ不足エラーが出るのでご注意ください。


各アップスケーラーの効果は使用するCheckpointによってはっきりと異なるので、あくまでご参考まで。Checkpoint配布者がおすすめのHiresの種類を記載していることが多いので、覚えておきましょう。



image2imageアップスケール


Hires.fixの次の選択肢が、「image2imageアップスケール」です。


こちらは、元画像を「image2imageに送る」などで読み込み、同じプロンプトでより大きなサイズにi2iするやり方。Hires.fixのように別のアップスケーラーを使うわけではないので破綻しにくいですし、強さが0.5~0.65前後に限られるといったこともありません。Checkpointやプロンプトを変えたり、Controlnetを効かせたりすることもでき、さまざまな選択肢を選べるのがメリットです。その代わり、手動で設定値を入力しないといけないので、大量生成時に自動でアップスケールしてもらうことはできません。


HiresがAIお任せのアップスケールとすれば、i2iはオーダーメードに当たるアップスケールと言えるでしょう。



何より重要なのは、アップスケール前にレタッチする選択肢が生まれること。余計な被写体を排除したり、崩壊した部位を修正したりした後にアップスケールすれば、多少ディティールが不自然でもきれいに整えてくれます。


768×512pixelで生成したイラストをレタッチで直したら、i2iで1.5倍の1152×768pixelにいったんアップスケールし、さらに2048×1360pixelにアップスケールするのが賢木のよくやる方法。1152pixelサイズにアップスケールするときは、Seed値-1で4枚生成にし、一番好みのものを2048pixelサイズにアップスケールすると失敗が少ないです。さらに、よく似たイラストが計5枚できるので、クリスタなどの画像編集ソフトを使って、2048pixelの崩壊部分を「人力マージ」することもできます。


「疑似マージアップスケール」とは


この項目では、ちょっと面白いi2iアップスケール手法を紹介したいと思います。これは、小さいサイズでt2i生成するときと、i2iでアップスケールするときでCheckpointを変え、双方の良いところを活かす手法。2つのCheckpointをマージしたかのような絵柄になるので、勝手に「疑似マージ」と呼んでいます。


例えば、Counterfeitシリーズのように緻密で雄大な背景が得意なモデルで768pixelサイズのイラストを生成(▼左イラスト)した後、レタッチで破綻を直してから一度1152pixelサイズにアップスケール(▼中央イラスト)。その後、AbyssOrangemixシリーズのようなややリアルめに寄せた人物描写ができるモデルでノイズ除去強度弱め(0.25~0.45程度)にアップスケールを掛ける(▼右イラスト)ことで、双方のモデルの特色を破綻なく融合することができます。



意図に沿った構図を作った後、好みの絵柄に寄せることができるので、なかなか使い所の多いアップスケール手法です。下書き用モデルと仕上げ用モデルを分けるイメージですね。レタッチ機能を使えば、アップスケール前の残したい要素をマスク(保護)することもできますし、クリスタを使って良いとこどりのコラージュを掛ける「人力マージ」をしても良いですね。



ピーキーだけど高性能!「SDアップスケール」



適当に触っていると存在に気付きづらいのが「SDアップスケール」。text2imageの画面にはなく、image2imageの画面下部、デフォルトで「なし」となっているプルダウンメニューの中にひっそりといます。


SDアップスケールは、「いったん元画像を縦横2倍にした後、横縦にタイル状に分割してそれぞれを個別にアップスケールし、再び敷き詰めて元の形に合成する」という非常にユニークな手法です。AIイラストは手前にあるもの(大きく描かれているもの)は高精細に描けても、カメラから遠くなる(小さくなる)ほどに破綻が目立ってしまう特徴がありますが、SDアップスケールはその部分部分を大きくして修復&アップスケールしてくれるため、遠景に描かれたものも綺麗に描写することができます。また、一度に大きなキャンバスをアップスケールするわけではないため、時間さえかければ低スペックマシンでもアップスケールすることが可能です。




▲こちらは、768✕512サイズを2倍にSDアップスケールするに当たり、256✕256の正方形タイルを並べて順番にi2iしている様子です。一度分割した正方形をきれいにアップスケールしてパズルのように並べていくのですが…



はい、このように失敗してしまいました。これはノイズ除去強度が0.5と強すぎて、一つ一つのタイルが全く違うものに変化してしまったのが原因。また、「境界の重なり具合」のスライダーが「0」になっていたため、タイルごとの境目がまったくなじまずに方眼紙のような見た目になってしまっています。



こうしたミスを防ぐため、公式では「ノイズ除去強度は0.2が基本。冒険好きなら0.4まで可能」とアナウンスされています。また、分割されるタイルのサイズが小さい(たくさん敷き詰める)ほど、最終的な画像に描かれる要素が多くなる傾向にあります。


分割するタイル一つ当たりのサイズはユーザーが「幅」と「高さ」(普段はi2i後のキャンバスサイズを決めているスライダー)で決めるのですが、ある程度「重なり」が必要な点に注意が必要です。例えば、512×512サイズのイラストを倍にSDアップスケールした場合、1024×1024pixelのキャンバスにタイルを敷き詰めるわけですが、512×512のタイルを2×2で4枚敷き詰めるわけにはいきません。境目にあたるタイルがないと、先程の崩壊イラストのように境目が分断されてしまうためです。


設定を正しく調整して生成したのが下図のイラスト。



左側が元画像、右側が正しい設定でSDアップスケールしたものです。強度0.25、重なり具合64pixel、一つのタイルサイズ256✕256で、「R-ESRGAN 4x+ Anime6B」を使って2倍サイズにアップスケールしました。元画像を大きく書き換えることなく、非常に忠実にアップスケールされていることが分かると思います。ただ、強度0.25だと破綻を直してくれはしないので、元画像をどんな風にアップスケールしたいかによって使い分けが必要となるでしょう。


もう少しリアル調の方がアップスケールの実感が分かるので、もう1枚作例を紹介します。



左が元画像(768サイズ)、それを強度0.3で2倍にSDアップスケールしたのが右画像です。


アルティメットSDアップスケール


「分割して高精細化し敷き詰める」というSDアップスケールの発想をさらに発展させた、「アルティメットSDアップスケール」という拡張機能も存在します。通常のSDアップスケールとの違いは、敷き詰めたタイルごとの境目をさらに再描画し、継ぎ目をさらに自然に仕上げられること。SDアップスケールは「境界の重なり具合」と「倍率」くらいしか設定がありませんでしたが、より細かくアップスケール具合を決めることができます。


WebUIの拡張機能タブからインストールすることができます。



ノイズ除去強度は、画像を緻密化する場合「0.35」推奨、絵柄を変更したくない場合は 0.15 ~ 0.20 を使用すると良いとのこと。通常のSDアップスケールと同様、「R-ESRGAN 4x+」などの中からアップスケーラーを選ぶことができます。間違えやすいのが「Target size type」で、「Scale from image size」を選ぶと何倍に拡大するかのスライダーが表示されます(上図参照)。デフォルトの「from image2image settings」だと、img2imgのキャンバスサイズの指定通りの結果になり、「Custom size」なら自分で生成結果のサイズを決められます。


境目が目立つ場合は「マスクぼかし」(上の画像で『マス』になっている部分)の数値を上げればOK。



左側が元画像、右側がUltimateSDアップスケーラーで0.35強度で2倍に拡大したもの。SDアップスケールでも継ぎ目がはっきりしていたわけではないので、そこまで違いはわかりませんね。



こちらも左側が元画像、右側がUltimateSDアップスケーラーで0.35強度で2倍に拡大したものです。i2iアップスケールに比べて「できるだけそのまま」かつ「高精細に」アップスケールしようとするので、もともと崩壊している部分(左手など)はそのままになってしまうのが弱点ですね。



MultiDiffusionアップスケール


2022年3月8日に登場した「multidiffusion-upscaler-for-automatic1111」は、元画像の描き込みを増やして高画質化することに特化し、かつ「適切なパラメーターを使用したhighres.fix よりも高速」「SD Upscaler & Ultimate SD Upscalerよりもはるかに優れた結果」をうたう全く新しい拡張機能です。Ultimate SD Upscalerと同様、拡張機能の画面から「MultiDiffusion with Tiled VAE」を選んでインストールできます。


表示される位置はimg2img画面の下部、Controlnetなどと並ぶ場所。Enable~ボタンで起動します。


プロンプトに「1girl」などの被写体に関するものは入れず、「highres, masterpiece, best quality, ultra-detailed unity 8k wallpaper, extremely clear」といったクォリティープロンプトのみにすることが推奨されています。タイルサイズ(latent tile width,height)は各64~96pixel推奨、オーバーラップ(重なり具合)は32~48pixel推奨、ステップは20 ~ 25推奨。SDアップスケールと同様、ノイズ除去強度は高すぎると全く別の画像になるため、0.4程度までが限界のようです。



左が元画像、右がMultiDiffusionアップスケール。SDアップスケールに比べて描き込み量のアップが素晴らしいですが、背景のビルが溶けて通常の風景になっていますね。一つ一つのタイルが小さく、かつi2iを繰り返し行うため、描かれているものの位置が大きくずれることがないかわりに内容が変容することがあるようです。



こちらはおなじみ、controlnetのcannyを使って主線を保存しつつ、MultiDiffusionアップスケールを掛けたもの。部分部分でやや粒子が目立ってしまいましたが、おおむね画像を大きくずらさずに書き込み量だけアップすることができているのではないでしょうか。


こちらは別イラストをMultiDiffusionアップスケールしたもの。それなりに時間はかかりますが、これまでで一番リッチにアップスケールできています。


公式githubにはこの機能を使って非常に22020×1080の超広角画像を高精細化するなどの実験が行われており、非常に奥深さを感じるアップスケーラーです。登場したばかりなので研究が進んでいませんが、さきほど紹介した「疑似マージ」なども可能なのでいろいろと試してみたいと思っています。


おわりに


最後に、こちらが一覧になります。もちろん設定は千差万別ですし、モデルや強度にもよって最終結果は大きく変わりますが、それぞれの手法の特徴が見て取れるのではないでしょうか。こちらの一覧で分かるように、アップスケールは元画像が崩壊しているとどうにもならないことが多いです。たまたまうまくいくこともありますが、まずは元画像で手の形をきれいに出してから、アップスケールを掛けないと余計な手間が増えてしまいます。


そんなわけで、今回は「高解像度補助(Hires.fix)」「i2iアップスケール」「SDアップスケール」「アルティメットSDアップスケール」「multidiffusionアップスケール」と、5つのアップスケール方法を紹介してみました。前回「レタッチ(inpaint)機能が理解る!修正&入れ替え徹底解説」で紹介したレタッチ術と組み合わせたり、Controlnetと組み合わせたりすると、よりハイクオリティなイラストに一歩近づけると思います。


それでは皆様、素晴らしいアップスケールライフをお送り下さい!


スタジオ真榊でした。

Files

Comments

shingo.play

毎度、分かりやすい記事作成、ありがとうございます。 i2i側でのアップスケール、いつも破綻して上手く扱えないなぁ、と思ったら、Denoising strengthが強すぎていたようです。(Hires.fixと同じ感覚で、0.5~0.6くらいにしていました) こちらのアップスケールも、もっと実験してみます!

z-kumagon

本当に毎度毎度、分かりやすい記事をありがとうございます。おかげさまで色々解決している気がします。 まだまだ問題は山積みですが。 今後もよろしくお願いします。 ちなみに、現在はLoRA Block Weightで苦戦してます。 また何かやらかして動作しなくなったので入れ直しです。

z-kumagon

一応、復旧作業終了しました。 まだ更新チェック時にtag-auto complete\\.git\\FETCH_HEAD'が無いとエラーが出るわ、設定してボタンから再起動するとおエラーが出るわで(ブラウザで再読み込みすればエラーは出ない。)完全とはいきませんが、とりあえず使えているようです。 苦戦中だったLoRA Block Weightは 以下の説明を読んであれこれしていたのですが、 ゼロと1の意味を逆に考えていたため全く意図しない結果ばかりを作成してしまっていました。 お恥ずかしい限りです。 これからようやくアップスケールに着手いたします。 ありがとうございました。 ------抜粋---------- プロンプト画面では通常通り使用したいLoraを記入してください。その際、強さの値の次に「:」を入力しウェイトか識別子を入力します。識別子はWeights setting で編集します。 <lora:"lora名":1:0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0> <lora:"lora name":1:0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0>(LyCORISなどの場合) <lora:"lora名":1:IN04> Loraの強さは有効で、階層全体にかかります。大文字と小文字は区別されます。 LyCORISに対してLoRAのプリセットも使用できますが、その場合LoRAで使われていない階層のウェイトは1に設定されます。 上記の形式になっていない場合プリセットではコメント行として扱われます。 --------------

スタジオ真榊

ノイズ除去強度は何をするかによって適正値が全く異なるのですよね~。hiresは0.5以上じゃないとまともに生成されないですし、i2iは0.5を超えると元の画像から大きく離れてしまいますし…。私も試行錯誤のまいにちですわ。

スタジオ真榊

コメントありがとうございました。LoRA生成は私も勉強中ですわ~。LyCORISまでたどり着いていないので、記事が書けるようになるにはまだまだ時間がかかりそうですわ…

Anonymous

アルティメットSDアップスケールとmultidiffusionアップスケールについてはいまいち仕様を把握してなかったので、詳細な解説本当にありがたいです! 今後も更新楽しみにしてます。