点击下面卡片,快速关注本公众号
几十年来,地球观测卫星、飞机以及最近的无人机平台一直在收集越来越多的地球表面图像。遥感图像包含有关季节性和长期趋势的信息,对于解决人类面临的一些最大挑战,包括气候变化适应、自然灾害监测、水资源管理和全球人口增长的粮食安全,具有不可估量的价值。从计算机视觉的角度来看,这包括土地覆盖制图(语义分割)、森林砍伐和洪水监测(变化检测)、冰川流动(像素跟踪)、飓风跟踪和强度估计(回归)以及建筑物和道路检测(目标检测,实例分割)等应用。通过利用深度学习架构的最新进展、更便宜、更强大的 GPU 以及 PB 级的免费卫星图像数据集,我们可以更接近于解决这些重要问题。
然而,数据采集方法的差异以及地理空间元数据的处理使得将深度学习方法应用于遥感数据变得复杂。例如,卫星图像通常包含红、绿、蓝之外的额外光谱波段,并且必须与其他可能具有不同坐标系统、边界和分辨率的地理空间数据源结合。
为了实现深度学习在遥感应用中的潜力,微软人工智能研究院与美国伊利诺伊大学厄巴纳-香槟分校的研究人员联合推出了TorchGeo,这是一个用于将地理空间数据集成到PyTorch深度学习生态系统中的Python库。
TorchGeo提供了多种基准数据集的数据加载器、用于通用地理空间数据源的可组合数据集、地理空间数据的采样器,以及适用于多光谱图像的变换。TorchGeo还是首个提供多光谱卫星图像(例如,使用Sentinel 2卫星所有波段的模型)的预训练模型的库,这使得在有限标记数据的情况下,进行下游遥感任务的迁移学习取得进展。
TorchGeo 旨在使机器学习专家可以轻松地处理地理空间数据,并且遥感专家可以探索机器学习解决方案。
TorchGeo的安装与使用示例
TorchGeo 支持在不同的操作系统(Linux、macOS、Windows)上运行。它可以使用用户擅长的任何包管理器轻松安装,包括 pip、conda 和mamba。
TorchGeo 的设计目标是拥有与 torchvision、torchtext 和 torchaudio 等其他 PyTorch 领域库相同的 API。如果用户已经在工作流程中使用 torchvision 处理计算机视觉数据集,则只需更改几行代码即可切换到 TorchGeo。
所有 TorchGeo 数据集和采样器都与 PyTorch DataLoader
类兼容,这意味着用户可以利用 PyTorch Lightning 等包装库进行分布式训练。
以下示例应用程序中,我们组合了 A) 来自 Landsat 8 的场景和 B) 农田数据层标签,即使这些文件位于不同的 EPSG 投影中。我们希望使用地理空间边界框作为索引,从这些数据集中采样补丁 C) 和 D)。许多遥感应用都涉及处理 地理空间数据集(具有地理元数据的数据集)。在 TorchGeo 中定义了一个GeoDataset
类来表示这类数据集。每个GeoDataset
不是由整数索引,而是由时空边界框索引,这意味着可以智能地组合覆盖不同地理范围的两个或多个数据集。在这个例子中展示使用 TorchGeo 处理地理空间数据以及从 Landsat 和农田数据层 (CDL) 数据的组合中采样小图像块是多么容易。首先,假设用户已经下载了 Landsat 7 和 8 图像。由于 Landsat 8 比 Landsat 7 具有更多的光谱波段,因此只使用这两颗卫星共有的波段。然后将通过取这两个数据集的并集来创建一个包含Landsat 7和8数据的所有图像的单个数据集。from torch.utils.data import DataLoader
from torchgeo.datasets import CDL, Landsat7, Landsat8, stack_samples
from torchgeo.samplers import RandomGeoSampler
landsat7 = Landsat7(root="...")
landsat8 = Landsat8(root="...", bands=Landsat8.all_bands[1:-2])
landsat = landsat7 | landsat8
接下来,我们取这个数据集和 CDL 数据集的交集。我们想要取交集而不是并集,以确保我们只从同时拥有 Landsat 和 CDL 数据的区域采样。请注意,我们可以自动下载和校验 CDL 数据。另请注意,这些数据集中的每一个都可能包含不同 CRS 或分辨率的文件,但 TorchGeo 会自动确保使用匹配的 CRS 和分辨率。
cdl = CDL(root="...", download=True, checksum=True)
dataset = landsat & cdl
该数据集现在可以与 PyTorch 数据加载器一起使用。与基准数据集不同,地理空间数据集通常包含非常大的图像。例如,CDL 数据集由覆盖整个美国本土的单一图像组成。为了使用地理空间坐标从这些数据集中采样,TorchGeo 定义了许多采样器。在本例中,我们将使用一个随机采样器,它返回 256 x 256 像素的图像,每个时期返回1万个样本。我们还将使用自定义整理函数将每个样本字典组合成一个样本的 mini-batch。
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"]
许多应用程序需要根据像这样的地理空间元数据智能地组合数据集。例如,用户可能希望:
这些组合要求所有查询都存在于至少一个数据集中,并且可以使用 UnionDataset
创建。
这些组合要求所有查询都存在于两个数据集中,并且可以使用 IntersectionDataset
创建。当您使用交集(&
)和并集(|
)运算符时,TorchGeo 会自动为您组合这些数据集。
TorchGeo升级至版本0.6.0
近期,TorchGeo升级到了版本0.6.0,此次大型更新包含了新的数据集、基础模型等。具体来说,此次发布包含18个新数据集、15个新的Lightning数据模块(使得在给定数据集上训练/验证/测试模型变得简单),以及27个新的预训练模型(针对不同类型的地球观测数据进行专业化设计)。
其中一个新模型DOFA(https://arxiv.org/abs/2403.15356)支持RGB、SAR、MSI和HSI,且可以处理任意数量的光谱波段。这与TorchGeo的RasterDatasets的灵活性相结合,使用户几乎可以开箱即用地测试预训练模型在他们的下游应用中的表现。
主页:https://github.com/microsoft/torchgeo
文档:https://torchgeo.readthedocs.io/
PyPI:https://pypi.org/project/torchgeo/
论文:https://arxiv.org/abs/2111.08872
https://github.com/xiong-zhitong/DOFA-pytorch
https://huggingface.co/XShadow/DOFA
https://arxiv.org/abs/2403.15356
https://github.com/microsoft/torchgeo/releases/tag/v0.6.0
本公众号相关内容推荐