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 และ Cropland Data Layer (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แอพพลิเคชั่นจำนวนมากเกี่ยวข้องกับการเขียนชุดข้อมูลอย่างชาญฉลาดตามข้อมูลเมตา Geospatial เช่นนี้ ตัวอย่างเช่นผู้ใช้อาจต้องการ:
ชุดค่าผสมเหล่านี้ต้องการให้มีการสืบค้นทั้งหมดในชุดข้อมูลอย่างน้อยหนึ่งชุดและสามารถสร้างได้โดยใช้ UnionDataset ในทำนองเดียวกันผู้ใช้อาจต้องการ:
ชุดค่าผสมเหล่านี้ต้องการให้มีการสืบค้นทั้งหมดในชุดข้อมูลทั้งสองและสามารถสร้างได้โดยใช้ IntersectionDataset Torchgeo จะรวบรวมชุดข้อมูลเหล่านี้โดยอัตโนมัติสำหรับคุณเมื่อคุณใช้ตัวดำเนินการแยก ( & ) และ Union ( | )
Torchgeo มี ชุดข้อมูลมาตรฐาน จำนวนมาก - ชุดข้อมูลที่มีทั้งภาพอินพุตและฉลากเป้าหมาย ซึ่งรวมถึงชุดข้อมูลสำหรับงานเช่นการจำแนกภาพการถดถอยการแบ่งส่วนความหมายการตรวจจับวัตถุการแบ่งส่วนอินสแตนซ์การตรวจจับการเปลี่ยนแปลงและอื่น ๆ
หากคุณเคยใช้ Torchvision มาก่อนชุดข้อมูลเหล่านี้ควรคุ้นเคยมาก ในตัวอย่างนี้เราจะสร้างชุดข้อมูลสำหรับ Northwestern Polytechnical University (NWPU) Ten-Class (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 ทั้งหมดเข้ากันได้กับรถตัก Data Pytorch ทำให้ง่ายต่อการรวมเข้ากับเวิร์กโฟลว์การฝึกอบรมที่มีอยู่ ความแตกต่างเพียงอย่างเดียวระหว่างชุดข้อมูลมาตรฐานใน Torchgeo และชุดข้อมูลที่คล้ายกันใน Torchvision คือชุดข้อมูลแต่ละชุดส่งคืนพจนานุกรมพร้อมคีย์สำหรับแต่ละ Pytorch Tensor
น้ำหนักที่ผ่านการฝึกอบรมมาก่อนได้รับการพิสูจน์แล้วว่าเป็นประโยชน์อย่างมากสำหรับการถ่ายโอนงานการเรียนรู้ในการมองเห็นคอมพิวเตอร์ ผู้ปฏิบัติงานมักจะใช้โมเดลที่ได้รับการฝึกฝนไว้ล่วงหน้าบนชุดข้อมูล 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 สายฟ้าด้วยการแยกรถไฟและ ผู้ฝึกสอน dataModules เหล่านี้แสดงวิธีการรวมการเพิ่มจากห้องสมุด Kornia รวมถึงการแปลงการประมวลผลล่วงหน้า (ด้วยสถิติช่องทางที่คำนวณล่วงหน้า) และให้ผู้ใช้ทดลองกับพารามิเตอร์ hyperparameters ได้อย่างง่ายดาย (ตรงข้ามกับกระบวนการสร้างแบบจำลอง) การฝึกอบรมแบบจำลองการแบ่งส่วนความหมายบนชุดข้อมูลการติดฉลากภาพทางอากาศ 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] พร้อมคำถามหรือความคิดเห็นเพิ่มเติมใด ๆ