2023/06/16(金) [n年前の日記]
#1 [cg_tools] Swin2SRを試用してみた
低品質な画像を高画質化する SwinIR についてググっていたら、Swin2SR というプログラム? アルゴリズム? を見かけた。
_GitHub - mv-lab/swin2sr: Swin2SR: SwinV2 Transformer for Compressed Image Super-Resolution and Restoration.
これも高画質化のツールなのだろうか…? 何ができるツールなのか分らないけど、動かしてみる。
環境は以下。
_GitHub - mv-lab/swin2sr: Swin2SR: SwinV2 Transformer for Compressed Image Super-Resolution and Restoration.
これも高画質化のツールなのだろうか…? 何ができるツールなのか分らないけど、動かしてみる。
環境は以下。
- Windows10 x64 22H2
- CPU : AMD Ryzen 5 5600X
- GPU : NVIDIA GeForce GTX 1060 6GB
- RAM : 16GB
- Python 3.10.10 64bit を導入済み。
◎ CUDA、cuDNNのインストール :
CUDA 11.6 が必要になるっぽいので、NVIDIA のサイトから、CUDA 11.6.2 と cuDNN 8.4.1 を入手してインストールした。
_CUDA Toolkit - Free Tools and Training | NVIDIA Developer
_CUDA Deep Neural Network (cuDNN) | NVIDIA Developer
以下の2つのファイルを入手。
cuda_11.6.2_511.65_windows.exe を実行してインストール。今回は、D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.6\ にインストールした。
cudnn-windows-x86_64-8.4.1.50_cuda11.6-archive.zip を解凍して、中に入ってたファイル群を、CUDA 11.6 をインストールした場所にコピーした。
CUDAが使えるように環境変数を設定。今回は、D:\home\bin\cudaset.bat というBATファイルを作成して、cudaset.bat 116 と打てば設定できるようにしておいた、とメモ。実際に設定している内容は以下。
今後、CUDA 11.6 を使いたい時は、事前に BATファイルを実行して環境変数を設定してから使うようにしたい。
_CUDA Toolkit - Free Tools and Training | NVIDIA Developer
_CUDA Deep Neural Network (cuDNN) | NVIDIA Developer
以下の2つのファイルを入手。
- cuda_11.6.2_511.65_windows.exe
- cudnn-windows-x86_64-8.4.1.50_cuda11.6-archive.zip
cuda_11.6.2_511.65_windows.exe を実行してインストール。今回は、D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.6\ にインストールした。
cudnn-windows-x86_64-8.4.1.50_cuda11.6-archive.zip を解凍して、中に入ってたファイル群を、CUDA 11.6 をインストールした場所にコピーした。
CUDAが使えるように環境変数を設定。今回は、D:\home\bin\cudaset.bat というBATファイルを作成して、cudaset.bat 116 と打てば設定できるようにしておいた、とメモ。実際に設定している内容は以下。
set CUDA_PATH=%CUDA_PATH_V11_6% set CUDNN_PATH=%CUDA_PATH_V11_6% set ADDPATH=%CUDA_PATH%\bin;%CUDA_PATH%\libnvvp;%CUDA_PATH%\include;%CUDA_PATH%\extras\CUPTI\lib64;%CUDA_PATH%\cuda\bin set PATH=%ADDPATH%;%PATH%ちなみに、CUDA 11.6 をインストールすると、CUDA_PATH_V11_6 という環境変数が設定されて、その環境変数にインストール場所が入ってる状態になるので、%CUDA_PATH_V11_6% でインストール場所のパスを取得することができる。
今後、CUDA 11.6 を使いたい時は、事前に BATファイルを実行して環境変数を設定してから使うようにしたい。
◎ ファイル一式を入手 :
Swin2SR関係のファイル一式を git を使って入手。今回は、D:\aiwork\swin2sr\ にインストールした。
cd /d D:\aiwork\swin2sr git clone https://github.com/mv-lab/swin2sr.git cd swin2sr
◎ Pythonの仮想環境を作成 :
Python 3.10 が動く仮想環境を作成。
pip を更新しておく。
py -3.10 -m venv venv venv\Scripts\activate
> python -V Python 3.10.10
pip を更新しておく。
pip list python -m pip install --upgrade pip
◎ Pythonのモジュールをインストール :
cog.yaml の記述を参考にして、Pythonモジュールをpipでインストールしていく。
_swin2sr/cog.yaml at main - mv-lab/swin2sr - GitHub
torch 2.0.1 がインストールされてしまう…。torch 1.12.1 で固定したいのに…。後から torch 1.12.1 をインストールし直した。
torch 1.12.1 をインストールすると、torchvision 1.15.2 が衝突すると言ってくる…。torchvision-0.13.1+cu116 ならOKっぽい。torch のインストール時に torchvision も一緒に指定しておくことで、バージョンが合っている版をインストールしてくれた。
インストールされたPythonモジュールの種類とバージョンは以下の状態になった。
_swin2sr/cog.yaml at main - mv-lab/swin2sr - GitHub
pip install ipython==8.4.0 pip install opencv-python==4.6.0.66 pip install timm==0.6.11 pip install torch==1.12.1 torchvision --extra-index-url=https://download.pytorch.org/whl/cu116
torch 2.0.1 がインストールされてしまう…。torch 1.12.1 で固定したいのに…。後から torch 1.12.1 をインストールし直した。
torch 1.12.1 をインストールすると、torchvision 1.15.2 が衝突すると言ってくる…。torchvision-0.13.1+cu116 ならOKっぽい。torch のインストール時に torchvision も一緒に指定しておくことで、バージョンが合っている版をインストールしてくれた。
インストールされたPythonモジュールの種類とバージョンは以下の状態になった。
> pip list Package Version ------------------ ------------ asttokens 2.2.1 backcall 0.2.0 certifi 2023.5.7 charset-normalizer 3.1.0 colorama 0.4.6 decorator 5.1.1 executing 1.2.0 filelock 3.12.2 fsspec 2023.6.0 huggingface-hub 0.15.1 idna 3.4 ipython 8.4.0 jedi 0.18.2 Jinja2 3.1.2 MarkupSafe 2.1.3 matplotlib-inline 0.1.6 mpmath 1.3.0 networkx 3.1 numpy 1.24.3 opencv-python 4.6.0.66 packaging 23.1 parso 0.8.3 pickleshare 0.7.5 Pillow 9.5.0 pip 23.1.2 prompt-toolkit 3.0.38 pure-eval 0.2.2 Pygments 2.15.1 PyYAML 6.0 requests 2.31.0 setuptools 65.5.0 six 1.16.0 stack-data 0.6.2 sympy 1.12 timm 0.6.11 torch 1.12.1+cu116 torchvision 0.13.1+cu116 tqdm 4.65.0 traitlets 5.9.0 typing_extensions 4.6.3 urllib3 2.0.3 wcwidth 0.2.6
◎ 学習モデルデータを入手 :
model_zoo\swin2sr\ というフォルダを作成して、その中に学習モデルデータを置いておく。
_Release v0.0.1 - mv-lab/swin2sr - GitHub
拡張子が .pth のファイルが学習モデルデータ、らしい。ファイルサイズがそれぞれ数十MB程度なので、全部ダウンロードしてみた。
ちなみに、Pythonの仮想環境等も含めて、ファイルサイズは全部で5GBぐらいになった。
_Release v0.0.1 - mv-lab/swin2sr - GitHub
拡張子が .pth のファイルが学習モデルデータ、らしい。ファイルサイズがそれぞれ数十MB程度なので、全部ダウンロードしてみた。
ちなみに、Pythonの仮想環境等も含めて、ファイルサイズは全部で5GBぐらいになった。
◎ 動作テスト :
inputs というフォルダを作成して、その中に入力画像を入れておく。
main_test_swin2sr.py を実行することで動作確認ができる。--help をつけるとヘルプが表示されるけど、一部のオプションについて記述が抜けている気がする…。--task のところに compressed_sr が書いてないような…?
compressed_sr なる処理をしてみる。
なんだかエラーだか警告だかが出るな…。
生成画像は、自動で作成された resultsフォルダ内に保存される。
生成画像を眺めてみた。たしかに4倍に拡大されているけれど、随分と画質が荒い気がする…。Compressed SR って、一体どういう処理なのだろう?
RealSR とやらを試してみた。
こちらで生成した画像のほうが、画質は良さそうに見えた。
ただ、SwinIR の生成結果と比べると、ちょっと今一つというか…。アニメ絵などは細かい線が消えてしまっているし、実写画像も砂地や岩の模様が消えてしまっている。その代わり、SwinIRと比べて処理時間は圧倒的に短かった。
短い処理時間でそこそこの結果を得たい場合、Swin2SR は有用かもしれない。ただ、よりクッキリした画像が欲しい場合は、時間はかかるけれど SwinIR を使ったほうがいいのかもしれない。
もっとも、SwinIR の生成結果が元画像に近いかどうかは分らない。もしかすると Swin2SR のほうが元画像に近づけてくれている可能性もあるのだろうか。元画像でボケている部分も SwinIR はクッキリした感じにしてしまうけど、Swin2SR ならボケたままだった、そんな事例をどこかで目にした記憶が…。アレはどのページで見かけたのだったか…。ググっても見つからない…。別のアルゴリズムと見間違えたのかな…。
main_test_swin2sr.py を実行することで動作確認ができる。--help をつけるとヘルプが表示されるけど、一部のオプションについて記述が抜けている気がする…。--task のところに compressed_sr が書いてないような…?
> python main_test_swin2sr.py --help usage: main_test_swin2sr.py [-h] [--task TASK] [--scale SCALE] [--noise NOISE] [--jpeg JPEG] [--training_patch_size TRAINING_PATCH_SIZE] [--large_model] [--model_path MODEL_PATH] [--folder_lq FOLDER_LQ] [--folder_gt FOLDER_GT] [--tile TILE] [--tile_overlap TILE_OVERLAP] [--save_img_only] options: -h, --help show this help message and exit --task TASK classical_sr, lightweight_sr, real_sr, gray_dn, color_dn, jpeg_car, color_jpeg_car --scale SCALE scale factor: 1, 2, 3, 4, 8 --noise NOISE noise level: 15, 25, 50 --jpeg JPEG scale factor: 10, 20, 30, 40 --training_patch_size TRAINING_PATCH_SIZE patch size used in training Swin2SR. Just used to differentiate two different settings in Table 2 of the paper. Images are NOT tested patch by patch. --large_model use large model, only provided for real image sr --model_path MODEL_PATH --folder_lq FOLDER_LQ input low-quality test image folder --folder_gt FOLDER_GT input ground-truth test image folder --tile TILE Tile size, None for no tile during testing (testing as a whole) --tile_overlap TILE_OVERLAP Overlapping of different tiles --save_img_only save image and do not evaluate
compressed_sr なる処理をしてみる。
python main_test_swin2sr.py --task compressed_sr --scale 4 --training_patch_size 48 --model_path model_zoo/swin2sr/Swin2SR_CompressedSR_X4_48.pth --folder_lq ./inputs --save_img_only
なんだかエラーだか警告だかが出るな…。
D:\aiwork\swin2sr\swin2sr\venv\lib\site-packages\torch\functional.py:478: UserWarning: torch.meshgrid: in an upcoming release, it will be required to pass the indexing argument. (Triggered internally at ..\aten\src\ATen\native\TensorShape.cpp:2895.) return _VF.meshgrid(tensors, **kwargs) # type: ignore[attr-defined]「将来的にはindexing引数が必要になるよ」と言われてるように見える。一応処理は出来てるようだけど…。
生成画像は、自動で作成された resultsフォルダ内に保存される。
生成画像を眺めてみた。たしかに4倍に拡大されているけれど、随分と画質が荒い気がする…。Compressed SR って、一体どういう処理なのだろう?
RealSR とやらを試してみた。
python main_test_swin2sr.py --task real_sr --scale 4 --model_path model_zoo/swin2sr/Swin2SR_RealworldSR_X4_64_BSRGAN_PSNR.pth --folder_lq ./inputs
こちらで生成した画像のほうが、画質は良さそうに見えた。
ただ、SwinIR の生成結果と比べると、ちょっと今一つというか…。アニメ絵などは細かい線が消えてしまっているし、実写画像も砂地や岩の模様が消えてしまっている。その代わり、SwinIRと比べて処理時間は圧倒的に短かった。
短い処理時間でそこそこの結果を得たい場合、Swin2SR は有用かもしれない。ただ、よりクッキリした画像が欲しい場合は、時間はかかるけれど SwinIR を使ったほうがいいのかもしれない。
もっとも、SwinIR の生成結果が元画像に近いかどうかは分らない。もしかすると Swin2SR のほうが元画像に近づけてくれている可能性もあるのだろうか。元画像でボケている部分も SwinIR はクッキリした感じにしてしまうけど、Swin2SR ならボケたままだった、そんな事例をどこかで目にした記憶が…。アレはどのページで見かけたのだったか…。ググっても見つからない…。別のアルゴリズムと見間違えたのかな…。
[ ツッコむ ]
以上です。