「Hires.fix」を使って破綻無く高画質画像を生成する方法

「Hires.fix」を使って破綻無く高画質画像を生成する方法 AI/Stable Diffusion

Stable Diffusion では様々なサイズの絵を描くことが出来ます。

大きめのサイズの画像が欲しいけど、なぜか出力された画像が変な結果の画像ばかり。使える画像がほとんどない!

そんな経験はありませんか?

実は基本的なモデルの学習が512×512で行われているため、サイズを大きくすると例えば512×512が2つ組み合わさったようなものになってしまっているため起きています。

他にも縦長画像を作った場合、例えば512×768ではうまく生成されるので、サイズを大きくして1024×1536にしたら、破綻した画像ばかり生成されることも良く起きます。

そこで今回は「Hires.fix」という機能を使って、画像を破綻させずに高画質化する方法について紹介します。

結果

・サイズが大きい画像を生成しても、「Hires.flx」を使うと破綻が少ない

・正方形でないサイズの画像生成時でも、破綻が少ない

・モデルとUpscalerによってはエラーが起きるが、変更することで解消できる

この記事を読むと

高画質の画像でも破綻せずに生成することが出来ます。

※記事内に広告が含まれています。

「Hires.fix」とは?

基本的な問題として、Stable Diffusion はノイズを除去することで絵を描いています。

そのため、小さいサイズを指定すると相対的に除去するノイズが大きくなってしまい、手足など詳細部分を荒く除去してしまいます。

その結果、手の平がぐちゃぐちゃになってしまったり、細かい情景がおかしくなってしまいます。

しかし単純に画像サイズを大きくした場合、特に正方形以外の画像サイズを大きくして出力すると、学習モデルからうまく追随できずに、良く分からない画像が生成されてしまいます。

例えば1024×1536のサイズなどでは、512×512のモデルを単純に2倍にしたものではないので、引き伸ばされた画像の間の補完がうまくいかずに、破綻した画像が描いてしまうためです。

「Hires.fix」とは生成した低サイズの画像をアップスケールして、そこに対して情報を追加し大きいサイズの絵として出力する機能になります。

そのため、512×512に近い形で絵を描くため破綻が少なく、そこからアップスケールするため大きいサイズの良い絵を描くことが出来ます。

「Hires.fix」のインストール

「Hires.fix」はStableDiffusion の拡張機能なので、StableDiffusionをインストールすると自動で使うことが出来ます。

【検証】実際にHires.fix使って描いてみた

実際に1024×1536の画像で、「Hires.fix」の使用有無で比較してみたいと思います。

「Hires.fix」準備

「Hires.fix」はタブが隠れている状態では機能OFF、表示されている状態でONになります。

スイッチなどはありませんので注意してください。

出力結果

Hires.flx:OFF

初めに「Hires.flx」OFFの状態で大き目のサイズの画像(1024×1536)を出力してみます。

使用するプロンプトは下記になります。

プロンプト

upper body, 
(best quality, masterpiece, 16k, ultra detailed, beautiful skin, professional lighting),
create a blank space above the head, beautifully painted, 1 girl, young,20 years old, short hair, bob cut, (beautiful dark brown hair:1.1), blonde eyes, light smile, white skin

ネガティブプロンプト

flat color, flat shading, nsfw, retro style, poor quality, bad face, bad fingers, bad anatomy, missing fingers

結果:1枚は破綻が少なく女の子が生成されていますが、残りは風景と同化していたり、二人がせいせいされたりと、破綻していることが分かります

画像サイズも大きいので、生成に時間がかかって出来上がったのがこれでは悲しいですよね。

Hires.flx:ON

元々1024×1536を作成していたものをHires.flxを使用して、(512×768)×2=1024×1536として出力してみます。

プロンプトやSampling stepsは同じ設定です。

項目設定値
元の画像サイズ512×768
UpscalerLatent
Hires steps0(Sampling steps:25)
Denoising strength0.6
Upscale by2

結果:6枚とも破綻なく生成できています

アップスケール前の画像(512×756)では破綻がないため、そのままアップスケールしたため大きいサイズでも破綻なく、かつ書き込みが増えて綺麗な画像が生成されました。

光の加減や目の書き込み量が、より良い感じになっています。

各パラメータを変更した場合

Upscaler

アップスケールを行うためのアルゴリズムの種類です。

アルゴリズムによってアップスケールの方法が変わるので、最終的な絵の細かい部分が変わります。

まずはLatentから初めて、自身の描きたい絵に合わせて変更してください。

Latentが生成に時間がかからず、LDSRは逆に生成に時間が多くかかります。

Latent

LDSR

R-ESRGAN 4x+ Anime6B

また下記のようなエラーで止まってしまった場合は、画像の生成が64の倍数でないことが原因ですが、512などの値にしていてもエラーが出てくる場合は、Upscalerを変更すると通る場合があります。

Hires steps

高解像度化する際のステップ数を設定します。

0に設定すると、Sampling Step数と同じ値が設定されます。

そのため0にしてSamplingStep数と同じ値にするか、その値±5ぐらいの値から始めていき、自身の絵に合う値を探してください。

初めの時にこのstepsを「5」と入力すると、元のStep数+5になると思っていて、よくわからない絵がたくさん出力されたことがあります。

実際はSampling steps=5と同じ意味になってしまうので、画像生成が上手くいきません。

0(元のStep数と同じ)

Steps=5

元のStep+10

元々のSampling stepsが高めで生成しているので、+10しても大きく変化はしませんでした。

Denoising strength

元画像からアップスケールするときのノイズ除去の強度の値を設定します。

当然アップスケール時にノイズを除去した方が良い画像になるので、値は大きい方が良いです。

しかし、Stable Diffusionがノイズ除去で絵を描いているため、大きくしすぎると元絵の特徴部分まで、ノイズと断定されて除去されてしまうことがあります。

試した感じでは0.5~0.7ぐらいの値から初めて、特徴が削られない程度の値にしてください。

0.1

0.6

1.0

Upscale by

アップスケールする倍率の値です。

基本的には2倍ぐらいまでの値を入れると良いと思います。

元の画像サイズにもよりますが、あまり値を大きくすると生成時間が多くなります。

VRAMの容量の影響が如実に出てしまうので、GPUのメモリ不足のエラーが出た場合は、アップスケールした時のサイズが小さくなるように、値を小さくしてください。

エラーの対処?

私が試している中でも下記の「RuntimeError: Sizes of tensors must match except in dimension 1. Expected size XXX but got size YYY for tensor number 1 in the list.」というエラーは何回か起きました。

内容的にはサイズが64の倍数になっていないとダメというエラー文ですが、実際に2の乗数にしても解消されません。

XXXやYYYの時の数字が変わるだけでした。

各パラメータ値を弄ってもエラーは解消されず、「使用しているモデル」か「Upscaler」を変更することでしか解消できませんでした。

そのため実際に64の倍数であるかではなく、学習モデルとの相性によるものと思われますが、現在解消されているか分かりません。

まとめ

今回は「Hires.fix」を使用して、破綻せずに大きいサイズで描く方法について紹介しました。

改めて3行でまとめると…

・サイズが大きい画像を生成しても、「Hires.flx」を使うと破綻が少ない

・正方形でないサイズの画像生成時でも、破綻が少ない

・モデルとUpscalerによってはエラーが起きるが、変更することで解消できる

高画質化しようとして画像のサイズを上げると絵が破綻して、うまく高画質化できないこともありますよね。

そんな時に「Hires.fix」を使うことで小さいサイズでの構図のまま、画像を大きくすることができました。

縦横比が違う場合に画像が破綻するときにも有効なので、ぜひ「Hires.flx」を使用して素晴らしい絵をたくさん描いてみてください!!

コメント

タイトルとURLをコピーしました