2016/4/18~4/24
SRCNN実装
勉強だけでは実力は身につかないので、実践して見ようという事で、waifu2xで資料があることからSRCNNをTheanoを用いて自分で実装してみることに。
*このプロジェクトはtheanonSRとしてgithubで公開済み。
予定:黒字、実際:赤字
- Model のSave, Load機能を実装する。
→ OK - jsonで管理できるように。
→ OK - ログをファイルにセーブ
→ OK print関数がそのまま使える。 - YCbCrでのYのみ使う簡単な方(cf: RGB3色でトレーニング)で、アプリ完成させる。
→ OK - TrainingにMomentumを実装、試す。
→ OK、ただしあまりいい効果が見られなかったので、次の方法を試したい。 - ADAMで試す。
→ OK。
学習率の適応方法・調整方法
調べてみると、いろいろあるよう。
その中でも最新で提案されているAdamが、MomentumとAdaGradのコンセプトを取り入れていそうだったのでこれを実装してみたいと思う。→実装してみたら、収束も普通より早いし、極小値も普通のより低い値まで行ったのでかなりよさそう。なぜこうなるのかの原理が少し理解できていないけど、、、。
データの収集
Places2 の写真データ使用していたけど品質が良くないので、他のを探したい。
そこで、Pexelから写真一括取得してトレーニングしたい。目標は5000写真。
例えばこんなURLが取れる
- https://static.pexels.com/photos/27452/pexels-photo-27452-portrait.jpg
- https://static.pexels.com/photos/27452/pexels-photo-27452-medium.jpg
-mediumを取ればオリジナル画像が得られる。
Pexelの自動写真ダウンロードがしたい。infinite scroll タイプなので、どうやって写真データ取得できるか?Chromeでブレークポイント張って調べた結果
https://www.pexels.com/?format=js&page=1
このURLでpage部分変えていけば情報取得できそう。→OK、結果Pexelから7000写真取得。総サイズも400MBで大きすぎずいい感じ。これで本番トレーニングしたいと思う。
評価関数・ロス関数・誤差関数
SRCNN元論文で使われていたPSNRという評価関数は結局MSEと同じ誤差を計算している。そのままMSE使えばOKという事がわかった。