Torchgeo는 Torchvision과 유사한 Pytorch 도메인 라이브러리로 지리 공간 데이터에 대한 데이터 세트, 샘플러, 변환 및 미리 훈련 된 모델을 제공합니다.
이 도서관의 목표는 간단하게 만드는 것입니다.
지역 사회:
포장 :
테스트 :
Torchgeo를 설치하는 것이 권장되는 방법은 PIP입니다.
pip install torchgeoConda 및 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 및 CDL (Comberland Data Layer) 데이터의 조합에서 작은 이미지 패치를 샘플링하는 것이 얼마나 쉬운 지 보여줍니다. 먼저 사용자가 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는 자동으로 일치하는 CR 및 해상도가 사용되도록합니다.
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 (Northwestern Polytechnical University)에 대한 데이터 세트를 생성 할 것입니다. VHR-10 (Very-High-Resolution Ten-Class) Geospatial Object Detection DataSet. 이 데이터 세트는 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 대한 키가있는 사전을 반환한다는 것입니다.
미리 훈련 된 가중치는 컴퓨터 비전에서 전송 학습 과제에 큰 도움이되는 것으로 입증되었습니다. 실무자는 일반적으로 RGB 이미지를 포함하는 ImageNet 데이터 세트에서 미리 훈련 된 모델을 사용합니다. 그러나 원격 감지 데이터는 종종 센서마다 다를 수있는 추가 멀티 스펙트럼 채널을 사용하여 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 Lightning 모듈에서 직접 사용할 수 있습니다. 노트북 예는이 튜토리얼을 참조하십시오.
문헌에 발표 된 결과 간의 직접적인 비교를 촉진하고 Torchgeo의 데이터 세트로 실험을 실행하는 데 필요한 보일러 플레이트 코드를 더욱 줄이기 위해, 분류, 회귀 및 시맨틱 세분화와 같은 다양한 작업을 위해 잘 정의 된 열차 평가 및 트레이너를 갖춘 번개 데이터 모드를 만들었습니다. 이 데이터 모드는 Kornia 라이브러리의 증강을 통합하는 방법을 보여주고, 전처리 변환 (사전 계산 된 채널 통계 포함)을 포함하며, 사용자가 모델링 프로세스와 반대되는 데이터 자체와 관련된 하이퍼 파라미터를 쉽게 실험 할 수 있도록합니다. INRIA 항공 이미지 라벨링 데이터 세트에서 시맨틱 세분화 모델을 훈련하는 것은 몇 가지 가져 오기와 4 줄의 코드만큼 쉽습니다.
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=...새로운 기능을 추가하기 위해 확장 해야하는 경우 파이썬 스크립트로 가져 와서 사용할 수도 있습니다.
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 오픈 소스 행동 강령을 채택했습니다. 자세한 내용은 추가 질문이나 의견이 있으면 행동 강령 FAQ 또는 [email protected]에 문의하십시오.