当ブログにはプロモーション、アフィリエイト広告が含まれます。

【Stable Diffusion】img2imgのバッチ機能が便利!画像を一括で高解像度化処理する方法

Stable Diffusionで大量の画像を高解像度化したいとき、みなさまはどうやって処理していますでしょうか?

私はPCスペックがそこまで高くないため、低画質の状態で大量生成し、厳選したものだけ高解像度化する方法を取っていました。

また、画像に使用しているシード値やプロンプトも異なるため、1つ1つPNG infoからtxt2imgに画像を送っています。

しかし、これだと画像を1つずつ操作する必要があるため、非常に手間がかかります。

img2imgのバッチ機能を使えば、シード値やプロンプトを維持したまま一括で高解像度化が可能です。

今回はimg2imgのバッチ機能を使って、プロンプトやパラーメータを維持したまま、一括で高解像度化する方法について詳しくご紹介します。

Stable Diffusion img2imgのバッチ機能とは?

バッチ機能は、指定したフォルダ内の画像を順番に処理できる機能です。

ControlNetやExtraタブにも実装されていますが、img2imgのバッチ機能だと画像に含まれるプロンプトやパラーメータを取り込んで処理ができます。

画像のプロンプトをそのまま使用してバッチ処理を行いたい場合は、img2imgのバッチ機能がおすすめです。

Stable Diffusion img2imgのバッチ機能の使い方

それでは実際にimg2imgのバッチ機能の使い方について、ご紹介します。

処理自体は全てimg2imgタブで行うので、img2imgタブのbatchを開いておいてください。

全体の流れは以下の通りです。

  1. Input・Outpuフォルダの指定
  2. PNG infoで取得するパラメータの設定
  3. その他パラメータの設定

Input・Outputフォルダの指定

まずどのフォルダの画像を処理するのか、処理した画像をどのフォルダに出力するのか指定します。

一括処理したい画像を特定のフォルダに入れ、そのフォルダのパスを「Input directory」に入力してください。

画像を保存したいフォルダのパスは「Output directory」に入力します。

今回わかりやすいようにCドライブ直下に「i2ibatch」「i2ibatch output」というフォルダを作成しました。

i2ibatchをInput directory、i2ibatch outputをOutput directoryに指定します。

これでi2ibatch内の画像が処理されて、i2ibatch outputに保存されます。

PNG infoで取得するパラメータの設定

次に画像をPNG infoで読み込んだときに表示されるパラーメータから、どのパラーメータを使用するか設定します。

img2imgのバッチ機能だとこれが使用できるため、それぞれ画像のプロンプトやシード値を維持したまま一括処理が可能です。

まず「Append png info to prompts(png 情報をプロンプトに追加する)」にチェックを入れます。

PNG info directoryは何も入力する必要はありません。(空でInput directoryのフォルダが指定されます)

続いて「Parameters to take from png info」で取得したいパラーメータを選択します。

画像のパラーメータをそのまま使用したい場合は、全てチェックを入れてください。

その他パラメータの設定

ここでは上記のPNG infoで設定していないパラーメータについて設定します。

PNG infoから取得するパラーメータはそちらが優先されるため、同じパラメータを指定しても反映されません。

例えばここでシード値を変えたとしても、画像のシード値が使われます。

ですので、主に設定するのは以下3つだけです。

  • Resize mode
  • Resize to・Resize by
  • Denoising strength

Resize mode

Resize modeは画像をリサイズしたときの処理を指定できます。

Just resize指定した横縦幅に合わせて全体が収まるようにリサイズ
Crop and resize一部カットしてリサイズ
Resize and fillリサイズしてできた余白は塗りつぶす
Just resize (latent upscale)latent upscaleを使用してJust resize

今回は高解像度化が目的なので、Just resize (latent upscale)を使用します。

Resize to・Resize by

こちらはリサイズ、またはスケールする値を指定できます。

Resize toでは、リサイズ時の横幅・縦幅の指定が可能です。

Resize byでは、元の画像サイズから何倍スケールするかを指定できます。

今回は512*512の画像を1024*1024に処理するので、Resize byを2にします。

Denoising strength

こちらはノイズ除去強度です。

値が強いと画像は綺麗に仕上がりますが、描写が崩れてしまう可能性があります。

値が低いと元画像の描写を維持した状態で、そこそこ綺麗に処理できます。

元画像を維持しつつ、なるべく綺麗にしたいということであれば、0.55~0.6辺りが無難です。

img2imgのバッチ機能で処理した画像

実際に動かしているところを見せられないのであまり意味はないのですが、それぞれプロンプトやパラーメータを変更して、4枚だけ画像処理してみました。

バッチ処理

※バッチ処理後

こちらは4枚の画像を一括で処理しています。

またimg2imgでサンプリングは「Euler a」、seedは-1のまま処理していますが、PNG infoで確認すると、画像のパラメータがしっかり維持されているのがわかります。

このように画像のプロンプトやシード値を維持して高解像化したい場合は、img2imgのバッチ機能がおすすめです。

Upscalerを変更したい場合

人によってはR-ESRGAN 4x+など、別のUpscalerを使用したい方もいると思います。

そういった場合は、ScriptでSD upscaleを使用すれば、Upscalerの選択が可能です。

画面下部にあるScriptから「SD upscale」を選択します。

Tile overlapとScale Factorを設定して、Upscalerを選択します。

Tile overlap

こちらはResize byの値から、さらにスケールするとき、画像を分割して高解像度化処理できる機能です。

例えばResize byを2、Scale Factorを2.5にすると、リサイズするときに画像を分割して高解像度化処理を行います。

Tile overlapは、分割処理したときにでる境界線を調整できるものです。

左はTile overlapを0で処理し、右が256で処理したものです。

0は境界線がくっきり出ていますが、256では目立たなくなっています。

ただし、単純に2倍にスケールしたいだけであれば、Resize byとScale Factorを同じ値にして触る必要はありません。

こちらはResize byよりスケールして、画像を高解像度化したい方向けの機能です。

Scale Factor

Resize byで指定したサイズから、さらにスケールしたい値を指定できます。

ここで指定した値に合わせて、分割で高解像度化処理が行われます。

Upscaler

高解像度化するときに使用したいUpscalerを選択できます。

Resize byとScale Factorを同じ値にして処理すると、Upscalerが変わっているのが確認できます。

デフォルトだとSD upscaleしかありませんが、拡張機能の「Ultimate SD Upscale」を使うと違う結果も得られます。

GitHub - Coyote-A/ultimate-upscale-for-automatic1111
Contribute to Coyote-A/ultimate-upscale-for-automatic1111 development by creating an account on GitHub.

SD upscaleを使用した場合、Output directoryで指定したフォルダではなく、通常のoutputフォルダに画像が出力されます。

ControlNetの併用も可能

img2imgのバッチ機能とControlNetも併用が可能です。

インストール方法はこちら

例えばtileを使うと、高解像度化したときの質感が変えられます。

左はデフォルトで高解像度化したもの、右がControlNetのtileを通したものです。

好みもあると思いますが、tileあり・なしだと結果が大きく変わります。

また、tileを使用してモデルを二次元のものにすれば、三次元画像の構図を維持して二次元化、または逆も可能です。

基本はモデルを変えて、Control WeightやDenoising strengthの値を指定するだけです。

これについては全部説明すると長くなってしまうので、また機会があるとき別の記事で紹介します。

img2imgのバッチ機能のデメリット

img2imgのバッチ機能は、厳選した画像のみを一括処理できるので便利ですが、hires.fixで高画質処理したものと結果が異なります。

例えば以下は左がhires.fix、右がimg2imgのバッチ機能で処理したものです。

ブログ用に圧縮しているためわかりづらいかもしれません

若干ではありますが雲や質感に変化があり、生成する画像によってそれは顕著に現れます。

好みもあると思いますが、個人的にはhires.fixの方が綺麗な印象です。

txt2imgでもランダム入力とcontrolnetのループバック機能を使えば一括高画質化できますが、それぞれ仕様が異なります。

  • img2imgのバッチ機能は厳選した画像のみ高画質化できる
  • txt2imgでループバックは生成する全ての画像を高画質化する

画質を重視したいならtxt2img+controlnet、効率を取るならimg2imgのバッチ機能など、用途に合わせて使い分けがおすすめです。

img2imgのバッチ機能で画像を高解像度処理する方法まとめ

今回はimg2imgのバッチ機能で画像を高解像度処理する方法をご紹介しました。

まとめ
  • Stable Diffusion img2imgのバッチ機能とは?
  • Stable Diffusion img2imgのバッチ機能の使い方
  • Input・Outputフォルダの指定
  • PNG infoで取得するパラメータの設定
  • その他パラメータの設定
  • img2imgのバッチ機能で処理した画像
  • Upscalerを変更したい場合
  • ControlNetの併用も可能

画像生成を何らかのビジネスに活用している場合、「いかに効率よく画像生成できるか」が重要です。

また大量生成する場合などは、クオリティも問われます。

AIによる画像生成はランダム性が高いので、なかなかうまくいかないことも多いですが、バッチ機能を上手く使えば作業の効率化が可能です。

一括処理できるだけでかなり生成効率は良くなるので、使ったことがない方はぜひ使ってみてください。

コメント

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