2024年4月7日日曜日

ControlnetのtileでSDXL 1.0の高解像度化

Stable diffusion webui Forgeが登場して、メモリが節約されることで比較的前のスペックのGPUカードでもSDXL 1.0での生成が高速になったこともあるのか、多くのモデルやLoRAが登場しだしています。

私もこれから、SDXLでも作品を作っていこうかあぁと思っているのですが、一つ問題なのが、画像のスケールアップ。それなりのサイズの画像を作ろうとすると8GBのメモリではやはりきつい。そもそも大きい画像の生成は時間がかかるので、小さめの画像を作って、気に入ったものをアップスケールするというのが通常のやり方になるかと思います。

SD1.5ではforgeのimg2imgにあるSD Upscale+controlnetのTileを使っていました。
SDXL用のcontrolnetのモデルもつい先日、以下にリリースがされています。

https://huggingface.co/bdsqlsz/qinglong_controlnet-lllite/tree/main

ここではForgeでの使い方を説明します。ForgeならはじめからControlNetが使えるようになっていてあとはモデルダウンロードするだけですみます。

0. 上記URLのモデルをダウンロード&配置
ダウンロードしたら
 /webui/models/ControlNet
配下に置きます。UIを再起動します。

1.txt2imgで画像を生成する
    1024x1024で画像を生成します。例は以下のパラメータで生成しました。
  • 使用モデル:bluePencilXL_v600
  • プロンプト:1girl, best, japanese, pale blue casual dress, skinny body, Seductive expression, hotel bed room,smiling, black hair
  • ネガティブプロンプト:nsfw, lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry, artist name
  • CFG Step:Steps: 23, Sampler: Euler a, CFG scale: 7.5

なかなかかわいらしくできました。

2.できた画像をimg2imgタブに送る
   ”Send image and generation parameters to img2img tab"でimg2imgタブに送ります。


Resizeモードは"Just Resize"を選びます。
画面最上部、Stable Diffusion checkpointとプロンプト、ネガティブプロンプトはtxt2imgの際と同じものを入力します。vae,clipskipなども指定していたら同様です。

3."Resize to"タブでWidthとHeightに元画像サイズと同じぐらいの値を指定する
 2倍の2048x2048にしたいなら、それぞれ1024です。小さくても、大きくても構いませんが、大きいとメモリを食って時間もかかります。小さいと、分割処理が細かくなってやはり時間がかかります。画像も荒れるかもしれません。

4. Denoising strengthを小さい数字にします
0.7ではおそらく絵が荒れます。 SD1.5では0.3ぐらいが多かったですが。口述しますが、SDXL1.0では0.2未満、0.17から0.15ぐらいがちょうどよいのではと思いました。

5.ControlNetの設定
  まず、”ControlNet Unit 0”にチェックを入れ、
  • Enableチェックボックスをチェック
  • Conrol Typeで”Tile”を選択
  • Preprocessorを選ぶ:これはSD1.5のものと同じでよいです。"tile_resample","tile_colorfix+sharp"など。私はどちらかというと"tile_resample"の方が好きです。絵が柔らかく仕上がります。
  • Moldelを選ぶ:手順0.のダウンロード・ファイル配置が正しければ"bdsqlsz_controlllite_xl_tile_realistic"が選べると思います。

6. Scriptの設定
 img2imgタブの一番下にある"Script"にて、”SD Upscale"を選びます。
  • TileOverlap:分割処理の際、処理を重ねるピクセル数。ここは64でよいと思います
  • ScaleFactor:元のサイズの何倍の絵にするか。1024x1024の絵を2048x2048にしたいのでここでは”2"を選びます。小数点2桁で指定ができます
  • Upscaler:お好みのアップスケーラを選びます。SD1.5と同じものが指定できます。私は4x-UltraSharp他は、SwinIR_4xやR-ESRGAN 4x+を選ぶことが多いです
Script




7. 実行
 Generateボタンを押して処理を待ちます。

以上です。
いろいろ試行錯誤していると、おかしくなることがあります。(おそらくGPUメモリへのモデルの出し入れのせい)その際は再起動しましょう

■Denoise Strength
4でも書きましたがDenoise Strength(D.S)はSDXL1.0はSD1.5よりセンシティブに思います。
         左 D.S 0.5                                右 D.S 0.17

一見同じように見えますが、D.Sが0.5の方はあちこちにノイズが入っています。

右の髪の毛の部分に変な湧きだしが生じています。また右目の目元にもゴミが出ています。

D.Sはなかなか調整が難しいのでアップスケーラの変更と合わせながら調整をするのがいいと思いますが。数字は控えめにするのがよいかと思います。

最後に今日の表現
ワンピースの服は英語では ”Casual dress"といいます。
水色 "pale blue" (淡い青色)

0 件のコメント:

コメントを投稿