deep learning with foss4g
TRANSCRIPT
株式会社ノーザンシステムサービス中洞 友希
Deep Learning with FOSS4G
FOSS4G 2016 Tokyo
自己紹介
氏名:中洞 友希会社: ( 株 ) ノーザンシステムサービス 入社 4 年目
地図やドローンを使ったりした可視化の研究開発をしています。
色々面白いものを置いてあるので、興味がある方は是非当社までお越しください!
アーカイブ= これまでを振り返り, そしてこれからに伝えていく
今回のテーマ
弊社での Deep Learning×GIS の開発事例
古地図の自動分類・古地図の地図記号から識別し、土地利用の領域ごとに色分けして分類するニューラルネットワークの生成
・古地図と現在の地図を重ねることで、液状化などのリスクがある地域がわかるかもしれない
農研機構の某 I 氏とのご縁により一緒にお仕事させて頂いています。
古地図の自動分類
・畳み込みニューラルネットワーク( CNN )で実装
・ Google の機械学習ライブラリTensorFlow を使用
・ハイパースペクトルの航空写真から土地を分類するプログラムをもとに作成(https://github.com/KGPML/Hyperspectral)
水田や市街地といった特徴がわかりやすいところは精度が良さそう。畑又は空地といったほぼ空白の部分は難しそう。
当初の予想
水田
市街地
畑又は空地
古地図の自動分類
水田
市街地
針葉樹林
入力画像 正解画像 分類結果
結果
ほぼ予想通り。空白部分が多く、地図記号が均一ではない針葉樹林なども精度が悪い
畑又は空地
古地図の自動分類
なかなか精度が上がらない!
畳み込みニューラルネットワークのパラメータや構成を変えながら試行錯誤 フィルターの大きさを変えたり、各層のニューロンの数を 増やしたり、学習回数を増やしたり、 etc…
精度を上げるのは簡単じゃないか?しかし・・・
試行錯誤していく中で・・・広域の特徴を捉えるために全てのタイルを繋げて一枚の地図で学習
タイル単位で学習を繰り返し行いモデルを成長させていく方法に変更
古地図の自動分類
・畳み込みニューラルネットワークの構成や設定をクラス化して設定ファイルに記述し、簡単に変更できるように改良
・畳み込み層と全結合層の層の数を増加
・全結合層の各層のニューロンの数を増加
・パッチサイズを大きく変更( 15x15→37x37 )
畳み込みニューラルネットワークの構成の変更もやってみた
精度が向上!
古地図の自動分類
入力画像 正解画像 分類結果
7 ~ 8 割くらいの精度になった!!
改良後の結果
古地図の自動分類
畳み込みニューラルネットワークの構成出力サイズ 層 ニューロン数 フィルターサイズ
37x37x3 入力
37x37x500 畳み込み層 500 5x519x19x500 プーリング層 2x219x19x300 畳み込み層 300 5x510x10x300 プーリング層 2x210x10x100 畳み込み層 100 3x34096 全結合層 40962048 全結合層 20481024 全結合層 1024
Softmax 層
古地図の自動分類
TensorFlow を使用しての感想・環境設定がちょっと面倒 * OS は Ubuntu14.04推奨 * GPU を使う場合は CUDA と CuDNN が必要
・バージョンアップが早いのでキャッチアップが大変
・マルチ GPU で動くようにしたけどむしろ遅くなった
・可視化ツール TensorBoard は便利 *ニューラルネットの構成を図示したり、 パラメータや誤差、精度などをグラフ表示したりしてくれる
Deep Learning×GIS で・・・
学習データを使えば人手でやっていた労力のかかる分類作業を自動化できる
他に何か応用事例はないだろうか?色々調べてみた。
太陽フレアを事前に予知する「宇宙天気予報」
LSTM を用いて太陽フレアの発生を数日くらい前に予測
飛行機の遅延が数日前に分かったり、計画停電に備えることができるかもしれない
(http://qiita.com/nushio/items/a8e9aabc3bd7fdf1b33e)
「宇宙天気予報」では太陽光の波形データから X線フラックスの予測を行っていた
過去の地震波のデータを使用すれば人間が分からないような地震の兆候を Deep Learningが抽出してくれるかもしれない
・南海トラフや首都直下型地震が懸念されている・地震の予知ができれば心構えや準備が出来るため、減災につながる
そもそもなぜ地震なのか?
じゃあ時系列予測に何を使うか?
「宇宙天気予報」では LSTM を使用していた。
時系列データの予測には LSTM や HTM や RNN など色々なニューラルネットワークがあるっぽい。
今回は全脳アーキテクチャ勉強会で話題になっている DeepPredNet を使用することにした。
一瞬先の未来を予測する「 Deep PredNet」
車載カメラの映像から次に来るフレームの画像を予測し生成する。
(http://qiita.com/nushio/items/a8e9aabc3bd7fdf1b33e)
・大脳新皮質の構造に似ている・教師なし学習
さっそく
Deep PredNet を使って実験してみよう!
PredNet のソースを応用して使用するために地震波形データを画像にする必要があった。
さらに、マルチモーダルに対応するため、地震波形データだけでなく・マグニチュード・震源の深さも一緒に画像にしてみた。
データの取得先
地震波形データ・ IRIS (http://service.iris.edu/irisws/timeseries/1/)
地震データ・ IRIS (http://service.iris.edu/fdsnws/event/1/)
・ IRIS は全世界のデータを無料で提供している。・ API で簡単に取得できる。・ただし日本のデータは少ない。
・ 360 × 180px の画像を作成し、世界地図に見立てる
・観測点 ( ステーション ) の緯度経度の小数点を切り捨てて画像の X,Y に 1px としてプロット
・各地点のカラーは以下のようにする R : 地震波のデータ (0 ~ 255) G : マグニチュード (0 ~ 255) B : 震源の深さ (0 ~ 255)
・地震波形のデータは 1秒間に数件あったため、平均して 1秒当たりの値を算出
・カラーはそれぞれのデータの最小値と最大値から等間隔に 256 分割して 0 ~ 255 の輝度値として使用
手法
こんな感じの画像
360px
180px
ここにある
とりあえずランダムに 10個の観測点のデータを使ってやってみた
なにも出力されない・・
結果
OUTPUTINPUT
真っ白拡大
観測点の数が少ないから失敗したのか?
失敗原因を考えてみる
じゃあ全世界の観測点のデータを使ったらどうだろう?
データサイズがでかすぎて 3日経ってもデータの取得が終わらない !
じゃあ日本に限定してみるか
日本に限定した結果
日本のデータは予想以上に少なかった。
結果はやっぱり変わらない・・
INPUT OUTPUT
真っ白拡大
もう一度 失敗原因を考えてみる
・畳み込みニューラルネットの特性上、周りの px を畳み込むため、 1px 単位のデータだと意味をなさないのかもしれない。
・スパースなデータは畳み込みニューラルネットワークと相性が悪いのかも。やはり 1px 単位ではなく、補間したほうが良いのでは。
何かいいアイディアはないか・・・?
GMT が適しているのではないか?
地球科学者が多く利用している GMT 。
スパースな欠損データを補間するために様々な補間手法が実装されている。
・地震波系のデータを XYZ ファイルにする
・前処理として blockmedian でエイリアスの除去する
・ surface で補間を行い XYZ データをグリッド化する
・ grdimage でグリッドデータからカラーの図を作成し、ps2raster で画像にする
・地震波形のデータは 1秒間に数件あったため、平均して 1秒当たりの値を算出
・カラーはそれぞれのデータの最小値と最大値から等間隔に 256 分割して 0 ~ 255 の輝度値として使用
GMT を使う手法
・日本の観測地点のデータが少ないため、非常にスパースなデータになってしまった
・特定の地域が異常値になっており全体の階調値がおかしくなってしまった
データを見直す必要がありそう
GMT を使った結果
地震波形データ・防災科学技術研究所 (Hi-net)(https://hinetwww11.bosai.go.jp/auth/?LANG=ja)
地震波形データの取得先を変更する
・データのダウンロードにはユーザー登録が必要・データはフォームに入力してダウンロード・長期間のデータが取得できない。・学習用に東日本大震災のデータ、検証用に熊本地震のデータをそれぞれ 50 分ずつ取得した
これでデータの準備は整った。
東日本大震災のデータで学習を行い、熊本地震を予想できるのか試してみた!
実装中にはまったところ 1/3同じ観測点で複数の地震波形データがある??
地震波形データは NS(北 -南 ) ・ EW(東 -西 ) ・ UD( 上 -下 ) の3 成分がある。 3つのデータを 1つにする必要があった。
3 成分からベクトルの長さ( ノルム ) を算出して波形データとして使用
http://www.data.jma.go.jp/svd/eqev/data/kyoshin/jishin/kaisetsu.htm
実装中にはまったところ 2/3GMT で震源地点に円を表示したい!
マグニチュードによってサイズが異なる円を PSXY で描いてみた
GMT はオプションが多く、 GMT 初心者の私には難しかった。重ね書きのルール (> , >> , -K , -O) に気づかず数時間はまった・・・
実装中にはまったところ 3/3地震波の階調値がおかしい
地震波のデータを画像にしてみると全部真っ黒。特定の値に集中しているようだ。
等間隔で 256 分割していたため、値に偏りがあり全体の階調がおかしくなっていた。256 分位にするようにしたところ、均等に数が分布されて自然になった!
before
after
工夫したところ
地震発生個所のデータを特徴として捉える
地震のデータ ( マグニチュード ) は 1秒のみであるため、ニューラルネットで特徴として捉えるために 5 分間残すようにした。また、 5 分後には収束するようにサイズとカラーを変更するようにしてみた。
地震発生 地震発生から 5 分後
最終結果・・・の前に
こんな結果がほしい!
t t+1
地震波の動きから地震の発生を予想できたらいいな
最終結果
実際は・・・・
PredNet の予想正解
考察
・データの数が圧倒的に足りない。 *日本ではなく世界規模が必要 *長期間 (10 年単位とか ) のデータが必要
・豊富な計算資源が必要。 * GPU を使って計算したが 50 分間のデータを 60 回学習するのに 8時間かかった。
まとめ
・精度が高くなれば地震予想ができるかもしれない。正確性が多少低くても 1つの防災の指針になるのではないか?
・ Deep Learning は応用範囲は広いが、まだノウハウがなく、なぜ失敗するのか、なぜこんな計算結果になるのか等が分からず苦労した。
・ブラックボックス化した計算内容を人間に理解できるように解析する Deep Learning が登場するのを期待!
・一社だけだと計算資源やマンパワーが圧倒的に足りないご興味のある方は一緒に研究してみませんか?
ご清聴ありがとうございました。