画像系の機械学習の分野の1つである「超解像」について初心者向けに紹介します。

今回はReal-ESRGANの公式チュートリアルに沿って実装する方法を紹介します。

実際に解像度の低い画像を高解像度化してみましょう。

Google colabを使用して簡単に実装することができますので、ぜひ最後までご覧ください。

Google Colabの使い方はこちら

今回の目標

・超解像の概要を学ぶ

・Real-ESRGANの実装方法を学ぶ

・オリジナル画像を高解像度化してみる

超解像とは

超解像(Super-Resolution)とは、画像や動画の解像度を擬似的に上げる技術のことです。

解像度が低い画像の高周波成分を予測・復元して、解像度を高めています。

まずは以下の画像の例をご覧ください。

元画像

超解像により高解像度になった画像

解像度の低い画像が擬似的に高解像度の画像になっていることがわかります。

なお、動画もありますので、よかったらご覧ください。

超解像の技術

超解像技術は、単一フレーム超解像と複数フレーム超解像に大別できます。

単一フレーム超解像は周辺画素などから補完を行い、機械学習やデータベースを利用して予測することで、1枚の低解像度画像から解像度を高める手法です。

複数フレーム超解像は互いに位置が異なる複数枚の低解像度画像を位置合わせして、再構成することで解像度を高める技術です。

他には時間の異なる複数の画像を組み合わせたり、異なる装置から複数の画像を取得して、そこから解像度を上げる技術などもあります。

Real-ESRGANとは

今回紹介するReal-ESRGANは2018年に発表されたESRGANの進化版で、2021年7月に発表されています。

普通の画像だけでなく、アニメ画像及びアニメ動画にも対応したモデルが用意されているのが特徴です。

詳細はリンク先を参照してください。

なお、より高性能なSwinIRによる超解像も紹介しておりますので、合わせてご覧ください。

【超解像】SwinIRを使って画像を高解像度化してみる

画像系の機械学習の分野の1つである「超解像」について紹介します。 今回はSwinIRの公式チュートリアルに沿って実装する方法を紹介します。 実際に解像度の低い画像を高解…

Real-ESRGANの導入

それでは早速、Real-ESRGANを使用するための準備をしていきましょう。

ここからはGoogle colabを使用して実装していきます。

なお、以下のボタンからコードをコピーして使用していただくことも可能です。

Open In Colab

まずはGPUを使用できるように設定をします。

「ランタイムのタイプを変更」→「ハードウェアアクセラレータ」をGPUに変更

from google.colab import drive
drive.mount('/content/drive')
%cd ./drive/MyDrive
!git clone https://github.com/xinntao/Real-ESRGAN.git
%cd Real-ESRGAN

次に必要なライブラリをインストールします。

!pip install basicsr
!pip install facexlib
!pip install gfpgan
!pip install -r requirements.txt
!python setup.py develop

これでReal-ESRGANを使用する準備が完了しました。

次に学習済モデルを用意します。

!wget https://github.com/xinntao/Real-ESRGAN/releases/download/v0.1.0/RealESRGAN_x4plus.pth -P experiments/pretrained_models

以上で準備が完了しました。

Real-ESRGANによる超解像

それでは早速チュートリアルを実行してみましょう。

先ほどダウンロードしたモデルを指定して、超解像を実装します。

# サンプル画像の超解像
!python inference_realesrgan.py -n RealESRGAN_x4plus -i inputs -o results

#サンプル画像は「/inputs」にある
#画像の出力先は「/results」

コードを実行すると、結果が「Real-ESRGAN/results」に保存されています。

とても簡単に超解像を実装することができました。

オリジナル画像で超解像

次はオリジナル画像で超解像を試していきましょう。

まずは「Real-ESRGAN/」に「inputs_self」というフォルダを作成して、画像をアップしましょう。

※フォルダ名は変えても問題ありません。

画像をアップしたら、以下のコードを実行します。

引数の内容は記載の通りです。

# オリジナル画像の超解像
!python inference_realesrgan.py -n RealESRGAN_x4plus -i inputs_self -o results_self -s 8

# -i オリジナル画像の入力先は「/inputs_self」
# -o 画像の出力先は「/results_self」
# -s 出力画像の倍率 -outscale 8(倍)

結果が「Real-ESRGAN/results_self」に保存されました。

オリジナル画像でも簡単に超解像ができましたね。

4Kサイズのオリジナル画像で超解像

最後に4Kサイズの画像に超解像を試してみましょう。

ここではこの画像を使用します。

※掲載の都合上、実際の画像を圧縮しています。

超解像をすることで、出力は16Kサイズの画像となります。

ところで、先ほど方法で実行するとメモリが不足してしまいます。

RealESRGANでは分割して超解像した後で、最後に画像を結合して1枚の画像として出力する機能があります。

これによりメモリ不足になることなく、16Kサイズの画像を作成することができます。

以下のコートでは「-t 512」という引数により、3840×2140の画像を512×512の画像に分割して処理を実行します。

# オリジナル画像の超解像(大きい画像の場合)
!python inference_realesrgan.py -n RealESRGAN_x4plus -i inputs4k_self -o results_self -s 4 -t 512

# -i オリジナル画像の入力先は「/inputs4k_self」
# -o 画像の出力先は「/results_self」
# -s 出力画像の倍率 -outscale 4(倍)
# -t 分割時の幅

結果が「Real-ESRGAN/results_self」に保存されました。

4Kサイズのような大きなサイズの画像でも簡単に超解像ができましたね。

参考に画像の一部分で比較してみましょう。

16K画像は細かい箇所までハッキリ見えてますね。

処理前(4K)
処理後(16K)

まとめ

最後までご覧いただきありがとうございました。

今回はReal-ESRGANによる超解像技術を紹介しました。

超解像技術によって、昔撮った解像度の低い画像も高解像度にすることができるようになります。

Real-ESRGANではアニメ画像に対応していることから、昔のアニメも高解像度化も実現するかもしれませんね。

画像処理に関する他の技術についても紹介していますので、ぜひ合わせてご覧ください。

画像生成・超解像・画像修復・アニメーション

Stable Diffusion(画像生成) 画像生成として話題のStable Diffusionを紹介しています。 Super Resolution(超解像) 最新の実用的な超解像を紹介します。 画像や動画を…

コメントを残す