deep learning with foss4g

39
株株株株株株株株株株株株株株株株 株株 株株 Deep Learning with FOSS4G FOSS4G 2016 Tokyo

Upload: ryousuke-wayama

Post on 21-Jan-2017

688 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Deep Learning with FOSS4G

株式会社ノーザンシステムサービス中洞 友希

Deep Learning with FOSS4G

FOSS4G 2016 Tokyo

Page 2: Deep Learning with FOSS4G

自己紹介

氏名:中洞 友希会社: ( 株 ) ノーザンシステムサービス   入社 4 年目

地図やドローンを使ったりした可視化の研究開発をしています。

色々面白いものを置いてあるので、興味がある方は是非当社までお越しください!

Page 3: Deep Learning with FOSS4G

アーカイブ= これまでを振り返り, そしてこれからに伝えていく

今回のテーマ

Page 4: Deep Learning with FOSS4G

弊社での Deep Learning×GIS の開発事例

古地図の自動分類・古地図の地図記号から識別し、土地利用の領域ごとに色分けして分類するニューラルネットワークの生成

・古地図と現在の地図を重ねることで、液状化などのリスクがある地域がわかるかもしれない

農研機構の某 I 氏とのご縁により一緒にお仕事させて頂いています。

Page 5: Deep Learning with FOSS4G

古地図の自動分類

・畳み込みニューラルネットワーク( CNN )で実装

・ Google の機械学習ライブラリTensorFlow を使用

・ハイパースペクトルの航空写真から土地を分類するプログラムをもとに作成(https://github.com/KGPML/Hyperspectral)

水田や市街地といった特徴がわかりやすいところは精度が良さそう。畑又は空地といったほぼ空白の部分は難しそう。

当初の予想

水田

市街地

畑又は空地

Page 6: Deep Learning with FOSS4G

古地図の自動分類

水田

市街地

針葉樹林

入力画像 正解画像 分類結果

結果

ほぼ予想通り。空白部分が多く、地図記号が均一ではない針葉樹林なども精度が悪い

畑又は空地

Page 7: Deep Learning with FOSS4G

古地図の自動分類

なかなか精度が上がらない!

畳み込みニューラルネットワークのパラメータや構成を変えながら試行錯誤 フィルターの大きさを変えたり、各層のニューロンの数を 増やしたり、学習回数を増やしたり、 etc…

精度を上げるのは簡単じゃないか?しかし・・・

試行錯誤していく中で・・・広域の特徴を捉えるために全てのタイルを繋げて一枚の地図で学習

タイル単位で学習を繰り返し行いモデルを成長させていく方法に変更

Page 8: Deep Learning with FOSS4G

古地図の自動分類

・畳み込みニューラルネットワークの構成や設定をクラス化して設定ファイルに記述し、簡単に変更できるように改良

・畳み込み層と全結合層の層の数を増加

・全結合層の各層のニューロンの数を増加

・パッチサイズを大きく変更( 15x15→37x37 )

畳み込みニューラルネットワークの構成の変更もやってみた

精度が向上!

Page 9: Deep Learning with FOSS4G

古地図の自動分類

入力画像 正解画像 分類結果

7 ~ 8 割くらいの精度になった!!

改良後の結果

Page 10: Deep Learning with FOSS4G

古地図の自動分類

畳み込みニューラルネットワークの構成出力サイズ 層 ニューロン数 フィルターサイズ

37x37x3 入力

37x37x500 畳み込み層 500 5x519x19x500 プーリング層 2x219x19x300 畳み込み層 300 5x510x10x300 プーリング層 2x210x10x100 畳み込み層 100 3x34096 全結合層 40962048 全結合層 20481024 全結合層 1024

Softmax 層

Page 11: Deep Learning with FOSS4G

古地図の自動分類

TensorFlow を使用しての感想・環境設定がちょっと面倒  * OS は Ubuntu14.04推奨  * GPU を使う場合は CUDA と CuDNN が必要

・バージョンアップが早いのでキャッチアップが大変

・マルチ GPU で動くようにしたけどむしろ遅くなった

・可視化ツール TensorBoard は便利  *ニューラルネットの構成を図示したり、   パラメータや誤差、精度などをグラフ表示したりしてくれる

Page 12: Deep Learning with FOSS4G

Deep Learning×GIS で・・・

学習データを使えば人手でやっていた労力のかかる分類作業を自動化できる

他に何か応用事例はないだろうか?色々調べてみた。

Page 13: Deep Learning with FOSS4G

太陽フレアを事前に予知する「宇宙天気予報」

LSTM を用いて太陽フレアの発生を数日くらい前に予測

飛行機の遅延が数日前に分かったり、計画停電に備えることができるかもしれない

(http://qiita.com/nushio/items/a8e9aabc3bd7fdf1b33e)

Page 14: Deep Learning with FOSS4G

「宇宙天気予報」では太陽光の波形データから X線フラックスの予測を行っていた

過去の地震波のデータを使用すれば人間が分からないような地震の兆候を Deep Learningが抽出してくれるかもしれない

・南海トラフや首都直下型地震が懸念されている・地震の予知ができれば心構えや準備が出来るため、減災につながる

そもそもなぜ地震なのか?

Page 15: Deep Learning with FOSS4G

じゃあ時系列予測に何を使うか?

「宇宙天気予報」では LSTM を使用していた。

時系列データの予測には LSTM や HTM や RNN など色々なニューラルネットワークがあるっぽい。

今回は全脳アーキテクチャ勉強会で話題になっている DeepPredNet を使用することにした。

Page 16: Deep Learning with FOSS4G

一瞬先の未来を予測する「 Deep PredNet」

車載カメラの映像から次に来るフレームの画像を予測し生成する。

(http://qiita.com/nushio/items/a8e9aabc3bd7fdf1b33e)

・大脳新皮質の構造に似ている・教師なし学習

Page 17: Deep Learning with FOSS4G

さっそく

Deep PredNet を使って実験してみよう!

Page 18: Deep Learning with FOSS4G

PredNet のソースを応用して使用するために地震波形データを画像にする必要があった。

さらに、マルチモーダルに対応するため、地震波形データだけでなく・マグニチュード・震源の深さも一緒に画像にしてみた。

Page 19: Deep Learning with FOSS4G

データの取得先

地震波形データ・ IRIS (http://service.iris.edu/irisws/timeseries/1/)

地震データ・ IRIS (http://service.iris.edu/fdsnws/event/1/)

・ IRIS は全世界のデータを無料で提供している。・ API で簡単に取得できる。・ただし日本のデータは少ない。

Page 20: Deep Learning with FOSS4G

・ 360 × 180px の画像を作成し、世界地図に見立てる

・観測点 ( ステーション ) の緯度経度の小数点を切り捨てて画像の X,Y に 1px としてプロット

・各地点のカラーは以下のようにする R : 地震波のデータ (0 ~ 255)  G : マグニチュード (0 ~ 255)  B : 震源の深さ (0 ~ 255)

・地震波形のデータは 1秒間に数件あったため、平均して 1秒当たりの値を算出

・カラーはそれぞれのデータの最小値と最大値から等間隔に 256 分割して 0 ~ 255 の輝度値として使用

手法

Page 21: Deep Learning with FOSS4G

こんな感じの画像

360px

180px

ここにある

Page 22: Deep Learning with FOSS4G

とりあえずランダムに 10個の観測点のデータを使ってやってみた

なにも出力されない・・

結果

OUTPUTINPUT

真っ白拡大

Page 23: Deep Learning with FOSS4G

観測点の数が少ないから失敗したのか?

失敗原因を考えてみる

じゃあ全世界の観測点のデータを使ったらどうだろう?

データサイズがでかすぎて 3日経ってもデータの取得が終わらない !

じゃあ日本に限定してみるか

Page 24: Deep Learning with FOSS4G

日本に限定した結果

日本のデータは予想以上に少なかった。

結果はやっぱり変わらない・・

INPUT OUTPUT

真っ白拡大

Page 25: Deep Learning with FOSS4G

もう一度 失敗原因を考えてみる

・畳み込みニューラルネットの特性上、周りの px を畳み込むため、 1px 単位のデータだと意味をなさないのかもしれない。

・スパースなデータは畳み込みニューラルネットワークと相性が悪いのかも。やはり 1px 単位ではなく、補間したほうが良いのでは。

何かいいアイディアはないか・・・?

Page 26: Deep Learning with FOSS4G

GMT が適しているのではないか?

地球科学者が多く利用している GMT 。

スパースな欠損データを補間するために様々な補間手法が実装されている。

Page 27: Deep Learning with FOSS4G

・地震波系のデータを XYZ ファイルにする

・前処理として blockmedian でエイリアスの除去する

・ surface で補間を行い XYZ データをグリッド化する

・ grdimage でグリッドデータからカラーの図を作成し、ps2raster で画像にする

・地震波形のデータは 1秒間に数件あったため、平均して 1秒当たりの値を算出

・カラーはそれぞれのデータの最小値と最大値から等間隔に 256 分割して 0 ~ 255 の輝度値として使用

GMT を使う手法

Page 28: Deep Learning with FOSS4G

・日本の観測地点のデータが少ないため、非常にスパースなデータになってしまった

・特定の地域が異常値になっており全体の階調値がおかしくなってしまった

データを見直す必要がありそう

GMT を使った結果

Page 29: Deep Learning with FOSS4G

地震波形データ・防災科学技術研究所 (Hi-net)(https://hinetwww11.bosai.go.jp/auth/?LANG=ja)

地震波形データの取得先を変更する

・データのダウンロードにはユーザー登録が必要・データはフォームに入力してダウンロード・長期間のデータが取得できない。・学習用に東日本大震災のデータ、検証用に熊本地震のデータをそれぞれ 50 分ずつ取得した

Page 30: Deep Learning with FOSS4G

これでデータの準備は整った。

東日本大震災のデータで学習を行い、熊本地震を予想できるのか試してみた!

Page 31: Deep Learning with FOSS4G

実装中にはまったところ  1/3同じ観測点で複数の地震波形データがある??

地震波形データは NS(北 -南 ) ・ EW(東 -西 ) ・ UD( 上 -下 ) の3 成分がある。 3つのデータを 1つにする必要があった。

3 成分からベクトルの長さ( ノルム ) を算出して波形データとして使用

http://www.data.jma.go.jp/svd/eqev/data/kyoshin/jishin/kaisetsu.htm

Page 32: Deep Learning with FOSS4G

実装中にはまったところ  2/3GMT で震源地点に円を表示したい!

マグニチュードによってサイズが異なる円を PSXY で描いてみた

GMT はオプションが多く、 GMT 初心者の私には難しかった。重ね書きのルール (> , >> , -K , -O) に気づかず数時間はまった・・・

Page 33: Deep Learning with FOSS4G

実装中にはまったところ  3/3地震波の階調値がおかしい

地震波のデータを画像にしてみると全部真っ黒。特定の値に集中しているようだ。

等間隔で 256 分割していたため、値に偏りがあり全体の階調がおかしくなっていた。256 分位にするようにしたところ、均等に数が分布されて自然になった!

before

after

Page 34: Deep Learning with FOSS4G

工夫したところ

地震発生個所のデータを特徴として捉える

地震のデータ ( マグニチュード ) は 1秒のみであるため、ニューラルネットで特徴として捉えるために 5 分間残すようにした。また、 5 分後には収束するようにサイズとカラーを変更するようにしてみた。

地震発生 地震発生から 5 分後

Page 35: Deep Learning with FOSS4G

最終結果・・・の前に

こんな結果がほしい!

t t+1

地震波の動きから地震の発生を予想できたらいいな

Page 36: Deep Learning with FOSS4G

最終結果

実際は・・・・

PredNet の予想正解

Page 37: Deep Learning with FOSS4G

考察

・データの数が圧倒的に足りない。 *日本ではなく世界規模が必要 *長期間 (10 年単位とか ) のデータが必要

・豊富な計算資源が必要。 * GPU を使って計算したが 50 分間のデータを   60 回学習するのに 8時間かかった。

Page 38: Deep Learning with FOSS4G

まとめ

・精度が高くなれば地震予想ができるかもしれない。正確性が多少低くても 1つの防災の指針になるのではないか?

・ Deep Learning は応用範囲は広いが、まだノウハウがなく、なぜ失敗するのか、なぜこんな計算結果になるのか等が分からず苦労した。

・ブラックボックス化した計算内容を人間に理解できるように解析する Deep Learning が登場するのを期待!

・一社だけだと計算資源やマンパワーが圧倒的に足りないご興味のある方は一緒に研究してみませんか?

Page 39: Deep Learning with FOSS4G

ご清聴ありがとうございました。