宙畑 Sorabatake

機械学習

衛星データ×機械学習タスクの代表的な分類まとめ~物体検出、セマンティックセグメンテーション、画像分類、超解像~

衛星データと親和性の高い4種類の機械学習タスクのカテゴリと、その1つである物体検出の解析事例を紹介します。

本記事は、技術評論社から出版されている月刊誌Software Designに宙畑が寄稿した連載「衛星データプラットフォームTellusハンズオン」の内容から、一部修正して掲載するものです。

衛星画像は、近年、機械学習を適用しようという動きが盛んになっています。
この10年で打ち上げられた衛星の数が爆発的に増え、それに合わせて衛星が撮影する衛星画像の量が爆発的に増えているためです。

衛星画像の量が増えると、人が1枚1枚画像に何が写っているのか確認するわけにもいきません。そこで、機械学習を使って大量の衛星画像に何が写っているのか把握しようという動きが世界中で行われています。

本記事では、衛星データと親和性の高い機械学習タスクのカテゴリと、その1つである物体検出の解析事例を紹介します。

公開されている衛星データセットを用いて学習を行い、機械学習モデルを作成し、そのモデルをもとに実際にTellusで取得できる衛星データを解析していきます。

衛星画像データ解析タスクの代表的なカテゴリ

衛星データでは、おもに画像データや地理空間情報を扱うことが多いです。それらのデータに対する、機械学習系の解析タスクは大きく分けると次のようなものがあります。

①物体検出(Object Detection)
②セマンティックセグメンテーション(Semantic Segmentation)
③画像分類(Image Classification)
④超解像(Image Super Resolution)

それぞれについて、説明していきます。

①物体検出(Object Detection)

衛星データを使った物体検出例 Credit : Original data provided by NEC Source : https://sorabatake.jp/16185/

物体検出は画像の中から対象物を見つけて対象の範囲を特定し、範囲内の物体が何であるかの判定を行うタスクです。

衛星データにおける物体検出であれば、石油タンク、車、飛行機、船、建築物など、宇宙からでも見える大きいものを対象とすることが多いです。

【宙畑での物体検出に関する記事】

②セマンティックセグメンテーション(Semantic Segmentation)

衛星データを使ったセマンティックセグメンテーション例(海氷領域の検知) Credit : original data provided by JAXA Source : https://sorabatake.jp/10563/

セマンティックセグメンテーションとは、画像に写っている対象物の領域を判別するタスクです。たとえば、地上でカメラを利用して撮った写真であれば、写真のどこの領域が空・地面・建物なのかを判別してくれます。

衛星データにおける利用例としては、温暖化に伴う海氷領域検知や海岸線の解析などに用いられます。

【宙畑でのセマンティックセグメンテーションに関する記事】

③画像分類(Image Classification)

画像分類を行う衛星画像のイメージ(画像は256×256pxで用意してあります) Source : https://sorabatake.jp/15199/

画像分類は、画像を2つ以上のグループに分ける場合に、どのグループに属するか判定するタスクです。たとえば、衛星画像内にゴルフ場が写っている/写っていないという判別や、写っている雲の分類を行うことができます。

【宙畑での画像分類に関する記事】

④超解像(Image Super Resolution)

衛星データを使った超解像事例
Credit : Original data provided by Japan Space Imaging Source : https://sorabatake.jp/23450/

超解像は、画像の解像度を擬似的に上げるタスクです。

衛星データでは航空写真と比較して、どうしても解像度が粗くなってしまうことが多いため、機械学習で超解像処理をかけることで擬似的に解像度を上げ、物体検出などほかの解析処理を行いやすくします。

Tellusでは、Tellus OS上やAPIから超解像処理を行える超解像処理を行える「Tellus-Clairvoyant」が利用可能です。

【宙畑での超解像に関する記事】

衛星データを使った物体検出

衛星データを使った物体検出の解析事例

紹介した機械学習の中から、特に今回は物体検出を詳しく解説していきます。

物体検出は、検出したい対象物が特定の経済活動にひもづく場合が多いため、単純に対象物の数をカウントするだけでも有力なデータになります。

たとえば、車、飛行機、船であれば、それぞれ駐車場、飛行場、港においてどれだけ存在しているかで、経済活動の規模を予測することが可能です。また、発展途上国であれば、建築物の数を追っていくことで、その地域の発展速度を計測することも行われています。

対象物のカウントだけにとどまらない解析事例として、石油タンクの貯蔵量推定があります。石油タンクは中身の石油貯蔵量に合わせて上部の蓋が浮き沈みするようになっているため、衛星データから蓋の高さを特定することで、石油タンクに貯蔵されている石油の量を推定することが可能です。

このように、衛星データからは公に発表されることが無いデータも収集ができるため、経済レポートとして販売を行う企業も存在しています。

【参考記事】

利用される衛星データ

実際に機械学習で解析を行う場合には、対象物にタグ付けを行った教師データを集める必要があります。

衛星データはほかの画像データと異なり、次のような要因から目的とするデータの収集が困難な場合も多いです。

・雲や日照条件などの気象の影響
・衛星に搭載されたカメラの特性による解像度や色味の違い
・欲しい期間(季節性)のデータが存在しない可能性

そのため、データコンペティションサイトのKaggleや論文などで公開されているデータセットを利用したり、ほかのデータセットで学習済みの機械学習モデルを転用する「転移学習」を行うことで新しいデータに対応する方法もよく利用されます。

物体検出の教師データ(アノテーション)形式はYOLOやCOCO(https://cocodataset.org/#format-data)等、複数のフォーマットが存在しており、公開されている機械学習ライブラリやコードは、どのフォーマットに対応しているのか確認しておくと良いでしょう。

物体検出に適した衛星データをいくつか紹介していきます。

・RarePlanes https://www.cosmiqworks.org/rareplanes/
 →地上にいる飛行機の物体検出データセットです。現実の衛星データに加えて、人工的にデータ合成を行った合成教師データも含んでいます。

・NEON Tree Crowns Dataset https://zenodo.org/record/3765872#.YHs-MBMzbUI
 →全米37地点の約1億本の木の位置と高さ等の情報が含まれています。

・xView 2018 Detection Challenge http://xviewdataset.org/
 →60種類(ヘリポートやスタジアム等)のカテゴリで100万個のアノテーションデータが含まれています。

・Cars Overhead With Context https://gdo152.llnl.gov/cowc/
 →6都市で約3万2千個の車のアノテーションデータが含まれています。

Tellus上の衛星データで物体検出

ここからは、Tellusを使って物体検出タスクを行っていきます。

今回は石油タンクを検出します。主な流れとして次のことを行っていきます。おもな流れとして次のことを行っていきます。

・学習データの取得
・データ前処理と学習
・Tellus Satellite Data Travelerでのデータ調査
・Tellus開発環境でAPIを利用し衛星データ取得し物体検出

今回の記事では1つめの「学習データの取得」までを行います。

学習データの取得

今回利用するデータセットはAirbus社が公開している、石油タンクのデータセットです。世界中の石油タンクが写っている衛星データと、どの位置に存在しているかのアノテーションデータが揃っているデータです。

https://www.kaggle.com/airbusgeo/airbus-oil-storage-detection-dataset

このデータはKaggle上でデータセットとして公開されているため、取得にはKaggleのアカウントが必要です。画面の右上の Download ボタンから入手が可能です。

ダウンロードしたzipファイルを解凍すると、アノテーション情報の`annotations.csv`、アノテーションに対応したトレーニングデータ用の画像が入っている`images`ディレクトリ、トレーニングデータには含まれていないテスト用の画像が入っている`extras`ディレクトリが含まれています。

`annotations.csv` は次のような情報を持っています。

image_id class bounds
0918a15c-8cfb-4da7-92cf-1f5098a76760 oil-storage-tank (1205, 1493, 1231, 1516)
0918a15c-8cfb-4da7-92cf-1f5098a76760 oil-storage-tank (1479, 1756, 1507, 1776)

それぞれの項目は `image_id` (画像データの名前に紐づくID), `class`(分類情報で今回は oil-storage-tank のみ), `bounds`(画像のどの座標に対象物があるかの情報)を表しています。このboundsのデータ形式は実際に学習させるときにはCOCO等の対応したフォーマットに変換する必要があります。

このデータセットで公開されているSPOTという衛星データは、地上分解能 GSD(Ground Sampling Distance) が1.2mであり、1ピクセルで地上の 1.2m ほどの大きさがある物体まで認識可能な解像度ですので、今回の石油タンクの検出には十分だと考えられます。

衛星で撮影した石油タンク Credit : Airbus DS GEO S.A.

次の記事では、機械学習ライブラリを利用して物体検出モデルの学習処理と、Tellusから衛星データを取得して新しいデータに対しても石油タンクを検出できるか試していきます。