小さな低解像度の画像から大きくてキレイな高解像度の画像に復元することは、小さくして劣化された画像には復元するために必要な情報が足りないので、不可能なことです。

コンピュータサイエンスでは、低解像度の画像から高解像度の画像に変換することを「超解像」と呼びます。

本記事では、Googleが開発した機械学習を使って爆速でキレイな画像を生成する技術「RAISR」を紹介し、

  • RAISRとは何か
  • RAISRの応用とメリット
  • RAISRの仕組み

を解説します。

RAISRとは

FacebookやInstagramのようなSNSサービスでは、一般の人が趣味や生活の写真をアップロードして友達にシェアしています。

Instagramの1日のアクティブユーザー数は、3億人を超えるというデータもあります。[1]

美しい写真で、オシャレな印象を醸し出す写真をシェアすることが出来れば、素晴らしい思い出だったのだと余韻に浸ることが出来るのでしょう。

一方で、データの通信が遅く、ローディング時間が長くなってしまうと、ユーザーの不満は限界に達します。

Googleは自社が運営するSNSサービス「Google+」のローディング時間を小さくするために通信量を劇的に下げつつ、美しい写真を見ることが出来るように「RAISR」という超解像技術を開発しました。

以下の画像のように、小さな画像から大きな画像に復元することで、本来100kbの元画像をたったの25kbのデータに圧縮しながら、同様の体験を提供することが出来ています。

RAISR [3] Enhance! RAISR Sharp Images with Machine Learning

これまでも、画像を拡大する技術は、フォトショップ等のペイントソフトでも体験したことがあるかと思います。そういったソフトでは、「Bilinear」といった周辺の2×2の画素値との距離を補完するようにピクセルを埋める手法や「Bicubic」という周辺の4×4のピクセルを使って空間的に補完する手法を使って画像を拡大します。

また、従来手法の優れた超解像技術では「A+」といった手法が高速で有用な手法でした。

以下の画像は、拡大技術のBicubicと超解像のA+を比較した画像です。

Bicubic-A+ [2] RAISR: Rapid and Accurate Image Super Resolution

Bicubicの手法では、少しぼやけて見えると思います。A+の方が自然に見えるのではないでしょうか。 ここで、Googleが開発したRAISRとの比較をしてみましょう。先程の画像にRAISRも追加した画像が以下になります。

Bicubic A+ RAISR [2] RAISR: Rapid and Accurate Image Super Resolution

A+と同等のクオリティで拡大できているのが分かるかと思います。RAISRの凄さは、処理速度の速さです。モバイル端末のGPUを利用して、秒速2億画素以上のピクセルを処理することが出来ます。

この速度であれば、モバイルデバイス上の拡大をするジェスチャーである「ピンチ」の際にリアルタイムで処理することが可能になります。以下のグラフが、処理性能と速度をグラフ可したものです。

RAISR比較 [2] RAISR: Rapid and Accurate Image Super Resolution

縦軸のPSNRは、画質の指標で値が大きければ大きいほどほど再現品質が高いと言えます。横軸が画像1枚あたりの平均処理時間で、左に行けば行くほど高速に処理していることになります。

RAISRは超解像の品質を保ちながら、圧倒的に高速な処理速度で実行できるアルゴリズムと言えるでしょう。

超解像の仕組み

では、RAISRはどのようにして動作しているのでしょうか?超解像技術の中では、かなり高精度の部類である「SRCNN」という手法や「Deep Recursive Convolutional Network」等の技術はディープラーニングを応用しています。

では、RAISRもディープラーニングでしょうか?

RAISRは違います。RAISRでは、実行時の計算コストをギリギリまで小さくするために、ハッシュテーブルを応用します。

以下が、RAISRの学習時のアルゴリズムです。

RAISRの訓練時 [2] RAISR: Rapid and Accurate Image Super Resolution

RAISRの超解像の手法は、高速なハッシュテーブルによって選択された画像パッチを適用することです。この数種類の画像パッチをデータセットから学習します。

一方で、事前に学習されたパッチを適用するだけでは、画像をいびつな形に変形してしまうことが起こります。それを防ぐために、実行時では、以下の緑色の部分で、後処理として元の補完画像と重み付けした結果を足し合わせた結果を出力します。

RAISRの実行時 [2] RAISR: Rapid and Accurate Image Super Resolution

こうして、計算された画像は非常に綺麗に拡大されます。

Bilinear等との比較 [2] RAISR: Rapid and Accurate Image Super Resolution

これほどまで高精細に拡大することが出来れば、小さな画像のやり取りしても、ユーザーは大きく高精細な画像を見ているのだと感じることでしょう。

まとめ

結論としては、RAISRを導入することで、

  • ユーザー体験を向上させることができる
  • 通信量を下げることで、サーバーの負担を軽くすることができる

といったメリットがあります。

また、安価な補完方法と、ハッシュテーブル・後処理の工夫をすることで、実行時の計算コストを下げることが出来るのです。

実装例などGitHubに上がっているものもあるので、更に詳しく知りたい方は試してみると面白いかもしれませんね。

参考

[1] 【最新版】2016年12月更新! 11のソーシャルメディア最新動向データまとめ
[2] RAISR: Rapid and Accurate Image Super Resolution
[3] Enhance! RAISR Sharp Images with Machine Learning