Torchgeo是一個類似於Torchvision的Pytorch域庫,提供了針對地理空間數據的數據集,採樣器,變換和預訓練的模型。
該庫的目的是使其簡單:
社區:
包裝:
測試:
安裝火炬的推薦方法是使用PIP:
pip install torchgeo有關Conda和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數據層(CDL)數據組合進行小型圖像貼片的小型圖像貼片非常容易。首先,我們假設用戶下載了Landsat 7和8圖像。由於Landsat 8比Landsat 7具有更多的光譜頻帶,因此我們只使用兩個衛星具有共同點。我們將通過在這兩個數據集之間進行聯合來創建一個數據集,包括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許多應用程序涉及基於地理空間元數據的智能編寫數據集。例如,用戶可能需要:
這些組合要求至少一個數據集中存在所有查詢,並且可以使用UnionDataset創建。同樣,用戶可能需要:
這些組合要求兩個數據集都存在所有查詢,並且可以使用IntersectionDataset創建。當您使用交叉點( & )和Union( | )運算符時,Torchgeo會自動為您組成這些數據集。
Torchgeo包含許多基準數據集 - 包括輸入圖像和目標標籤的數據集。這包括用於圖像分類,回歸,語義分割,對象檢測,實例分割,更改檢測等任務的數據集。
如果您以前使用過Torchvision,這些數據集似乎應該非常熟悉。在此示例中,我們將為西北理工大學(NWPU)創建一個非常高分辨率的十級(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的鍵的字典。
事實證明,預訓練的權重對計算機視覺中的轉移學習任務非常有益。從業人員通常會在ImageNet數據集中使用預訓練的模型,其中包含RGB圖像。但是,遙感數據通常超出了RGB超出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數據集進行實驗所需的樣板代碼,我們創建了具有定義明確的火車效率測試儀和培訓師的閃電數據漫步,用於分類,回歸,回歸,回歸和語義分段。這些數據模塊顯示瞭如何合併Kornia庫中的增強功能,包括預處理變換(具有預計算的通道統計信息),並讓用戶輕鬆地嘗試與數據本身相關的超參數(與建模過程相對)。在Inria航空圖像標籤數據集上訓練語義分割模型就像幾個進口和四行代碼一樣容易。
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的命令行界面培訓。它可以通過兩種方式調用:
# 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" ])有關更多詳細信息,請參見閃電文檔。
如果您在工作中使用此軟件,請引用我們的論文:
@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開源的行為代碼。有關更多信息,請參見《行為守則常見問題守則》或與其他問題或評論聯繫[email protected]。