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]。