見出し画像

[10]ComfyUIで画像を高解像度化!Hires.fix完全ガイド #ComfyUI

割引あり

もっと高画質の画像を生成したいと思いませんか?
実は、ComfyUIのワークフローを工夫することで、高画質の画像生成が可能になります!

こんにちわ、AICU media編集部です。
ComfyUI マスターガイド」第10回目になります。
今回は、生成した画像をさらに高解像度化できる「Hires.fix」の概要から実践的な使用方法を詳細に解説していきます。

前回はこちら



1. Hires.fixの概要とメリット

Hires.fixの基本的な仕組み

Hires.fix (High-Resolution Fix、ハイレゾフィックス) は、生成された画像を元に、より高い解像度の画像を生成する技術です。具体的には、低解像度画像に含まれる情報を元に、AIが欠落している高周波成分(細部情報)を予測・補完することで、高解像度化を実現しています。これは、単なる拡大とは異なり、画像の内容を理解した上でのアップスケール(高解像度化)と言えるでしょう。

通常の画像生成との違い

通常の画像生成では、最初から目標とする解像度の画像を生成しようとします。最初から高解像度で画像生成すると、学習した低解像度の特徴を高解像度に拡大する際、適切に補間できない場合があり、アーティファクト(*1)が含まれた画像を生成する確率が高くなります。

*1 アーティファクトとは、元の対象物には存在しない、画像処理や撮影過程で人工的に生じた視覚的な異常や歪みのことです。例えば、身体の一部が欠けていたり、不自然な形状になっている状態のことです。

一方、Hires.fixは、まず比較的低い解像度の画像を生成し、それを後からアップスケールするというアプローチを取ります。これにより、高解像度画像を直接生成するよりもアーティファクトの発生を抑制でき、高解像度な画像生成を実現できます。

Hires.fixを使用するメリット

  • 高解像度化: 低解像度の画像を簡単に高解像度化できます。例えば、512x512ピクセルの画像を1024x1024ピクセル、1024x1024ピクセルの画像を2048x2048ピクセル、あるいはそれ以上にアップスケールすることが可能です。

  • 品質向上: ディテールを保持したまま、自然な高解像度画像を生成できます。単純な拡大ではぼやけてしまう部分も、Hires.fixではより鮮明に表現されます。

2. ComfyUIでのHires.fix実装方法

ワークフローの構成

以下が今回使用するワークフローの全体像です。以下の画像には、ワークフローの情報も含まれているため、以下の画像をダウンロードし、ComfyUIにドラッグ&ドロップすれば、このワークフローを読み込むことができます。

(ホントはこのPNG画像をドラック&ドロップでワークフローを再現できるのですが…)

※noteの仕様で画像をアップロードするとwebp形式に変換されてしまうので完成品のhiresfix.jsonとPNGはzip形式でお届けします。

ワークフローは、大きく分けて、標準ワークフローとHires.fixで構成されます。

標準ワークフローについては、次の記事で詳細を解説していますので、こちらをご確認ください。

ここではメニューの「Load Default」ボタンを押して、標準ワークフローを読み込みます。
次に何もないところでダブルクリックして「Upscale Latent By」をウィジェットを読み込んでください。今回の主役です。似た名前に「Upscale Latent」がありますが「By」がつく方です。

不要なウィジェットは選択後、DelかBackspaceで削除できます。

右クリックからAdd Node」→「latent」→「Upscale Latent by」でもいけます

続いて「KSampler」、「VAE Decode」、「Save Image」も配置します。これは標準ワークフローの後半で使っているものと同じウィジェットです。

①一番左のLoad CheckpointからのMODELを新しく追加したKSamplerのmodelに接続。
②既存の「KSampler」のLATENT(現在はVAEにつながっている)から、さらに新しく追加した「Upscale latent by」の左側(in側)のsampleへ接続。

③その「Upscale latent by」の右側(out側)のLATENTを新規に追加したKSamplerの左側のlatent_imageに接続
④さらにそのKSamplerの左側のpositiveから既存のCLIPのポジティブプロンプト(上)と、negativeから既存のネガティブプロンプト(下)のCONDITIONINGに接続。
※このときCLIP側からドラッグすると、既存のKSamplerへのネットワークが切られます。CLIPから2本出力を作りたいので、画面右側から左側へドラッグです。

さいごにVAEからSave Imageへの接続です。

⑤新規に追加したKSamplerの右側のLATENTから新しく追加したVAE Decodeのsamplesに接続。
⑥新しく追加したVAE Decodeの左側のvaeから、一番左にある「Load Checkpoint」のVAEへ接続(画面右から左へ伸ばさないとうまく繋がりません)
⑦VAE Decodeの右側のIMAGE→新規に追加したSave Imageのimagesへ。

これで完成です!画像を生成してサイズを確認ししてみましょう!
いつもの生成がこのサイズでした(SD1.5)。

右側に新しく作った生成画像がこれです。1.5倍になっています!

試しに「Upscale latent by」のscale_byを「4.00」にして実行してみましたら、Google ColabのT4環境でも7分ぐらいかかりました。

2048x2048のふしぎな美しさがあるボトルが生まれました。
いきなり大きな値を与えるのは制御しづらいかもしれませんね。


Hires.fix部は、以下の流れで処理されます。

  1. 標準ワークフローで生成されたLatent(潜在空間)を1.5倍にアップスケールする (ノード: Upscale Latent By)

  2. アップスケールしたLatentを用いて、低ノイズ除去値 (denoise=0.55)で再度サンプリングし、画像の詳細度を増加させる (ノード: KSampler)

  3. 潜在空間を画像に変換する (ノード: VAE Decode)

  4. Hires.fixで生成された画像を保存する (ノード: Save Image)

以下に各ノードの解説をします。

潜在空間のアップスケール (Upscale Latent)

Upscale Latentは、標準ワークフローで生成されたLatentを入力として受け取り、そのLatentを指定のアップスケール手法(upscale_method)および倍率(scale_by)で解像度を上げます。アップスケール手法は、以下の中から選択できます。各アップスケール手法の概要と共に紹介します。

  1. nearest-exact

    • 最も単純な方法で、最も近い既存のピクセル値を使用します。

    • エッジがシャープに保たれますが、ジャギーが目立つ可能性があります。

  2. bilinear

    • 線形補間を使用して新しいピクセル値を計算します。

    • 滑らかな結果が得られますが、エッジがやや柔らかくなる可能性があります。

  3. area

    • ピクセル領域のサンプリングを使用します。

    • ダウンスケーリングに適していますが、アップスケーリングにも使用できます。

  4. bicubic

    • 3次補間を使用してより滑らかな結果を生成します。

    • bilinearよりも細部を保持しつつ、滑らかさも実現します。

  5. bislerp

    • bilinearと同様の手順で補間を行いますが、線形補間(lerp)の代わりにslerp(球面線形補間)を使用します。

    • 従来のbilinear法よりも、より滑らかで自然な補間結果が得られる可能性があります。

今回は、アップスケール手法にnearest-exact、倍率に1.5倍を指定します。

詳細向上のための再処理 (KSampler)

Upscale Latent By」でアップスケールしたLatentを入力「latent_image」で受け取り、そのLatentを元にノイズ除去強度(denoise)(*2)を低い値でサンプリングを試みます。他の入力「model」「positive」「negative」は、標準ワークフローと同じ接続となります。また、他のウィジェット「control_after_generate」「steps」「cfg」「sampler_name」「scheduler」も標準ワークフローと同じ値となります(「seed」はランダム値です)。

*2 denoiseは、ノイズ除去の強度を調整するパラメータです。値を大きくするほどノイズは除去されますが、画像の詳細が失われる可能性もあります。最適な値は一概には言えないため、試行錯誤しながら見つけることが重要です。

Latentから画像に変換 (VAE Decode)

アップスケールとノイズ除去したLatentを画像に変換します。入力「samples」には、KSamplerでノイズ除去したLatentを接続し、入力「vae」には、標準ワークフローでも使用しているノード「Load Checkpoint」の出力「VAE」を接続します。

画像の保存 (Save Image)

VAE Decodeで変換された画像を受け取り、画像として保存します。標準ワークフローで生成した画像と切り分けるため、filename_prefixには「ComfyUI_Upscaled」と設定しました。

3. Hires.fixを実行する

それでは、ワークフローを実行してみましょう。メニューの「Queue Prompt」をクリックしてください。

しばらくすると、生成が完了します。

以下が生成結果です。左が標準ワークフローの生成結果(オリジナル)、右がHires.fixの生成結果です。解像度は、左が512x512、右が1.5倍の768x768になります。Hires.fix後の生成結果は、解像度が向上していますが、オリジナルと比較すると、所々で異なる点があります(例えば、ボトルの形状が若干異なる)。Hires.fixは、KSamplerで再度サンプリングしているため、denoiseを抑えているとはいえ、多少画像に変化が表れてしまいます。

以下の画像は、denoiseの値ごとの生成結果の変化をまとめた画像です。denoiseの値が大きくなるほど、オリジナルからの変化が大きくなることが確認できます。denoiseの値は、生成結果を確認しながら調整することが求められます。

4. Hires.fixの効果的な使用法

Hires.fixは非常に便利ですが、一方で標準ワークフローと比べ、使い方が難しい面があります。以下の事項に注意してHires.fixを活用しましょう。

  • プロンプトの調整: 低解像度画像生成時のプロンプトは、高解像度化後にも影響を与えます。例えば、標準ワークフローでの低解像度画像生成時に詳細なプロンプトを使用することで、高解像度化後の詳細が向上する可能性があります。

  • 適切な解像度の選択: 生成時間と品質のバランスを考慮して、適切な初期解像度を選択しましょう。初期解像度が低すぎると、Hires.fixでも十分な品質を得られない場合があります。逆に、初期解像度が高すぎると、アーティファクトが多く含まれた画像が生成されてしまいます。

  • 一貫性と品質のバランス: パラメータ調整により、一貫性と品質のバランスをコントロールできます。例えば、denoiseを高く設定すると品質は向上しますが、アップスケール元画像からの変更点が多くなります。

まとめ

Hires.fixは、ComfyUIで高品質な画像を生成するための強力なツールです。この記事で紹介したテクニックを活用することで、より効果的にHires.fixを使いこなせるようになるでしょう。ぜひ、様々な設定を試して、あなただけの最高の画像を生成してみてください。

次回は、ポジティブプロンプトのノウハウを紹介します。乞うご期待!

X(Twitter)@AICUai もフォローよろしくお願いいたします!

画像生成AI「ComfyUI」マスターPlan

画像生成AI「Stable Diffusion」特に「ComfyUI」を中心としたプロ向け映像制作・次世代の画像生成を学びたい方に向けたプランです。最新・実用的な記事を優先して、ゼロから学ぶ「ComfyUI」マガジンからまとめて購読できます。 メンバーシップ掲示板を使った質問も歓迎です。

  • メンバー限定の会員証が発行されます

  • 活動期間に応じたバッジを表示

  • メンバー限定掲示板を閲覧できます

  • メンバー特典記事を閲覧できます

  • メンバー特典マガジンを閲覧できます

  • 動画資料やworkflowといった資料への優先アクセスも予定

ゼロから学ぶ「ComfyUI」マガジン

マガジン単体の販売は1件あたり500円を予定しております。
2件以上読むのであればメンバーシップ参加のほうがお得です!というのもメンバーシップ参加者にはもれなく「AICU Creator Union」へのDiscordリンクをお伝えし、メンバーオンリー掲示板の利用が可能になります。

もちろん、初月は無料でお試しいただけます!
毎日新鮮で確かな情報が配信されるAICUメンバーシップ。
退会率はとても低く、みなさまにご満足いただいております。
✨️オトクなメンバーシップについての詳細はこちら

ここから先は

578字 / 2画像 / 1ファイル
この記事のみ ¥ 0〜

この記事が気に入ったらサポートをしてみませんか?