2018/11/16

天気予報システムを作る(Conv-LSTMでプロトタイプ編)

こんにちは

突然ですが突然の雨って悲しいですよね.
「10分後に雨が降るよ」って誰か教えてくれればいいのに...

そういうときにウルトラ便利な「ないんたん」というシステムが@imosさんによって公開されてました.が...

ないんたんの天気予報実験停止のお知らせ
https://imoz.jp/note/ninetan.html

かなしい...

どうしてもこういう物がほしいので研究の待ち時間(本当はある訳ない)に作ってみることにしました


手法


天気予報といっても1時間ぐらいあとのものがわかればいいので天気予報とは言わないのかもしれない.

タスク的には 画像の列 -> スカラー(降水量)の列 を予測できればいいんですが
一応機械学習の研究室にいるので確率モデルでやります.

ちなみにないんたんはオプティカルフローを使って雨雲の移動を予測しているらしいですね.

今回はないんたんのように 画像の列 -> 画像の列 を予測するモデルを学習させます.
とりあえず今日はベースラインということで Convolutional LSTM を適当に何層か重ねたものを使ってみました.
ConvLSTM はLSTMの入力が3次元テンソルで,線形変換が代わりにConvolutionになってるってやつです.詳しくは他の兄貴のサイト見てください

大学の研究で変なLSTMを実装しまくっていたのでConvLSTMはすぐ実装できました.
これを3層重ねます.今日はそれだけ.




使ったフレームワークは tensorflow ですが,そのモジュールの tf.eager で学習まわりとか実装しました.
とはいってもレイヤー,モデルの単位で tf.keras.Model を継承することが推奨されているのでここだけ見ても eager 感ないですね.
Eager execution は tensorflow r2.0 からは標準になるらしいですね.Pytorch がすごい勢いでシェアを伸ばしてるので,tensorflow も define-by-run にシフトしていくみたい.
実際便利なのでみんなも tf.eager 使ってみよう.

実験


トレーニングに2013年6月,テストに2014年6月の雨雲画像でやってます.
データは yahoo japan 様様.

本当は分解能もっとほしいんだけど30分刻みで2時間分入力 -> 3時間分予測という感じで学習させました
1080Tiで2時間しか学習させてないです.



青がtrain,オレンジがtestのloss
データ小さすぎて汎化終わってる感じがあるけど実験なので気にしない

出てきたものがこんな感じ.

prediction


ground truth


微妙か〜〜〜?と思ったけど2時間後ぐらいならだいたい使い物になりそうな感じがする.
雨雲消えちゃう方向に予測しすぎな感じがする.
もうちょっと工夫したらまともなの出るんちゃうかな〜〜〜という所感.

おま○け


ConvLSTMって画像内の位置わかんねーよなと思ったのでそのへんなんか工夫がいりそう.
雨雲は多分山とかそういうのに影響されるので.
簡単に思いつくのは入力を1ch分増やして地図でも入力しとくというものと,SegNetとかみたいに1回小さくしてもう1回大きくするっていうのだけど...

画像系の詳しい人どうやったらいいのか教えてほしい.


降水の短期予測はどうしても自分がほしいので修論書いたら続きやります(いつになるんや)


0 件のコメント: