Torchgeoは、TorchVisionに似たPytorchドメインライブラリであり、地理空間データに固有のデータセット、サンプラー、変換、および事前に訓練されたモデルを提供しています。
このライブラリの目標は、それをシンプルにすることです。
コミュニティ:
パッケージ:
テスト:
Torchgeoをインストールする推奨方法は、PIPを使用することです。
pip install torchgeoCondaおよびSpackのインストール手順については、ドキュメントを参照してください。
ReadthedocsでTorchgeoのドキュメントを見つけることができます。これには、APIドキュメント、貢献手順、およびいくつかのチュートリアルが含まれます。詳細については、論文、ポッドキャストエピソード、チュートリアル、ブログ投稿をご覧ください。
次のセクションでは、Torchgeoでできることの基本的な例を示します。
まず、次のセクションで使用されるさまざまなクラスと関数をインポートします。
from lightning . pytorch import Trainer
from torch . utils . data import DataLoader
from torchgeo . datamodules import InriaAerialImageLabelingDataModule
from torchgeo . datasets import CDL , Landsat7 , Landsat8 , VHR10 , stack_samples
from torchgeo . samplers import RandomGeoSampler
from torchgeo . trainers import SemanticSegmentationTask多くのリモートセンシングアプリケーションには、地理的メタデータを備えたデータセットの地理空間データセットの操作が含まれます。これらのデータセットは、さまざまなデータのために操作するのが難しい場合があります。地理空間画像は、多くの場合、異なる数のスペクトルバンドとすべての衛星の空間分解能を持つマルチスペクトルです。さらに、各ファイルは異なる座標参照システム(CRS)にある場合があり、データを一致するCRSに再損傷する必要があります。
この例では、Torchgeoを使用してLandsatとCropland Data Layer(CDL)データの組み合わせから、地理空間データを操作し、小さな画像パッチをサンプリングすることがどれほど簡単かを示します。まず、ユーザーがLandsat 7および8の画像をダウンロードしていると仮定します。 Landsat 8にはLandsat 7よりも多くのスペクトルバンドがあるため、両方の衛星が共通しているバンドのみを使用します。これら2つのデータセット間でユニオンを取得することにより、Landsat 7と8の両方のデータからのすべての画像を含む単一のデータセットを作成します。
landsat7 = Landsat7 ( paths = "..." , bands = [ "B1" , ..., "B7" ])
landsat8 = Landsat8 ( paths = "..." , bands = [ "B2" , ..., "B8" ])
landsat = landsat7 | landsat8次に、このデータセットとCDLデータセットの間の交差点を取ります。 LandsatとCDLの両方のデータを持っている地域からのみサンプリングするように、組合の代わりに交差点を取りたいと考えています。 CDLデータを自動的にダウンロードしてチェックすることができることに注意してください。また、これらの各データセットには、異なる座標参照システム(CRS)または解像度のファイルが含まれている場合がありますが、Torchgeoは一致するCRSと解像度を自動的に保証します。
cdl = CDL ( paths = "..." , download = True , checksum = True )
dataset = landsat & cdlこのデータセットは、Pytorchデータローダーで使用できるようになりました。ベンチマークデータセットとは異なり、地理空間データセットには非常に大きな画像が含まれることがよくあります。たとえば、CDLデータセットは、米国大陸全体をカバーする単一の画像で構成されています。地理座標を使用してこれらのデータセットからサンプリングするために、Torchgeoは多くのサンプラーを定義します。この例では、256 x 256ピクセルの画像とエポックあたり10,000サンプルを返すランダムサンプラーを使用します。また、カスタム照合関数を使用して、各サンプル辞書をサンプルのミニバッチに組み合わせます。
sampler = RandomGeoSampler ( dataset , size = 256 , length = 10000 )
dataloader = DataLoader ( dataset , batch_size = 128 , sampler = sampler , collate_fn = stack_samples )このデータローダーは、通常のトレーニング/評価パイプラインで使用できるようになりました。
for batch in dataloader :
image = batch [ "image" ]
mask = batch [ "mask" ]
# train a model, or make predictions using a pre-trained model多くのアプリケーションには、このような地理空間メタデータに基づいてデータセットをインテリジェントに構成することが含まれます。たとえば、ユーザーは次のようにしたい場合があります。
これらの組み合わせでは、すべてのクエリが少なくとも1つのデータセットに存在し、 UnionDatasetを使用して作成できます。同様に、ユーザーは次のようにしたい場合があります。
これらの組み合わせでは、すべてのクエリが両方のデータセットに存在する必要があり、 IntersectionDataset DataSetを使用して作成できます。 Torchgeoは、交差点( & )およびUnion( | )演算子を使用するときに、これらのデータセットを自動的に構成します。
Torchgeoには、入力画像とターゲットラベルの両方を含むダタセットの多くのベンチマークデータセットが含まれています。これには、画像分類、回帰、セマンティックセグメンテーション、オブジェクト検出、インスタンスセグメンテーション、変更検出などなどのタスクのデータセットが含まれます。
TorchVisionを以前に使用した場合、これらのデータセットは非常に馴染みのあるように思われるはずです。この例では、北西ポリテクニカル大学(NWPU)非常に高い解像度の10クラス(VHR-10)地理空間オブジェクト検出データセットのデータセットを作成します。このデータセットは、TorchVisionと同様に、自動的にダウンロード、チェックサム、抽出できます。
from torch . utils . data import DataLoader
from torchgeo . datamodules . utils import collate_fn_detection
from torchgeo . datasets import VHR10
# Initialize the dataset
dataset = VHR10 ( root = "..." , download = True , checksum = True )
# Initialize the dataloader with the custom collate function
dataloader = DataLoader (
dataset ,
batch_size = 128 ,
shuffle = True ,
num_workers = 4 ,
collate_fn = collate_fn_detection ,
)
# Training loop
for batch in dataloader :
images = batch [ "image" ] # list of images
boxes = batch [ "boxes" ] # list of boxes
labels = batch [ "labels" ] # list of labels
masks = batch [ "masks" ] # list of masks
# train a model, or make predictions using a pre-trained modelすべてのTorchgeoデータセットは、Pytorchデータローダーと互換性があるため、既存のトレーニングワークフローに簡単に統合できます。 TorchgeoのベンチマークデータセットとTorchvisionの同様のデータセットの唯一の違いは、各データセットが各Pytorch Tensorのキーを備えた辞書を返すことです。
事前に訓練されたウェイトは、コンピュータービジョンの転送学習タスクに非常に有益であることが証明されています。実践者は通常、RGB画像を含むImagenetデータセットで事前に訓練されたモデルを利用します。ただし、リモートセンシングデータは、センサー間で異なる可能性のある追加のマルチスペクトルチャネルを使用して、RGBを超えていることがよくあります。 Torchgeoは、さまざまなマルチスペクトルセンサーで事前に訓練されたモデルをサポートする最初のライブラリであり、TorchvisionのマルチウェイトAPIを採用しています。現在利用可能なウェイトの要約は、ドキュメントで見ることができます。 Sentinel-2画像で事前に処理された重みでTIMM RESNET-18モデルを作成するには、次のことを行うことができます。
import timm
from torchgeo . models import ResNet18_Weights
weights = ResNet18_Weights . SENTINEL2_ALL_MOCO
model = timm . create_model ( "resnet18" , in_chans = weights . meta [ "in_chans" ], num_classes = 10 )
model . load_state_dict ( weights . get_state_dict ( progress = True ), strict = False )これらの重みは、 weights引数を介して次のセクションに示すTorchgeo Lightningモジュールでも直接使用できます。ノートの例については、このチュートリアルを参照してください。
文献で公開された結果間の直接的な比較を促進し、トーチョのデータセットを使用して実験を実行するために必要なボイラープレートコードをさらに削減するために、分類、回帰、セマン派のセグメンテーションなどのさまざまなタスクのために、明確に定義された列車テストスプリットとトレーナーを備えた稲妻データモジュールを作成しました。これらのデータモジュールは、Korniaライブラリから増強を組み込む方法を示し、前処理変換(事前に計算されたチャネル統計を含む)を含み、ユーザーが(モデリングプロセスとは対照的に)データ自体に関連するハイパーパラメーターを簡単に実験できるようにします。 INRIAの空中画像ラベル付けデータセットでセマンティックセグメンテーションモデルをトレーニングすることは、いくつかのインポートと4行のコードと同じくらい簡単です。
datamodule = InriaAerialImageLabelingDataModule ( root = "..." , batch_size = 64 , num_workers = 6 )
task = SemanticSegmentationTask (
model = "unet" ,
backbone = "resnet50" ,
weights = True ,
in_channels = 3 ,
num_classes = 2 ,
loss = "ce" ,
ignore_index = None ,
lr = 0.1 ,
patience = 6 ,
)
trainer = Trainer ( default_root_dir = "..." )
trainer . fit ( model = task , datamodule = datamodule )Torchgeoは、LightningCliを使用したコマンドラインインターフェイストレーニングもサポートしています。 2つの方法で呼び出すことができます。
# If torchgeo has been installed
torchgeo
# If torchgeo has been installed, or if it has been cloned to the current directory
python3 -m torchgeoコマンドライン構成またはYAML/JSON構成ファイルをサポートします。有効なオプションは、ヘルプメッセージから見つけることができます。
# See valid stages
torchgeo --help
# See valid trainer options
torchgeo fit --help
# See valid model options
torchgeo fit --model.help ClassificationTask
# See valid data options
torchgeo fit --data.help EuroSAT100DataModule次の構成ファイルを使用してください。
trainer :
max_epochs : 20
model :
class_path : ClassificationTask
init_args :
model : ' resnet18 '
in_channels : 13
num_classes : 10
data :
class_path : EuroSAT100DataModule
init_args :
batch_size : 8
dict_kwargs :
download : trueスクリプトが動作しているのを見ることができます:
# Train and validate a model
torchgeo fit --config config.yaml
# Validate-only
torchgeo validate --config config.yaml
# Calculate and report test accuracy
torchgeo test --config config.yaml --ckpt_path=...また、新しい機能を追加するために拡張する必要がある場合は、Pythonスクリプトでインポートおよび使用することもできます。
from torchgeo . main import main
main ([ "fit" , "--config" , "config.yaml" ])詳細については、Lightningドキュメントを参照してください。
作業でこのソフトウェアを使用する場合は、私たちの論文を引用してください。
@inproceedings { Stewart_TorchGeo_Deep_Learning_2022 ,
address = { Seattle, Washington } ,
author = { Stewart, Adam J. and Robinson, Caleb and Corley, Isaac A. and Ortiz, Anthony and Lavista Ferres, Juan M. and Banerjee, Arindam } ,
booktitle = { Proceedings of the 30th International Conference on Advances in Geographic Information Systems } ,
doi = { 10.1145/3557915.3560953 } ,
month = nov,
pages = { 1--12 } ,
publisher = { Association for Computing Machinery } ,
series = { SIGSPATIAL '22 } ,
title = { {TorchGeo}: Deep Learning With Geospatial Data } ,
url = { https://dl.acm.org/doi/10.1145/3557915.3560953 } ,
year = { 2022 }
}このプロジェクトは、貢献と提案を歓迎します。プルリクエストを送信したい場合は、詳細については、寄付ガイドを参照してください。
このプロジェクトは、Microsoftのオープンソース行動規範を採用しています。詳細については、FAQのコードを参照するか、追加の質問やコメントについては[email protected]にお問い合わせください。