跳转到主要内容

PyTorch遥感库

项目描述

PyTorch遥感(torchrs)

github actions pypi pypi downloads license

(WIP) PyTorch在遥感任务(变化检测、图像超分辨率、土地覆盖分类/分割、图像标题、视听识别等)中实现流行的数据集和模型的实现,适用于各种光学(Sentinel-2、Landsat等)和合成孔径雷达(SAR)(Sentinel-1)传感器。

安装

# pypi
pip install torch-rs

# pypi with training extras
pip install 'torch-rs[train]'

# latest
pip install git+https://github.com/isaaccorley/torchrs

# latest with extras
pip install 'git+https://github.com/isaaccorley/torchrs.git#egg=torch-rs[train]'

目录表

数据集

PROBA-V 超分辨率

PROBA-V 超分辨率挑战数据集是欧洲空间局(ESA)PROBA-V 植被卫星采集的多图像超分辨率(MISR)图像数据集。数据集包含未注册的300米低分辨率(LR)图像集合,可用于生成单张100米高分辨率(HR)图像,适用于近红外(NIR)和红波段。此外,每个LR图像都有质量掩码(QM),每个HR图像都有状态掩码(SM)。PROBA-V包含传感器,能够在100米和300米的空间分辨率下,分别以5天和1天的重访率采集图像。生成高分辨率图像估算将有效地增加植被监测中可用HR图像的频率。

可以使用scripts/download_probav.sh下载(0.83GB)数据集,并在下方实例化

from torchrs.transforms import Compose, ToTensor
from torchrs.datasets import PROBAV

transform = Compose([ToTensor()])

dataset = PROBAV(
    root="path/to/dataset/",
    split="train",  # or 'test'
    band="RED",     # or 'NIR'
    lr_transform=transform,
    hr_transform=transform
)

x = dataset[0]
"""
x: dict(
    lr: low res images  (t, 1, 128, 128)
    qm: quality masks   (t, 1, 128, 128)
    hr: high res image  (1, 384, 384)
    sm: status mask     (1, 384, 384)
)
t varies by set of images (minimum of 9)
"""

ETCI 2021洪水检测

ETCI 2021数据集欧洲空间局(ESA)Sentinel-1卫星采集的合成孔径雷达(SAR)图像洪水检测分割数据集。数据集包含由混合插件处理管道(hyp3)处理的VV和VH极化图像对,以及相应的二值洪水和水体地面真值掩码。

可以使用scripts/download_etci2021.sh下载(5.6GB)数据集,并在下方实例化

from torchrs.transforms import Compose, ToTensor
from torchrs.datasets import ETCI2021

transform = Compose([ToTensor()])

dataset = ETCI2021(
    root="path/to/dataset/",
    split="train",  # or 'val', 'test'
    transform=transform
)

x = dataset[0]
"""
x: dict(
    vv:         (3, 256, 256)
    vh:         (3, 256, 256)
    flood_mask: (1, 256, 256)
    water_mask: (1, 256, 256)
)
"""

HKH冰川制图

Hindu Kush Himalayas(HKH)冰川制图数据集由美国地质调查局(USGS)Landsat 7卫星采集的7,095张512x512多光谱图像的语义分割数据集。数据集包含2002-2008年HKH地区(涵盖8个国家)的图像,以及清洁冰盖和碎屑覆盖冰川的单独掩码。图像包含15个波段,包括10个Landsat 7波段、3个预计算的NVDI/NDSI/NDWI指数,以及来自SRTM 90m DEM数字高程数据库的2个数字高程和坡度图。

可以使用scripts/download_hkh_glacier.sh下载(18GB/109GB压缩/未压缩)数据集,并在下方实例化

from torchrs.transforms import Compose, ToTensor
from torchrs.datasets import HKHGlacierMapping

transform = Compose([ToTensor()])

dataset = HKHGlacierMapping(
    root="path/to/dataset/",
    transform=transform
)

x = dataset[0]
"""
x: dict(
    x:                   (15, 512, 512)
    clean_ice_mask:      (1, 512, 512)
    debris_covered_mask: (1, 256, 256)
)
"""

dataset.bands
"""
['LE7 B1 (blue)', 'LE7 B2 (green)', 'LE7 B3 (red)', 'LE7 B4 (near infrared)', 'LE7 B5 (shortwave infrared 1)',
'LE7 B6_VCID_1 (low-gain thermal infrared)', 'LE7 B6_VCID_2 (high-gain thermal infrared)',
'LE7 B7 (shortwave infrared 2)', 'LE7 B8 (panchromatic)', 'LE7 BQA (quality bitmask)', 'NDVI (vegetation index)',
'NDSI (snow index)', 'NDWI (water index)', 'SRTM 90 elevation', 'SRTM 90 slope']
"""

ZueriCrop

ZueriCrop数据集在Turkoglu等人撰写的论文“从图像时间序列进行作物制图:具有多尺度标签层次结构的深度学习”(arXiv:2102.08820)中提出的时序实例分割数据集,该数据集包含瑞士苏黎世和图尔高116k张中等分辨率(10m)24x24多光谱9波段图像。该数据集包含由ESA Sentinel-2卫星采集的像素级语义和实例注释,涵盖了48种细粒度、层次化的作物类型。请注意,每个时间序列只有一个地面真值语义和实例掩码。

可以使用scripts/download_zuericrop.sh下载(39GB)数据集,并在下方实例化

from torchrs.transforms import Compose, ToTensor
from torchrs.datasets import ZueriCrop

transform = Compose([ToTensor()])

dataset = ZueriCrop(
    root="path/to/dataset/",
    transform=transform
)

x = dataset[0]
"""
x: dict(
    x:              (142, 9, 24, 24)    (t, c, h, w)
    mask:           (1, 24, 24)
    instance_mask:  (1, 24, 24)
)
"""

[cls.label for cls in ds.classes]
"""
['Unknown', 'SummerBarley', 'WinterBarley', 'Oat', 'Wheat', 'Grain', ...]
"""

FAIR1M - 精细对象识别

《FAIR1M》数据集,由Sun等人提出的,在"FAIR1M: A Benchmark Dataset for Fine-grained Object Recognition in High-Resolution Remote Sensing Imagery" 中提出,是一个细粒度物体识别/检测数据集,包含15,000张高分辨率(0.3-0.8m)的RGB图像,由高分辨率地球观测卫星(Gaofen 1)拍摄,并从谷歌地球中提取。该数据集包含5类(船舶、车辆、飞机、球场和道路)及其37个子类的旋转边界框。这是ISPRS高分辨率卫星图像物体检测基准的一部分。请注意,到目前为止,只有训练数据集的一部分(17,322/15,000图像)已发布用于挑战。

可以使用scripts/download_fair1m.sh下载此数据集(8.7GB)并在下方实例化。

import torchvision.transforms as T
from torchrs.datasets import FAIR1M

transform = T.Compose([T.ToTensor()])

dataset = FAIR1M(
    root="path/to/dataset/",
    split="train",  # only 'train' for now
    transform=transform,
)

x = dataset[0]
"""
x: dict(
    x: (3, h, w)
    y: (N,)
    points: (N, 5, 2)
)
where N is the number of objects in the image
"""

ADVANCE - 视听空中场景识别

AuDio Visual Aerial sceNe reCognition datasEt (ADVANCE)数据集,由Hu等人提出,在"Cross-Task Transfer for Geotagged Audiovisual Aerial Scene Recognition" 中提出,是由5,075对地理标记的音频记录和512x512 RGB图像组成的,分别从FreeSound谷歌地球中提取。然后使用OpenStreetMap对这些图像进行标记,分为13个场景类别。

可以使用scripts/download_advance.sh下载此数据集(4.5GB)并在下方实例化。

import torchvision.transforms as T
from torchrs.datasets import ADVANCE

image_transform = T.Compose([T.ToTensor()])
audio_transform = T.Compose([])

dataset = ADVANCE(
    root="path/to/dataset/",
    image_transform=image_transform,
    audio_transform=audio_transform,
)

x = dataset[0]
"""
x: dict(
    image: (3, 512, 512)
    audio: (1, 220500)
    cls: int
)
"""

dataset.classes
"""
['airport', 'beach', 'bridge', 'farmland', 'forest', 'grassland', 'harbour', 'lake',
'orchard', 'residential', 'sparse shrub land', 'sports land', 'train station']
"""

奥纳卫星变化检测(OSCD)

Onera Satellite Change Detection (OSCD)数据集,由Daudt等人提出,在"Urban Change Detection for Multispectral Earth Observation Using Convolutional Neural Networks" 中提出,是一个多光谱(MS)图像变化检测数据集,由欧洲航天局(ESA)哨兵-2卫星拍摄。该数据集包含2015-2018年间来自多个大陆的24对注册图像及其二值变化掩码。

可以使用scripts/download_oscd.sh下载此数据集(0.73GB)并在下方实例化。

from torchrs.transforms import Compose, ToTensor
from torchrs.datasets import OSCD

transform = Compose([ToTensor(permute_dims=False)])

dataset = OSCD(
    root="path/to/dataset/",
    split="train",  # or 'test'
    transform=transform,
)

x = dataset[0]
"""
x: dict(
    x: (2, 13, h, w)
    mask: (1, h, w)
)
"""

卫星侧视(S2Looking)变化检测

S2Looking数据集,由Shen等人提出,在"S2Looking: A Satellite Side-Looking Dataset for Building Change Detection" 中提出,是一个乡村建筑变化检测数据集,包含5,000对1024x1024 0.5-0.8m注册RGB图像,由高分辨率地球观测卫星(Gaofen 1)SuperView北京-2(BJ-2)卫星拍摄。该数据集包含来自全球各地,时间跨度为1-3年的新建筑和拆除建筑掩码。该数据集与LEVIR-CD+数据集一起提出,由于地点是乡村且具有侧视角度,因此被认为是具有挑战性的。

可以使用scripts/download_s2looking.sh下载此数据集(11GB)并在下方实例化。

from torchrs.transforms import Compose, ToTensor
from torchrs.datasets import S2Looking

transform = Compose([ToTensor()])

dataset = S2Looking(
    root="path/to/dataset/",
    split="train",  # or 'val', 'test'
    transform=transform,
)

x = dataset[0]
"""
x: dict(
    x: (2, 3, 1024, 1024)
    build_mask: (1, 1024, 1024),
    demolish_mask: (1, 1024, 1024)
)
"""

LEVIR变化检测+(LEVIR-CD+)

LEVIR-CD+数据集,由Shen等人提出,在"S2Looking: A Satellite Side-Looking Dataset for Building Change Detection" 中提出,是一个城市建筑变化检测数据集,包含从谷歌地球中提取的985对1024x1024 0.5m RGB图像。该数据集包含2002-2020年间德克萨斯州20个不同地区的建筑/土地利用变化掩码,时间跨度为5年。该数据集与S2Looking数据集一起提出,由于地点是城市且角度接近正下视,因此被认为是较容易的版本。

可以使用scripts/download_levircd_plus.sh下载此数据集(3.6GB)并在下方实例化。

from torchrs.transforms import Compose, ToTensor
from torchrs.datasets import LEVIRCDPlus

transform = Compose([ToTensor()])

dataset = LEVIRCDPlus(
    root="path/to/dataset/",
    split="train",  # or 'test'
    transform=transform,
)

x = dataset[0]
"""
x: dict(
    x: (2, 3, 1024, 1024)
    mask: (1, 1024, 1024)
)
"""

高分辨率语义变化检测(HRSCD)

高分辨率语义变化检测(HRSCD)数据集,由Daudt等人提出的《大规模语义变化检测的多任务学习》,在“高分辨率语义变化检测数据集”中提出,是一个高分辨率(0.5米)的航空RGB图像对变化检测数据集,这些图像对来自法国国家地理和森林信息研究所(IGN)数据库。该数据集包含2006年和2012年的291对核心注册图像,以及从城市图集变化2006-2012地图中提取的二值变化掩码,以及从城市图集2006城市图集2012中提取的每个图像对应的土地覆盖掩码。

可以使用scripts/download_hrscd.sh下载(12GB)数据集,并按以下方式实例化:

from torchrs.transforms import Compose, ToTensor
from torchrs.datasets import HRSCD

transform = Compose([ToTensor()])

dataset = HRSCD(
    root="path/to/dataset/",
    transform=transform,
)

x = dataset[0]
"""
x: dict(
    x: (2, 3, 1000, 1000)
    lc: (2, 1000, 1000)
    mask: (1, 1000, 1000)
)
"""

Sentinel-2多时相城市对(S2MTCP)

Sentinel-2多时相城市对(S2MTCP)数据集,由Leenstra等人提出的《自我监督预训练增强Sentinel-2影像变化检测》,是一个由欧洲空间局Sentinel-2卫星拍摄的1,520对中分辨率10米未注册图像的城市变化检测数据集。该数据集不包含变化掩码,最初用于其他下游变化检测任务的自我监督预训练(例如OSCD数据集)。图像大小约为600x600,包含所有Sentinel-2波段,并重新采样到10米。

可以使用scripts/download_s2mtcp.sh下载(10GB/139GB压缩/未压缩)数据集,并按以下方式实例化:

from torchrs.transforms import Compose, ToTensor
from torchrs.datasets import S2MTCP

transform = Compose([ToTensor()])

dataset = S2MTCP(
    root="path/to/dataset/",
    transform=transform,
)

x = dataset[0]  # (2, 14, h, w)

遥感视觉问答(RSVQA)低分辨率(LR)

RSVQA LR数据集,由Lobry等人提出的《RSVQA:遥感数据的视觉问答》,是一个由欧洲空间局Sentinel-2卫星拍摄的772张256x256低分辨率(10米)RGB图像的视觉问答(VQA)数据集。每张图像都附有一组问题和相应的答案。除了其他应用外,该数据集可用于训练VQA模型以执行中分辨率遥感图像的详细场景理解。

可以使用scripts/download_rsvqa_lr.sh下载(0.2GB)数据集,并按以下方式实例化:

import torchvision.transforms as T
from torchrs.datasets import RSVQALR

transform = T.Compose([T.ToTensor()])

dataset = RSVQALR(
    root="path/to/dataset/",
    split="train",  # or 'val', 'test'
    transform=transform
)

x = dataset[0]
"""
x: dict(
    x:         (3, 256, 256)
    questions:  List[str]
    answers:    List[str]
    types:      List[str]
)
"""

遥感视觉问答(RSVQA)高分辨率(HR)

RSVQA HR数据集,由Lobry等人提出的《RSVQA:遥感数据的视觉问答》,是一个视觉问答(VQA)数据集,包含772张512x512高分辨率(15厘米)航空RGB图像,这些图像是从美国地质调查局高分辨率正射影像(HRO)系列中提取的。每张图像都附有一组问题和相应的答案。除了其他应用外,该数据集可用于训练VQA模型以执行高分辨率遥感图像的详细场景理解。

可以使用scripts/download_rsvqa_hr.sh下载(15GB)数据集,并按以下方式实例化:

import torchvision.transforms as T
from torchrs.datasets import RSVQALR

transform = T.Compose([T.ToTensor()])

dataset = RSVQALR(
    root="path/to/dataset/",
    split="train",  # or 'val', 'test'
    transform=transform
)

x = dataset[0]
"""
x: dict(
    x:         (3, 256, 256)
    questions:  List[str]
    answers:    List[str]
    types:      List[str]
)
"""

遥感视觉问答BigEarthNet(RSVQAxBEN)

RSVQAxBEN数据集,由Lobry等人提出的《RSVQA Meets BigEarthNet:一个新的、大规模的遥感视觉问答数据集》,是BigEarthNet数据集的一个版本,它使用与为RSVQA LR数据集生成注释相同的方法,为视觉问答(VQA)添加了注释。该数据集由120x120 RGB Sentinel-2图像组成,附有一组问题和相应的答案。

该数据集可以通过使用 scripts/download_rsvqaxben.sh 下载(35.4GB)并在以下进行实例化

import torchvision.transforms as T
from torchrs.datasets import RSVQAxBEN

transform = T.Compose([T.ToTensor()])

dataset = RSVQAxBEN(
    root="path/to/dataset/",
    split="train",  # or 'val', 'test'
    transform=transform
)

x = dataset[0]
"""
x: dict(
    x:         (3, 120, 120)
    questions:  List[str]
    answers:    List[str]
    types:      List[str]
)
"""

遥感图像字幕数据集(RSICD)

RSICD数据集,由Lu等人在"探索遥感图像字幕生成的模型和数据"(Exploring Models and Data for Remote Sensing Image Caption Generation)一文中提出,是一个图像字幕数据集,每张图像包含5个字幕,共有10,921张224x224的RGB图像,这些图像使用Google Earth百度地图MapABC天地图提取。虽然这是较大的遥感图像字幕数据集之一,但该数据集包含大量重复的语言,细节较少,许多字幕重复。

该数据集可以通过使用 scripts/download_rsicd.sh 下载(0.57GB)并在以下进行实例化

import torchvision.transforms as T
from torchrs.datasets import RSICD

transform = T.Compose([T.ToTensor()])

dataset = RSICD(
    root="path/to/dataset/",
    split="train",  # or 'val', 'test'
    transform=transform
)

x = dataset[0]
"""
x: dict(
    x:        (3, 224, 224)
    captions: List[str]
)
"""

Sydney标题

Sydney Captions数据集,由Qu等人在"高分辨率遥感图像的深度语义理解"(Deep semantic understanding of high resolution remote sensing image)一文中提出,是"基于显著性的无监督特征学习用于场景分类"(Saliency-Guided Unsupervised Feature Learning for Scene Classification)一文中提出的Sydney场景分类数据集的一个版本。该数据集包含使用Google Earth提取的澳大利亚Sydney的613张500x500 1ft分辨率的RGB图像,每张图像标注了5个字幕。

该数据集可以通过使用 scripts/download_sydney_captions.sh 下载(0.44GB)并在以下进行实例化

import torchvision.transforms as T
from torchrs.datasets import SydneyCaptions

transform = T.Compose([T.ToTensor()])

dataset = SydneyCaptions(
    root="path/to/dataset/",
    split="train",  # or 'val', 'test'
    transform=transform
)

x = dataset[0]
"""
x: dict(
    x:        (3, 500, 500)
    captions: List[str]
)
"""

UC Merced(UCM)标题

UC Merced (UCM) Captions数据集,由Qu等人在"高分辨率遥感图像的深度语义理解"(Deep semantic understanding of high resolution remote sensing image)一文中提出,是UCM土地利用分类数据集的一个版本,由Yang等人在"用于土地利用分类的视觉词袋和空间扩展"(Bag-Of-Visual-Words and Spatial Extensions for Land-Use Classification)一文中提出。该数据集包含2100张256x256 1ft分辨率的RGB图像,这些图像是从USGS国家地图城市区域影像集合中提取的,每张图像标注了5个字幕。

该数据集可以通过使用 scripts/download_ucm_captions.sh 下载(0.4GB)并在以下进行实例化

import torchvision.transforms as T
from torchrs.datasets import UCMCaptions

transform = T.Compose([T.ToTensor()])

dataset = UCMCaptions(
    root="path/to/dataset/",
    split="train",  # or 'val', 'test'
    transform=transform
)

x = dataset[0]
"""
x: dict(
    x:        (3, 256, 256)
    captions: List[str]
)
"""

遥感图像场景分类(RESISC45)

由Cheng等人在"遥感图像场景分类:基准与最新技术"(Remote Sensing Image Scene Classification: Benchmark and State of the Art)一文中提出的RESISC45数据集,是一个使用Google Earth提取的31,500张RGB图像的场景分类数据集。该数据集包含45个场景,每个类别有700张图像,来自100多个国家,并针对图像条件(空间分辨率、遮挡、天气、光照等)的高变异性进行了优化。

该数据集可以通过使用 scripts/download_resisc45.sh 下载(0.47GB)并在以下进行实例化

import torchvision.transforms as T
from torchrs.datasets import RESISC45

transform = T.Compose([T.ToTensor()])

dataset = RESISC45(
    root="path/to/dataset/",
    transform=transform
)

x, y = dataset[0]
"""
x: (3, 256, 256)
y: int
"""

dataset.classes
"""
['airplane', 'airport', 'baseball_diamond', 'basketball_court', 'beach', 'bridge', 'chaparral',
'church', 'circular_farmland', 'cloud', 'commercial_area', 'dense_residential', 'desert', 'forest',
'freeway', 'golf_course', 'ground_track_field', 'harbor', 'industrial_area', 'intersection', 'island',
'lake', 'meadow', 'medium_residential', 'mobile_home_park', 'mountain', 'overpass', 'palace', 'parking_lot',
'railway', 'railway_station', 'rectangular_farmland', 'river', 'roundabout', 'runway', 'sea_ice', 'ship',
'snowberg', 'sparse_residential', 'stadium', 'storage_tank', 'tennis_court', 'terrace', 'thermal_power_station', 'wetland']
"""

EuroSAT

由Helber等人在"EuroSAT:一个用于土地利用和土地覆盖分类的新型数据集和深度学习基准"(EuroSAT: A Novel Dataset and Deep Learning Benchmark for Land Use and Land Cover Classification)一文中提出的EuroSAT数据集,是一个由ESA Sentinel-2卫星拍摄的27,000张64x64图像的土地覆盖分类数据集。该数据集包含10个土地覆盖类别,每个类别有2-3k张图像,来自34多个欧洲国家。该数据集以仅RGB或所有13个多光谱(MS)Sentinel-2波段的形式提供。该数据集相对简单,使用ResNet-50可以达到约98.6%的准确率。

该数据集可以通过使用 scripts/download_eurosat_rgb.shscripts/download_eurosat_ms.sh 下载(0.13GB和2.8GB)并在以下进行实例化

import torchvision.transforms as T
from torchrs.transforms import ToTensor
from torchrs.datasets import EuroSATRGB, EuroSATMS

transform = T.Compose([T.ToTensor()])

dataset = EuroSATRGB(
    root="path/to/dataset/",
    transform=transform
)

x, y = dataset[0]
"""
x: (3, 64, 64)
y: int
"""

transform = T.Compose([ToTensor()])

dataset = EuroSATMS(
    root="path/to/dataset/",
    transform=transform
)

x, y = dataset[0]
"""
x: (13, 64, 64)
y: int
"""

dataset.classes
"""
['AnnualCrop', 'Forest', 'HerbaceousVegetation', 'Highway', 'Industrial',
'Pasture', 'PermanentCrop', 'Residential', 'River', 'SeaLake']
"""

SAT-4 & SAT-6

SAT-4 & SAT-6数据集,由Basu等人提出,见"DeepSat - A Learning framework for Satellite Imagery",是两个土地覆盖分类数据集,分别包含500k和405k个28x28的RGBN图像,这些图像是从美国大陆(CONUS)抽取的,并且来自国家农业影像计划(NAIP)中提取的。SAT-4和SAT-6数据集分别包含4和6种土地覆盖类别。这个数据集相对容易,使用5层CNN可以达到大约80%的准确率。

可以使用scripts/download_sat.sh下载(2.7GB)该数据集,并如下实例化:

import torchvision.transforms as T
from torchrs.datasets import SAT4, SAT6

transform = T.Compose([T.ToTensor()])

dataset = SAT4(
    root="path/to/dataset/",
    split="train"   # or 'test'
    transform=transform
)

x, y = dataset[0]
"""
x: (4, 28, 28)
y: int
"""

dataset.classes
"""
['barren land', 'trees', 'grassland', 'other']
"""

dataset = SAT6(
    root="path/to/dataset/",
    split="train"   # or 'test'
    transform=transform
)

x, y = dataset[0]
"""
x: (4, 28, 28)
y: int
"""

dataset.classes
"""
['barren land', 'trees', 'grassland', 'roads', 'buildings', 'water']
"""

航空图像数据集(AID)

AID数据集,由Xia等人提出,见"AID: A Benchmark Dataset for Performance Evaluation of Aerial Scene Classification",是一个使用Google Earth提取的600x600 RGB图像的场景分类数据集。数据集包含来自世界各地和各国的30种场景,每种场景有几百张图像。这个数据集相对容易,使用VGG-16可以达到大约90%的准确率。

可以使用scripts/download_aid.sh下载(2.6GB)该数据集,并如下实例化:

import torchvision.transforms as T
from torchrs.datasets import AID

transform = T.Compose([T.ToTensor()])

dataset = AID(
    root="path/to/dataset/",
    transform=transform
)

x, y = dataset[0]
"""
x: (3, 600, 600)
y: int
"""

dataset.classes
"""
['Airport', 'BareLand', 'BaseballField', 'Beach', 'Bridge', 'Center', 'Church', 'Commercial',
'DenseResidential', 'Desert', 'Farmland', 'Forest', 'Industrial', 'Meadow', 'MediumResidential',
'Mountain', 'Park', 'Parking', 'Playground', 'Pond', 'Port', 'RailwayStation', 'Resort',
'River', 'School', 'SparseResidential', 'Square', 'Stadium', 'StorageTanks', 'Viaduct']
"""

Inria航空图像标注

Inria航空图像标注数据集,由Maggiori等人提出,见"Can semantic labeling methods generalize to any city? the inria aerial image labeling benchmark",是一个建筑语义分割数据集,包含从各种国际GIS服务(例如美国地质调查局国家地图)提取的360个高分辨率(0.3米)5000x5000 RGB图像。数据集包含来自世界10个地区的图像(包括城市和农村地区),训练/测试集按不同城市划分,以评估模型是否可以在不同地理位置上泛化。该数据集最初用于Inria航空图像标注数据集竞赛,测试集的真实掩码尚未公开发布。

可以使用scripts/download_inria_ail.sh下载(26GB)该数据集,并如下实例化:

from torchrs.transforms import Compose, ToTensor
from torchrs.datasets import InriaAIL

transform = Compose([ToTensor()])

dataset = InriaAIL(
    root="path/to/dataset/",
    split="train",  # or 'test'
    transform=transform
)

x = dataset[0]
"""
x: dict(
    x:         (3, 5000, 5000)
    mask:      (1, 5000, 5000)
    region:     str
)
"""

dataset.regions
"""
['austin', 'chicago', 'kitsap', 'tyrol', 'vienna']
"""

迪拜分割

迪拜分割数据集是Dubai Segmentation,是72张高分辨率(约700x700)RGB图像的语义分割数据集,由MBRSC卫星拍摄。数据集包含迪拜9个地区的图像,包含6个类别的掩码。

可以使用scripts/download_dubai_segmentation.sh下载(0.03GB)该数据集,并如下实例化:

from torchrs.transforms import Compose, ToTensor
from torchrs.datasets import DubaiSegmentation

transform = Compose([ToTensor()])

dataset = DubaiSegmentation(
    root="path/to/dataset/",
    transform=transform
)

x = dataset[0]
"""
x: dict(
    x:         (3, h, w)
    mask:      (1, h, w)
    region:    str
)
"""

dataset.classes.keys()
"""
['Unlabeled', 'Water', 'Land (unpaved area)', 'Road', 'Building', 'Vegetation']
"""

GID-15

高分辨率遥感图像土地覆盖分类的可迁移深度模型,见"Land-Cover Classification with High-Resolution Remote Sensing Images Using Transferable Deep Models", Tong et al.,是由Gaofen-2卫星拍摄的高分辨率(3米)6800x7200 RGB图像的语义分割数据集,包含15个类别的像素级标注。该数据集用于IEEE ICCV 2021 1st Workshop on Learning to Understand Aerial Images举办的挑战赛,测试集的真实掩码尚未公开发布。

可以使用scripts/download_gid15.sh下载(36GB)该数据集,并如下实例化:

from torchrs.transforms import Compose, ToTensor
from torchrs.datasets import GID15

transform = Compose([ToTensor()])

dataset = GID15(
    root="path/to/dataset/",
    split="train",  # or 'val', 'test'
    transform=transform
)

x = dataset[0]
"""
x: dict(
    x:         (3, 6800, 7200)
    mask:      (1, 6800, 7200)
)
"""

dataset.classes
"""
['background', 'industrial_land', 'urban_residential', 'rural_residential', 'traffic_land', 'paddy_field',
'irrigated_land', 'dry_cropland', 'garden_plot', 'arbor_woodland', 'shrub_land', 'natural_grassland',
'artificial_grassland', 'river', 'lake', 'pond']
"""

TiSeLaC

来自《时间序列土地覆盖分类挑战》(Time Series Land Cover Classification Challenge)的TiSeLaC数据集是一个时间序列土地覆盖分类数据集,包含由美国地质调查局Landsat 8卫星拍摄的23张2866x2633中等分辨率(30米)多光谱10波段(7反射率+NDVI/NDWI/亮度指数)图像。这些图像于2014年在留尼汪岛捕获,包含来自《科里内土地覆盖》(CLC)地图的9种土地覆盖类别。请注意,该数据集适用于像素级时间序列分类,其中每个时间序列的形式为(t, b),其中t=23个样本b=10个波段。该数据集非常容易,目前的最高分达到0.9929 F1分数。

您可以使用scripts/download_tiselac.sh脚本下载该数据集(0.08GB),如下所示

from torchrs.transforms import Compose, ToTensor
from torchrs.datasets import Tiselac

transform = Compose([ToTensor()])

dataset = Tiselac(
    root="path/to/dataset/",
    split="train"   # or 'test'
    transform=transform
)

x, y = dataset[0]
"""
x: (23, 10)
y: int
"""

dataset.classes
"""
['Urban Areas', 'Other built-up surfaces', 'Forests', 'Sparse Vegetation', 'Rocks and bare soil',
'Grassland', 'Sugarcane crops', 'Other crops', 'Water']
"""

UC Merced (UCM)

UC Merced (UCM)数据集,由Yang等人提出于《Bag-Of-Visual-Words and Spatial Extensions for Land-Use Classification》一文中,是一个21k个256x256 1英尺分辨率的美国城市地区RGB图像的土地使用分类数据集。这些图像是从美国地质调查局国家地图城市区域图像集合中提取的,包含21种土地使用类别(每个类别100个图像)。

您可以使用scripts/download_ucm.sh脚本下载该数据集(0.42GB),如下所示

import torchvision.transforms as T
from torchrs.datasets import UCM

transform = T.Compose([T.ToTensor()])

dataset = UCM(
    root="path/to/dataset/",
    transform=transform
)

x, y = dataset[0]
"""
x: (3, 256, 256)
y: int
"""

dataset.classes
"""
['agricultural', 'airplane', 'baseballdiamond', 'beach', 'buildings', 'chaparral', 'denseresidential',
'forest', 'freeway', 'golfcourse', 'harbor', 'intersection', 'mediumresidential', 'mobilehomepark',
'overpass', 'parkinglot', 'river', 'runway', 'sparseresidential', 'storagetanks', 'tenniscourt']
"""

PatternNet

PatternNet数据集,由Yang等人提出于《PatternNet: A Benchmark Dataset for Performance Evaluation of Remote Sensing Image Retrieval》一文中,是一个图像检索和场景分类数据集,包含30,400张256x256高分辨率(0.06-5米)RGB图像,这些图像使用Google Earth和Google Maps提取,包含38种场景类别(每个类别800个图像)。该数据集最初被提出作为一个遥感图像检索(RSIR)数据集,类别被选为具有高类内多样性和类间相似性,这样图像检索就需要学习多个类别之间的细粒度细节。此外,该数据集还有一些在其他场景分类数据集中找不到的独特类别,例如油井、养老院、太阳能板等。

您可以使用scripts/download_patternnet.sh脚本下载该数据集(1.4GB),如下所示

import torchvision.transforms as T
from torchrs.datasets import PatternNet

transform = T.Compose([T.ToTensor()])

dataset = PatternNet(
    root="path/to/dataset/",
    transform=transform
)

x, y = dataset[0]
"""
x: (3, 256, 256)
y: int
"""

dataset.classes
"""
['airplane', 'baseball_field', 'basketball_court', 'beach', 'bridge', 'cemetery', 'chaparral',
'christmas_tree_farm', 'closed_road', 'coastal_mansion', 'crosswalk', 'dense_residential',
'ferry_terminal', 'football_field', 'forest', 'freeway', 'golf_course', 'harbor', 'intersection',
'mobile_home_park', 'nursing_home', 'oil_gas_field', 'oil_well', 'overpass', 'parking_lot', 'parking_space',
'railway', 'river', 'runway', 'runway_marking', 'shipping_yard', 'solar_panel','sparse_residential',
'storage_tank', 'swimming_pool', 'tennis_court', 'transformer_station', 'wastewater_treatment_plant']
"""

WHU-RS19

WHU-RS19数据集,由Xia等人提出于《Structural High-resolution Satellite Image Indexing》一文中,是一个场景分类数据集,包含1,005张600x600高分辨率(最高0.5米)RGB图像,这些图像使用Google Earth提取,包含19种场景类别(每个类别约50个图像)。

您可以使用scripts/download_whu_rs19.sh脚本下载该数据集(0.11GB),如下所示

import torchvision.transforms as T
from torchrs.datasets import WHURS19

transform = T.Compose([T.ToTensor()])

dataset = WHURS19(
    root="path/to/dataset/",
    transform=transform
)

x, y = dataset[0]
"""
x: (3, 600, 600)
y: int
"""

dataset.classes
"""
['Airport', 'Beach', 'Bridge', 'Commercial', 'Desert', 'Farmland','Forest', 'Industrial',
'Meadow', 'Mountain', 'Park', 'Parking', 'Pond', 'Port', 'Residential', 'River', 'Viaduct',
'footballField', 'railwayStation']
"""

RSSCN7

RSSCN7数据集,由Zou等人提出于《Deep Learning Based Feature Selection for Remote Sensing Scene Classification》一文中,是一个场景分类数据集,包含2,800张400x400高分辨率RGB图像,这些图像使用Google Earth提取,包含7种场景类别(每个类别400个图像)。

您可以使用scripts/download_rsscn7.sh脚本下载该数据集(0.36GB),如下所示

import torchvision.transforms as T
from torchrs.datasets import RSSCN7

transform = T.Compose([T.ToTensor()])

dataset = RSSCN7(
    root="path/to/dataset/",
    transform=transform
)

x, y = dataset[0]
"""
x: (3, 400, 400)
y: int
"""

dataset.classes
"""
['aGrass', 'bField', 'cIndustry', 'dRiverLake', 'eForest', 'fResident', 'gParking']
"""

巴西咖啡场景

《巴西咖啡景观数据集》是一个场景分类数据集,由Penatti等人提出的《从日常物体到遥感与航空场景域的深度特征能否泛化?》,在此处提出。该数据集包含2,876张64x64的3通道(绿色、红色、近红外)图像,由SPOT卫星在2005年拍摄于巴西米纳斯吉拉斯州的四个县。该数据集旨在区分咖啡作物和其他非咖啡作物。

可以使用scripts/download_brazilian_coffee_.sh脚本下载(0.01GB)数据集,并如下实例化。

import torchvision.transforms as T
from torchrs.datasets import BrazilianCoffeeScenes

transform = T.Compose([T.ToTensor()])

dataset = BrazilianCoffeeScenes(
    root="path/to/dataset/",
    transform=transform
)

x, y = dataset[0]
"""
x: (3, 64, 64)
y: int
"""

dataset.classes
"""
['non-coffee', 'coffee']
"""

模型

多图像超分辨率 - RAMS

残差注意力多图像超分辨率网络(RAMS)来自Salvetti等人(2021)的《使用残差注意力深度神经网络进行遥感图像的多图像超分辨率》,详情请见此处

RAMS是目前在PROBA-V超分辨率挑战中的顶尖表现者之一。这种多图像超分辨率(MISR)架构利用基于注意力的方法从一系列低分辨率图像中提取空间和时间特征,以形成一个高分辨率图像。请注意,注意力方法实际上是来自Hu等人《Squeeze-and-Excitation Networks》中的Squeeze-and-Excitation块。

import torch
from torchrs.models import RAMS

# increase resolution by factor of 3 (e.g. 128x128 -> 384x384)
model = RAMS(
    scale_factor=3,
    t=9,
    c=1,
    num_feature_attn_blocks=12
)

# Input should be of shape (bs, t, c, h, w), where t is the number
# of low resolution input images and c is the number of channels/bands
lr = torch.randn(1, 9, 1, 128, 128)
sr = model(lr) # (1, 1, 384, 384)

变化检测 - 全卷积早期融合(FC-EF)、Siamese连接(FC-Siam-conc)和Siamese差异(FC-Siam-diff)

全卷积早期融合(FC-EF)、Siamese连接(FC-Siam-conc)、Siamese差异(FC-Siam-conc)是变化检测分割架构,由Daudt等人在《全卷积Siamese网络用于变化检测》中提出,详情请见此处。这些架构本质上是修改过的U-Net,来自Ronneberger等人《U-Net:用于生物医学图像分割的卷积网络》,详情请见此处。FC-EF是一个输入连接图像的U-Net。FC-Siam-conc和FC-Siam-diff是具有共享编码器的U-Net,分别连接或取跳过连接的差异。这两个模型都已被修改,以便与任何数量的输入图像t和通道c一起工作。

import torch
from torchrs.models import FCEF, FCSiamConc, FCSiamDiff

model = FCEF(
    channels=3,
    t=2,
    num_classes=2
)

model = FCSiamConc(
    channels=3,
    t=2,
    num_classes=2
)

model = FCSiamDiff(
    channels=3,
    t=2,
    num_classes=2
)


x = torch.randn(1, 2, 3, 128, 128)  # (b, t, c, h, w)
model(x)                            # (b, num_classes, h, w)

变化检测 - EarlyFusion(EF)和Siamese(Siam)

EarlyFusion(EF)和Siamese(Siam)是与OSCD - Onera卫星变化检测数据集一起在Daudt等人《使用卷积神经网络进行多光谱地球观测的都市变化检测》中提出的,详情请见此处。这些架构实际上是训练有素的CNN分类器,用于分类一组(通常是成对)输入补丁的中央像素是否包含变化/无变化。EF以连接的图像为输入,而Siam使用共享CNN提取特征向量,然后将连接的向量输入到MLP分类器。这两个模型都期望补丁大小为Cx15x15,但已被修改以处理任何数量的输入图像t和通道c

import torch
from torchrs.models import EarlyFusion, Siam

model = EarlyFusion(
    channels=3,
    t=2,
    num_classes=2
)

model = Siam(
    channels=3,
    t=2,
    num_classes=2
)


x = torch.randn(1, 2, 3, 15, 15)  # (b, t, c, h, w)
model(x)                          # (b, num_classes, h, w)

训练

为了训练目的,每个模型和数据集都已改编为Pytorch LightningLightningModulesLightningDataModules。这些模块可以在torchrs.train.modulestorchrs.train.datamodules中找到。Pytorch Lightning的其他优点包括减少样板代码、多GPU/集群训练的最小重写、支持混合精度训练、梯度累积、回调、日志指标等。

要使用训练功能,必须使用带有train额外功能的torch-rs。

# pypi
pip install 'torch-rs[train]'

# latest
pip install 'git+https://github.com/isaaccorley/torchrs.git#egg=torch-rs[train]'

一个简单的训练示例

import torch
import torch.nn as nn
import pytorch_lightning as pl

from torchrs.train.modules import FCEFModule
from torchrs.train.datamodules import LEVIRCDPlusDataModule
from torchrs.transforms import Compose, ToTensor


def collate_fn(batch):
    x = torch.stack([x["x"] for x in batch])
    y = torch.cat([x["mask"] for x in batch])
    x = x.to(torch.float32)
    y = y.to(torch.long)
    return x, y 

transform = Compose([ToTensor()])
model = FCEFModule(channels=3, t=2, num_classes=2, lr=1E-3)
dm = LEVIRCDPlusDataModule(
    root="path/to/dataset",
    transform=transform,
    batch_size=4,
    num_workers=2,
    prefetch_factor=1,
    collate_fn=collate_fn,
    test_collate_fn=collate_fn,
    val_split=0.2
)
callbacks = [
    pl.callbacks.ModelCheckpoint(monitor="val_loss", mode="min", verbose=True, save_top_k=1),
    pl.callbacks.EarlyStopping(monitor="val_loss", mode="min", patience=10)
]
trainer = pl.Trainer(
    gpus=1,
    precision=16,
    accumulate_grad_batches=1,
    max_epochs=25,
    callbacks=callbacks,
    weights_summary="top"
)
trainer.fit(model, datamodule=dm)
trainer.test(datamodule=dm)

测试

$ pytest -ra

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

torch-rs-0.0.4.tar.gz (70.9 kB 查看哈希)

上传

构建分发

torch_rs-0.0.4-py3-none-any.whl (76.7 kB 查看哈希)

上传 Python 3

支持