衛星データ×機械学習タスクの代表的な分類まとめ~物体検出、セマンティックセグメンテーション、画像分類、超解像~
衛星データと親和性の高い4種類の機械学習タスクのカテゴリと、その1つである物体検出の解析事例を紹介します。
本記事は、技術評論社から出版されている月刊誌Software Designに宙畑が寄稿した連載「衛星データプラットフォームTellusハンズオン」の内容から、一部修正して掲載するものです。
衛星画像は、近年、機械学習を適用しようという動きが盛んになっています。
この10年で打ち上げられた衛星の数が爆発的に増え、それに合わせて衛星が撮影する衛星画像の量が爆発的に増えているためです。
衛星画像の量が増えると、人が1枚1枚画像に何が写っているのか確認するわけにもいきません。そこで、機械学習を使って大量の衛星画像に何が写っているのか把握しようという動きが世界中で行われています。
本記事では、衛星データと親和性の高い機械学習タスクのカテゴリと、その1つである物体検出の解析事例を紹介します。
公開されている衛星データセットを用いて学習を行い、機械学習モデルを作成し、そのモデルをもとに実際にTellusで取得できる衛星データを解析していきます。
衛星画像データ解析タスクの代表的なカテゴリ
衛星データでは、おもに画像データや地理空間情報を扱うことが多いです。それらのデータに対する、機械学習系の解析タスクは大きく分けると次のようなものがあります。
①物体検出(Object Detection)
②セマンティックセグメンテーション(Semantic Segmentation)
③画像分類(Image Classification)
④超解像(Image Super Resolution)
それぞれについて、説明していきます。
①物体検出(Object Detection)
物体検出は画像の中から対象物を見つけて対象の範囲を特定し、範囲内の物体が何であるかの判定を行うタスクです。
衛星データにおける物体検出であれば、石油タンク、車、飛行機、船、建築物など、宇宙からでも見える大きいものを対象とすることが多いです。
【宙畑での物体検出に関する記事】
SSDを用いて飛行機の物体検出にチャレンジしてみた
成功!!複素ニューラルネットワーク(CxNN)を実装して衛星データから物体検出をしてみる
DeepLearning×SAR画像で王道の物体検出を実装!(アノテーションから学習、識別までの全工程を解説)
衛星データから道路網を抽出するコンペの上位入賞者手法解説!
船舶の物体検出!第2回衛星データ解析コンテスト上位入賞者の解析手法紹介!
②セマンティックセグメンテーション(Semantic Segmentation)
セマンティックセグメンテーションとは、画像に写っている対象物の領域を判別するタスクです。たとえば、地上でカメラを利用して撮った写真であれば、写真のどこの領域が空・地面・建物なのかを判別してくれます。
衛星データにおける利用例としては、温暖化に伴う海氷領域検知や海岸線の解析などに用いられます。
【宙畑でのセマンティックセグメンテーションに関する記事】
The 3rd Tellus Satellite Challenge実施!~入賞者たちのモデルに注目~
第4回Tellus Satellite Challenge開催!テーマは「海岸線抽出」
③画像分類(Image Classification)
画像分類は、画像を2つ以上のグループに分ける場合に、どのグループに属するか判定するタスクです。たとえば、衛星画像内にゴルフ場が写っている/写っていないという判別や、写っている雲の分類を行うことができます。
【宙畑での画像分類に関する記事】
【コード・データ付き】学習済みモデルを利用して手軽にゴルフ場が写っているかを判定できる機械学習モデルを作成する
CNNを使って衛星データに雲が映っているか否か画像分類してみた
衛星データに雲が映っているか否かの画像分類を4つの手法で精度比較してみた
Kerasを使って衛星画像内の山が独立峰か連峰かを判別するモデル作成チャレンジ
④超解像(Image Super Resolution)
超解像は、画像の解像度を擬似的に上げるタスクです。
衛星データでは航空写真と比較して、どうしても解像度が粗くなってしまうことが多いため、機械学習で超解像処理をかけることで擬似的に解像度を上げ、物体検出などほかの解析処理を行いやすくします。
Tellusでは、Tellus OS上やAPIから超解像処理を行える超解像処理を行える「Tellus-Clairvoyant」が利用可能です。
衛星画像を超解像処理するTellus新ツール「Tellus-Clairvoyant」提供開始
【宙畑での超解像に関する記事】
超解像×衛星画像でできること。関連論文の紹介とTellusでやるには
「市街地衛星画像の超解像化」コンペにチャレンジ! その結果と衛星データの可能性
SRCNNを用いて衛星画像の超解像にチャレンジしてみた【コード付き】
シャープ独自開発の深層学習モデルによる衛星画像の超解像処理
衛星データを使った物体検出
衛星データを使った物体検出の解析事例
紹介した機械学習の中から、特に今回は物体検出を詳しく解説していきます。
物体検出は、検出したい対象物が特定の経済活動にひもづく場合が多いため、単純に対象物の数をカウントするだけでも有力なデータになります。
たとえば、車、飛行機、船であれば、それぞれ駐車場、飛行場、港においてどれだけ存在しているかで、経済活動の規模を予測することが可能です。また、発展途上国であれば、建築物の数を追っていくことで、その地域の発展速度を計測することも行われています。
対象物のカウントだけにとどまらない解析事例として、石油タンクの貯蔵量推定があります。石油タンクは中身の石油貯蔵量に合わせて上部の蓋が浮き沈みするようになっているため、衛星データから蓋の高さを特定することで、石油タンクに貯蔵されている石油の量を推定することが可能です。
このように、衛星データからは公に発表されることが無いデータも収集ができるため、経済レポートとして販売を行う企業も存在しています。
【参考記事】
衛星データゴールドラッシュ!? 経済アナリストとデータ活用の金脈を探ってみた
「宇宙?すごいけど、うちではちょっと……」衛星データ解析のトップランナーOrbital Insightが乗り越えてきたデータ活用の障壁
利用される衛星データ
実際に機械学習で解析を行う場合には、対象物にタグ付けを行った教師データを集める必要があります。
衛星データはほかの画像データと異なり、次のような要因から目的とするデータの収集が困難な場合も多いです。
・雲や日照条件などの気象の影響
・衛星に搭載されたカメラの特性による解像度や色味の違い
・欲しい期間(季節性)のデータが存在しない可能性
そのため、データコンペティションサイトの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 ほどの大きさがある物体まで認識可能な解像度ですので、今回の石油タンクの検出には十分だと考えられます。
次の記事では、機械学習ライブラリを利用して物体検出モデルの学習処理と、Tellusから衛星データを取得して新しいデータに対しても石油タンクを検出できるか試していきます。