geo-deep-learning について
geo-deep-learningは、地球観測データの深層学習ワークフローを計画・検証するスキルです。空間リークを防ぎ、データ準備から地図上の予測結果まで地理参照を保つことを重視します。
主な機能
- 01ラベルセットとタスクの評価
- 02地理的に独立したデータ分割
- 03地理参照を保つチップ作成
- 04学習と推論の指針
- 05地図による出力検証
活用シーン
- 01深層学習とベースラインの選択
- 02学習・検証リークを防ぐチップ準備
- 03大規模シーンで位置合わせ済みの予測を作成
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ muend/ geoai-skills --skill geo-deep-learningインストール後、Claude Code で/geo-deep-learningを入力して読み込まれたか確認します。
同梱ファイルagents/openai.yamlreferences/authoritative-sources.md
詳細
地理空間ディープラーニング
目的: この分野を支配する2つの失敗モード — 空間リーク(近接する学習/テストピクセルによる過大評価された指標)と地理参照の喪失(もはや地図と一致しない予測) — を最初から設計で排除した、地球観測に関するディープラーニング。
アーキテクチャに名前を付ける前にラベルセットを特徴づける
ラベルセットを知らずに与えられるアーキテクチャの助言は当て推量です。U-Net と基盤モデルと非ディープなベースラインのどれを推奨するかを決める前に、次のことを述べるか尋ねてください。
- ラベル数とラベル付き面積 — ポリゴンの数だけでは何もわかりません。2 ha を覆う40個のポリゴンと 2 000 km² を覆う40個のポリゴンは別の問題です。
- 地理的な広がり — ラベルは1つのシーン、1つの季節、1つのセンサーに集中しているのか、それとも展開対象領域全体に広がっているのか? 集中したラベルは、どのモデルが汎化できるかの上限を定め、地理的に独立した検証分割がそもそも構築可能かどうかを左右します。
- クラスバランスと少数クラスのピクセル割合 — 損失とサンプリングの選択が根拠を持つようにするためです。
- 展開先の地理 — 予測が行われる場所と、ラベルがある場所との関係。
これらが判明する前に「大きなモデルをファインチューニングするか、より単純なアプローチを使う」と答えてはいけません。ユーザーがこれらを提供していない場合は、尋ねたうえで、回答に条件付けられた暫定的な推奨を与えてください(「40個のポリゴンが1つのシーンにあるなら、その場合は…。領域全体にまたがるなら、その場合は…」)。決して単一の無条件の推奨をしてはいけません。
まず問題の枠組み
| タスク | ヘッド/アーキテクチャの既定 | 指標 |
|---|---|---|
| ピクセル単位のクラス(土地被覆) | U-Net / DeepLabv3+(事前学習済みエンコーダ) | mIoU、クラス別 IoU |
| バイナリ抽出(建物、水域、道路) | U-Net + Dice/CE ハイブリッド | IoU、F1、道路では境界 F1 |
| 物体検出(車両、船舶、樹木) | YOLO 系 / Faster R-CNN、向きがある場合は回転ボックス | mAP@50 |
| シーン分類 | ファインチューニングした CNN/ViT | F1(マクロ) |
| 回帰(高さ、バイオマス、密度) | 回帰ヘッド付き U-Net | RMSE/MAE + 空間残差マップ |
ディープモデルの前に、安価なベースライン(バンド+インデックスに対するランダムフォレスト、または閾値処理したインデックス)を実行してください。DL モデルがそれを明確に上回れないなら、問題はデータであり、アーキテクチャではありません。segmentation-models-pytorch と torchgeo がほとんどのニーズをカバーします — 理由なくアーキテクチャを自作しないでください。
チッピング(データセット構築)
- チップサイズ: 256〜512 px。ストライドをチップサイズより小さくするのは学習時のみ(重なりは拡張になる)、重なり合うチップが学習/検証の境界をまたぐことは決して許さないでください。
- 地理参照を保持する: 各チップの変換/境界を保存してください(torchgeo データセット、または GeoParquet のサイドカーインデックス)。地図に戻せない予測は無価値です。
- チップはネイティブのデータ範囲のままにしてください。正規化にはデータセットから計算したバンドごとの統計を使用してください(ImageNet の統計は、事前学習済みエンコーダを使う3バンド RGB の場合のみで、その旨を明示してください)。
- クラス不均衡は常態です(建物はピクセルの約2〜5%)。チップごとのクラス割合を記録してください。損失を認識できないほど歪めるのではなく、陽性を含むチップをオーバーサンプリングしてください。
分割ポリシー — 譲れない条件
地理的ブロックまたはシーンで分割し、決してランダムなチップで分割しないでください。隣接するチップはほぼ重複です。ランダム分割は美しく、偽りの検証曲線を生み出します。標準プロトコルに従ってください:
ml-experiment-standards → references/spatial-cv-protocol.md。
地域をまたぐ汎化の主張には、1つの地域全体をホールドアウトしてください。
学習時のデフォルト設定
- 損失関数: Dice + CE(セグメンテーション、不均衡データ); バランスが取れている場合は通常の CE、Focal は比較した後にのみ採用 — 無条件に優位になるわけではありません。
- データ拡張: 反転/rot90 は天底画像に対して安全です; マルチスペクトル画像へのカラージッターには注意してください(放射量としての意味が壊れます — バンドドロップアウトやわずかなスケーリングを優先してください); 物理法則に反する拡張は決して行わないでください。
- エンコーダは事前学習済みを使用; マルチスペクトル入力の場合は最初の畳み込み層を inflate/置換するか、バンドが一致する場合は EO 基盤モデルのチェックポイント(Prithvi、SatMAE、Clay)を使用してください。
- val mIoU による早期終了(patience 10-15); cosine または plateau の LR スケジューラ; AMP はデフォルトで有効。
- 実行ごとに設定 + メトリクス + git ハッシュをログに記録 —
ml-experiment-standardsを参照してください。
大規模シーンでの推論
オーバーラップ(25-50%)とブレンディング(feather/gaussian または center-crop スティッチング)を伴うスライディングウィンドウを使用して、タイル境界のアーティファクトを消します。その後:
import rasterio
with rasterio.open(scene_path) as src:
profile = src.profile
profile.update(count=1, dtype="uint8", nodata=255, compress="deflate")
with rasterio.open(out_path, "w", **profile) as dst:
dst.write(mask.astype("uint8"), 1) # same transform/CRS as the scene
後処理: 小さなブロブを除去し(最小マッピング単位)、必要に応じて建物ポリゴンを正規化し、GIS 納品用にベクタ化します(rasterio.features.shapes)。メトリクスは後処理の後にも報告してください — それがユーザーが出荷するものです。
検証プロトコル
- メトリクス表: クラスごとの IoU/F1 と、シードまたはフォールド間の信頼区間。
- エラーマップ: 既知の困難な領域を含む 3 つ以上の代表的な領域について、画像上に予測と参照を重ねて表示。
- 分布外パッチ(異なる季節/地域)でのサニティ推論と、劣化に関する正直な注記。
- アラインメントチェック: 2 つのズームレベルで GIS 上に予測をソースシーンに重ねて表示 — 変換のバグを即座に検出できます。
落とし穴チェックリスト
- ランダムなチップ分割 → リークがあり、再現不可能な「SOTA」。
- 保存されていない train 時の統計でテストデータを正規化 → 推論が偏る。
- NumPy の世界で geotransform を失う; デフォルトの north-up 変換で予測を書き出す。
- オーバーラップなしの推論によるタイル境界の継ぎ目。
- スケーリングなしで uint16 画像を float パイプラインに投入 → 勾配が死ぬ。
- 製品がスティッチされたマップであるのに、チップレベルで精度を報告する。
実行契約
- ワークフロー: ターゲットと予測の単位を定める; チップとラベルを構築する; 空間分割を作成する; ベースラインに対して学習する; オーバーラップを考慮した推論を実行する; スティッチされた製品を検証する。
- 意思決定ルール: 深層学習は、ラベルの量、空間的テクスチャ、計算資源、期待される改善がそれを正当化する場合にのみ使用してください; そうでなければ、より単純なリモートセンシングまたは ML ワークフローを優先してください。
- 検証プロトコル: シードまたはフォールド間の空間ホールドアウトメトリクスを報告し、エラーマップと困難な領域を検査し、地理的な転移をテストし、出力のジオレファレンスを確認してください。
- 失敗モード: リークしたチップ、ラベルのミスアラインメント、train/推論の正規化ドリフト、タイルの継ぎ目、または間違った製品単位で計算されたメトリクスに対して結果を無効化します。
- 成果物: モデルと設定、分割マニフェスト、前処理契約、不確実性を含むメトリクス、ジオレファレンスされた予測、エラーマップ、モデルカードの制限事項。
- ソースの鮮度: フレームワーク API、データセット、重みを選択する前に権威あるソースレジストリを参照し、確認した日付を記録してください。