宙畑 Sorabatake

機械学習

衛星データから道路網を抽出するコンペの上位入賞者手法解説!

今回はSpaceNetというプロジェクトが主催しているコンペティションと、高精度を叩き出したアルゴリズムの紹介をします。

(1) SpaceNet Challengeとは?

まずSpaceNetとは何でしょう?

SpaceNetとはCosmiQ Works、Maxar Technologies、Amazon Web Services (AWS)などが協力して運営をしているプロジェクトです。道路網や建物の位置のラベリングがなされた大量の衛星画像データ(図1)を集積しており、機械学習の研究にぴったりです。

図1. SpaceNetのデータ例

彼らはたびたびコンペティションを開催しているのですが、今回は特にSpaceNet 3:Road Network Detectionという第三回目のコンペティション「(SpaceNet 3: Road Network Detection)」について紹介しようと思います。他のコンペティションについても知りたいという方は(SpaceNetのホームページ)をぜひご覧になってください。

この第三回目のコンペティションでは、衛星データから精度良く道路網を抽出するモデルを作ることを目指します。

現状では地図における様々なもの、例えば道路や建物などは人の手によって 「ここの部分は道路だ、ここは建物だ」というようにラベリングされています。このようなラベリングを人の手を介さずとも機械で自動的できたらとても便利になります。

例えば、災害時の救助活動の際に、衛星データを用いて道路網が瞬時に可視化できれば、最短経路を探すことで迅速な救助が可能になりますよね。

(2) データセットの中身

さて、ではまずSpaceNetのデータ全体を概観してみましょう。SpaceNetのデータセットはAmazon Web Services (AWS)の公開データとして保持されています。

SpaceNetの持つ衛星データは、27,000平方キロメートルをカバーする非常に高分解能な(細かいものまで見える)もので、811,000戸の建物と20,000kmの道路に関して、高い精度のラベリングがなされています。このような高分解なデータと、それに付随する高精度のラベリングがSpaceNetのデータの特徴です。

第三回目のコンペティションに関しては、このデータセットの中でも特に、ラスベガス、パリ、上海、ハルツーム(スーダンの首都)の4つの領域のデータを対象として扱います。これらのデータがカバーする範囲は3000平方キロメートル程度で、400m×400mのタイルに細分化されています。

(3) 高精度をたたき出すアルゴリズムはどのようなものか?

第三回目のコンペティションはすでに終了してランキングも確定しているのですが、今回それらの最高得点を上回るスコアを弾き出す革新的な手法がAdam Van Etten氏によって提示されていた(概要説明記事論文)ので、ここではそのアルゴリズムを紹介してみようと思います。

彼らが開発した、衛星データから道路網を検出する革新的手法の名前はズバリ、City-scale Road Extraction from Satellite Imagery (CRESI)です。

1. 狭い領域におけるベースラインアルゴリズム

モデルの学習にはそれぞれが400m×400mの大きさを持つ、2780枚のタイルを用います。まず、人の手によってラベル付けがなされた道路の中央線のGeoJsONsデータをもとに、道路マスク(各ピクセルが道路かそうでないか)を作成します(図2)。

図2: SpaceNetの学習データ左: ラベリングされている道路の中央線
中央: 道路の中央線のラベルを衛星画像に重ね合わせたもの
右: 作成された道路のマスク(各ピクセルを道路かそうでないかに二分したもの)

次にこれらの道路マスクに関する学習データをもとに、機械学習モデルを学習します。モデルとしては、CNN(Convolutional Neural Network)を用いるのですが、エンコーダーとしてResNet34を用い、デコーダーとしてはU-Netに類似したものを用います。また損失関数としては、

L = 0.8×BCE + 0.2×(1-Dice)

を用います。ここで、BCEは二値交差エントロピー、DiceはDice係数です。

さて、次は学習したモデルを使って道路網の予測を行います。予測は以下のような流れで行います。

Step 実行内容
1 学習された4つのモデルをそれぞれ同じテストデータに対して適用する。
2 4モデルの予測結果の平均を取り、最終的な道路マスクの予測を得る。
3 道路マスクに対してオープニング処理、クロージング処理、しきい値処理などをしてデータを整える。
4 道路マスクを細線化(skeltonize)する。
5  細線化された道路マスクからグラフ構造を抽出。
6 グラフ構造における擬似的なエッジや小さいギャップを取り除く。

Step1、2では、予測の精度を上げるために、学習データを4分割しそれぞれに対して独立の4つのモデルを学習します。次にテストデータに対してこれらの4つのモデルを適用し、その予測結果の平均を取って、それを最終的な道路網の予測結果とします。「三人寄れば文殊の知恵」というやつですね (今回は四人ですが!)。

Step3~6では得られた道路マスクの予測結果に後処理を施します。

図3. 後処理の流れ
左: 学習したモデルをもとに得られた道路マスクの予測結果。[1] or [2]
左から2つ目: 得られた道路マスクに対しオープニング処理などの標準的な処理を行い、データを整える。
右から2つ目: 整えられた道路マスクを細線化する。[3]
右: 細線化された道路マスクをグラフ構造に落とし込む。[4]

2. 大きい画像への適用

以上が基本的な説明になるのですが、実は補足があります。上で述べた方法は比較的小さいサイズの画像には適用できるのですが、実は大きい画像(>2000ピクセル)に対してはGPUメモリの飽和のため適用ができません。

そのため、大きな画像に適用する際はまず画像を小さい画像に分割し、それぞれの画像に対して上の手法で道路マスクの予測を行います。その後にそれらの結果を結合し正規化し、Step3~6の後処理を行うことになります(図4)。

図4.大きい画像の分割と結合)

3. CRESIを用いた結果

さて、ではCRESIは衛星画像における道路の抽出において、どれほどの力を発揮するのでしょうか。

CRESIアルゴリズムをコンペティションで使用される4都市のテスト画像に対して適用したところ、APLSスコアというモデルの評価指数が0.69±0.02という高い値が得られました (1に近いほどより正確なモデル)。これはコンペティションの最高スコアである、0.67を上回る結果です。

図5はパリのテストデータにCRESIによって抽出された道路(黄色)を重ね合わせたものです。真上からの画像ではなく、斜めから見たような画像でもCRESIが力を発揮する事を示していますね。

図5.パリのテストデータとCRESIによる抽出結果の比較。赤は特定の2点の最短経路

(4) どのような応用が考えられるか?

さて、今回は衛星データから道路網を抽出するアルゴリズムについて紹介しました。ではこれができるとどのようなメリットや効果があるのでしょうか。

まず考えられるのは災害時などにおける人道救助。例えば激しい台風が通り過ぎた後は、橋が壊れていたり、川が洪水して道路が浸水していたりして、普段地図で見ているような道路網とは様子が変わっていますよね。そんな時に衛星データを使って迅速に最短の救助経路を導き出せたら、救助が効率的に行えます。

他には車の自動運転なんかにも役立ちます。車の自動運転を行うためには、非常に正確な道路網を知っている必要があります。既存のデータ収集方法では、道路網の変化に追いつけなかったり、収集できない地域があったりするため、不十分なのです。そこで、今回の方法でリアルタイムに近い頻度で道路網を把握できれば、自動運転の普及にも一役買うのではないでしょうか。

他にもこのような技術を使ってどんなことができるか、皆さんもぜひ考えてみてはいかがでしょうか。

※…引用
[1]… http://arxiv.org/abs/1612.01105
[2]… http://arxiv.org/abs/1505. 04597
[3]… scikit image, “Skeletonize,” https://scikit-image.org/docs/dev/auto examples/edges/plot skeleton.html, 2018.
[4]… yxdragon, “Skeleton network,” https://github.com/yxdragon/sknw, 2018.