##データセット
safebooruのサイトから1500枚ほどの画像をダウンロードしてきた。
さらにデータの数を増やすために、一枚の画像を四分割+元の画像でデータ量を5倍に増やした。これらの画像すべてを、32x32px, 64x64px, 128x128px,にリサイズしてデータセットの準備は完了した。
##ニューラルネットワーク
今回、ネットワークには https://arxiv.org/abs/1609.04802 こちらを参考にしResNet+pixel shufllerを取り入れた。全体の構造は以下の画像とほぼ同じである。
kerasでの実装のためpytorchのようにpixel_shufller層が用意されていなかったので、ReshapeとPermuteで作成した。
x = Reshape((self.imageSize, self.imageSize, r, r, self.generatorFilters))(x)
x = Permute((1, 3, 2, 4, 5))(x)
x = Reshape((self.imageSize2x, self.imageSize2x, self.generatorFilters))(x)
##学習結果
学習はパラメータは
loss='mean_squared_error',
optimizer=Adam(lr=8e-4, beta_1=0.5)
64バッチで30epoch学習した。
入力サイズ64x64 出力サイズ128x128
入力サイズ32x32 出力サイズ128x128
32x32では細かい部分の造形が再現できておらず、50epochまで学習したが全く変わらかったので、おそらく入力画像の情報量が少なすぎるためだと思われる。一方64x64では背景などの細かい部分はぼやけてはいるもののかなり高い精度で再現できている。
SRResNetはSRGANと違いパラメーターの調整が難しくないので、手軽に超解像に挑戦できたと思う。
リポジトリ https://github.com/AokiMasataka/-Super-resolution