mieki256's diary



2023/06/13(火) [n年前の日記]

#2 [cg_tools] SwinIRをWindows10上で動かしてみた

AIを使って低品質な画像を高画質化するらしい SwinIR を、Windows10 x64 22H2上で動かしてみた。本来は cog.yaml を利用して、Docker で環境を構築するのだろうけど、Docker を使わずに環境構築をして動かしている事例を多々見かけたので、なんとかなりそうだなと…。

_GitHub - JingyunLiang/SwinIR: SwinIR: Image Restoration Using Swin Transformer (official repository)

環境は以下。
今回は、D:\aiwork\swinir\ にインストールしてみる。

環境構築 :

作業の流れとしては以下。
  1. git clone でファイル一式を入手。
  2. Python + venv で仮想環境を作成。
  3. 必要なPythonモジュールをpipでインストール。
  4. 学習モデルデータを入手。
  5. 動作確認。


git clone でファイル一式を入手。
cd /d D:\aiwork\swinir
git clone https://github.com/JingyunLiang/SwinIR.git
cd SwinIR


Python 3.8 の仮想環境を作成。仮想環境に切り替え。
py -3.8 -m venv venv
venv\Scripts\activate
python -V


pip が使えるか確認。ついでに pip をアップグレード。
pip list
python -m pip install --upgrade pip


pip で必要なモジュールをインストールしていく。cog.yaml を参考にして、requirements.txt を作成。

requirements.txt
requests
torchvision == 0.9.0
torch == 1.8.0
numpy == 1.19.4
opencv-python == 4.4.0.46
tqdm == 4.62.2
Pillow == 8.3.2
timm == 0.4.12
ipython == 7.19.0


requirements.txt を指定して一括インストール。
pip install -r requirements.txt


学習モデルデータをダウンロードして入手。

_Release Pretrained models, supplementary and visual results - JingyunLiang/SwinIR - GitHub
_Releases - JingyunLiang/SwinIR

今回は以下のファイルを入手してみた。それぞれ、100MB前後のファイル。
  • 003_realSR_BSRGAN_DFOWMFC_s64w8_SwinIR-L_x4_GAN.pth
  • 003_realSR_BSRGAN_DFOWMFC_s64w8_SwinIR-L_x4_PSNR.pth
  • 005_colorDN_DFWB_s128w8_SwinIR-M_noise15.pth
  • 005_colorDN_DFWB_s128w8_SwinIR-M_noise25.pth
  • 005_colorDN_DFWB_s128w8_SwinIR-M_noise50.pth
  • 006_CAR_DFWB_s126w7_SwinIR-M_jpeg10.pth
  • 006_CAR_DFWB_s126w7_SwinIR-M_jpeg20.pth
  • 006_CAR_DFWB_s126w7_SwinIR-M_jpeg30.pth
  • 006_CAR_DFWB_s126w7_SwinIR-M_jpeg40.pth
  • 006_colorCAR_DFWB_s126w7_SwinIR-M_jpeg10.pth
  • 006_colorCAR_DFWB_s126w7_SwinIR-M_jpeg20.pth
  • 006_colorCAR_DFWB_s126w7_SwinIR-M_jpeg30.pth
  • 006_colorCAR_DFWB_s126w7_SwinIR-M_jpeg40.pth

種類をざっくり説明しておくと…。
  • 003_* は、拡大処理用。
  • 005_* は、ノイズ除去用。
  • 006_* は、Jpegノイズ削減用。

これらの学習モデルデータ(.pth)を、model_zoo\swinir\ というディレクトリを作成して、その中に入れる。

これで必要な環境は作れたはず。動作確認していく。

動作確認 :

testsets\ の中にサンプル画像群がたくさん入ってるので、それらを使って動作確認ができる。

実行するには、main_test_swinir.py を利用する。

試してみたところ、AMD Ryzen 5 5600X + NVIDIA GeForce GTX 1060 6GB の環境で、1枚につき2分以上かけて処理された。また、サンプル画像フォルダ内には複数の画像が入っているので、全部処理するのに数十分かかった。

main_test_swinir.py --help でヘルプ表示。
> python main_test_swinir.py --help
usage: main_test_swinir.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]

optional arguments:
  -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 SwinIR.
                                               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

--folder_lq と --folder_gt の違いが判らない…。lq = low-quality (低画質) はともかく、gt = ground-truth ってどういう意味…?

_Ground truth (グランドトゥルース) - MATLAB & Simulink
Ground truth とは、AI モデルの出力の学習やテストに使用される実際のデータを表す用語です。 自動運転や音声認識など、多くの AI アプリケーションで Ground truth データが必要となります。

うむ。分からん。なんでもかんでも低画質扱いにしておけばいいのかなと思ったけれどそうでもないようで。--folder_lq ではエラーが出るけど、--folder_gt ならエラーが出ずに処理できた場合もあった。


とりあえず、以下のように使うらしい。
# 拡大処理
python main_test_swinir.py --task real_sr --scale 4 --large_model --model_path 学習モデルデータ(.pth)のパス --folder_lq 入力画像フォルダ

# ノイズ除去(カラー画像)
python main_test_swinir.py --task color_dn --noise 50 --model_path 学習モデルデータ(.pth)のパス --folder_gt 入力画像フォルダ

# Jpegノイズ除去(カラー画像)
python main_test_swinir.py --task color_jpeg_car --jpeg 40 --model_path 学習モデルデータ(.pth)のパス --folder_gt 入力画像フォルダ
  • --task タスク種類 : classical_sr, lightweight_sr, real_sr, gray_dn, color_dn, jpeg_car, color_jpeg_car が指定できる。real_sr が拡大処理。color_dn がカラーノイズ除去。color_jpeg_car がJpegカラーノイズ除去。
  • --scale 拡大率 : 1, 2, 3, 4, 8倍が指定できる。
  • --large_model : 拡大処理の時のみ使用。大型モデルを使うことを伝えてる。
  • --noise NOISE : ノイズ除去レベル。15, 25, 50 のどれかを指定。
  • --jpeg JPEG : Jpegノイズ除去レベル。10, 20, 30, 40 のどれかを指定。
  • --model_path MODEL_PATH : 学習モデルデータのパスを指定。処理内容によって、利用する学習モデルデータは違ってくる。
  • --folder_lq FOLDER_LQ : 入力画像フォルダを指定。低画質画像用。
  • --folder_gt FOLDER_GT : 入力画像フォルダを指定。


_公式のREADME.md にも記述があるけど使用例を列挙しておく。再度書いておくけど、1行分を実行する度に数十分待たされるので注意。
@rem
@rem 拡大処理
@rem
python main_test_swinir.py --task real_sr --scale 4 --large_model --model_path model_zoo/swinir/003_realSR_BSRGAN_DFOWMFC_s64w8_SwinIR-L_x4_GAN.pth --folder_lq testsets/RealSRSet+5images
python main_test_swinir.py --task real_sr --scale 4 --large_model --model_path model_zoo/swinir/003_realSR_BSRGAN_DFOWMFC_s64w8_SwinIR-L_x4_PSNR.pth --folder_lq testsets/RealSRSet+5images
@rem
@rem ノイズ除去
@rem
python main_test_swinir.py --task color_dn --noise 15 --model_path model_zoo/swinir/005_colorDN_DFWB_s128w8_SwinIR-M_noise15.pth --folder_gt testsets/McMaster
python main_test_swinir.py --task color_dn --noise 25 --model_path model_zoo/swinir/005_colorDN_DFWB_s128w8_SwinIR-M_noise25.pth --folder_gt testsets/McMaster
python main_test_swinir.py --task color_dn --noise 50 --model_path model_zoo/swinir/005_colorDN_DFWB_s128w8_SwinIR-M_noise50.pth --folder_gt testsets/McMaster
@rem
@rem Jpegノイズ軽減、grayscale
@rem
python main_test_swinir.py --task jpeg_car --jpeg 10 --model_path model_zoo/swinir/006_CAR_DFWB_s126w7_SwinIR-M_jpeg10.pth --folder_gt testsets/classic5
python main_test_swinir.py --task jpeg_car --jpeg 20 --model_path model_zoo/swinir/006_CAR_DFWB_s126w7_SwinIR-M_jpeg20.pth --folder_gt testsets/classic5
python main_test_swinir.py --task jpeg_car --jpeg 30 --model_path model_zoo/swinir/006_CAR_DFWB_s126w7_SwinIR-M_jpeg30.pth --folder_gt testsets/classic5
python main_test_swinir.py --task jpeg_car --jpeg 40 --model_path model_zoo/swinir/006_CAR_DFWB_s126w7_SwinIR-M_jpeg40.pth --folder_gt testsets/classic5
@rem
@rem Jpegノイズ軽減、color
@rem

python main_test_swinir.py --task color_jpeg_car --jpeg 10 --model_path model_zoo/swinir/006_colorCAR_DFWB_s126w7_SwinIR-M_jpeg10.pth --folder_gt testsets/LIVE1
python main_test_swinir.py --task color_jpeg_car --jpeg 20 --model_path model_zoo/swinir/006_colorCAR_DFWB_s126w7_SwinIR-M_jpeg20.pth --folder_gt testsets/LIVE1
python main_test_swinir.py --task color_jpeg_car --jpeg 30 --model_path model_zoo/swinir/006_colorCAR_DFWB_s126w7_SwinIR-M_jpeg30.pth --folder_gt testsets/LIVE1
python main_test_swinir.py --task color_jpeg_car --jpeg 40 --model_path model_zoo/swinir/006_colorCAR_DFWB_s126w7_SwinIR-M_jpeg40.pth --folder_gt testsets/LIVE1

ちなみに、一番最後、Jpegノイズ軽減カラー版だけ、テスト用画像、testsets/LIVE1/ というフォルダが無かった。

一応、拡大、ノイズ除去、Jpegノイズ削減については動作することを確認できた。

参考ページ :


以上です。

過去ログ表示

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