広島大学で社会基盤(土木)を専攻している3年生です。
現在は1年間休学して建設系のIT企業でインターンをしています。
#GANとは
Generative Advarsarial Networksの略で日本語では敵対的生成ネットワークです。
教師なし学習の一つであり「本物らしさ」を学習することにより高品質なデータ生成を行う技術です。
例として上記の画像をあげさせていただきました。
このようにシマウマを馬の模様に変換したりなど画像を高い精度で生成していることがわかります。
#超解像とは
超解像とは簡潔に言うと解像度の低い画像の解像度を保管する技術です。
上の例を見てもらうと解像度が低く、ぼやけた人の顔の画像から解像度が高く、はっきりした画像が生成されていることがわかります。
#今回使用するSRGANとは
超解像のGANモデルの一つで2017年に論文が発表されました。
内容を簡単に説明します。
学習は以下の手順で行われます。
1.使用するオリジナル画像の縦横を1/4にして面積が1/16である画像を作成
2.Genetator(画像生成器)でオリジナル画像と同じサイズの画像を生成
3.生成された画像とオリジナル画像の損失を計算してバックプロパゲーション
4.Discriminatorで生成された画像かオリジナル画像かを分類して損失を計算しバックプロパゲーション
5.繰り返し
が大まかな処理の内容です。
GenetatorとDiscriminatorのモデルは以下のようになっています。
Generatorは解像度が低い画像(サイズを小さくすることで情報が失われている画像)から解像度が高い画像を生成するネットワークです。
Discriminatorはオリジナルの画像か生成された画像かを分類するネットワークです。
上記の手順でバッチサイズごとに交互に学習を行うことで高品質な画像生成を行っています。
#今回のデータセット
今回使用している画像はkaggleで公開されている衛星写真のデータセットです。
画像のリンク
#学習経過と結果
学習経過を可視化した画像
左が入力した画像で右が生成された画像です。
上から学習が進んでいき高品質が画像が生成されていることがわかります。
最終的な学習結果を載せた画像がこちらです。
左が入力した画像、真ん中が生成された画像、右がオリジナル画像です。
200epoch回した画像ですが解像度は上がっているものの少し粗さが残る結果となりました。
#実装コード
このGithubのリンクを参考に実装しました。
自分が実装したコードはこちらのGithubのリンクです。
このディレクトリに自分が使用したデータセット、または画像のみが入っているファイルを追加してパスをdataset_name入力してください。
上げているjupyter notebookでは簡単に実行できるようにするために20epochまでにしているのでお好みで設定して学習してみてください。