#1.はじめに
皆さんは、低解像度の画像を高解像度の画像に変換したいと思ったことはありませんか。
2020年6月デューク大は従来8倍が最大であった高解像度変換を64倍にまで引き上げる PULSE という手法を発表しました。これにより、目元も口元もハッキリしないモザイクの様な顔画像が毛穴や質感が分かるくらいの高画質に変換できます。
今回は、Githubで公開されているソースコードを試してみた結果をご紹介します。なお、コードは Google Colab で作成し Github に上げてありますので、自分でやってみたい方は、この「リンク」をクリックし表示されたシートの先頭にある**「Colab on Web」**ボタンをクリックすると動かせます。
#2.アルゴリズム
アルゴリズムは、学習済みGANモデルを使って**「ある高解像度画像から低解像度変換した画像」を生成し、これと「低解像度の画像」との差をロス**として、ロスを最小化する様な高解像度画像を求めるというものです。
気になるのは、学習済みGANモデルを使っているので、学習に使った画像は上手く高解像度変換できると思いますが、学習に使っていない画像も上手く行くのかということです。
ということで今回は、色々な顔画像からわざと低解像度画像(32×32ピクセル)を作り、これをどの程度正確に高解像度変換(1024×1024ピクセル)できるのか見て行きたいと思います。最適化回数(steps)は1000とします。
#3.学習済みの顔画像(FFHQデータセット)
PULSEで使われている学習済みGANモデルはStyleGANです。従って、学習にはFFHQデータセットが使われており、この顔画像は少なくとも上手く行くはずです。それでは、FFHQデータセットから3つの画像を取り出してやってみます。
Low Resolution は低解像度画像(32×32)、High Resolution はそれを高解像度変換した画像(1024×1024)、Real はLow Resolution を作成した元画像です。従って、**High Resolution が Real にどれだけ近づいているかで高解像度変換の精度が分かります。**当たり前ですが学習済み画像では、問題なく高解像度変換できています。
#4.未学習の顔画像(外国人)
それでは、未学習の顔画像(外国人)ではどうでしょうか。Web検索で取得した3人の外国人の顔画像でやってみます。
ほほー、外国人なら学習に使っていない顔画像でも、上手く行くようです。
#5.未学習の顔画像(日本人)
それでは、未学習の顔画像(日本人)ではどうでしょうか。Web検索で取得した3人の日本人の顔画像でやってみます。確か、FFHQデータセットには、あまり日本人は居なかったようなので、どうなるでしょうか。
思ったらより良い出来です。High Resolution の方が Real に比べて、目がちょっと違うのと顔のシワが多い様に思いますが、まあまあではないでしょうか。最適化回数(steps)を増やすと、もう少し改善されるようです。
#6.現実場面を想定したテスト
さて、今までは高画質画像をわざと32×32ピクセルに縮小して、それを高画質画像に変換するテストを行って来ましたが、現実場面でやりたいのは初めから低画質である画像を高画質に変換したいわけです。ここでは、そのテストをやってみます。
元乃木坂46の初代キャプテン桜井玲香のWekipediaには、冒頭にこんな画像があります。
画像サイズは 190×253ピクセルで、顔の部分だけだと90×90ピクセルくらいでしょうか。それでは、この画像から顔画像を切り取り高画質変換してみます。最適化回数(steps)はガッツリ6000でやってみます。
おっ! これ、結構いけてると思いませんか。
#7.まとめ
予想を超える高画質変換が可能なことに驚きました。考えてみれば、32×32ピクセルの画像は、1024次元のベクトルと同じ情報量を持っているわけで、そこには高画質画像を引き出すためのポテンシャルは十分あるわけですね。
それにしても、デューク大面白いことを考えました。従来の方法とは全く違うPULSEという手法、興味深いです。