なぜみんな 512px 近辺で出すのか?
Stable Diffusion 1.5 では、基本的に 512px × 512px で画像を生成します。
最近の YouTube の解像度は 1920×1080(1080p)、普段絵を描く方は 3000px くらいでキャンバスを用意しているかもしれません。 それなのに、画像生成ではみんな 512px 近辺で生成しています。なぜこんな低解像度なのでしょうか。
理由は大きく 2 つあります。
- 512px 近辺の画像で学習されているから
- 解像度を大きくすると計算コストが一気に跳ね上がるから
1. モデルが 512px 近辺で学習されている
Stable Diffusion 1.5 は、ほぼ 512px × 512px の正方形画像 で学習されています。
- 縦長・横長の画像も、512px の正方形にトリミングして学習している
- その結果、「512px くらいの正方形を描く」のは得意だが、「もっと大きい絵」や「極端な縦長・横長」はそもそも練習していない

実際、768px や 1024px で生成させてみると、a single dog と書いたのにもかかわらず、犬が分裂して複数匹出たりします。
「512px で生成する」 というよりも、正確には 「512px 近辺でしかうまく生成できない」 というのが本質的な理由です。
解決策:Hires.fix
一つの解決策が Hires.fix です。
- まずモデルが得意な 512 × 512px 付近で画像を生成する
- その画像を拡大し、拡大した画像を下書きとしてもう一度描き直してもらう(image2image)
いきなり苦手なサイズを描かせるのではなく、「得意なサイズを一度経由してから、大きい絵にする」 という発想です。
2. 解像度を上げると計算量が一気に増える
もうひとつは、単純に 計算量の問題 です。
- 幅・高さを 2 倍にすると、ピクセル数は 4 倍になる
- Diffusion のステップ数やモデルのサイズは同じなので、VRAM と計算時間はほぼ「×4」に近い世界になる
Stable Diffusion 1.5 のモデル自体は比較的コンパクトですが、それでも 1024px や 2000px などの大きな解像度を、いきなり 1 枚の画像として描かせると負荷はかなり重くなります。
解決策:VRAM 節約とタイル系手法
解像度を上げたいときの対処としては、いくつか選択肢があります。
-
VRAM を節約する
- 高速化と軽量化 のテクニックを使い、モデルや精度を調整して VRAM 消費を抑える
-
タイル系手法を使う
- 1 枚を丸ごと生成するのではなく、分割して合体する Ultimate SD upscale を使う
- 4 分割、8 分割と分割する数を増やせば、理論上はいくらでも超高解像度の画像を作ることができます
SDXL 以降の話
ここまでの話は、あくまで SD1.5 世代の前提です。 その後のモデルでは、学習解像度やアスペクト比の扱いが少しずつ変わってきています。
-
NovelAI Diffusion 以降
- NovelAI は黎明期にアニメ系へ特化した画像生成サービスですが、データセットを工夫しており、縦長・横長の画像も学習に使っていました。これにより、多様なアスペクト比で生成しやすくなりました。
- これ以降に登場した多くのモデルは、様々な解像度の画像を混ぜて学習するのが一般的になっています。
-
SDXL
- 学習解像度の基準が 1024px × 1024px に上がりました。
- さらに新しいモデルでは、低解像度の画像から、もっと高解像度の画像(1〜2 メガピクセル級)まで、比較的安定して出力できるものも増えてきています。
- アーキテクチャの改良により、昔ほど「解像度を上げた瞬間に計算量が爆発する」といった極端さは減っています。
とはいえ、今でも次の考え方は変わりません。
- そのモデルが最も得意とする「推奨解像度」で生成してみる
- それを基準に、必要に応じて Hires.fix やアップスケール、タイル系手法で拡張していく
まずは 「そのモデルが練習している解像度帯で 1 枚出す」。 512px は、SD1.5 にとってそのスタート地点だった、というだけの話ですね。