「AIにより画像を高画質化したい」
「画質を落とさずに画像を拡大したい」
「無料の高画質化ツールを探している」
このような場合には、SwinIRがオススメです。
この記事では、SwinIRについて解説しています。
本記事の内容
- SwinIRとは?
- SwinIRのシステム要件
- SwinIRのインストール
- SwinIRの動作確認
それでは、上記に沿って解説していきます。
SwinIRとは?
SwinIRとは、Swin Transformerを用いた画像復元ツールです。
SwinIRの活用シーンは、例えば次の画像を2倍に拡大したいような場合です。
単純に2倍に拡大すれば、次の画像のように劣化してしまいます。
しかし、SwinIRを使うと画質を落とさずに2倍にサイズを拡大できます。
SwinIRでは、最大で4倍まで拡大が可能です。
画質を維持するというより、むしろ画質が向上するとまで言えます。
SwinIRでこのようなことができるのは、AI(機械学習)のおかげです。
少しだけ技術的に説明すると、Swin TransformerはVision Transformerを改良したモデルになります
そして、Vision TransformerはTransformerをベースにしています。
根本となるTransformerは、自然言語処理分野で革命を起こしたと言われています。
Transformerについては、次の記事で触れています。
とにかく、Transformerは自然言語(テキスト)処理を一気に進展させました。
同じように、Vision Transformerは画像処理分野で革命を起こすと言われています。
ここまで言えば、Swin Transformerの凄さがわかるでしょう。
研究者でなければ、この程度の理解で十分だと思います。
結局、技術なんて使ってナンボですから。
そんなスゴイSwin Transformerの手法を利用しているのは、SwinIRになります。
画像復元ツールと書きましたが、高画質化ツールと言った方がいいかもしれません。
難しい言葉で言うと、次の技術がSwinIRには備わっています。
- バイキュービック補完・軽量化・超解像
- ノイズ除去
- JPEG画像圧縮アーチファクト低減
これらの技術により、SwinIRは画像を高画質化します。
もちろん、SwinIRはオープンソースとして無料で利用できます。
以上、SwinIRについて説明しました。
次は、SwinIRのシステム要件を説明します。
SwinIRのシステム要件
現時点(2022年8月)でのSwinIRの最新バージョンは、明記されていません。
そもそもバージョン管理は、されていないようです。
サポートOSに関しては、以下を含むクロスプラットフォーム対応と思われます。
インストールは、WindowsとUbuntuでは実際に確認済みです。
- Windows
- macOS
- Linux
ソースコードを見る限りでは、macOSも問題ないでしょう。
サポート対象となるPythonのバージョンは、明記されていません。
ただ、SwinIRの開発自体はPython 3.8で行われています。
そして、Python 3.10でもインストールを確認済みです。
とりあえず、以下のPython公式開発サイクルに従っていれば問題ないでしょう。
バージョン | リリース日 | サポート期限 |
3.6 | 2016年12月23日 | 2021年12月23日 |
3.7 | 2018年6月27日 | 2023年6月27日 |
3.8 | 2019年10月14日 | 2024年10月 |
3.9 | 2020年10月5日 | 2025年10月 |
3.10 | 2021年10月4日 | 2026年10月 |
Python 3.6は、2021年末でサポート期限が切れていることに注意しましょう。
よって、ここではPython 3.7以降を推奨しておきます。
最も重要なシステム要件としては、GPU版のPyTorchが必要となります。
これに関してもバージョン指定はありません。
SwinIRの開発自体は、PyTorch 1.8.0で行われているようです。
このような場合は、バージョンを合わせた方が安心できます。
1.8系であれば、現状でもまだ公式からインストール可能です。
ただ、最新版となる1.12系でもSwinIRが動くことは確認できています。
検証では、次の記事通りにインストールしたGPU版PyTorch 1.12.1を利用しています。
以上、SwinIRのシステム要件を説明しました。
次は、SwinIRのインストールを説明します。
SwinIRのインストール
検証は、次のバージョンのPythonで行います。
> python -V Python 3.10.4
SwinIRは、Conda仮想環境が想定されています。
そのためのYAMLファイルが以下です。
cog.yaml
build: gpu: true python_version: "3.8" system_packages: - "libgl1-mesa-glx" - "libglib2.0-0" python_packages: - "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" predict: "predict.py:Predictor"
しかし、ここではcondaコマンドは用いません。
仮想環境が必要であれば、venvを使って構築しましょう。
まずは、SwinIRのソースを取得しましょう。
次のコマンドでプロジェクト全体を取得します。
git clone https://github.com/JingyunLiang/SwinIR.git
Windowsの場合でも、gitコマンドを使える方が何かと便利です。
あとは、必要なパッケージをインストールしていきます。
その前に、現状のインストール済みパッケージを確認しておきます。
> pip list Package Version ------------------ ------------ certifi 2022.6.15 charset-normalizer 2.1.1 idna 3.3 numpy 1.23.2 Pillow 9.2.0 pip 22.2.2 requests 2.28.1 setuptools 65.1.0 torch 1.12.1+cu113 torchaudio 0.12.1+cu113 torchvision 0.13.1+cu113 typing_extensions 4.3.0 urllib3 1.26.11 wheel 0.36.2
GPU版のPyTorchがインストール済みの状態です。
追加で必要となるパッケージは、以下となります。
- "opencv-python==4.4.0.46" - "tqdm==4.62.2" - "timm==0.4.12" - "ipython==7.19.0"
それぞれのパッケージをインストールします。
ただ、その前にpipとsetuptoolsの更新を実施しておきます。
python -m pip install --upgrade pip setuptools
バージョンを指定せずに、最新のモノをインストールしてOKです。
pip install opencv-python tqdm timm ipython
この時点でのインストール済みパッケージの状況を確認しておきます。
> pip list Package Version ------------------ ------------ asttokens 2.0.8 backcall 0.2.0 certifi 2022.6.15 charset-normalizer 2.1.1 colorama 0.4.5 decorator 5.1.1 executing 0.10.0 idna 3.3 ipython 8.4.0 jedi 0.18.1 matplotlib-inline 0.1.6 numpy 1.23.2 opencv-python 4.6.0.66 parso 0.8.3 pickleshare 0.7.5 Pillow 9.2.0 pip 22.2.2 prompt-toolkit 3.0.30 pure-eval 0.2.2 Pygments 2.13.0 requests 2.28.1 setuptools 65.1.0 six 1.16.0 stack-data 0.4.0 timm 0.6.7 torch 1.12.1+cu113 torchaudio 0.12.1+cu113 torchvision 0.13.1+cu113 tqdm 4.64.0 traitlets 5.3.0 typing_extensions 4.3.0 urllib3 1.26.11 wcwidth 0.2.5 wheel 0.36.2
結果的に、SwinIRはこれだけのパッケージに依存しています。
やはり、SwinIRはPython仮想環境の利用をオススメします。
以上、SwinIRのインストールを説明しました。
次は、SwinIRの動作確認を説明します。
SwinIRの動作確認
SwinIRの動作確認を行います。
まずは、ダウンロードしたディレクトリに移動します。
cd SwinIR
移動したら、次のコマンドを実行します。
処理内容は、指定したディレクトリにある画像を高画質化するというモノです。
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
高画質化を実施する対象画像は、「testsets/RealSRSet+5images」にあります。
これは、コマンドにおいて「–folder_lq」で指定しています。
上記コマンドを実行すると、しばらくして次のメッセージが表示されます。
downloading model model_zoo/swinir/003_realSR_BSRGAN_DFOWMFC_s64w8_SwinIR-L_x4_GAN.pth
初回実行時は、指定したモデルデータ(ptn)をダウンロードします。
そのあと、次のような表示が続きます。
Testing 0 00003 Testing 1 0014 Testing 2 0030 Testing 3 ADE_val_00000114 Testing 4 Lincoln Testing 5 OST_009 Testing 6 building Testing 7 butterfly Testing 8 butterfly2 Testing 9 chip Testing 10 comic1 Testing 11 comic2 Testing 12 comic3 Testing 13 computer Testing 14 dog Testing 15 dped_crop00061 Testing 16 foreman Testing 17 frog Testing 18 oldphoto2 Testing 19 oldphoto3 Testing 20 oldphoto6 Testing 21 painting Testing 22 pattern Testing 23 ppt3 Testing 24 tiger
全部で25枚の画像が、高画質化されました。
高画質化された画像は、「results/swinir_real_sr_x4_large」に保存されています。
処理前と処理後の一覧画像を比較して、どう感じますか?
一覧で見ても、処理後の画像の方が綺麗に見えます。
では、結果をピックアップして確認してみましょう。
0030.jpg(220 x 220)
220 x 220のサイズの画像を4倍のサイズに拡大した結果が、次の画像です。
もちろん、高画質化しています。
0030_SwinIR.png(880 x 880)
4倍のサイズに拡大しても、全く画質は劣化していません。
むしろ、オリジナル画像よりもさらに綺麗です。
高画質化の効果をより明確にするために、処理前後の画像を同じサイズにして並べてみました。
オリジナル画像のサイズを単純に4倍に拡大しています。
比較画像を見れば、SwinIRの効果をより明確に確認できますね。
最後にもう一つだけ結果を確認しておきます。
building.png(160 x 160)
building_SwinIR.png(640 x 640)
ノイズが除去されていることを確認できます。
画像の高画質化、拡大、ノイズ除去までをSwinIRで実現できます。
以上、SwinIRの動作確認を説明しました。