ローカルの画像生成AIを使って、A0ポスターサイズ、抱き枕サイズまで画像をアップスケールするやり方

350dpiのA0(11,589 x 16,384)、pixivFactoryの抱き枕カバー推奨サイズ(5,217 x 16,044)までのアップスケールを私の場合どうやっているのかを解説していきます
直接貼られている画像はnote側でめちゃくちゃ圧縮されてるはずですので、解像度の具合は最後の方に貼ったリンク先から確認してください


生成環境

stable-diffusion-webui-forge f0.0.17v1.8.0rc-latest-276-g29be1da7
GPU 3060(12G)
メモリ32G
使用checkpoint ponyベースマージモデル(SDXL)  "Hyper-SDXL-8steps-lora"をマージしているので、t2iをCFG1.5 sampling steps 12で生成できる状態です

必要な拡張、モデル

checkpointは好みの物を使用
肌・瞳の質感はかなりcheckpointの影響を受けます
元画像をローカルで出力しているなら同じモデルで問題無いと思います

controlnet

forgeに最初から入ってたはず
tileを使用し、モデルはbdsqlsz_controlllite_xl_tile_anime_α

ここは使用するローカルモデルとの相性もあると思うので各々いい感じのやつを探してください

SD upscaler

i2iタブのscript内にあるやつ
たしかこれもforgeでは最初から入ってたはず
使用モデルは4x-UltraSharp

ADetailer

顔を自動で検出してinpaintしてくれる拡張機能
最初のアップスケールで一回だけ使ってます

生成サイズ

A0は768 x1,024で生成したものを最終的に12,288x16,384までアップスケールしてから11,589x16,384でトリミングします。
抱き枕は512x1,536で生成したものを最終的に5,528x16,584までアップスケールしてから5,217x16,044に縮小、トリミングします。

768x1024のポン出し

2倍にする

まずは生成したものをi2iで2倍にします。(長辺がA0で1024→2048、抱き枕で1536→3072)
Denoising strength は0.17でやってます。これはサイズを変更せずにi2iをするとわかるんですが、画像に変化が起きる最低値を取っています。ただ、この値はモデルによって変わる可能性があると思うので、各自で使用モデルの最低値を求めて下さい。

seed固定してサイズ変更無しのi2i
0.16までは全ピクセル一致で変化がありません
seed固定して2倍に拡大i2iした時のdenoising0.0と0.16を減算で重ねたもの
よーく見るとホントに薄っすらと変化がありますがおそらくi2i前のアップスケール時のseed差による変化だと思われます。画像サイズに変更がない場合全ピクセルで完全に一致します
seed固定して2倍に拡大i2iした時のdenoising0.0と0.17を減算で重ねたもの
0.01の差で一気に画像に変化が現れます

i2iの設定

i2i時のsampling stepsはt2iで使用している値の半分でOK

controlnet の設定

値はweightだけ弄ってます

ADetailerの設定

デフォルトからの変更点はinpaint denoising strengthを0.17にしてあるとこだけです

SD upscalerはまだ使いません

上記設定で2倍i2iしたものがこちら(1536x2048)

2倍にする

更に倍します。(長辺がA0で2048→4096、抱き枕で3072→6144)
controlnetの設定は引き続き同じもので、Adetailerはオフに、ここからはcontrolnetとSD upscalerだけを使用していきます。
また、適時気になる所は修正しておきます。ここでは耳に生まれたピアスと左手、右手指周辺が気になるで修正しておきました。

i2iの設定

ここからSD upscalerを使用するので、サイズも含めて変更無しです

SD upscaler の設定

4x-UltraSharpをチェックするのを忘れずに。
scale factorはベース画像を何倍の大きさにするかの設定です。デフォルトで2になってます。

SD upscalerを使用する場合、i2iの設定にあるresize to/resize byの値でタイルサイズが決まります。
上記の設定だと1536x2048のベース画像をSD upscalerで2倍の3072x4096に拡大して、1536x2048の大きさのタイルで分割してi2iをかけていくという処理になります。このタイルサイズを大きくし過ぎると、VRAMが不足して共有メモリを使い始めて、めちゃくちゃ処理に時間がかかるようになります。なので私の環境ではタイルサイズはずっと1536x2048でやっています。

上記設定で2倍i2iしたものがこちら(3072x4096)

2倍にする

ひとつ前と同じ設定で更に倍します(長辺がA0で4096→8192、抱き枕で6144→12288)

同じ設定でさらに2倍i2iしたもの(6144x8192)

この辺りで顔を切り抜いてinpaintでさらに高精細化を図ります。
なんの根拠もないんですが、体感的には”1024x1024で切り抜いた範囲に両目がギリギリ収まっている状態”で瞳を等倍inpaintするのが一番いい感じに仕上がる気がしています。なので、画像に対しての顔の大きさで変わってきますが、ここか一個前の段階で目周りにinpaintをかけます。

1024x1024で切り抜いた顔
目周りのinpaint後
inpaint時の設定、controlnetは今までと同じ設定でON
soft inpaintingはONだけど中身の設定はデフォルトのまま
inpaintした顔と差し替えたもの

2倍にする(1.35倍にする)

更に2倍i2iです。抱き枕の場合最後は1.35倍でi2iです。
(長辺がA0で8192→16384、抱き枕で12288→16584)
controlnet tile+denoising0.17であれば、よほどSD upscalerのタイルの継ぎ目が出てしまうという事はないのですが、タイツ等で細かい模様がある場合、継ぎ目が出てしまう事があります。そういう場合はSD upscalerのTile overlapを256にすれば、だいたい綺麗になります。(生成速度は無視することとする)
12288x16384の画像はnote君にアップロードすることすら拒否されたので下に今回使用した各サイズの画像といっしょにまとめて置いておきました。
比較用に1536x2048からwifu2xで12288x16384まで拡大した画像も入ってます。

トリミング

あとは適当な画像編集ソフトでA0なら(11,589 x 16,384)、pixivFactoryの抱き枕カバー推奨サイズなら(5,217 x 16,044)にトリミング、縮小したりして調整して完成です。そこそこ時間はかかるけど3060でもOOMせずに超高解像にできるので、皆さん気軽に16000pxの壁を超えるといいんだよ。


いいなと思ったら応援しよう!