【Python】AI高画質化ツールSwinIRのインストール

【Python】AI高画質化ツールSwinIRのインストール 機械学習

「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.62016年12月23日2021年12月23日
3.72018年6月27日2023年6月27日
3.82019年10月14日2024年10月
3.92020年10月5日2025年10月
3.102021年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の動作確認を説明しました。

タイトルとURLをコピーしました