見出し画像

【中級】ローカルのみでの写真超解像化術【無料ソフトウェア】

想定する読者

  • ローカル環境のみを利用して高性能な画像アップスケール技術を利用したい人

  • ローカルへ Stable Diffusion webUI (forge)、ComfyUI が導入済み

  • Stable Diffusion 等の基本的な操作ができる人

はじめに

この記事はローカルでアップスケール(写真高画質化目的)を行うノウハウの紹介をします。

ネット上の便利な写真の高画質化サービスはありますが、いくつか問題があります。

  • (AI ネットサービス全般に言える事ですが)ネット上のサーバーに一度「複製」をアップロード・作成するため情報漏洩の恐れがあり、基本的に個人情報や他人の著作物のアップロードはできません。サーバーへのコピーを複製物の譲渡と解釈されたり、アップロードした画像をサービス提供元の資産や再学習データとして勝手に利用される可能性があるからです。

  • 画質調整が限定的であるため、ある種の画像は上手くできても、苦手な画像は諦めるしかありません。

  • オープンソースを利用しない場合は、勝手にJPG変換やサイズ変更では消えない高度なウォーターマークを埋め込まれている可能性があります。(※ ネットサービスに限定の話ではありません。Photoshop 等のクローズドソースの画像処理ソフトウェア全般に言える事です)

もちろんローカルのデメリットとして、多少高価なゲーミングPCが必要である事や、導入や設定を自分ですべて管理する必要がありますが、ローカル&オープンソースソフトウェアを利用する事で、上記のネットサービス利用の問題を回避できます。ローカル利用の大きな利点ですね。

本記事で紹介するものは、次の環境&ソフトウェアで行っています。※ AIはゲームと異なり動作速度よりもメモリ容量が重要です。処理が動作する・しないを決定づけるものです。

  • OS:Windows 11

  • CPU:Ryzen5 3600 32GB

  • GPU:RTX 3060 12G

  • Stable Diffusion webUI forge(ControlNet によるカラー化)

  • ComfyUI(画像アップスケール)

下記で作成した ComfyUI ノードを利用します。

白黒写真のカラー化

ComfyUI だけでもカラー化は可能ですが、筆者はトライ&エラーが必要な作業は webUI で行うようにしています。

Stable Diffusion webUI の img2img + ControlNet(Recolor)を利用してカラー化を行います。

元画像の読み込み

パブリックドメイン伊藤博文の白黒画像を利用します。元画像の解像度を次に注意して決めます。

  • 縦・横ともに 8 の倍数のピクセル解像度にする(守らないとソフトウェア側が勝手に調整するので、各種合成時にズレます)

  • 大きすぎず、小さすぎず、元画質を適切に表現している解像度にする(今回は 480x640 (3:4) にします。4xのアップスケールモデルを利用するため、480〜1024 程度がおすすめです)

webUI の img2img タブを利用します。CLIP ボタンを利用すると、画像からプロンプトを生成できます。モデルはリアル系に強い RealisticVision を利用します。

Stable Diffusion webUI forge ①

色はすべて ControlNet に任せるので、Denoising strength は最大の 1 にします。

Stable Diffusion webUI forge ②

ControlNet(Recolor)

ControlNet の Recolor モデルを利用してカラー化を行います。

Stable Diffusion webUI forge ③
伊藤博文カラー化

プロンプトやモデルを変更して納得いくまで再生成する事ができます。これもローカルの強みですね。

アップスケール(高精細化)

ComfyUI で設定したものを利用します。

アップスケーラモデル

この ComfyUI のノード群は、大きく分けると2つの過程があります。最初に ESRGAN 等のモデルを利用して拡大し、次に拡散モデル(Stable Diffusion)で詳細を生成します。

4x アップスケーラモデルを選ぶ際の指標例です。各モデルは下記より入手できます。モデルの説明も記載されています。多くの場合、学習データセットの名前(Nomos等)とAIモデル(HATやDAT等)のファイル名になっています。

  • 元が綺麗な画像で繊細な仕上がりにしたい場合

    • 4xNomos8kHAT-L_otf.pth

  • 元がノイズのない綺麗な画像で、詳細を表現したい場合

    • 4x_NMKD-Superscale-SP_178000_G.pth

  • 元がJPEGブロックノイズのある画像の場合

    • 4xFFHQLDAT.pth

  • 元がノイズだらけの画像で、なめらかな仕上がりにしたい場合

    • realesr-general-x4v3.pth

    • RealESRGAN_x4plus.pth(よりなめらか)

筆者は 4xNomos8kHAT-L_otf または 4x_NMKD-Superscale をよく利用しています。少しのJPEGノイズがある場合ならば、1x_JPEGDestroyerV2_96000G.pth 等のノイズ除去のみのノードを通してから利用すると良い結果を得られます。(例として利用していますが、伊藤博文画像にはブロックノイズはないので意味はありません)

JPEGノイズを除去してから4xアップスケール

このように、アップスケールを行う画像に合わせて最適な組み合わせを選べます。

Stable Diffusion(拡散法)で画像の詳細を生成

画像によっては、拡散法を利用せずにアップスケーラモデルのみの結果の方が綺麗になる事もありますが、顔の皺などの完全に失われた情報も推論して生成する必要がある場合は Stable Diffusion を利用します。

最初のアップスケール後の拡大画像に img2img を適用するわけですが、そのまま何もせずに利用すると、生成結果がオリジナルと大きく異なってしまいます。そのために、詳細なプロンプトと共に ControlNet を形状の「制約」として利用します。

プロンプト自動生成はローカルの ollama の llava-llama3(Vision LLM モデル) を利用します。CLIPよりもかなり詳細に記述してくれます。

The image captures a portrait of an elderly man, exuding an air of wisdom and experience. His white beard is a testament to his years lived, and he gazes off to the side with a serious expression, as if lost in deep thought. The photograph itself has a faded quality, adding to its vintage charm.

The man is dressed formally in a dark blue suit, which contrasts sharply with the light green background. A white shirt peeks out from under his suit jacket, and a gold badge adorns the left lapel of his suit, possibly signifying some sort of rank or status. The overall color scheme of the image is muted, further enhancing its aged appearance.

Despite the faded quality, the image retains a certain clarity, allowing one to discern the man's attire and expression with relative ease. It's a simple yet powerful portrait that leaves much to be imagined about the man behind it. masterpiece, high-res, RAW photo,

品質プロンプトに masterpiece high-res RAW photo と別ノードテキストから追加していますが、独自の調整を行う場合は、この品質プロンプトとネガティブプロンプトを変更する事になります。

プロンプトの生成

ControlNet は詳細に深度を生成できる現行最高性能の marigold 深度マップと canny 輪郭モデルを利用します。生成時に形状が大きくずれる事を防ぎます。

Stable Diffusion

ここで調整の必要のあるパラメータは、Stable Diffusion 効果の強さである Denoising Strength と各 ControlNet の強さを調整します。

最期に、Stable Diffusion で生成した画像をどの程度の割合でBlendするか(α値合成)決めます。

アルファ値合成

たとえば、Denoising Strength 0.35、ImageBlend 0.75とした場合の結果は、

すこしズレが大きいので、オリジナルにより近い方へ変更します。Denoising Strength 0.2、ImageBlend 0.6 とすると、

ズレが少なくなりました。

Image Compare ノードを利用する事で、マウスを利用した比較が可能になります。

Image Compare (rgthree)

保存したいアイデンティティが変更をうけていないか確認する事ができます。

まとめ

ローカルで作業を行う事で、画像をより自由に、より詳細に、より高画質にアップスケールする事ができます。

個人情報を含む昔の写真の高画質化や、(著作物である事が理由で)ネットサービスへのアップロード利用ができない昔のスキャン画像や写真集や雑誌も、閉じたローカル私的環境であれば、法で定められた私的利用の範囲内で利用する事ができますね。


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