こんばんは、スタジオ真榊です。こちらの記事は、AIイラストをより高画質にする「アップスケール」の方法についての大型特集です。
AIイラストはSD1.5系なら512x512px、SDXLなら1024x1024px前後で生成することを前提に学習されており、そうした規定サイズを大きく上回るサイズでいきなり生成しようとすると崩壊してしまいますし、小さい範囲に描画されたピクセルは綺麗に並ぶことができず、細部が低劣になってしまいます。そこで、いったん規定サイズで「タネ」となる画像を生成してから、より大きいサイズで詳細に描画(image2image)し直す工程が「アップスケール」というわけです。
アップスケールのやり方はそれぞれの個性や好みが出るところですし、フォトリアル系なのかアニメ調なのか、描き込み量を多くしたいのかそのままにしたいのかといったことによっても手順は分かれます。この記事では、アップスケールの前提となるキャンバスサイズの基礎知識から、3つのアップスケール手法と「ADetailer」の基本と応用、そして具体的な手順を詳しく紹介することで、誰でも場面に応じたアップスケールができるように解説していきます。
はじめに - キャンバスサイズ設定の基本 -
アップスケールについて考える前に、まずは基本であるキャンバスサイズの話から始めたいと思います。
AIイラスト画像を生成する上で、キャンバスの縦横比とサイズは重要な意味を持ちます。縦長のキャンバスなら、人物が単独で大きく映っている画像が描かれやすく、横長なら、複数の人物や背景が大きく映り込んだ画像が描かれやすい傾向がみられます。
例えばこちらは、「1girl,full body,simple background,solo(女の子の全身がシンプルな背景に描かれている)」と指定して生成した横長の4枚ですが、指示通りだと大きく余白ができることに「違和感」を覚えたAI側が、勝手にキャラクター設定のようなものを出してしまっています。

これは、そのモデルが学習したデータセットにおいて、縦長の画像と横長の画像にどんなものが描かれることが多いかが「バイアス」として現れたものです。右上以外の3枚はプロンプト的には正しいのですが、学習データセットで学んだ「こういうキャンバスサイズにはこういうものがよく描かれる」というバイアスから見ると、余白だらけで不自然(非常識)な3枚と言えます。
こちらはより極端な「縦横 1:2」の比率で生成したもの。プロンプト通りなのは右下だけになりました。AIは学習内容から「もっともらしい」回答を導き出す仕組みなので、不自然な指示を自然に解釈しようとして間違えてしまうことがあるのですね。

<学習によって生じた"バイアス">
画像生成でよくある男性キャラクターがなかなか出にくかったり、"looking away(向こうを向いて)"とどんなに強調しても"looking viewer"になってしまったり、「princess」が金髪碧眼でティアラを付けているキャラばかりになったりするのも、この「バイアス」の仕業です。なんでももっともらしくするというのは、ステレオタイプに陥りがちということでもあります。
正方形からおおむね2:3くらいまでの比率なら生成結果が比較的安定しますが、極端な縦横比のイラストを描かせようとすると、キャンバスサイズに無理に合わせた構図になるため、人体が妙に「間延び」してしまったり、謎のオブジェクト(布状が多い)が現れたりするなど、モデル性能によっては構図が崩壊しがちになります。

▲胴が長くなってしまい、布状のオブジェクトが出現した例(※SD1.5系)
SDXL系を始め最近のモデルは相当高性能なので、キャンバス比率と両立不可能なプロンプトを入力しなければ、このようになんとか工夫しておさめてくれるようにはなってきてはいます。が、キャンバスの縦横比が出力結果に大きな影響を及ぼすのは依然変わっていません。

<"規定サイズ"を守ろう>
キャンバスの縦横比だけでなく、サイズそのものの設定も重要です。
こちらはいきなり2048x2048pxで生成しておかしなことになった例。完成したものを拡大してみると細部は詳細なのですが、学習データセットの画像サイズと遠すぎて、どこに何を描けばいいのか分からなくなってしまった状態です。

SDXLモデルの教師データセットは基本的に1024pxサイズで学習されているので、その2倍の大きさだとどのようにピクセルが並ぶのかうまく計算できず、このように崩壊してしまうのですね。
また、顔や手の描画範囲が小さくなればなるほど、描画品質は大きく下がってしまいます。特に顔は全身の中で細かな線が集中する重要な部分ですので、狭い範囲に描画させようとしても、このように低劣化してしまうことがほとんど。このままではとても作品として出すことはできませんね。

小さい範囲に生成しても、いきなり大きく生成しても失敗してしまうなら、どうすればいいでしょうか。少々回りくどい問いかけになってしまいましたが、答えは「いったん規定サイズで構図を確定させてから、大きなサイズに拡大(詳細化)する」です。この工程が、今回解説する「アップスケール」というわけですね。
推奨のキャンバスサイズ
規定サイズで生成したアップスケール前の画像を、この記事では「下絵」と呼ぶことにします。下絵をどんなサイズで生成するのが良いかはいろいろな考え方があり、モデル提供者がおすすめの比率を紹介していることもありますが、短辺長辺とも64の倍数にしておくことをオススメします。1000x1500pxなどきりのいい数字にしたくなるところですが、1024x1408pxのようにどちらも64の倍数でないと、WebUI上の拡張機能でエラーが出ることがあるためです。
ちなみに、NovelAIにおける「普通」サイズは1216x832px、「大」サイズは1024x1536px。いずれも64の倍数でできています。

個人的には、NovelAIのインペイント機能で手などのミスを直すことが多いので、SDでの生成比率も同じ1216x832pxか1024x1536pxにしていることが多いです。(投稿時はイラスト内容に合わせて最適な大きさにトリミングしています)
SDXLモデルの場合は1024x1024pxが規定サイズです。短辺を1024pxとし、長辺を64の倍数にするとなると、選択肢は以下のようになります。2:3よりも正方形に近い比率にしたいなら、1024x1344pxか1024x1408pxサイズあたりがおすすめです。

拡張機能でキャンバスサイズを選びやすくしよう

こうしたキャンバスサイズをいちいち手で入力するのは面倒ですね。こちらの記事の「⑤生成サイズをボタンで一発選択」で紹介していますが、上のスクリーンショットのような「キャンバス比率一発決定ボタン」を出せる拡張機能があります。無駄な作業をカットできるので、「①デフォルトの生成設定を変更しよう」と合わせて、早めに導入しておくことをオススメします。
具体的なアップスケール手法
キャンバスサイズの基本をおさえたところで、さっそく具体的なアップスケールの手法について見ていきましょう。現在ローカル環境でよく使われているアップスケール手法を大きく分けると、次の3つに分かれます。
1.高解像度補助(Hires)アップスケール
…text2imageタブで、通常生成に引き続いて各種「アップスケーラー」を使って自動でimg2imgを行うもの。設定が簡単なので初心者にお勧め。
2.image2imageアップスケール
…img2imgタブで下絵を読み込み、より大きなサイズでimg2imgするもの。強度を高めるほどに下絵から変化してしまうが、Controlnetを使うことで線画を固定したり、タッチごと大胆に変えたりすることもできる
3.Extraアップスケール
…extra(その他)タブでできる、単純拡大して細部を補うだけの簡易アップスケール。その他タブでは、トリミングや反転、背景一括削除などさまざまな加工が行える。
一つずつ、詳しく見ていきましょう。
1.高解像度補助(Hires.fix)

ローカル生成において、多くの方が最初に試すアップスケールが「高解像度補助(Hires.fix)」です。これはtext2imageタブで画像生成をする際、通常生成に引き続いて「アップスケーラー」に出力画像を渡し、より大きなサイズにimg2imgしてもらう機能。設定が単純なので、初心者に優しいアップスケール方法と言えるでしょう。
デフォルトの「Latent」やアニメイラスト向けの「Real-ESRGAN 4x plus anime 6B」など、あらかじめ用意されたアップスケーラーから好みのものを選ぶことができ、自分で追加することも可能。アップスケーラーには、実写画像の詳細化が得意なもの、アニメ調が得意なものなどさまざまな種類がありますが、あまり強く掛けると絵柄や顔立ちがいわゆる「マスピ」らしく変化したり、崩壊したりしてしまう点に注意が必要です。

▲R-ESRGAN 4x+ Anime6Bによるアップスケール例(強度0.5)。ほとんど変化していないようだが、カーテンやスカートなどに注目するとディティールが付け加わっている。顔立ちも変化。
<高解像度でのステップ数(Hires steps)>
「高解像度でのステップ数」(Hires steps) は、Hiresをどれくらいのステップ数掛けるか決める項目。「0」にすると本生成のSTEP数と同じ回数だけ高解像度化処理が行われますが、生成結果の高精細化はある程度で飽和しますので、完全なノイズから画像生成する本生成と同じSTEP数は必要ないことが多いです。結果がさほど変わらないのに生成時間が増えてしまうのはもったいないので、私の場合、本生成が25~30STEP程度だったらHires stepsは15前後にしていることが多いです。
「サイズ変更後の幅・高さ」に数値を入力することで下絵とキャンバスサイズを変更することもできますが、予期しない結果を招くことがあるため、基本的には同じ比率のままアップスケールすることをおすすめします。
<アップスケール倍率>
下絵を横縦何倍のサイズにするかを選びます。例えば1024x1408pxの画像を2倍にアップスケールすると、2048x2816pxになります。当然、大きい画像にするほど品質は良くなりますが、推論時間(生成時間)が長く掛かり、ノイズ除去強度が高めだった場合は崩壊しやすくなります。実践では1.5~2倍くらいで掛けることが多いです。
<ノイズ除去強度>
「ノイズ除去強度」はHiresを使う上で最も重要な設定値。アップスケーラーによるimg2imgをどれくらいの強度で掛けるかを設定する数値です。「下絵」にどれくらいノイズを加えてから生成を行うかを決める数値ですので、最大値の「1」に近づくほど品質が上がる代わりに元の画像からは離れ、崩壊率も上がっていきます。適正な値はアップスケーラーによります。
<アップスケーラー>
アップスケーラーには、大きく分けて「アルゴリズム型アップスケーラー」「学習済みAIモデル型アップスケーラー」の二つの種類があり、適切なノイズ除去強度が異なります。
・AIモデル型:無数の画像で学習した内容に従って、下絵をimage2imageする仕組みのアップスケーラー。下絵に存在しない詳細を付け加えたり、ミスを修正する可能性を持つが、ノイズ除去強度が強すぎると逆に指の本数を増やしてしまうなど、不自然な結果を招くこともある。(例)Latent系、Real-ESRGAN 4x plus anime 6Bなど
・アルゴリズム型:あらかじめ決められた数学的ルールに従って下絵のアップスケールを行うアップスケーラー。潜在空間を通さないので崩壊しにくく、計算が早いが、存在しないディティールを付け加えるような動作はしない。Lanczos、Nearestなど。
下図は「Latent」アップスケーラーでノイズ除去強度を変化させた例。0.5より低いと逆に低劣化して線がジャギジャギになります。Latent系は絵の変化を厭わないので、下絵の崩壊を修正してくれる力がありますが、0.8くらい強くなると元絵から大きく離れてしまいます。

「Real-ESRGAN 4x plus anime 6B」や自分で追加できるHires「4x-AnimeSharp」などはアニメ調イラスト向きのアップスケーラー。ノイズ除去強度が低くてもLatentのように崩壊はしません。こちらはR-ESRGAN 4x+ Anime6Bのノイズ除去強度による違いを示した図。1に近づくと、下絵の画風が少し消えるのが分かります。






