この記事は内容の古くなったアーカイブ記事です。特に理由がなければ、こちらのアップデート版をお読みください。
こんばんは、スタジオ真榊です。今回は、AIイラストを高画質にする「アップスケール」の方法についての大型まとめ記事をお届けします。
先日、FANBOXのメインコンテンツである「StableDiffusion超入門」をアップデートしたのと同時に、FANBOX全体の過去記事を見直しました。目につく古い情報はちょこちょこと書き直したのですが、イラストのアップスケール(高解像度化&高精細化)については総論的な記事が不備であることに気づいたので、今回はあらためて現状のアップスケール方法をおさらいしてみたいと思います。
アップスケールのやり方はそれぞれの個性や好みが出るところですし、フォトリアル系なのかアニメ調なのか、描き込み量を多くしたいのかそのままにしたいのかといったことによっても変わります。また、各設定値についても、おのおのの好みによって最適な調整は大きく変化するため、これといった「決定版」は存在しないのですが、本記事では界隈でよく使われている手法を総覧しつつ、最後に私のよくやるアップスケールのワークフローを紹介していければと思います。
キャンバスサイズ設定の基本
さて、アップスケールについて考える前に、まずは基本であるキャンバスサイズの話から入りたいと思います。
AIイラスト画像を生成する上で、キャンバスの縦横比は非常に重要な意味を持ちます。縦長のキャンバスなら、このように人物が単独で大きく映っているイラストが描かれやすく…

横長なら、被写体が複数だったり背景が大きく映り込んだりしたものが描かれやすい傾向が現われます。

上の2枚のイラストはどちらも全く同じ「1girl」から始まるプロンプトですが、2枚目は横長のキャンバスにしたために「1girl」というプロンプトを無視して2人目が生成されています。これは、学習データとなった無数のイラストに「横長のイラストは複数人が描かれていることが多い」という傾向が強く存在するため。男性キャラクターがなかなか出にくかったり、"looking away(向こうを向いて)"とどんなに強調しても"looking viewer"になってしまったりするように、キャンバスサイズによっても構図やキャラクターの配置は学習傾向による影響を受けます。
正方形からおおむね4:3くらいまでの比率なら生成結果が比較的安定しますが、極端な縦横比のイラストを描かせようとすると、キャンバスサイズに無理に合わせた構図になるため、人体が妙に「間延び」してしまったり、謎のオブジェクト(布状が多い)が現れたりするなど、構図が崩壊しがちになります。

▲胴が長くなってしまい、布状のオブジェクトが出現した例
キャンバスの比率だけでなく、サイズそのものも大切です。たとえ比率が4:3でも、いきなり長辺が1200pixelを大きく超えるような画像を描かせようとすると、
「絵柄が崩壊しやすい」「不自然なポーズや大量の被写体などが描かれる」「1枚あたりの生成に時間が掛かる」「出力されたイラストを気軽にレタッチできなくなってしまう」…といったデメリットが生じます。
大崩壊していて苦手な方もいると思うので小さめで掲載しておきますが、こちらはいきなり長辺2048ピクセルで生成しておかしなことになった例。

全く同じ設定・Seed値でも、768x512サイズにして生成すればこのようになります。

つまり、横着せずいったんこのイラストを挟んでから、これを2048pxサイズにアップスケールすれば良いことになります。指が増えてしまっている部分の修正も、アップスケール前にやっておけば良いですね。
ここまでの基本をまとめると、要するに「できるだけ常識的な縦横比で、小さく作って、必要な修正を加え、大きくアップスケールする」がAIイラストの基本になるわけです。
ただ、小さいサイズでキャラ1人の画像を生成すると、下図のようにどうしてもキャラクターを中央に大きく描く構図ばかりが出てしまいがちです。マスピ顔(Chckpointごとに存在する定番の顔立ち。Masterpiece顔)ならぬ、マスピ構図。

あえてこうした構図から外したい場合は、じっくりプロンプトを練るか、Controlnetを使うなどする必要が出てきます。
どんなサイズで生成するのが良いかはいろいろな考え方がありますが、賢木はNovelAIにおける「Normal」サイズである768×512pixelを基本にしています。いずれも64の倍数なのでWebUI上の拡張機能で扱いやすい、というのがその理由。この縦横比のまま1.5倍にすると1152×768pixel、それをimg2imgの既定値の最大サイズにするなら2048×1360pixel。(※これだけ64の倍数ではなくなります)
最終的にイラストに整える場合は拡大しても見やすいようにもう少しキャンバスサイズを落としますが、このあたりの数字を覚えておいて、イラストによってアップスケール方法を使い分けることにしています。
キャンバスサイズの基本をおさえたところで、さっそく具体的なアップスケールの手法について見ていきましょう。

高解像度補助(Hires.fix)
多くの方が最初に試すアップスケールが「高解像度補助(Hires.fix)」ではないでしょうか。これはText2imageで画像生成する際、SDwebUIにあらかじめ組み込まれている各種アップスケーラーを使って、同時に等倍アップスケールを掛けることができる機能です。
通常のt2i生成に引き続いて自動で高画質化が行われるため、Forever生成(停止するまで生成を続けるモード)をスタートして外出しても、1枚1枚同じ設定でアップスケールを掛けることができるのがHires.fixの大きなメリット。あまり強く掛けると絵柄が崩壊しがちですが、大量生成するならその中から崩壊していないものを選び出せば良いので、「数打ちゃ当たる」式の生成が可能です。初心者にも優しいアップスケール方法と言えるでしょう。

「Latent」や「Real-ESRGAN 4x plus anime 6B」など、あらかじめ用意されたアップスケーラーから好みのアルゴリズムを選べるのが特色で、「アップスケール倍率」で何倍に引き伸ばすかを選び、「ノイズ除去強度」で影響度を決定します。ちなみに、ウェブ上で配布されているアップスケーラーを「models\ESRGAN」フォルダに格納することで増やすこともできます(後述)。
高解像度でのステップ数(Hires steps) は「0」にすると本生成のSTEP数と同じ回数だけ高解像度化処理が行われますが、生成結果の高精細化はある程度で飽和しますので、完全なノイズから画像生成する本生成と同じSTEP数は必要ないことが多いです。結果がさほど変わらないのに生成時間が増えてしまうのはもったいないので、私の場合、本生成が25~30STEP程度だったらHires stepsは15前後にしていることが多いです。
ノイズ除去強度はHiresを使う上で最も重要。アップスケーラーによって大きく結果が変わることに注意が必要です。「Latent」系のアップスケーラーを使用する場合、ノイズ除去強度は0.5より低いと逆に低劣化して線がジャギジャギになりますし、高すぎると崩壊します。下図は「Latent」アップスケーラーでノイズ除去強度を変化させた例。0.65前後がだいたいの目安でしょうか。0.5と0.7の手元を見ていただくと分かるように、Latent系は元絵が変化するのを厭わないので、ある程度崩壊を修正してくれる力がありますが、0.8くらい強くなると元絵から大きく離れてしまいます。

「Real-ESRGAN 4x plus anime 6B」や後で紹介する追加Hires「4x-AnimeSharp」など、画像をできるだけそのままの構図で高精細化してくれるアップスケーラーの場合、さほど神経質にならなくても大丈夫。下図はR-ESRGAN 4x+ Anime6Bのノイズ除去強度による違いを示した図です。

ノイズ除去強度が弱ければ元画像からさほど変わりませんし、0.7くらいまでなら顔立ちが大きく変わることもあまりありません。
(※ちなみにこの2つはGPU負担が重めなので、2倍サイズで4枚同時バッチ生成しようとすると、RTX3060を使っている賢木の環境では頻繁にCUDA OUT of Memoryになります)
追加アップスケーラーのススメ
さて、いま触れた「4x-AnimeSharp」というアニメ調イラスト向けのアップスケーラーは、SDwebUIにはビルトイン(同梱)されていませんので、利用するためにはウェブ上から追加ダウンロードする必要があります。
他にも、「アニメ調特化」「写真特化」「顔特化」「白黒漫画特化」などさまざまな特徴のあるアップスケーラーがウェブ上で公開されています。こちらのデータベースから、気になるのを探してみるのもよいでしょう。
【重要】アップスケーラーも学習モデルである以上、CheckpointやLoRAなどと同じようにそれぞれ配布者が設定したライセンスが存在します。利用する際は必ずライセンスの内容を確認するようにしましょう。

▲「License」欄をチェック
【アニメ系アップスケーラーの例】
※ライセンスはいずれも「CC-BY-NC-SA-4.0」です(※基本的にアルファベット二文字が規定事項を示し、末尾の数字がバージョンを示しています。CC-BY-NC-SA-4.0は『著作者情報の表示義務』『営利使用不可』『改変して新しいアップスケーラーなどを作成した場合は元のライセンスを継承する必要あり』の意味です)
・4x-AnimeSharp
・UltraSharp
・Lollypop
【4x-AnimeSharpのダウンロード例】
リンク先のダウンロードボタンをクリックすると、ストレージサイト「mega」に遷移するので、このように右クリックして「4x-AnimeSharp.pth」ファイルを標準ダウンロード。

あとはSDwebUIの「models\ESRGAN」フォルダに置いて再読み込みすれば、ほかのアップスケーラーと同様に利用できるようになります。
【2023/08/30追記】
アップスケーラー「UltraSharp」と「AnimeSharp」のライセンス表記がCC-BY-NC-SA-4.0(非営利、クレジット明記、ライセンス継承すれば改変・再配布可)となっている件につき、「生成した画像にもこのライセンスの効果は及びますか?」と制作者のKim2091氏に問い合わせたところ、お返事を頂きました。
結局のところ、法律専門家でなければライセンスの正確な法的効果については結論を出せないとのことですが、制作者としてライセンスに込めた意図や希望としては上記リンク先に書かれた通りとのことです。利用される場合はご一読ください。
アップスケーラーごとの違い
こちらの768x512ピクセルでポン出しした画像について、アップスケーラーの総当りを試してみましょう。

ちなみにX/Y/Zプロットでこうした総当りを試すときは、右側の黄色いボタン(▼)を押すと、現在使用できるすべての値が欄に自動記入されます。


倍率は768✕512pixelから1.5倍、ノイズ除去強度は0.7に固定して比較実験したのがこちら。(適宜拡大してご覧ください)
①Latent系 +アップスケーラー「なし」

②その他

ほとんど変わらないじゃないですか!?

まあ実際ほとんど同じなわけですが、特に違いが出ているのは左手付近に黒いベルトのようなオブジェクトが生じているかどうか。ノイズ除去強度が0.7と強めなので、元絵の一部が変異してこうしたものが生じがちです。また、親指の長さもかなりまちまちなのがわかります。アップスケール元の画像とアップスケーラーの組み合わせによってどんな現象が起こるかはそのときどきなのですが、アップスケーラーがそれぞれ異なる処理をしていることがよく分かると思います。
各アップスケーラーの効果は使用するCheckpointによって異なりますし、各ユーザーの求める画風によっても価値が変わってくるので、あくまでご参考まで。Checkpoint配布者がおすすめのHiresの種類や設定を記載していることも多いので、覚えておきましょう。










