「Python」と「SwinIR」を使って画像の高画質化&拡大を自動的にする方法

2024年3月8日ITIT

WEB制作・デザインをしていると画像を使う時があります。
メインビジュアルなど目立たせたい時にキレイな画像を使いたいですよね。

しかし以下のような問題が発生する時があります。

①使いたい画像が荒い(解像度が低い)
②使いたい画像が小さすぎる

画像が荒いと使いたいとおもいませんし、小さい画像を無理やり拡大して画像が荒くなってしまうこともあります。

高画質化・拡大する無料ツールはあるのですが

・回数制限がある
・高画質しかできない
・画像の拡大しかできない

など制限があったりします。

そこで今回は…

「Python」と「SwinIR」を使って画像の高画質化&拡大を自動的にする方法

についてお話します。

※※ 追記※※
今回「Python」についてのインストール方法・環境構築には触れていません。
「Python」の開発環境を整えてからご活用ください。

■Pythonのダウンロードはこちらから

開発環境

今回の実装を行った開発環境が以下になります。

・Windows10

・Visual Studio Code

・Python 3.10.7

またライブラリをインストールする必要があるので、「仮想環境」を使っています。
ライブラリによっては衝突を起こす可能性があるので、「開発の種類」や「プロジェクト」によって開発環境を分けたほうがいいとおもいます。

Pythonの仮想環境の作り方は以下の「公式ドキュメント」をご参照ください。

仮想環境
venv — 仮想環境の作成

SwinIRとは??

「SwinIR」はコーネル大学の論文にて公開されています。
「Swin Transformer」を使用した画像復元です。

【参考文献:SwinIR: Image Restoration Using Swin Transformer】

画像の復元は、低品質の画像 (縮小された画像、ノイズの多い画像、圧縮された画像など) から高品質の画像を復元することを目的とした、長年にわたる低レベルの視覚問題です。最先端の画像復元方法は畳み込みニューラル ネットワークに基づいていますが、高レベルの視覚タスクで印象的なパフォーマンスを示すトランスフォーマーを使用した試みはほとんどありません。この論文では、Swin Transformer に基づく画像復元のための強力なベースライン モデル SwinIR を提案します。SwinIR は、浅い特徴抽出、深い特徴抽出、高品質の画像再構成の 3 つの部分で構成されています。特に、深層特徴抽出モジュールは、いくつかの残余の Swin Transformer ブロック (RSTB) で構成されており、それぞれのブロックには残余の接続と共にいくつかの Swin Transformer レイヤーがあります。3 つの代表的なタスクについて実験を行います: 画像の超解像 (古典的、軽量、実世界の画像の超​​解像を含む)、画像のノイズ除去 (グレースケールおよびカラー画像のノイズ除去を含む)、および JPEG 圧縮アーティファクトの低減。実験結果は、SwinIR がさまざまなタスクで最先端の方法よりも最大 0.14 ~ 0.45dB 優れている一方で、パラメーターの総数を最大 67% 削減できることを示しています。

https://arxiv.org/abs/2108.10257


簡単にお伝えすると「超解像(Super-Resolution)」と言われる技術です。
画像や動画の解像度を超解像化して出力させます。

「Swin Transformer」について知りたいは以下に参考文献があるのでそちらを参照してください。

【参考文献:Swin Transformer: Hierarchical Vision Transformer using Shifted Windows】
https://openaccess.thecvf.com/content/ICCV2021/papers/Liu_Swin_Transformer_Hierarchical_Vision_Transformer_Using_Shifted_Windows_ICCV_2021_paper.pdf

「Python」と「SwinIR」を使った実装方法

実装を行っていきます。

今回の実装の手順は以下になります。

①「SwinIR」をGitHubからインストール、もしくはクローンする
②「ライブラリ」・「パッケージ」をインストールする
③「SwinIR」を実行させる
④「処理前」・「処理後」の画像を比較

では順番におこなっていきましょう!!

「SwinIR」をGitHubからダウンロード、もしくはクローンする

「SwinIR」をGitHubからダウンロード、もしくはクローンします。
GitHubのURLは以下になります。

【GitHub】

GitHubにアクセスすると以下の画面になります。

SwinIRのGitHub

①「Code」をクリックする
②「Local」タブの中に「Download ZIP」があるので、クリックしてダウンロードしてください。

Gitが扱える人は以下のURLからクローンをしてもだいじょうぶです。
↓ ↓ ↓
https://github.com/JingyunLiang/SwinIR.git

「SwinIR」というフォルダができれば成功です。

SwinIRのフォルダ

SwinIRの中身は以下のようになっています。

SwinIRの中身

「ライブラリ」・「パッケージ」をインストールする

Pythonの「pip」を使って以下の必要な「ライブラリ」・「パッケージ」をインストールしていきます。

①「pip」の更新をします。

python.exe -m pip install --upgrade pip

②「timm」をインストールします。

pip install timm

③「opencv-python」 をインストールします。

pip install opencv-python
インストール後のパッケージ・ライブラリ一覧

「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」にある画像を処理して、「results/swinir_real_sr_x4_large」へ出力させます。

※※ 注意 ※※
初期で入っている画像を全て処理すると、完了までに数十分かかります。
お試しで行いたいかたは画像を数枚にしてから実行してください。

③コマンドが実行されて、一定時間が経過すると以下のような画面になります。

画像処理を行っている時の表示

「00003」「0014」「Lincoln」などはファイル名になります。
処理が全て終えると、再びディレクトリが表示されます。

画像処理完了後

「処理前」・「処理後」の画像を比較

SwinIRで画像処理を行った画像の「処理前」・「処理後」で実際どうなったのか比較してみます。

・その①
【処理前】

【処理後】

・その②
【処理前】

【処理後】

・その
【処理前】

【処理後】

「処理前」・「処理後」の画像の大きさを同じにして比べてみました。
左側が「処理前の画像」、右側が「処理後の画像」になります。

元の画像がキレイだとはっきり高画質になったかわからないかもしれませんが、よく見ると細かい部分で高画質になっています。

考察

画像の高画質化&拡大の処理は、概ねうまくいく結果となりました。
しかし完璧ではない点もいくつかわかりました。

①使う画像によってはエラーを出力する

以下は著作権フリーのサイトからダウンロードした画像です。

こちらを高画質化をしようと試みたところメモリのエラーを出力しました。
↓↓
DefaultCPUAllocator: not enough memory: you tried to allocate 1621114880 bytes.

Pythonのメモリのエラー

最初から画像が大きく、高画質な画像については処理ができない可能性があります。
実際処理を実行したところPCの動きが鈍くなりました。

処理を行う際は最初の「画像の大きさ」と「解像度」を一度確認してから実行するといいとおもわれます。

2023年1月22日時点で検証したところ、画像のサイズは500~900px前後だとうまく処理をしてくれます。

②画像によっては処理が完了するまでに時間がかかる

こちらの画像処理は時間がかかりました。
おそらく10分前後は処理に時間がかかっているとおもいます。

元々高画質な画像を使うと時間がかかってしまうとおもいます。
また色彩についても関係があるとおもいますので、これは今後の課題にもなりそうです。

さいごに

いかがだったでしょうか??
最近ではAIを使ったサービスがいろいろ出てきています。
それに対して脅威を感じるのではなく、共存や活かす方向に考えるのが人間の本当の真価だとおもいます。

更に技術力を高めて、より価値が高いモノを提供できるように励んでいきます。


👑ごった煮ブログ人気記事 TOP3👑

1位

2位

3位

Posted by だいすけ