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

#2 [python] tkinter用のGUIレイアウトツールを少し試用

Windows版のPythonには、標準でGUIアプリを作れるモジュール、tkinter が含まれている。Tcl/Tkという言語の、GUI部分を担当しているTkをPythonから利用できるようにしたのが tkinter。

その、tkinter用のGUIレイアウトが出来るツール(RADツール?)が気になったので、少し試用してみた。環境は Windows10 x64 22H2 + Python 3.10.10 64bit。

PAGEを試用 :

_PAGE - A Python GUI Generator
_PAGE - Browse /page/7.6 at SourceForge.net

現行版は 7.6 らしい。page-7.6.exe をダウンロードして実行するとインストーラが起動する。どこにインストールするかと尋ねてきたので、今回は D:\Python\page\ にインストールした。

デスクトップにアイコンが作成されたのでダブルクリックして起動しようとしたところ、「python3が無い」と言われて起動せず。page.bat を編集して python3 を python に書き換えたところ動くようになった。
@start /min python3 "%~dp0page.py" %1 %2 %3
↓
@start /min python "%~dp0page.py" %1 %2 %3

少し触ってみたけれど、各部品を座標値で配置していくようだなと…。このレイアウト方法は、好きなように部品を配置できる点がメリットだけど、ウインドウサイズの変更時に部品の位置が追従して変わってくれないあたりはデメリットかも。

GUI builderを試用 :

_SpecTcl Home Page
_SpecTcl - Browse /GUI Builder/2.5.20070129 at SourceForge.net

本来は Tcl/Tk 用のツールだけど、Perl/Tk、Ruby/Tk、Python/Tkinter もサポートしてる。座標値で部品を配置せず、グリッド内に部品を配置していくタイプ。

「here.」と書かれてるリンクをクリックすると、2.5.20070129 版の入手先ページが開く。guibuilder-win32-ix86-20070129.exe がWindows版。ダブルクリックすればウインドウが表示されて、そのまま利用できる。

Windows10 x64 22H2上でも起動はしたのだけど…。古いツールなので、Commands → Start Test を選んでも、Python 2.x 用のスクリプトを生成してしまって、Python 3.x がインストールされてる環境ではエラーが出てしまう。

環境変数 PATHの先頭に Python 2.7 を追加してから guibuilder-win32-ix86-20070129.exe を起動してみた。この状態なら Commands → Start Test でウインドウのプレビューが表示できた。ただ、一度表示すると GUI Builder が固まる…。File → Save をすれば .py も生成されて、Commands → Vide Code でPythonスクリプトのソースが見れるようなので、それでどうにか…。

SpecTclを試用 :

_SpecTcl Home Page
_SpecTcl - Browse /Windows binary/1.2.2a at SourceForge.net

前述の GUI Builder の元になったツール。だと思う。たぶん。1.2.2a が最終版だろうか。SpecTcl122a.exe をダウンロードして、ダブルクリックすれば起動する。1.2.2a なら Python/Tkinter もサポートしているらしい。他に、Java, Perl, HTML もサポートしてある模様。

これも古いツールなので、Python 2.x用のスクリプトを生成するのだけど…。Python 2.7 に切り替えて生成された .py を実行してもエラーが出てしまう。もしかすると tkinter に対応させようとしたけど途中で開発が止まってしまったのかも…。

pygubuを試用 :

_GitHub - alejandroautalan/pygubu: A simple GUI builder for the python tkinter module
_GitHub - alejandroautalan/pygubu-designer: A simple GUI designer for the python tkinter module

pipでインストールできる。
pip install pygubu -U
pip install pygubu-designer -U
> pip list | grep pygubu
pygubu                    0.31
pygubu-designer           0.36

Pythonインストールフォルダ\Scripts\内に、pygubu-designer.exe があるので、実行するとレイアウトツールが起動する。

部品のレイアウト方法は、pack, grid, place が選べる。上下や左右に並べて配置することもできるし、グリッドで配置もできるし、座標値で配置することもできるのだろう。

pygubu-designer.exe は、拡張子が .ui の xmlファイルを出力することに特化したツールらしい。別途 .py を書いて、その中から .ui を呼び出して使う形になるっぽい。

しかし…。Python 3.10.10 + pygubu 0.31 では、import pygubu の行で「ModuleNotFoundError: No module named 'pygubu'」と表示されてしまう…。なんでや…。

py hoge.py ではエラーが出るけど、python hoge.py なら動くことに気づいた。何故…。

PySimpleGUIでもいいような気がしてきた :


以上、1 日分です。

過去ログ表示

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