2023/06/13(火) [n年前の日記]
#1 [cg_tools][prog] cog.yamlって何だろう
低品質な画像を高画質化できるらしい、SwinIR という画像処理技術が気になった。AIを使って画像を拡大したり、ノイズを除去してくれるらしい。
_GitHub - JingyunLiang/SwinIR: SwinIR: Image Restoration Using Swin Transformer (official repository)
ローカル環境で動かせるなら動かしてみたい。ざっと見たところ、cog.yaml というファイルが目に入った。
_SwinIR/cog.yaml at main - JingyunLiang/SwinIR - GitHub
.yaml/.yml ファイルか…。中には動作に必要な Pythonモジュールが列挙されてる。これはもしかして、conda用のファイルだろうか。ちなみに condaというのはPythonの仮想環境を作れるツール。
conda に cog.yaml を渡してみた。
ググってみたら、この cog.yaml、どうやら Docker 用のファイルだったらしい。Dockerとな…。やたらと見かけるツール名だけど、何だっけソレ。
_GitHub - JingyunLiang/SwinIR: SwinIR: Image Restoration Using Swin Transformer (official repository)
ローカル環境で動かせるなら動かしてみたい。ざっと見たところ、cog.yaml というファイルが目に入った。
_SwinIR/cog.yaml at main - JingyunLiang/SwinIR - GitHub
.yaml/.yml ファイルか…。中には動作に必要な Pythonモジュールが列挙されてる。これはもしかして、conda用のファイルだろうか。ちなみに condaというのはPythonの仮想環境を作れるツール。
conda に cog.yaml を渡してみた。
conda env create -n swinir --file cog.yamlしかし、何一つパッケージがインストールされなかった。すると、このファイルは何用のファイルなんだろう?
ググってみたら、この cog.yaml、どうやら Docker 用のファイルだったらしい。Dockerとな…。やたらと見かけるツール名だけど、何だっけソレ。
◎ Dockerについて調べた :
「dockerとは」でググってみたら、仮想環境を作れるツールらしい。開発時に必要なライブラリやパッケージをひとまとめにしておけるので、開発が捗るのだとか。
しかし、Linuxのカーネルと密接に絡んだ仕組みになっているので、Windows上ではすんなり使えない模様。有償ソフトの Docker Desktop なるものを導入するか、あるいは、Windows上で仮想PCのWSL2を導入して、その上で Ubuntu Linux等を動かして、そのLinux上で Docker を使う、ということになるそうで。
しかし、Linuxのカーネルと密接に絡んだ仕組みになっているので、Windows上ではすんなり使えない模様。有償ソフトの Docker Desktop なるものを導入するか、あるいは、Windows上で仮想PCのWSL2を導入して、その上で Ubuntu Linux等を動かして、そのLinux上で Docker を使う、ということになるそうで。
◎ 仮想PCの選択で悩む :
Docker を使うためにはWSL2の導入が必要らしいと分かってきたけど…。WSL2か…。うーん。
以前試しに WSL2 を使った時は、他の仮想PC、VMware や VirtualBox の動作が目に見えて遅くなってしまって、WSL2 をアンインストールしてしまった記憶が…。だから、WSL2 はインストールしたくないのだよなあ…。
であれば、VMware や VirtualBox 上で動かしている Linux上で Docker を使うわけにはいかんのだろうか。
そう思って少し調べたけれど、これまた上手くはいかないようで。Docker そのものは仮想PC + Linux で動かせるのだろうけど。そもそも WSL2 上で Docker が使えているのだから、他の仮想PCでも同様だろう。しかし、今回やりたいのは、「GPU(GPGPU)を使って処理をする SwinIR を動かしたい」というお題なわけで…。
仮想PC + Linux から、ホストOS(Windows)が管理してるGPU/ビデオカードを制御できればいいのだけど、現状では難しいらしい。有償、かつ、サーバ用途として販売されてる VMware ならやれなくもないらしいけど、VMware Player や VirtualBox では無理だそうで。GPU(GPGPU)が使えないとなると、SwinIR も動かない…。
つまり、SwinIR が動く環境を Docker を使って構築したい場合は、OSは Linux、かつ、その Linux機にGPGPUが利用できるレベルのビデオカード/GPUを積む、という条件を満たさないといけない。Windows上で、Docker を使って、GPGPUを使うツールの環境を構築するというのは、ちょっと厳しいようだなと…。
もしかすると、WSL2 +Docker を使った場合も、GPGPUは利用できないという問題が発生するのでは…?
以前試しに WSL2 を使った時は、他の仮想PC、VMware や VirtualBox の動作が目に見えて遅くなってしまって、WSL2 をアンインストールしてしまった記憶が…。だから、WSL2 はインストールしたくないのだよなあ…。
であれば、VMware や VirtualBox 上で動かしている Linux上で Docker を使うわけにはいかんのだろうか。
そう思って少し調べたけれど、これまた上手くはいかないようで。Docker そのものは仮想PC + Linux で動かせるのだろうけど。そもそも WSL2 上で Docker が使えているのだから、他の仮想PCでも同様だろう。しかし、今回やりたいのは、「GPU(GPGPU)を使って処理をする SwinIR を動かしたい」というお題なわけで…。
仮想PC + Linux から、ホストOS(Windows)が管理してるGPU/ビデオカードを制御できればいいのだけど、現状では難しいらしい。有償、かつ、サーバ用途として販売されてる VMware ならやれなくもないらしいけど、VMware Player や VirtualBox では無理だそうで。GPU(GPGPU)が使えないとなると、SwinIR も動かない…。
つまり、SwinIR が動く環境を Docker を使って構築したい場合は、OSは Linux、かつ、その Linux機にGPGPUが利用できるレベルのビデオカード/GPUを積む、という条件を満たさないといけない。Windows上で、Docker を使って、GPGPUを使うツールの環境を構築するというのは、ちょっと厳しいようだなと…。
もしかすると、WSL2 +Docker を使った場合も、GPGPUは利用できないという問題が発生するのでは…?
[ ツッコむ ]
#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\ にインストールしてみる。
_GitHub - JingyunLiang/SwinIR: SwinIR: Image Restoration Using Swin Transformer (official repository)
環境は以下。
- Windows10 x64 22H2
- AMd Ryzen 5 5600X
- NVIDIA GeForce GTX 1060 6GB
- RAM 16GB
- Python 3.8.10 x64, Python 3.10.10 x64
- CUDA 11.8, cuDNN 8.6 をインストール済み。
今回は、D:\aiwork\swinir\ にインストールしてみる。
◎ 環境構築 :
作業の流れとしては以下。
git clone でファイル一式を入手。
Python 3.8 の仮想環境を作成。仮想環境に切り替え。
pip が使えるか確認。ついでに pip をアップグレード。
pip で必要なモジュールをインストールしていく。cog.yaml を参考にして、requirements.txt を作成。
requirements.txt
requirements.txt を指定して一括インストール。
学習モデルデータをダウンロードして入手。
_Release Pretrained models, supplementary and visual results - JingyunLiang/SwinIR - GitHub
_Releases - JingyunLiang/SwinIR
今回は以下のファイルを入手してみた。それぞれ、100MB前後のファイル。
種類をざっくり説明しておくと…。
これらの学習モデルデータ(.pth)を、model_zoo\swinir\ というディレクトリを作成して、その中に入れる。
これで必要な環境は作れたはず。動作確認していく。
- git clone でファイル一式を入手。
- Python + venv で仮想環境を作成。
- 必要なPythonモジュールをpipでインストール。
- 学習モデルデータを入手。
- 動作確認。
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 でヘルプ表示。
--folder_lq と --folder_gt の違いが判らない…。lq = low-quality (低画質) はともかく、gt = ground-truth ってどういう意味…?
_Ground truth (グランドトゥルース) - MATLAB & Simulink
うむ。分からん。なんでもかんでも低画質扱いにしておけばいいのかなと思ったけれどそうでもないようで。--folder_lq ではエラーが出るけど、--folder_gt ならエラーが出ずに処理できた場合もあった。
とりあえず、以下のように使うらしい。
_公式のREADME.md にも記述があるけど使用例を列挙しておく。再度書いておくけど、1行分を実行する度に数十分待たされるので注意。
ちなみに、一番最後、Jpegノイズ軽減カラー版だけ、テスト用画像、testsets/LIVE1/ というフォルダが無かった。
一応、拡大、ノイズ除去、Jpegノイズ削減については動作することを確認できた。
実行するには、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ノイズ削減については動作することを確認できた。
◎ 参考ページ :
[ ツッコむ ]
以上、1 日分です。