【良く分かる】Pythonで超解像!ESRGAN/Real ESRGAN/SwinIRをまとめて紹介

Python入門
この記事は約14分で読めます。

前回公開した「【超簡単】コマンド一発!Real ESRGANで超解像(アップスケーリング)しようぜ」の記事では、無料のアプリやコマンドを用いてReal ESRGANによる高解像化を実現する方法について紹介しました。

今回は同様のことをPythonを使って実現したいと思います。とは言っても、同じことをPythonで行うだけだと意味が無いので、メジャーな ESRGAN /Real ESRGAN/SwinIR の3種類についてダウンロード~使い方までを紹介したいと思います。

それぞれの方式で高解像化した画質比較についても掲載しましたので、これから超解像化を始める方、あるいはどの方式を使えば良いか迷っている方は、この記事を参考にして下さい。

Python環境

今回紹介する高解像化については、Python環境にモジュールをインストールする必要があります。

ご自身の環境にモジュールをインストールして頂いても良いのですが、既にインストール済みのモジュールがある場合、バージョン違いによりエラーが発生する可能性があるため、本記事ではポータブル環境のPythonに一からインストールする方法を採用します。

ご自身の環境を利用される場合は、説明内容をご自身の環境に置き換えて操作して下さい。

WinPythonによる環境構築

今回はPythonは 3.10.9 を使いますので、下記のWinPython公式サイトからインストーラーをダウンロードして下さい。

WinPython - Browse /WinPython_3.10/3.10.9.0 at SourceForge.net
Portable Scientific Python 2/3 32/64bit Distribution for Windows

成功すると、下記の自己解凍形式のファイルがダウンロードされるので、これを実行して下さい。

Winpython64-3.10.9.0.exe

実行すると解凍先を聞かれますので、任意の場所を指定します。解凍が完了すると、WPy64-31090 というフォルダが作成され、その中に機械学習に必要な一通りのライブラリとツール類が展開されています。

WinPython Command Prompt.exe を実行すると、Python 3.10.9 が利用可能なコマンドプロンプトが表示されます説明の中でコマンドプロンプトと呼んでいるのは、これのことだと解釈して下さい。

WPy64-31090は必要に応じて任意のフォルダ名に変更して下さい

尚、WinPythonに関する詳細については「【こりゃ便利】WinPythonでPython環境をUSB化しよう!」で紹介していますので、必要に応じてご一読ください。

ESRGAN

ESRGAN(Enhanced Super-Resolution Generative Adversarial Network)は、GAN(Generative Adversarial Network)アーキテクチャを採用した、超解像化向けの深層学習モデルです。

従来の超解像化は、画像処理技術を用いてピクセル単位で拡大や補間を行っていました。ESRGANは深層学習の手法を用いることで、これまで課題だったアーティファクト(不自然な模様やブロッキングなど)を低減し、自然な視覚効果を向上させるなどの品質向上が図られています。

インストール方法

ESRGANは GitHubで公開されています。git が使える方は、git clone でダウンロードして下さい。

git を使わなくても、下記URLからダウンロードが可能です。

https://github.com/xinntao/ESRGAN

成功すると、ESRGAN-master.zip というZipファイルがダウンロードされます。

続けてモデルを入手します。下記のGoogleドライブでモデルが公開されているので、ダウンロードして下さい。

https://drive.google.com/drive/u/0/folders/17VYV_SoZZesU6mbxz2dMAIccSSlqLecY

最後に、ESRGAN-master.zip を任意のフォルダに解凍し、その中にあるmodels フォルダにダウンロードしたモデル(RRDB_ESRGAN_x4.pth)をコピーして下さい。

モジュールのインストール

以下の説明では、WinPython Command Prompt.exe によるコマンドプロンプトでの操作を前提としています。

コマンドプロンプトを開き、下記のコマンドを実行します。

尚、3行目にある cu118 の部分は、お使いの環境(ビデオドライバのバージョン等)により変わります。 cu117 の可能性もありますので、cu118を cu117に変えて実行してみてください。

使い方

ESRGAN-master.zip を解凍した場所にカレントディレクトリを移動します。

私の環境では ESRGAN-master というフォルダに解凍したので、下記のコマンドになります。

次に、下記のコマンドを実行して下さい。

このコマンドにより、LRフォルダに格納されているサンプル画像(baboon.png、comic.png)が高解像化され、results フォルダに格納されます。

試しにStable Diffusion で生成した画像を LRフォルダにコピーし、高解像化を試みました。結果は以の通りです。

Real ESRGAN

Real-ESRGANは、ESRGANの改良版であり、モデルアーキテクチャの改良により、ESRGANより高品質でリアルな超解像度画像が生成できます。

個人的には、Real-ESRGANの超解像化はESRGANより優れてはいるものの、人物の実写においては加工が強すぎて自然さが失われた印象があります。

もう少しシャープさやノイズ削減が弱くても良いから、自然な人物画を求める場合は ESRGAN、風景やアニメ系の場合はReal-ESRGANといった具合に使い分けましょう。

ダウンロード

Real ESRGANは GitHubで公開されています。git が使える方は、git clone でダウンロードして下さい。

git を使わなくても、下記URLからダウンロードが可能です。

https://github.com/xinntao/Real-ESRGAN

Real-ESRGAN-master.zip というZIPファイルがダウンロードされますので任意のフォルダに解凍して下さい。

モジュールのインストール

以下の説明では、WinPython Command Prompt.exe によるコマンドプロンプトでの操作を前提としています。

コマンドプロンプトを開き、下記のコマンドを実行します。

超解像化を行うタイミングで slow_conv2_cpu not implemented for ‘Half’ ~ の様なエラーが出るかもしれません。

この場合は、追加で下記のコマンドを実行してみてください。

尚、cu118 の部分は、お使いの環境によっては cu117 の可能性もありますのでご注意ください。

サンプルプログラム実行時の注意

後述するサンプルプログラム( inference_realesrgan.py )を使って、解凍時に展開されるinputs フォルダのサンプル画像を高解像化します。

ここには動画ファイルが含まれており、今回実行するオプションではエラーになるので、あらかじめ別の場所に退避するか、inputsフォルダから削除しておいてください。

また、サンプルプログラム実行中に下記のエラーが表示された場合、変換できない画像が inputsフォルダに含まれています。今回は 00017_gray を実行中にエラーになりました。

下記の画像が 00017_gray です。一度 Windowsの ペイントで開いて、そのまま保存すればエラーは出なくなります。

使い方

サンプルプログラムとして inference_realesrgan.py が用意されていますので、これを使います。このプログラムには多くのオプションが用意されていますが、下記の3つ程度を理解しておけば問題はありません。

まず最初に、Real-ESRGAN-master.zip を解凍した場所にカレントディレクトリを移動します。私の環境では Real-ESRGAN-master というフォルダに解凍したので、下記のコマンドになります。

今回は標準添付のサンプル画像を高解像化しますので、下記のコマンドを実行して下さい。-n オプションで指定したモデルがPC上に存在しない場合、自動でダウンロードされます。

オプション説明
-h, –helpヘルプメッセージを表示して終了します。
-i INPUT, –input INPUT入力画像またはフォルダを指定します。
-n MODEL_NAME, –model_name MODEL_NAMEモデル名を指定します。可能なモデル名: RealESRGAN_x4plus、RealESRNet_x4plus、RealESRGAN_x4plus_anime_6B、RealESRGAN_x2plus、realesr-animevideov3、realesr-general-x4v3
-o OUTPUT, –output OUTPUT出力フォルダを指定します。
-dn DENOISE_STRENGTH, –denoise_strength DENOISE_STRENGTHノイズリダクションの強度を指定します。0はノイズを保持する弱いノイズリダクション、1は強力なノイズリダクションです。realesr-general-x4v3モデルでのみ使用されます。
-s OUTSCALE, –outscale OUTSCALE画像の最終的なアップサンプリングスケールを指定します。
–model_path MODEL_PATH[オプション] モデルのパスを指定します。通常、指定する必要はありません。
–suffix SUFFIX復元された画像の接尾辞を指定します。
-t TILE, –tile TILEタイルサイズを指定します。0はタイルを使用しないことを意味します。
–tile_pad TILE_PADタイルのパディングを指定します。
–pre_pad PRE_PAD各境界での事前パディングサイズを指定します。
–face_enhance顔を強調するためにGFPGANを使用します。
–fp32推論時にfp32精度を使用します。デフォルトはfp16(半精度)です。
–alpha_upsampler ALPHA_UPSAMPLERアルファチャンネルのアップサンプラーを指定します。オプション: realesrgan、bicubic
–ext EXT画像の拡張子を指定します。オプション: auto、jpg、png。”auto”は入力と同じ拡張子を使用します。
-g GPU_ID, –gpu-id GPU_ID使用するGPUデバイスを指定します。デフォルトはNoneですが、複数のGPUを使用する場合、0、1、2などを指定できます。

inputs フォルダの画像が全て高解像化されると、inputs と同じ階層に results というフォルダが作成され、そこに高解像化された画像が格納されます。

results フォルダは初回実行時に自動で作成されます。

Stable Diffusionで生成した画像を使って超解像化の品質を比べてみました。

–face_enhance は「顔を強調」するオプションで、人物の顔をより自然に高解像化するオプションです。

少し分かり難いかもしれませんが、下記の通り比べてみると –face_enhance が無い場合はくっきり感が強く絵画調になります。一方、–face_enhance が有る場合は写真としての自然さが保たれていることが分かります。

SwinIR

SwinIRは、超解像化において優れた性能を発揮する深層学習モデルであり、”Swin”(”Swin Transformer”の略)と”IR”(”Image Restoration”の略)の頭文字を取って命名されました。

SwinIR、ESRGAN、Real-ESRGAN は共に深層学習モデルを採用していますが、以下の様な違いがあります。

項目SwinIRESRGAN/Real-ESRGAN
アーキテクチャSwin TransformerGAN(Generative Adversarial Network)
トレーニングデータ画像復元タスクに適した
データセット
超解像度タスクに特化したデータセット
主な用途画像復元、超解像度、
ノイズリダクション
超解像度
画像品質高品質、汎用的高品質、超解像度特化

ダウンロード

SwinIRは GitHubで公開されています。git が使える方は、git clone でダウンロードして下さい。

git を使わなくても、下記URLからダウンロードが可能です。

https://github.com/JingyunLiang/SwinIR

SwinIR-0.0.zip というZIPファイルがダウンロードできますので、任意のフォルダに解凍して下さい。

モジュールのインストール

以下の説明では、WinPython Command Prompt.exe によるコマンドプロンプトでの操作を前提としています。

コマンドプロンプトを開き、下記のコマンドを実行します。

WinPython Command Promptの場合は、tensorflowは既にインストール済みなので、opencv-python と timm を追加でインストールすれば動作します。ただし、この場合はCPUのみで処理されるため、1画像あたり数十秒程度の時間が掛かります。

GPUを使いたい場合は 3行目の pip install torch==~を実行する必要があります。

使い方

main_test_swinir.py を実行することで、指定フォルダにある画像を一括して高解像化できます。このプログラムのオプションは次のようになります。

今回は testsets というフォルダにサンプル画像が格納されているので、これを高解像化してみます。

まず最初にSwinIR-0.0.zip を解凍した場所にカレントディレクトリを移動します。私の環境では SwinIR-main というフォルダに解凍したので、下記のコマンドになります。

次に、下記のコマンドを実行して下さい。尚、–model_path オプションで指定したモデルがPC上に存在しない場合、自動でダウンロードされます。

自力でダウンロードしたモデルを使う場合は別ですが、モデルを自動でダウンロードしたい場合は、モデル名の先頭に必ず “model_zoo/” を付けて下さい。

 –model_path model_zoo/003_realSR_BSRGAN_DFOWMFC_s64w8_SwinIR-L_x4_GAN.pth

試しにStable Diffusionで生成した画像で高解像化した結果、次の様になりました。かなり自然な感じで高解像化されています。

画質比較

今回の比較で使ったオリジナル画像と、各アルゴリズムによる高解像化画像については、下記からダウンロード出来ます。

まず最初に全体について見ていきましょう。画像が小さいので見難いかもしれませんが、クリックすれば拡大されます。

少し拡大してみて頂くと、オリジナル以外は綺麗に高解像化できていることが分かります。

顔の部分だけを拡大した結果、オリジナルと比べるとかなり画質が向上していることが分かりますが、Real-ESRGAN face_enhance無の画像は、すこし顔が不自然に見えます。

右下の部分を拡大した結果、ESRGANは高解像化されているものの、他の画像と比べて解像感が不足気味です。但し、背景は望遠効果でボケていることを考えると、ESRGANが一番自然に近いのかもしれません。

最後に左下の部分を拡大してみました。こちらもESRGANの解像感が不足しているように見えますが、本来は望遠効果でボケているはずなので、ESRGANが一番自然なのかもしれません。

まとめ

今回は深層学習を使った高解像化においてメジャーな ESRGAN、Real-ESRGAN、SwinIRの3種類について、ダウンロード方法、インストール方法、使い方について紹介しました。

今回説明に使った環境は Pythonポータブル環境「WinPython」を使いましたので、お使いの環境に依存するエラーなどが発生し難くなっています。

もし、ご自身の環境でうまく動作しない場合や、とりあえず一時的に評価したい場合は、WinPython上でお試しください。

高解像化といえばPhotoshopなどの有料アプリで搭載されてきましたが、同等の事が無料で出来てしまいます。

もし手元に高解像化したい画像があれば、是非この記事をお役立てください。

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