Torchgeo-это библиотека доменов Pytorch, похожая на Torchvision, предоставление наборов данных, пробоотборников, преобразований и предварительно обученных моделей, специфичных для геопространственных данных.
Цель этой библиотеки - сделать это проще:
Сообщество:
Упаковка:
Тестирование:
Рекомендуемый способ установить Torchgeo с PIP:
pip install torchgeoДля инструкций по установке Conda и Spack см. Документацию.
Вы можете найти документацию для Torchgeo на Readthedocs. Это включает в себя документацию 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.
В этом примере мы показываем, насколько легко работать с геопространственными данными и выбирать небольшие пятна изображения из комбинации данных Landsat и уровня данных о пахотных землях (CDL) с использованием Torchgeo. Во -первых, мы предполагаем, что пользователь загружается изображения 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 . Torchgeo автоматически сочиняет эти наборы данных для вас, когда вы используете операторы пересечения ( & ) и Union ( | ).
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 заключается в том, что каждый набор данных возвращает словарь с ключами для каждого Tensor Pytorch.
Предварительно обученные веса оказались чрезвычайно полезными для задач обучения передачи в компьютерном зрении. Практики обычно используют модели, предварительно обученные набору данных ImageNet, содержащие изображения RGB. Тем не менее, данные дистанционного зондирования часто выходят за рамки RGB с дополнительными мультиспектральными каналами, которые могут варьироваться в зависимости от датчиков. Torchgeo-это первая библиотека, поддерживающая модели, предварительно обученные различным мультиспектральным датчикам, и принимает многократный API Torchvision. Сводка доступных в настоящее время веса можно увидеть в документах. Чтобы создать модель TIMM Resnet-18 с весами, которые были предварительно предварительно проведены на изображениях Sentinel-2, вы можете сделать следующее:
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 ) Эти веса также могут быть непосредственно использовать в модулях Torchgeo Lightning, которые показаны в следующем разделе с помощью аргумента weights . Для примера ноутбука см. Этот учебник.
Чтобы облегчить прямое сравнение между результатами, опубликованными в литературе, и дополнительно уменьшить код котлера, необходимый для проведения экспериментов с наборами данных в TorchGeo, мы создали молниеносные данные с четко определенными расщеплениями и тестированием поезда для различных задач, таких как классификация, регрессия и семантическая сегментация. Эти данные DataModules показывают, как включить дополнения из библиотеки 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" ])Смотрите документацию 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] с любыми дополнительными вопросами или комментариями.