「プラネットデータとAmazon SageMakerの地理空間能力を活用して、クロップセグメンテーションの機械学習モデルを構築する」
「プラネットデータとAmazon SageMakerを活用した地理空間能力によるクロップセグメンテーションの機械学習モデルの構築」
This guest post is co-written by Lydia Lihui Zhang, Business Development Specialist, and Mansi Shah, Software Engineer/Data Scientist, at Planet Labs. The analysis that inspired this post was originally written by Jennifer Reiber Kyle.
Amazon SageMakerの地理空間機能は、Planetの衛星データと組み合わせて作物のセグメンテーションに使用することができ、農業や持続可能性の分野におけるこの分析の数多くの応用と潜在的な利点があります。2023年末、PlanetはAWSと提携し、Amazon SageMakerを通じて地理空間データを提供することを発表しました。
作物のセグメンテーションとは、衛星画像を似たような作物の特徴を持つピクセルまたはセグメントの領域に分割するプロセスです。この記事では、セグメンテーション機械学習(ML)モデルを使用して、画像内の作物領域と非作物領域を特定する方法を説明します。
作物領域の特定は、農業の洞察を得るための基本的なステップであり、豊富な地理空間データとMLの組み合わせにより、意思決定と行動につながる洞察を得ることができます。例えば:
- データに基づく農業の決定を行う – 作物の空間的理解を深めることで、農家や他の農業関係者は、水、肥料、その他の化学物質などのリソースの使用を最適化することができます。これにより、廃棄物の削減、持続可能な農業の実践の向上、環境への影響の最小化などが可能となります。
- 気候関連のストレスや傾向を特定する – 気候変動が地球の気温や降水パターンに影響を与え続ける中、作物のセグメンテーションは、気候適応戦略のための気候関連ストレスに対して脆弱な地域を特定するのに使用することができます。例えば、衛星画像アーカイブは、作物の成長領域の時間とともに変化を追跡するために使用できます。これには、畑の大きさや分布の物理的な変化が含まれます。また、衛星データの異なるスペクトル指数から派生した土壌湿度、土壌温度、およびバイオマスの変化も含まれます。
- 損害の評価と軽減 – 最後に、作物のセグメンテーションは、自然災害の際に迅速かつ正確に作物が被害を受けた領域を特定するのに使用することができます。これにより、救援活動の優先順位付けが可能となります。例えば、洪水の後、高い頻度で撮影された衛星画像を使用して、作物が浸水または破壊された地域を特定し、被災した農家への支援を迅速に行うことができます。
この分析では、K最近傍法(KNN)モデルを使用して作物のセグメンテーションを行い、農業地域のグラウンドトゥルー画像と比較します。私たちの結果は、KNNモデルからの分類が2015年のグラウンドトゥルー分類データよりも2017年の現在の作物畑の状態をより正確に表していることを示しています。これらの結果は、Planetの高頻度地理空間画像の力を証明しています。農場は頻繁に変化し、シーズンによって何度も変わるため、この土地を観察能力を持つ高頻度の衛星画像を利用して、農業用地と急速に変化する環境に対する私たちの理解に大きな価値を提供することができます。
PlanetとAWSの地理空間MLにおける提携
SageMakerの地理空間機能は、データサイエンティストやMLエンジニアが地理空間データを使用してモデルを構築、トレーニング、展開することを可能にします。 SageMakerの地理空間機能を使用すると、大規模な地理空間データセットの変換や豊富な先行学習済みMLモデルによるモデル構築の加速、および3Dアクセラレーショングラフィックスと組み込みの可視化ツールを使用して、モデルの予測と地理空間データを対話的にマップ上で調査することができます。 SageMakerの地理空間機能を使用すると、作物のセグメンテーションなど、さまざまなアプリケーションに正確なMLモデルを作成するために、衛星画像や他の地理空間データの大規模なデータセットを処理することができます。
Planet Labs PBCは、大規模な衛星フリートを使用して、毎日地球の表面の画像を取得する世界をリードする地球イメージング企業です。 Planetのデータは、地理空間MLにとって貴重なリソースです。高解像度の衛星画像を使用して、地球上のどこでもさまざまな作物の特徴とその健康状態を時間の経過とともに特定することができます。
PlanetとSageMakerのパートナーシップにより、顧客はAWSの強力なMLツールを使ってPlanetの高周波衛星データに簡単にアクセスし、分析することができます。データサイエンティストは独自のデータを持ち込むか、環境を切り替えることなくPlanetのデータを便利に見つけて購読することができます。
Amazon SageMaker Studioノートブックでの地理空間画像を使用した作物セグメンテーション
この例では、Planetのデータを地面の真実データソースとともにSageMakerに持ち込み、KNN分類器を使用して作物セグメンテーションモデルをトレーニング、推論、展開する方法について説明します。最後に、結果の精度を評価し、真実のクラス分類と比較します。
使用されたKNN分類器は、地理空間の画像を使用したAmazon SageMaker Studioノートブックでトレーニングされ、地理空間データを扱うための柔軟で拡張可能なノートブックカーネルを提供します。
Amazon SageMaker Studioの地理空間画像を使用したノートブックには、GDAL、Fiona、GeoPandas、Shapely、Rasterioなどの一般的に使用される地理空間ライブラリが事前にインストールされており、これによりPythonノートブック環境での地理空間データの可視化と処理が直接行えます。オープンソースのCVライブラリやscikit-learnなどの一般的なMLライブラリも、地理空間カーネルにインストールされています。
データ選択
拡大して見る農業用地は通常晴れの日が続くカリフォルニア州のサクラメント郡に位置しています。
なぜサクラメントかというと、このタイプの問題に対するエリアと時間の選択は、基本的には真実のデータの入手可能性によって定義されます。作物のタイプや境界のデータなど、そのようなデータは簡単に手に入りません。2015年のサクラメント郡土地利用DWR調査データセットは、サクラメント郡全体をカバーし、手動で調整された境界データを提供する公開データセットです。
使用する主要な衛星画像は、Planetの4バンドのPSScene製品です。これには青、緑、赤、近赤外バンドが含まれており、アットセンサー輝度に放射補正されています。アットセンサー反射率への補正のための係数は、シーンのメタデータに提供されており、異なる時期に撮影された画像間の一貫性をさらに向上させています。
この画像を取得したPlanetのDove衛星は、2017年2月14日に打ち上げられました(プレスリリース)ので、2015年にはサクラメント郡の画像を取得していません。しかし、打ち上げ以来、毎日この地域の画像を撮影しています。この例では、真実のデータと衛星画像の間に完璧ではない2年間のギャップを受け入れます。ただし、2015年と2017年の間でブリッジとしてLandsat 8の低解像度の画像を使用することもできました。
Planetのデータへのアクセス
Planetは正確かつ実行可能なデータを迅速に提供するために、Planet Software Development Kit(SDK)をPython向けに開発しました。これは、衛星画像や他の地理空間データを取り扱いたいデータサイエンティストや開発者向けの強力なツールです。このSDKを使用すると、高解像度の衛星画像やOpenStreetMapなどの他のデータソースからPlanetの広範なコレクションにアクセスできます。このSDKは、PlanetのAPIに対するPythonクライアントと、衛星画像や地理空間データをPythonワークフローに組み込むのに便利なノーコードのコマンドラインインターフェース(CLI)ソリューションを提供します。この例では、Pythonクライアントを使用して分析に必要な画像を特定し、ダウンロードします。
以下のコマンドを使用して、地理空間画像を使用したSageMaker StudioノートブックにPlanet Pythonクライアントをインストールできます:
%pip install planet
クライアントを使用して関連する衛星画像をクエリし、興味のあるエリア、時間範囲、その他の検索条件に基づいて利用可能な結果のリストを取得できます。次の例では、Sacramentoのグラウンドデータを通じて定義した興味のあるエリア内で、2017年6月1日から10月1日までの一定の時間範囲、および最大10%のクラウドカバレッジ範囲を持つ、どれだけのPlanetScopeシーン(Planetの毎日の画像)がカバーされているかを調べます:
#SDKを使用して検索仕様からリクエストを作成する
dataitem_type = ['PSScene']
geom_filter_train = data_filter.geometry_filter(aoi_train)
date_range_filter = data_filter.date_range_filter("acquired", gt=datetime(month=6, day=1, year=2017), lt=datetime(month=10, day=1, year=2017))
cloud_cover_filter = data_filter.range_filter('cloud_cover', lt=0.10)
combined_filter_test = data_filter.and_filter([geom_filter_test, date_range_filter, cloud_cover_filter])
# TRAINデータのクイック検索を実行する
async with Session() as sess:
cl = sess.client('data')
results = cl.search(name='temp_search_train', search_filter=combined_filter_train, item_types=item_type)
train_result_list = [i async for i in results]
print("訓練用画像の数:", len(train_result_list))
返された結果は、興味のあるエリアと重なるマッチングシーンの数を示します。それには、各シーンのメタデータ、画像ID、およびプレビュー画像への参照も含まれています。
特定のシーンが選択された後、シーンID、アイテムタイプ、および製品バンドル(リファレンスドキュメント)の仕様に基づいて、以下のコードを使用して画像とそのメタデータをダウンロードできます:
train_scene_id = '20170601_180425_0f35'
item_type = 'PSScene'
bundle_type = 'analytic_sr_udm2'
# 注文リクエストの定義
products = [order_request.product([train_scene_id], bundle_type, item_type)]
request = order_request.build_request('train_dataset', products=products)
# トレーニングデータのダウンロード
async with Session() as sess:
cl = sess.client('orders')
with reporting.StateBar(state='creating') as bar:
order = await cl.create_order(request)
bar.update(state='created', order_id=train_order['id'])
await cl.wait(train_order['id'], callback=bar.update_state)
await cl.download_order(order_id=order['id'], directory=download_directory, progress_bar=True, overwrite=True)
このコードは、対応する衛星画像をSageMaker StudioのAmazon Elastic File System(Amazon EFS)ボリュームにダウンロードします。
モデルのトレーニング
Planet Pythonクライアントでデータがダウンロードされた後、セグメンテーションモデルのトレーニングが行われます。この例では、KNN分類と画像セグメンテーションの技術の組み合わせを使用して、作物の領域を特定し、ジオリファレンス付きのGeoJSONフィーチャを作成します。
トレーニングに使用するグラウンドトゥルースデータは、2015年のサクラメント郡土地利用DWR調査データセットであり、テストには2017年のPlanetデータが使用されます。
グラウンドトゥルースフィーチャのコンターへの変換
KNN分類器をトレーニングするには、各ピクセルのクラス(crop
またはnon-crop
)を識別する必要があります。ピクセルがグラウンドトゥルースデータの作物フィーチャに関連付けられるかどうかによってクラスが決定されます。この判定のために、まずグラウンドトゥルースデータをOpenCVのコンターに変換し、crop
とnon-crop
のピクセルを分離します。ピクセルの値とその分類は、KNN分類器のトレーニングに使用されます。
グランドトゥルースフィーチャをコンターに変換するには、まずフィーチャを画像の座標参照系に投影する必要があります。次に、フィーチャを画像空間に変換し、最後にコンターに変換します。コンターの精度を確保するために、入力画像に重ねて表示されます。
KNN分類器をトレーニングするために、作物と非作物のピクセルは作物フィーチャのコンターをマスクとして使用して分離されます。
KNN分類器の入力は2つのデータセットで構成されています。1つは分類対象の特徴を提供する2次元の配列Xで、もう1つはクラスを提供する1次元の配列yです(例)。ここでは、非作物データセットと作物データセットから1つの分類バンドが作成されます。バンドの値はピクセルのクラスを示します。バンドと基になる画像のピクセルバンドの値は、クラス分類器の適合関数(fit関数)の入力Xとyに変換されます。
作物と非作物のピクセルでクラシファイアをトレーニングする
KNN分類は、scikit-learnのKNeighborsClassifierを使用して行われます。モデルのパフォーマンスに大きく影響を与える隣接数のパラメータは、KNNクロスバリデーションで交差検証を行い調整されます。その後、調整された隣接数のパラメータと準備したデータセットを使用して、クラシファイアがトレーニングされます。以下のコードを参照してください:
def fit_classifier(pl_filename, ground_truth_filename, metadata_filename, n_neighbors): weights = 'uniform' clf = neighbors.KNeighborsClassifier(n_neighbors, weights=weights) train_class_band = create_contour_classified_band(pl_filename, ground_truth_filename) X = to_X(load_refl_bands(pl_filename, metadata_filename)) y = to_y(train_class_band) clf.fit(X, y) return clfclf = fit_classifier(train_scene_filename, train_ground_truth_filename, train_metadata_filename, n_neighbors)
入力データに対するクラシファイアのパフォーマンスを評価するために、ピクセルのクラスはピクセルバンドの値を使用して予測されます。クラシファイアのパフォーマンスは、トレーニングデータの正確さと、入力データ(ピクセルバンドの値)に基づくピクセルクラスの明確な分離に主に依存しています。後者の精度の誤差を補正するために、隣接数や距離重み付け関数などのクラシファイアのパラメータを調整することができます。以下のコードを参照してください:
def predict(pl_filename, metadata_filename, clf): bands = load_refl_bands(pl_filename, metadata_filename) X = to_X(bands) y = clf.predict(X) return classified_band_from_y(bands[0].mask, y)train_predicted_class_band = predict(train_scene_filename, train_metadata_filename, clf)
モデルの予測を評価する
トレーニングされたKNNクラシファイアは、テストデータで作物領域を予測するために使用されます。このテストデータは、モデルによるトレーニング以前に露出していない領域から成り立っています。言い換えれば、モデルは解析前の領域についての知識を持っていないため、このデータはモデルのパフォーマンスを客観的に評価するために使用できます。まずは、比較的ノイズの多い領域から始めて、いくつかの領域を視覚的に検査します。
視覚的な検査から、予測されたクラスは主に正しいようです。いくつかの領域での逸脱があり、さらに調査を行います。
さらなる調査で、この領域の一部のノイズは、クラス分類された画像(右上の画像と左上、左下の画像を比較)に存在する詳細が、グラウンドトゥルースデータに欠けていることが原因であることがわかりました。特に興味深いのは、分類器が川のそばの木を「非作物」と認識している一方で、グラウンドトゥルースデータではそれらを「作物」と誤って認識していることです。これらの2つのセグメンテーションの違いは、木々が作物の上に陰を作っていることによるものかもしれません。
この後、2つの方法によって異なる分類がされた別の地域を調査します。これらのハイライトされた地域は、2015年のグラウンドトゥルースデータでは非作物地域としてマークされていましたが(右上)、2017年のプラネットスコープのシーン(左上および左下)では明確に作物地域として表示され、分類器(右下)でも主に作物地域として分類されました。
再び、KNN分類器はグラウンドトゥルースクラスよりも細かな結果を示し、作物地域で起こっている変化を成功裏に捉えています。この例は、毎日更新される衛星データの価値も示しています。世界はしばしば年次報告書よりもはるかに速く変化し、このようなMLを用いた組み合わせメソッドは変化をいち早く捉えるのに役立ちます。特に進化する農業分野で衛星データを通じてこのような変化を監視し、発見することは、農民が作業を最適化し、価値チェーン内の農業関係者がシーズンの状況をよりよく把握するのに有益な洞察を提供します。
モデルの評価
予測クラスの画像とグラウンドトゥルースクラスの画像の視覚的比較は主観的であり、分類結果の精度を一般化することはできません。定量的な評価を得るために、scikit-learnのclassification_report
関数を使用して分類メトリックスを取得します:
# train datasetprint(classification_report(to_y(create_contour_classified_band(train_scene_filename, train_ground_truth_filename)), to_y(train_predicted_class_band), target_names=['作物', '非作物'])) precision recall f1-score support 作物 0.89 0.86 0.87 2641818 非作物 0.83 0.86 0.84 2093907 accuracy 0.86 4735725 macro avg 0.86 0.86 0.86 4735725weighted avg 0.86 0.86 0.86 4735725# test datasetprint(classification_report(to_y(create_contour_classified_band(test_scene_filename, test_ground_truth_filename)), to_y(test_predicted_class_band), target_names=['作物', '非作物'])) precision recall f1-score support 作物 0.94 0.73 0.82 1959630 非作物 0.32 0.74 0.44 330938 accuracy 0.73 2290568 macro avg 0.63 0.74 0.63 2290568weighted avg 0.85 0.73 0.77 2290568
ピクセルの分類は、作物地域のセグメンテーションマスクを作成するために使用されますので、精度と再現率の両方が重要なメトリックであり、F1スコアは予測の精度を示す良好な総合的な尺度です。結果は、訓練データセットとテストデータセットの両方で作物地域と非作物地域のメトリックスを提供します。ただし、シンプルにするために、テストデータセット内の作物地域のメトリックスについて詳しく見てみましょう。
精度は、モデルの正確な陽性予測の度合いを示す指標です。この場合、作物地域の精度が0.94であることは、モデルが実際に作物地域である領域を正しく識別することに非常に成功していることを意味し、誤った陽性予測(実際には作物地域ではない領域を誤って作物地域として識別したもの)を最小限に抑えています。一方、再現率は陽性予測の完全性を測定します。言い換えれば、再現率は正しく識別された実際の陽性の割合を測定します。この場合、作物地域の再現率値が0.73であることは、すべての本当の作物地域ピクセルの73%が正しく識別されており、誤った陰性が最小限に抑えられていることを意味します。
理想的には、精度と再現率の両方が高い値が望まれますが、これは大きくケーススタディのアプリケーションに依存する場合があります。たとえば、農業向けに作物地域を特定しようとしている農民がこれらの結果を検討する場合、土地を最大限活用するために誤った陰性(実際には作物地域であるが非作物地域として識別された領域)の数を最小限に抑えるために、精度よりも再現率を優先することが望ましいでしょう。F1スコアは、精度と再現率の両方を組み合わせた全体的な精度指標であり、2つのメトリックスのバランスを測定します。作物地域の場合、0.82のような高いF1スコアは、精度と再現率の両方のバランスが良く、高い全体的な分類精度を示します。訓練データセットに対して分類器が訓練されたため、F1スコアは訓練データセットとテストデータセット間で低下するのは予想されることです。全体的な加重平均F1スコアが0.77となり、これはセグメンテーションスキームを分類されたデータに適用してみるのに十分有望で適切です。
分類器からセグメンテーションマスクの作成
テストデータセット上でKNN分類器の予測結果を使用してセグメンテーションマスクを作成する際には、画像ノイズによる細かいセグメントを避けるために予測された出力をクリーンアップする必要があります。チラツキノイズを除去するために、OpenCVの中央値フィルタを使用します。このフィルタは、形態学的開操作よりもよりよく作物間の道路区別を保持します。
ノイズ除去された出力にバイナリセグメンテーションを適用するためには、まずOpenCVのfindContours関数を使用して、分類されたラスタデータをベクトルフィーチャに変換する必要があります。
最後に、セグメンテーションされた作物領域は、セグメンテーションされた作物の輪郭を使用して計算できます。
KNN分類器から生成されたセグメンテーションされた作物領域により、テストデータセット内の作物領域を正確に識別することが可能となります。これらのセグメンテーション領域は、畑の境界の識別、作物のモニタリング、収量の推定、資源の割り当てなど、さまざまな目的に使用できます。達成されたF1スコア0.77は優れており、リモートセンシング画像での作物セグメンテーションにおいてKNN分類器が効果的なツールであることを示しています。これらの結果は、作物セグメンテーション技術のさらなる改良と洗練に活用でき、作物分析の精度と効率の向上につながる可能性があります。
結論
この投稿では、Planetの高頻度で高解像度な衛星画像とSageMakerの地理空間能力の組み合わせを使用して、作物セグメンテーション分析を実行する方法を示し、農業の効率向上、環境の持続可能性、食料安全保障の向上に役立つ貴重な洞察を提供しました。作物領域を正確に識別することにより、作物の成長と生産性のさらなる分析、土地利用の変化のモニタリング、潜在的な食料安全保障のリスクの検出などが可能となります。
さらに、PlanetのデータとSageMakerの組み合わせには、作物セグメンテーションを超える幅広いユースケースがあります。これらの洞察は、農業における作物管理、資源の割り当て、政策計画に基づくデータに基づく意思決定を可能にします。異なるデータとMLモデルを使用することで、組み合わせた提供物は他の産業やユースケースにも拡大し、デジタルトランスフォーメーション、持続可能性の変革、セキュリティに向けた展開が可能となります。
SageMakerの地理空間能力を使用する方法については、Amazon SageMakerの地理空間能力入門を参照してください。
Planetの画像仕様と開発者リファレンス資料については、Planet Developer’s Centerを訪問してください。PlanetのPython SDKのドキュメントについては、Planet SDK for Pythonを参照してください。Planetの既存データ製品や今後の製品リリースについては、https://www.planet.com/を訪問してください。
Planet Labs PBCに関する将来の展望に関する陳述
本ブログ投稿に記載されている事項は、過去の情報を除き、Planet Labs PBCによる将来の展望に関する法的な安全保証規定に基づく前向きな陳述であり、Planet Labs PBCの能力、現在の製品改良、新製品、戦略的パートナーシップや顧客協力から得られる潜在的な利益をキャプチャおよび実現する能力に関するものです。前向きな陳述は、Planet Labs PBCの経営陣の信念、および彼らの利用可能な情報との前提に基づいています。そのような陳述は、将来のイベントや結果に関する予想に基づいており、事実ではないため、実際の結果は予測と異なる場合があります。実際の結果が現在の期待と異なる原因には、Planet Labs PBCの定期報告書、委任状、その他の開示資料に含まれるPlanet Labs PBCおよびその事業に関するリスク要因とその他の開示事項が含まれます。これらの資料はwww.sec.govでオンラインで入手でき、Planet Labs PBCのウェブサイトwww.planet.comでも入手できます。すべての前向きな陳述は、Planet Labs PBCの信念と前提に基づいており、そのような陳述がなされた日付のみ有効です。Planet Labs PBCは将来のイベントや状況を反映するために前向きな陳述を更新する義務を負いません。
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles