画像系の機械学習の分野の1つである「超解像」について初心者向けに紹介します。
今回はReal-ESRGANの公式チュートリアルに沿って実装する方法を紹介します。
実際に解像度の低い画像を高解像度化してみましょう。
Google colabを使用して簡単に実装することができますので、ぜひ最後までご覧ください。
Google Colabの使い方はこちら
今回の目標
・超解像の概要を学ぶ
・Real-ESRGANの実装方法を学ぶ
・オリジナル画像を高解像度化してみる
超解像とは
超解像(Super-Resolution)とは、画像や動画の解像度を擬似的に上げる技術のことです。
解像度が低い画像の高周波成分を予測・復元して、解像度を高めています。
まずは以下の画像の例をご覧ください。
解像度の低い画像が擬似的に高解像度の画像になっていることがわかります。
なお、動画もありますので、よかったらご覧ください。
超解像の技術
超解像技術は、単一フレーム超解像と複数フレーム超解像に大別できます。
単一フレーム超解像は周辺画素などから補完を行い、機械学習やデータベースを利用して予測することで、1枚の低解像度画像から解像度を高める手法です。
複数フレーム超解像は互いに位置が異なる複数枚の低解像度画像を位置合わせして、再構成することで解像度を高める技術です。
他には時間の異なる複数の画像を組み合わせたり、異なる装置から複数の画像を取得して、そこから解像度を上げる技術などもあります。
Real-ESRGANとは
今回紹介するReal-ESRGANは2018年に発表されたESRGANの進化版で、2021年7月に発表されています。
普通の画像だけでなく、アニメ画像及びアニメ動画にも対応したモデルが用意されているのが特徴です。
詳細はリンク先を参照してください。
なお、より高性能なSwinIRによる超解像も紹介しておりますので、合わせてご覧ください。
Real-ESRGANの導入
それでは早速、Real-ESRGANを使用するための準備をしていきましょう。
ここからはGoogle 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画像は細かい箇所までハッキリ見えてますね。
まとめ
最後までご覧いただきありがとうございました。
今回はReal-ESRGANによる超解像技術を紹介しました。
超解像技術によって、昔撮った解像度の低い画像も高解像度にすることができるようになります。
Real-ESRGANではアニメ画像に対応していることから、昔のアニメも高解像度化も実現するかもしれませんね。
画像処理に関する他の技術についても紹介していますので、ぜひ合わせてご覧ください。