mieki256's diary



2023/06/16(金) [n年前の日記]

#1 [cg_tools] Swin2SRを試用してみた

低品質な画像を高画質化する SwinIR についてググっていたら、Swin2SR というプログラム? アルゴリズム? を見かけた。

_GitHub - mv-lab/swin2sr: Swin2SR: SwinV2 Transformer for Compressed Image Super-Resolution and Restoration.

これも高画質化のツールなのだろうか…? 何ができるツールなのか分らないけど、動かしてみる。

環境は以下。

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
  • 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 が動く仮想環境を作成。
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

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ぐらいになった。

動作テスト :

inputs というフォルダを作成して、その中に入力画像を入れておく。

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 ならボケたままだった、そんな事例をどこかで目にした記憶が…。アレはどのページで見かけたのだったか…。ググっても見つからない…。別のアルゴリズムと見間違えたのかな…。

以上です。

過去ログ表示

Prev - 2023/06 - Next
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project