CNNを用いた超解像を試しました

この記事は 『CRESCO Advent Calendar 2018』21日目の記事です。

はじめまして。ディープラーニングに取り組んでいるシニア㊥です。本日は、CNNを用いた超解像について、触れてみたいと思います。

CNNの超解像て何?

4K、8K対応のテレビ放送が12月から開始されました。ラグビー・ワールドカップや東京オリンピックを超高画質な映像でテレビ観戦できると良いですね。

さて、画像処理では超解像と呼ばれる分野があります。画像を拡大する際、ボケやジャギーといった画像の劣化が生じてしまうことがありませんか。これは、元の画像に含まれる画素を利用した補完アルゴリズを使っているからです。そこで、補完ではなく元の画像に含まれない高周波成分を推定することで解像度を向上させる手法が生まれました。これを超解像と呼びます。

そのようななか、2014年にC.Dong氏(※1)らは畳み込みニューラルネットワーク(CNN)を用いた超解像を発表しました。Super-Resolution Convolution Neural Network(SRCNN)は、入力と出力の画像再現性をend-to-endで機械学習させるものです。これを機に、CNNを使った様々な超解像のモデルが発表されています。
※1:Image Super-Resolution Using Deep Convolutional Networks

試してみました

手を動かし試してみるのがエンジニアなので、難しい話はこれぐらいにして試しましょう。
最初に、所感をお伝えすると、SRCNNの実装と訓練はさほど難しくないと思います。理由は、①データの準備が簡単 ②ネットワークと学習がシンプル ③推定が簡単 だからです。一つひとつ触れていきたいと思います。なお、SRCNNによる超解像のイメージは次のとおりです。

① データの準備が簡単

SRCNNの考え方は、荒い画像(低解像の画像)から原画像(高解像の画像)に復元していきます。従って、データは原画像だけを用意して、学習用の低解像の画像、評価用の低解像の画像を先の原画像から作ります。低解像の画像は、サイズを縮小(平均値補間を使用)します。そして元のサーズに拡大(バイキュービック補間を使用)して低解像の画像をつくります。画像分類タスクの際に必要なアノテーションなどの準備作業は必要ありません。学習データも数十枚程度でよい結果が得られます。
参考:画像を低解像にするスクリプト(サンプル)は次のように簡単です。

② ネットワークと学習がシンプル

わたしはディープラーニングにKerasを使っています。Kerasを使えば、SRCNNのネットワーク定義はいたって簡単です。7行ほどのスクリプトでした。より良い性能が期待できると報告されているDeep Denoising Super Resolution CNN(DDSRCNN)でも20行程でした。ただし、気を付けなければいけないことが一つあります。学習中の精度の評価は、超解像では画質再現性の尺度にピーク信号対雑音比(PSNR:Peak Signal to Noise Ratio)を使います。この評価関数はKerasには用意されていないので、定義する必要があります。
参考:PSNR関数の定義

学習は、学習用の低解像の画像と原画像を用いてend-to-endで学習を行います。評価用の低解像の画像と原画像を使用して学習させることで、汎化性能をみていくのはCNNと同様です。
先のC.Dong氏らの論文にある91枚の画像を学習用データとし、他に14枚の画像を評価用データとしました。DDSRCNNで機械学習させたエポックに対するPSNRの変化は、右図のとおりです。PSNRはこの数値が高いほどよい品質です。(※2)GPUを利用しましたが、200エポックの学習は10分程度でした。なお、シンプルなSRCNNも試してみましたが、性能が少し劣るようでした。
※2:ウイキペディア「ピーク信号対雑音比」より
非可逆の画像およびビデオ圧縮におけるPSNRの標準的な値は30~50dBで、高いほうが画質がよい

③ 推定が簡単

ディープラーニングは、学習済みのモデルとその重みを利用し未知の画像に対する推定はお手ものです。手元にあった荒い画像(低解像)を、今回学習させたDDSRCNNで推定処理した画像(超解像)は以下のとおりです。処理時間は、パソコンで1秒もかかりませんでした。

      

【低解像:33.45dB】             【高解像:33.82dB】

最後に

今回、ディープラーニングを使った超解像の画像処理を試しました。超解像の専門家ではありませんが、そのようなエンジニアが比較的簡単に同技術を垣間見ることができました。ディープラーニングの凄いところは、対象技術(ここでは超解像度)に関する専門的な知識がなくとも、ディープラーニングがデータから超解像に関する特徴を導き出してくれるところだと思います。簡単にしかも迅速に。超解像にあたる他の方法との比較は知識がないためできませんが、これは「仕事に活かせる、使わねば」と思っています。
読んでいただき、ありがとうございました。寒い日が続きますが、お体を大切になさってください。