Torchgeo هي مكتبة مجال Pytorch ، على غرار TorchVision ، وتوفير مجموعات البيانات ، وأخذ العينات ، والتحويلات ، والنماذج التي تم تدريبها مسبقًا للبيانات الجغرافية المكانية.
الهدف من هذه المكتبة هو جعلها بسيطة:
مجتمع:
التغليف:
الاختبار:
الطريقة الموصى بها لتثبيت Torchgeo مع PIP:
pip install torchgeoللاطلاع على تعليمات تثبيت كوندا وسباك ، راجع الوثائق.
يمكنك العثور على وثائق 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 مطابقة.
في هذا المثال ، نوضح مدى سهولة العمل مع البيانات الجغرافية المكانية وأخذ عينات من تصحيحات الصور الصغيرة من مجموعة من بيانات طبقة بيانات الأراضي المحصنة (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 × 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 من قبل ، فيجب أن تبدو مجموعات البيانات هذه مألوفة للغاية. في هذا المثال ، سنقوم بإنشاء مجموعة بيانات لجامعة Northwestern Polytechnical University (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 هي أول مكتبة تدعم النماذج التي تم تدريبها مسبقًا على أجهزة استشعار متعددة الأطياف مختلفة ، وتبني واجهة برمجة تطبيقات 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 ) يمكن أيضًا استخدام هذه الأوزان مباشرة في وحدات Lightning Torchgeo التي تظهر في القسم التالي عبر وسيطة weights . للحصول على مثال دفتر ، راجع هذا البرنامج التعليمي.
من أجل تسهيل المقارنات المباشرة بين النتائج المنشورة في الأدب وزيادة تقليل رمز Boilerplate اللازم لتشغيل التجارب مع مجموعات البيانات في Torchgeo ، أنشأنا Datamodules Lightning مع انقسامات اختبار القطار المحددة جيدًا والمدربين لمختلف المهام مثل التصنيف والانحدار والتجزئة الدلالية. توضح هذه البيانات 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" ])انظر وثائق البرق لمزيد من التفاصيل.
إذا كنت تستخدم هذا البرنامج في عملك ، فيرجى الاستشهاد بالورقة:
@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] مع أي أسئلة أو تعليقات إضافية.