【Windows10】【AI】Real-ESRGANで画像ファイルの画質向上を試す

RTX 3060(GG-RTX3060-E12GB/OC/DF)を買いました。

Stable diffusionでAIに画像作らせるのは面白いですね。
まぁそれは今回置いておくとして、ガビガビ画像をAIによる画質向上を目的に「Real-ESRGAN」の導入してみます。
といっても、Stable diffusion内でも同様のことができるっちゃできますが、まぁこれは勉強ということで。
参考サイト:【Real-ESRGAN】Webアプリ・ツールの導入方法 | ジコログ
 
というわけでお題目。

1.CUDAのインストール

Windows10にReal-ESRGANを入れるにはまずPyTorchが必要。そしてPyTorchを使うためにCUDAを入れます。

developer.nvidia.com
最新のCUDA Toolkit 12.1.1 をダウンロード。
インストーラはローカル版とネットワーク版があるけど、今回はローカル版。
インストーラをダウンロード後、インストールを実行。


パッケージのインストールを自動で行ってくれるため、終了まで待機。

導入確認はpowershellでコマンド実行で確認することが可能。

> nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2023 NVIDIA Corporation
Built on Mon_Apr__3_17:36:15_Pacific_Daylight_Time_2023
Cuda compilation tools, release 12.1, V12.1.105
Build cuda_12.1.r12.1/compiler.32688072_0

2.PyTorchのインストール

PyTorchはつい最近(3/16)にVer2.0がリリースされ、1.x系より性能が向上されたらしい。
なので、今回は2.0をインストールします。

PyTorchはpipコマンドでインストールを行います。
powershellを起動し、以下のコマンドを実行する。なお、Pythonのバージョンは3.10.6。
一応、その前にpipとsetuptoolsのアップデートをしてから実行します。

> py -m pip install --upgrade pip setuptools
> py -m pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
Looking in indexes: https://download.pytorch.org/whl/cu118
Collecting torch
  Downloading https://download.pytorch.org/whl/cu118/torch-2.0.1%2Bcu118-cp310-cp310-win_amd64.whl (2619.1 MB)
     ---------------------------------------  2.6/2.6 GB 2.5 MB/s eta 0:00:01

pyコマンドはpythonコマンドとほぼ同様といえば同様ですが、一応説明すると、
Pythonが異なるバージョンで2種類以上インストールされている場合に、pyコマンドを実行すると最新のバージョンで実行してくれます。
Pythonは3.10と3.9といったように、マイナーバージョンが異なると別者扱いになるため、
常に最新を使いたい場合はpyコマンドを使えばいい、という工夫(苦肉の策)だそうです。
ただし、これはWindows限定だったはず(たしか)。

コマンドを実行すると2.5GBぐらいのダウンロードがまず始まるため、気長に待ちます。
特に問題がなければ完了。
インストールができたかはpip listで確認可能。

> py -m pip list
torch              2.0.1+cu118
torchaudio         2.0.2+cu118
torchvision        0.15.2+cu118

Pythonで実行できるかどうかは、Pythonで以下のように実行。

> py

※以下をコピペし、実行します。
import torch

print(torch.__version__)
print(torch.cuda.is_available())

※以下のように出れば問題なし
2.0.1+cu118
True

 

3.Real-ESRGANのインストール

3.1 Real-ESRGANのWebアプリのダウンロード

Real-ESRGANのWebアプリを最新で使うため、Webアプリを以下のサイトからソースを取得します。
(GitHubにあるものは古く、Python3.10には対応していないらしい)
huggingface.co
 
GitHubと違い、ZIP化してダウンロードができないらしい。
全ソースのダウンロードを実施するには、pipでhuggingface-hubのパッケージを導入するのが手っ取り早い。

> py -m pip install huggingface-hub

huggingface-hubを導入後、pyコマンドでpythonプロンプトを開く

> py

※以下をコピペし、実行します。
from huggingface_hub import snapshot_download
  
snapshot_download(
    repo_id="akhaliq/Real-ESRGAN",
    repo_type="space",
    revision="main",
    cache_dir="./")

ダウンロードしたファイルはpyコマンドを実行したフォルダの配下に、「spaces--akhaliq--Real-ESRGAN」というフォルダ名で格納されています。

3.2 Real-ESRGAN本体のインストール

github.com
こちらから、[Code]→[Download ZIP]でソースをダウンロードします。
ダウンロード後、好きなところにファイルを解凍します。
今回は「C:\Real-ESRGAN-master」に作成します。

解凍後、3.1でダウンロードしたWebアプリが入っているフォルダである「spaces--akhaliq--Real-ESRGAN」→「snapshots」→「ce98fc29358a5b69f9268d7d60b2ea22b25d82c4」の中身をすべてコピーし、Real-ESRGAN本体のフォルダ(C:\Real-ESRGAN-master配下)に、ファイルを上書きする形でペーストします。
※なお、「ce98fc29358a5b69f9268d7d60b2ea22b25d82c4」から始まるフォルダ名はリポジトリバージョンなので可変です。

コピペが完了後、powershell上でC:\Real-ESRGAN-masterに移動します。
その配下にrequirements.txtというテキストファイルがありますが、これにはReal-ESRGANを使うためのpipパッケージが記載されているため、
このテキストファイルををpipコマンドで指定し、Real-ESRGANの実行に必要となるパッケージ群をマルっとインストールしてもらいます。

> cd C:\Real-ESRGAN-master
> py -m pip install -r requirements.txt

4.Real-ESRGANのセッティング

4.1 モデルのダウンロード

Stable diffusionでも実写風やイラスト風で仕上げるのにモデルを選択したように、Real-ESRGANでもモデルが必要になります。
Real-ESRGANでは、実写風であれば「base」、イラスト風であれば「anime」と画面上で選択できるようなので、
それぞれのモデルをgithubからダウンロードします。
ダウンロードは、以下URLをブラウザのアドレスバーに貼ってアクセスすることで可能です。
◆base:RealESRGAN_x4plus.pth
https://github.com/xinntao/Real-ESRGAN/releases/download/v0.1.0/RealESRGAN_x4plus.pth

◆anime:RealESRGAN_x4plus_anime_6B.pth
https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.2.4/RealESRGAN_x4plus_anime_6B.pth

ダウンロードしたファイルは「C:\Real-ESRGAN-master」の直下に配置します。
 

4.2 プログラムファイルの変更

「C:\Real-ESRGAN-master」の直下にあるapp.pyの中身を修正します。

    INPUT_DIR = "/tmp/input_image" + str(_id) + "/"
    OUTPUT_DIR = "/tmp/output_image" + str(_id) + "/"
↓
    INPUT_DIR = "./tmp/input_image" + str(_id) + "/"
    OUTPUT_DIR = "./tmp/output_image" + str(_id) + "/"

INPUT_DIRとOUTPUT_DIRは「/tmp/~」となっていますが、もともとLINUXで動作をする前提のため、
ルート直下のtmpディレクトリが記載されていますが、「.」(ピリオド)を追加することで、「C:\Real-ESRGAN-master」配下の「tmp」を示す形に変更しています。
そのため、「C:\Real-ESRGAN-master」配下に「tmp」フォルダを作ることを忘れずに実施します。(該当フォルダが無いと画面での実行時にエラーになります)
 
次に、以下の部分は起動のたびにTEMPフォルダの削除と作成を実施していますが、
rmコマンド、mkdirコマンドについてもLINUXコマンドとなるため、Windows用に変更を加えます。

    run_cmd("rm -rf " + INPUT_DIR)
    run_cmd("rm -rf " + OUTPUT_DIR)
    run_cmd("mkdir " + INPUT_DIR)
    run_cmd("mkdir " + OUTPUT_DIR)
↓
    if os.path.isdir(INPUT_DIR):
        os.rmdir(INPUT_DIR)
    else:
        os.mkdir(INPUT_DIR)
    if os.path.isdir(OUTPUT_DIR):
        os.rmdir(OUTPUT_DIR)
    else:
        os.mkdir(OUTPUT_DIR)

次にwgetをしてる部分ですが、4.1にてモデルをすでにダウンロードしているため、こちらもコメントアウトします。

run_cmd("wget https://github.com/xinntao/Real-ESRGAN/releases/download/v0.1.0/RealESRGAN_x4plus.pth -P .")
os.system("wget https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.2.4/RealESRGAN_x4plus_anime_6B.pth -P .")
↓
# run_cmd("wget https://github.com/xinntao/Real-ESRGAN/releases/download/v0.1.0/RealESRGAN_x4plus.pth -P .")
# os.system("wget https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.2.4/RealESRGAN_x4plus_anime_6B.pth -P .")

次に、app.pyの中で、リサイズしている箇所があるため、画質向上のため、こちらもコメントアウトします。

    basewidth = 256
    wpercent = (basewidth/float(img.size[0]))
    hsize = int((float(img.size[1])*float(wpercent)))
    img = img.resize((basewidth,hsize), Image.ANTIALIAS)
↓
    # basewidth = 256
    # wpercent = (basewidth/float(img.size[0]))
    # hsize = int((float(img.size[1])*float(wpercent)))
    # img = img.resize((basewidth,hsize), Image.ANTIALIAS)

 

5.Real-ESRGANの実行

これまでの準備で問題がなければ、以下のコマンドでReal-ESRGANが起動します。
「C:\Real-ESRGAN-master」配下に移動し、pyコマンドを実行。

> cd C:\Real-ESRGAN-master
> py app.py

Running on local URL: http://127.0.0.1:7860/
と出れば成功。
ブラウザからアクセスすると、以下の画面が表示されます。

後は画面にしたがって実行してみますが、サンプルで試すとこうなります。

明らかにくっきりはっきり大きくなっており、これはなかなか。

後はネットで拾った画像もこんな感じに。いいですね。とても面白い。