難易度:★★★★☆
「ビッグデータ」というキーワードの普及とともに、もとより大量のデータを有する衛星データへの注目が高まっています。2019年の2月に、日本発の衛星データプラットフォームTellusが誕生したことからも、今後ますますビジネスレベルでの衛星データ活用が加速することが予想されます。当クエストでは、地球観測衛星であるLandsat-8が観測した衛星画像データを題材に、画像分類モデルの作成に挑戦します。当クエストを通じて、これまで画像認識分野において積み上げられた知見を、衛星画像データに応用することのできる能力を身につけましょう。
※ 当コンテンツは、過去にSIGNATE上で開催されたコンペティション「産業技術総合研究所 衛星画像分析コンテスト(https://signate.jp/competitions/61)」によって得られた知見をもとに作成された教材となっています。
あなたは国内にてゴルフ場の経営事業を幅広く手掛ける会社に入社した新人データサイエンティストです。あなたは入社早々に上司から「今後の海外展開を見据えて、世界中のどこにゴルフ場があるのかAIで調べてくれ」と頼まれました。あなたは迷った末に、「地球観測衛星 Landsat-8」が観測した衛星データを利用して、衛星画像内にゴルフ場が含まれているか否かを判定する画像分類モデルを作成し、ゴルフ場を見つけ出す作業を自動化する方針を取ることを決めます。「検出の自動化によって、素晴らしい立地条件であるにもかかわらず、近くにゴルフ場がない穴場スポットをたくさん見つけ出せるかもしれない」とあなたは胸を膨らませて分析を始めました。
Mission 1
あなたは多くの協力者とともに、「衛星画像のファイル名」と「画像内にゴルフ場が含まれているか否かのラベル」の対応をまとめたテーブルデータを作成しました。ここで改めて、作成したテーブルデータの分析を行い、今後の分析の方針に役立てましょう。
このクエストには2種類のデータが用意されています。テーブル形式のデータと、衛星画像データです。ミッション1ではテーブル形式のデータの取り扱い方を学びます。まずは、テーブル形式のデータを扱う際に便利なPandasライブラリを用いてデータの中身を確認してみましょう。
タスク1でテーブルデータの概要を把握することができました。次は、特定のカラムの中身をより深く理解する方法を学びましょう。正解ラベルを表すflagカラムを抽出し、カラム内にどのような値がいくつずつ含まれているのかを調べます。
Mission 2
テーブルデータの分析を行い、ほとんどの衛星画像にはゴルフ場が含まれていないという事実を確認したあなたは、次に、各衛星画像の探索的分析を行うことにしました。今回データとして使用することに決めた衛星画像は、チャンネルを7つ持ち通常のカラー画像(3チャンネル)とは勝手が違うようです。各画像から読み取ることのできる情報はないか工夫してみましょう。
タスク1では、衛星画像の読み込みを行います。当クエストで扱う衛星画像データは少々特殊な形状の画像となっており、読み込み方も通常とは異なります。扱い方に気をつけながら画像データの概要を把握しましょう。
タスク2では、画像内に含まれる各値が、どのようになっているのかについて確認していきましょう。通常の画像は各チャンネルの値が0から255の間に収まっていることが多いですが、当クエストの衛星画像データに関しては、どうなっているのでしょう。
タスク3では、Matplotlibライブラリを使用して画像の可視化を行います。当クエストで扱う衛星画像データは、1チャンネル(白黒画像)でも、3チャンネル(カラー画像)でもなく、7チャンネルとなっています。そのため可視化を行う際の処理には、少し工夫が必要です。7チャンネルの画像データを可視化する方法を学びながら、当クエストで扱う衛星画像データの特徴を読み取りましょう。
Mission 3
探索的分析を終えたあなたは、ディープラーニングフレームワークPyTorchを使って画像分類モデルを作成するという方針を定めました。PyTorchにはディープラーニングモデルの学習を行う際に便利な「前処理」や「データセットの設定」用の道具が多く用意されているようです。あなたはそれらの使い方を学びながら、モデルが学習を行うことのできるような状態にデータを整えるためのプログラムの作成に挑戦します。
タスク1では、データの前処理の設定方法を学びます。
これまでに行った探索的分析を踏まえて前処理の方針を決定し、実際に前処理を行う関数を作成しましょう。
タスク2では、PyTorchにおけるDatasetの作成方法を学びます。Datasetとは、PyTorchに用意されているクラスです。このクラスを継承した子クラスとして、当クエスト専用のDatasetクラス「SatelliteDataset」を作成することをゴールとします。
タスク3では、DataLoaderの設定方法を学びます。DataLoaderとは、タスク2で作成したDatasetクラスの動作を管理するコントローラーのようなものです。使用するデータセットやバッチサイズ、シャッフルの有無などの指定をここで行います。
Mission 4
データセットの設定を終えたあなたは、次はいよいよ画像分類モデルを作成し、学習を実行する段階に入ります。当クエストに適したモデルの選定方法や、モデルの学習を行う関数の作成方法を学び、高い精度でゴルフ場を検出することのできる画像分類モデルを作り上げましょう。また、モデルの学習が終わった後は、モデルの学習ログを確認します。精度が100%に至っていない限り、まだ改善の余地は残されているはずです。「どうすればより良い精度を達成するモデルにすることができるのか?」という視点でモデルの学習ログを分析しましょう。
タスク1では、適切な画像分類モデルを選定し、データの形状や分析の目的に合わせたモデルに調整調整を施す方法を学びます。
タスク2では、モデルの学習を実行する関数を作成します。関数内では、エポックごとに行う処理の設定、学習時・検証時それぞれ個別に行う処理の設定、学習経過を各評価指標によって出力する設定などをまとめて行います。
前回のタスクまでに、モデルの学習の準備は整いました。タスク3では、いよいよ実際にモデルの学習を実行し、未知のデータに対しての推論を行うまでの過程を学びます。
Mission 5
そこそこの精度でゴルフ場を見つけ出すことのできるモデルを手に入れたあなたは、より精度を上げる方法はないものかと考えていました。データに加工を施して擬似的にデータの量を増やす「Data Augmentation」という技術の存在を知ったあなたは、なんとかこの技術を使いこなして、モデルの性能を改善しようと試みます。
ミッション5では、ミッション4で行ったモデルの学習、推論に変更を加え、予測精度の改善を目指します。手法としてはData Augmentationを採用します。まずはタスク1にて、Data Augmentationの概要と、PyTorchにおけるData Augmentationの実装方法を学びましょう。
タスク2では、オリジナルの前処理クラスを実装する方法を学びます。手法としては水平フリップ、垂直フリップ、回転の3つを学びます。最後にData Augmentationを加えた上で再度モデルの実行を行い、Data Augmentationを実行しなかった場合と比べてどのような違いが生じたのかを確認しましょう。
あなたは当クエストを通じて、衛星画像の中にゴルフ場が含まれているか否かを高精度で分類することのできるモデルを作成することができました。最後に、当クエストにて学んだことのまとめと、さらなる予測精度の改善のための提案をスライドにまとめましたのでご覧ください。
Competition
これまで学習したことを元に、SIGNATEのSOTAコンペティションに挑戦してみましょう。
Competitionに挑戦する