سلسلة الذكاء الاصطناعي والاستشعار عن بعد – الجزء الثالث

الثلاثاء 28 ذو الحجة 1446ھ الثلاثاء 24 يونيو 2025م
فيسبوك
إكس
واتساب
تيليجرام
لينكدإن

2٬363 كلمة

49 دقيقة

المحتوى

ما الفرق بين بيانات الاستشعار عن بعد والبيانات الأخرى؟

تُعدّ بيانات الاستشعار عن بُعد مختلفة جوهريًا عن أنواع البيانات الأخرى من حيث طريقة الحصول عليها وطبيعتها الجغرافية والزمنية. فبينما تُجمع البيانات التقليدية غالبًا عبر وسائل ميدانية أو مصادر إحصائية، تعتمد بيانات الاستشعار عن بُعد على أجهزة استشعار مثبتة على أقمار صناعية أو طائرات بدون طيار لالتقاط معلومات عن سطح الأرض دون تلامس مباشر. وتتميّز هذه البيانات بقدرتها على تغطية مناطق واسعة بشكل دوري، مما يجعلها مثالية لتتبع التغيرات البيئية أو الحضرية بمرور الوقت.

ومن خلال تقنيات الذكاء الاصطناعي، يمكن تحليل كميات هائلة من صور الأقمار الصناعية لاستخراج معلومات دقيقة بسرعة وكفاءة، مثل اكتشاف الحرائق أو التغيرات في الغطاء النباتي، مما يعزز من قيمة هذه البيانات مقارنة بالبيانات التقليدية في تطبيقات التخطيط واتخاذ القرار.

AI and Remote Sensing Series Part3 A

تتميّز بيانات الاستشعار عن بُعد باختلاف نوعها وتنسيقها وطريقة تخزينها مقارنة بالبيانات الأخرى. فهي غالبًا ما تكون بيانات مكانية (Spatial Data) ذات بُعدين أو أكثر، مثل الصور متعددة الأطياف (Multispectral) أو الفائقة الطيفية (Hyperspectral)، وتُخزّن بصيغ متخصصة مثل (GeoTIFF) أو (HDF) أو (NetCDF)، والتي تحفظ المعلومات الجغرافية إلى جانب القيم الرقمية للبكسلات.

وعلى عكس البيانات النصية أو العددية التقليدية، فإن بيانات الاستشعار عن بُعد تتطلب مساحات تخزينية ضخمة نظرًا لدقتها العالية وتغطيتها الواسعة، كما تحتاج إلى بنية تحتية مناسبة لمعالجتها، مثل أنظمة المعلومات الجغرافية (GIS) أو بيئات الحوسبة السحابية.

ومع تطور الذكاء الاصطناعي، أصبحت هناك أدوات متقدمة قادرة على التعامل مع هذا النوع المعقّد من البيانات، وتحويله إلى معلومات قابلة للاستخدام في مجالات متعددة كالأمن الغذائي، وإدارة الموارد الطبيعية، والاستجابة للكوارث.

AI and Remote Sensing Series Part3 B

مبادرات محلية وإقليمية وفرص واعدة

في المملكة العربية السعودية والمنطقة العربية، يشهد مجال الاستشعار عن بُعد تطورًا ملحوظًا من خلال مبادرات ومشاريع استراتيجية تعزز من استخدام هذه التقنية في مختلف القطاعات.

مبادرات محلية بارزة:

برنامج مراقبة الغطاء النباتي: أطلق المركز الوطني لتنمية الغطاء النباتي ومكافحة التصحر برنامجًا يستخدم تقنيات الاستشعار عن بُعد والذكاء الاصطناعي لمراقبة وتقييم الغطاء النباتي في المملكة. يهدف البرنامج إلى دعم مشاريع التشجير ومبادرة السعودية الخضراء من خلال مراقبة التغيرات في الغطاء النباتي، حساب كميات الأمطار، ورصد صحة النباتات باستخدام الطائرات بدون طيار (الدرونز).

وحدة الاستشعار عن بُعد بجامعة الملك عبدالعزيز: تُعنى هذه الوحدة بتطبيق تقنيات الاستشعار عن بُعد في مجالات الجيولوجيا، الهيدرولوجيا، الزراعة، والبيئة، مع التركيز على إدارة الموارد المائية واستدامتها من خلال تطوير نماذج رقمية للارتفاعات وتحليل مستجمعات المياه.

كرسي الاستشعار عن بُعد بجامعة الحدود الشمالية: يهدف هذا الكرسي إلى تعزيز البحث العلمي وتطبيقات الاستشعار عن بُعد، مع التركيز على دمج التقنيات الحديثة مثل الذكاء الاصطناعي وإنترنت الأشياء لدعم الاقتصاد المعرفي وتحقيق التنمية المستدامة وفق رؤية المملكة 2030.

فرص واعدة في المنطقة:

تُعد تقنيات الاستشعار عن بُعد أداة فعّالة في مجالات متعددة مثل:

إدارة الموارد الطبيعية: تُستخدم لمراقبة التغيرات البيئية، تقييم الموارد المائية، ومتابعة التصحر.

التخطيط العمراني: تُساهم في تحليل استخدامات الأراضي، تصنيف التربة، وتقييم المخاطر الطبيعية مثل الفيضانات والانهيارات الأرضية.

الزراعة الذكية: تُساعد في مراقبة صحة المحاصيل، تقدير الإنتاجية، وإدارة الري بكفاءة.

مع التقدم في تقنيات الذكاء الاصطناعي وتحليل البيانات، تتوسع تطبيقات الاستشعار عن بُعد لتشمل مجالات جديدة، مما يفتح آفاقًا واسعة للباحثين والمستثمرين في المنطقة.

كذلك مبادرة SpaceUp هي منافسة عالمية أطلقتها هيئة الاتصالات والفضاء والتقنية بالتعاون مع وكالة الفضاء السعودية، وتهدف إلى تحفيز الابتكار في مجال تقنيات الفضاء من خلال تقديم حلول مبتكرة للتحديات التي تواجه القطاعات الحيوية. تستهدف المبادرة رواد الأعمال والشركات الناشئة والصغيرة والمتوسطة داخل المملكة وخارجها، وتوفر فرصًا تعاقدية تصل قيمتها إلى حوالي 28 مليون دولار أمريكي عبر ستة مسارات رئيسية.

المسارات الستة للمنافسة:

المناطق الخضراء في السعودية: يركز هذا المسار على استخدام تقنيات الفضاء لمراقبة التشجير ورصد نمو الأشجار، دعمًا لمبادرة السعودية الخضراء التي تهدف إلى زراعة 10 مليارات شجرة في المملكة .هيئة الاتصالات والفضاء والتقنية

رصد الأشجار في المناطق الحضرية: يهدف إلى تطوير حلول لمراقبة وتحليل البيانات المتعلقة بالمناطق الخضراء داخل المدن، لتعزيز العناية بها وتحسين جودة الحياة.

تحسين جودة الحياة في المدن من خلال مراقبة الجزر الحرارية: يركز على رصد وتحليل المناطق ذات درجات الحرارة المرتفعة في المدن، لتقديم حلول تسهم في تحسين البيئة الحضرية.

مراقبة آفات وأمراض النخيل: يستهدف تطوير حلول لرصد مزارع النخيل، وفحص الأشجار، واكتشاف الآفات قبل انتشارها، بالتعاون مع وزارة البيئة والمياه والزراعة ومركز "وقاء".

مراقبة تأثير تطوير البنية التحتية: يهدف إلى تقديم حلول تعزز جودة مشاريع البنية التحتية وتحسين الحركة المرورية، برعاية مركز مشاريع البنية التحتية بمنطقة الرياض.

تحسين أصول الطرق الحضرية: يركز على تطوير حلول لمراقبة تلف الطرق في المناطق الحضرية، وتوفير بيانات دقيقة لصناع القرار بشأن أعمال الصيانة والاستثمار في البنية التحتية.

مرحلة التقديم
20 يناير 2025

حتى

12 أبريل 2025
مرحلة التأهيل
13 أبريل 2025

حتى

1 مايو 2025
مرحلة التوطين
2 مايو 2025

حتى

26 يونيو 2025
مرحلة الطرح
27 يونيو 2025

حتى

28 أغسطس 2025
مرحلة الترسية
29 أغسطس 2025

حتى

4 سبتمبر 2025

تسعى مبادرة SpaceUp إلى تعزيز ريادة المملكة في قطاع الفضاء، وتحفيز الابتكار لتحقيق التنمية المستدامة، من خلال ربط رواد الأعمال والشركات بالجهات المعنية مباشرة، وتوطين المنتجات التقنية المقترحة.

التطبيق العملي الثاني

في مجال الاستشعار عن بُعد، شهدت الأدوات المعتمدة على الذكاء الاصطناعي، مثل (TorchGeo) ومنصة (Microsoft Planetary Computer)، تقدمًا ملحوظًا في تحليل وتفسير البيانات الجغرافية المكانية.

(TorchGeo) هي مكتبة متخصصة مبنية على إطار عمل (PyTorch)، توفر مجموعة من مجموعات البيانات، وأدوات التحويل، ونماذج مُدربة مسبقًا مخصصة للبيانات الجغرافية المكانية. تسهل هذه المكتبة دمج تقنيات التعلم العميق مع تطبيقات الاستشعار عن بُعد من خلال تقديم أكثر من 20 أداة لتحميل بيانات صور الأقمار الصناعية، وإعادة إسقاط أنظمة الإحداثيات المرجعية تلقائيًا، ودعم التعلم متعدد الوسائط ودمج البيانات. تُعتبر (TorchGeo) أول مكتبة تقدم نماذج مُدربة مسبقًا لصور الأقمار الصناعية متعددة الأطياف، مثل استخدام جميع نطاقات أقمار (Sentinel-2)، مما يُمكّن من تطبيق التعلم الانتقالي على المهام ذات البيانات المُعلمة المحدودة.

أما (Microsoft Planetary Computer)، فهي مبادرة تجمع بين كتالوج ضخم يحتوي على بيانات بيئية عالمية متعددة البيتابايت مع واجهات برمجة تطبيقات (APIs) بيئية وبيئة علمية مرنة. تهدف هذه المنصة إلى توفير قدرات مراقبة بيئية على نطاق عالمي من خلال تجميع البيانات من مصادر متعددة، بما في ذلك صور الأقمار الصناعية وأجهزة الاستشعار ومساهمات المستخدمين. تدعم المنصة اتخاذ القرارات المستندة إلى البيانات من خلال تقديم أدوات للاستعلام وتحليل البيانات البيئية، مما يسهل التطبيقات في مجالات مثل تخطيط الحفظ، وإدارة مخاطر الغابات، وتصنيف استخدام الأراضي.

معًا، تمثل (TorchGeo) و(Microsoft Planetary Computer) تكاملًا بين الذكاء الاصطناعي والاستشعار عن بُعد، مما يعزز إمكانية الوصول إلى البيانات الجغرافية المكانية واستخدامها من قبل الباحثين والممارسين.

في هذا الدليل، سنرشدك خلال استخدام مكتبة (TorchGeo) وهي مكتبة مبنية على (PyTorch) ومخصصة للبيانات الجغرافية المكانية لإجراء التقسيم الدلالي (Semantic Segmentation) من خلال دمج صور (NAIP) مع تسميات استخدام الأراضي من مجموعة بيانات (Chesapeake). سنغطي تنزيل مجموعات البيانات، معالجتها، وإعداد محمّلات البيانات (DataLoaders) لتدريب نموذج التقسيم.

01. تثبيت المكتبات المطلوبة

				
					!pip install torchgeo segmentation_models_pytorch
				
			

هنا نستورد:

torchgeo مكتبة للتعامل مع بيانات الاستشعار عن بعد الجغرافية.

segmentation_models_pytorch مكتبة توفر نماذج جاهزة للتقطيع الدلالي مثل Unet.

02. استيراد المكتبات والتجهيز

				
					import torch
import torchvision
from PIL import Image
import torchvision.transforms as transforms
import segmentation_models_pytorch as smp
import tempfile
import os
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
import numpy as np

from torch.utils.data import DataLoader
from torchgeo.datasets import RasterDataset, stack_samples, unbind_samples, ChesapeakeDE, NAIP
from torchgeo.datasets.utils import download_url
from torchgeo.samplers import RandomGeoSampler

				
			

هنا نستورد:

أدوات التعامل مع الصور، العرض، المعالجة.

مجموعات البيانات والسامبلر من torchgeo.

نماذج التقطيع الدلالي من smp.

03. اختيار الجهاز المناسب (GPU أو CPU)

				
					#Check mounted device type:
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
print(device)
				
			
				
					#Check GPU details if found:
!nvidia-smi

				
			

نتأكد مما إذا كان الجهاز يحتوي على GPU لاستخدامه في التدريب.

04. تحديد مسارات البيانات

				
					#Define dataset dir:
INPUT_DIR = '/content/drive/MyDrive/datasets/naip_chesapeake_sample'
				
			

نحدد مسار مجلد البيانات الذي يحتوي على صور NAIP والملصقات Labels من Chesapeake.

البيانات المستخدمة

قم بتنزيل البيانات ورفعها على قوقل درايف، ومن ثم قم بربط قوقل درايف بالنوتبوك لاستكمال بقية الدرس.

05. تعريف Dataset مخصص

				
					#Define Custom datasets:
class NAIPImages(RasterDataset):
    filename_glob = "m_*.tif"
    is_image = True
    separate_files = False

class ChesapeakeLabels(RasterDataset):
    filename_glob = "m_*.tif"
    is_image = False
    separate_files = False
				
			

نقوم بتعريف شكل الملفات الخاصة بكل نوع من البيانات (صور الأقمار الصناعية والملصقات).

06. اختبار تحميل البيانات

				
					#Testing if our datasets are working properly:
naip_root = os.path.join(INPUT_DIR, 'naip_images')
naip_images = NAIPImages(
    paths=naip_root,
)
print(naip_images)

chesapeake_root = os.path.join(INPUT_DIR, "chesapeake_labels")
chesapeake_labels = ChesapeakeLabels(
    paths=chesapeake_root,
)
print(chesapeake_labels)

				
			

نقوم بتحميل البيانات من المسارات المحددة، ثم نستخدم print للتأكد من عمل الـ Dataset بشكل صحيح وأن المسارات تم قراءتها دون مشاكل.

07. تقاطع البيانات (صور + ملصقات)

				
					# perform intersection operation (only keep data which is present in both datasets = Image + Labels/Masks):
dataset = naip_images & chesapeake_labels
# dataset_test = naip_test & chesapeake
				
			

نأخذ فقط العينات التي تحتوي على صورة وملصق معًا.

08. تحديد Sampler ودالة تحميل البيانات

				
					#Configure our sampler with number of crops (length) and crop_size (size):
sampler = RandomGeoSampler(dataset, size=128, length=1000)
# sampler_test = RandomGeoSampler(dataset_test, size=128, length=500)

#configure Pytorch dataloader:
dataloader = DataLoader(dataset, sampler=sampler, collate_fn=stack_samples, batch_size=16)
# dataloader_test = DataLoader(dataset_test, sampler=sampler_test, collate_fn=stack_samples, batch_size=16)

				
			

نأخذ عينات عشوائية بمقاس 128x128 وبعدد 1000. ثم ننشئ DataLoader للتحميل.

09. تعريف الألوان والأسماء للفئات

				
					# Specify colors for each class using hex codes
class_colors = [
    "#000000", "#ff001e", "#ff8f9c", "#56a100",
    "#b3b3b3", "#3bfcff", "#0004ff", "#ff00ff",
    "#f2ff00", "#00ff1e", '#fcba03', '#d66f00',
    '#006875', '#e0bb00'
]

class_names = [
    'No Data', 'Water', 'Wetlands', 'Tree Canopy',
    'Shrubland', 'Low Vegetation', 'Barren', 'Structures',
    'Impervious Surfaces', 'Impervious Roads', 'Tree Canopy over Structures',
    'Tree Canopy over Impervious Surfaces', 'Tree Canopy over Impervious Roads',
    'Aberdeen Proving Ground'
]

# Create a colormap with the given colors
colormap = ListedColormap(class_colors)

				
			

نحدد لونًا لكل فئة (Label) لرؤية النتائج بشكل واضح لاحقًا.

10. عرض بعض العينات من الصور والملصقات

				
					# lets look at some samples
num_samples = 5
dataloader_plot = DataLoader(dataset, sampler=sampler, collate_fn=stack_samples, batch_size=1)

# Create a seperate figure and plot the colormap
plt.figure(figsize=(14, 1))
plt.imshow(np.arange(14).reshape(1, 14), cmap=colormap, aspect='auto', origin='lower')
plt.xticks(range(14), class_names, rotation=45, fontsize=10)
plt.yticks([])  # Hide y-axis ticks
plt.title("Colormap")
plt.show()

#iterate over samples and display them:
for i in range(num_samples):
    plt.figure(figsize=(20, 5))
    sample = next(iter(dataloader_plot))
    plt.subplot(1,2,1)
    plt.title("Input Image")
    plt.imshow(sample["image"][:,:3,:,:].squeeze().permute(1, 2, 0).type(torch.int64)) # for visualization we have to transpose back to HWC
    plt.subplot(1,2,2)
    plt.title("Mask Ground Truth")
    plt.imshow(sample["mask"].permute(1, 2, 0).type(torch.int64), cmap=colormap)  # for visualization we have to remove 3rd dimension of mask


    plt.show()

				
			

نقوم بعرض صور من البيانات الحقيقية + الماسك Ground Truth باستخدام .

11. تعريف دالة التقييم (الدقة)

				
					#Define Accuracy metric:
def acc(label, predicted):
    seg_acc = (label.cpu() == torch.argmax(predicted, axis=1).cpu()).sum() / torch.numel(label.cpu())
    return seg_acc

				
			

تحسب نسبة صحة التنبؤات مقارنة بالملصقات الحقيقية (Ground Truth).

12. تعريف نموذج Unet

				
					#Define Model:
model = smp.Unet(
    encoder_name="resnet34",        # choose encoder, e.g. mobilenet_v2 or efficientnet-b7
    encoder_weights="imagenet",     # use `imagenet` pre-trained weights for encoder initialization
    in_channels=3,                  # model input channels (1 for gray-scale images, 3 for RGB, etc.)
    classes=14,                     # model output channels (number of classes in your dataset)
)

if str(device) == 'cuda':
        print("model is cuda")
        model = model.cuda()

				
			

ننشئ نموذج Unet باستخدام كــ Encoder، وعدد الفئات 14.

13. تعريف الخسارة والمهيئات

				
					optimizer = torch.optim.Adam(model.parameters(), lr=1e-3)
criterion = smp.losses.DiceLoss('multiclass', from_logits=True)

lr_scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=1, gamma=0.5)
min_loss = torch.tensor(float('inf'))

os.makedirs('./saved_models', exist_ok=True)

				
			

Adam لتحديث المعلمات.

Dice Loss لتقليل عدم التوافق بين الماسكات.

Scheduler لتقليل التعلم تدريجيًا إذا لم تتحسن النتائج.

14. التدريب والتقييم

				
					import copy

N_EPOCHS = 10

plot_losses = []
scheduler_counter = 0
best_model = None

for epoch in range(N_EPOCHS):
    # Training
    model.train()
    loss_list = []
    acc_list = []

    for batch_i, sample in enumerate(dataloader):
        x, y = sample["image"][:, :3, :, :], sample["mask"]
        sample = None
        pred_mask = model(x.to(device).float())
        loss = criterion(pred_mask, y.to(device).type(torch.int64))

        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

        loss_list.append(loss.cpu().detach().numpy())
        acc_list.append(acc(y, pred_mask).numpy())

        print(
            "\r[Epoch %d/%d] [Batch %d/%d] [Loss: %f (%f)]"
            % (
                epoch,
                N_EPOCHS,
                batch_i,
                len(dataloader),
                loss.cpu().detach().numpy(),
                np.mean(loss_list),
            )
        )

    scheduler_counter += 1

    # Testing (using same dataloader for now)
    model.eval()
    val_loss_list = []
    val_acc_list = []

    for batch_i, sample in enumerate(dataloader):
        x, y = sample["image"][:, :3, :, :], sample["mask"]
        sample = None
        with torch.no_grad():
            pred_mask = model(x.to(device).float())
        val_loss = criterion(pred_mask, y.to(device).type(torch.int64))
        val_loss_list.append(val_loss.cpu().detach().numpy())
        val_acc_list.append(acc(y, pred_mask).numpy())

    print(' epoch {} - loss : {:.5f} - acc : {:.2f} - val loss : {:.5f} - val acc : {:.2f}'.format(
        epoch,
        np.mean(loss_list),
        np.mean(acc_list),
        np.mean(val_loss_list),
        np.mean(val_acc_list)
    ))

    plot_losses.append([epoch, np.mean(loss_list), np.mean(val_loss_list)])

    compare_loss = np.mean(val_loss_list)
    is_best = compare_loss < min_loss

    if is_best:
        scheduler_counter = 0
        min_loss = min(compare_loss, min_loss)
        torch.save(model.state_dict(), './saved_models/unet_epoch_{}_{:.5f}.pt'.format(epoch, np.mean(val_loss_list)))
        best_model = copy.deepcopy(model)

    if scheduler_counter > 5:
        lr_scheduler.step()
        print(f"lowering learning rate to {optimizer.param_groups[0]['lr']}")
        scheduler_counter = 0

				
			

لكل تكرار (Epoch):

التدريب حساب الخسارة والدقة.

التقييم على نفس البيانات.

حفظ أفضل نموذج بناءً على الخسارة الأقل.

15. رسم مخطط الخسارة

				
					# plot loss
plot_losses = np.array(plot_losses)
plt.figure(figsize=(12,8))
plt.plot(plot_losses[:,0], plot_losses[:,1], color='b', linewidth=4)
plt.plot(plot_losses[:,0], plot_losses[:,2], color='r', linewidth=4)
plt.title("Crossentropy", fontsize=20)
plt.xlabel('epoch',fontsize=20)
plt.ylabel('loss',fontsize=20)
plt.grid()
plt.legend(['training', 'validation']) # using a named size
plt.savefig('loss_plots.png')

				
			

رسم منحنى الخسارة أثناء التدريب والتقييم لمعرفة تطور النموذج.

16. عرض التنبؤات من النموذج المدرب

				
					# lets look at some samples
num_samples = 5
dataloader_plot = DataLoader(dataset, sampler=sampler, collate_fn=stack_samples, batch_size=1)

# Specify colors for each class using hex codes
class_colors = [
    "#000000", "#ff001e", "#ff8f9c", "#56a100",
    "#b3b3b3", "#3bfcff", "#0004ff", "#ff00ff",
    "#f2ff00", "#00ff1e", '#fcba03', '#d66f00',
    '#006875', '#e0bb00'
]

class_names = [
    'Background', 'Water', 'Wetlands', 'Tree Canopy',
    'Shrubland', 'Low Vegetation', 'Barren', 'Structures',
    'Impervious Surfaces', 'Impervious Roads', 'Tree Canopy over Structures',
    'Tree Canopy over Impervious Surfaces', 'Tree Canopy over Impervious Roads',
    'Aberdeen Proving Ground'
]

# Create a colormap with the given colors
colormap = ListedColormap(class_colors)

# Create a seperate figure and plot the colormap
plt.figure(figsize=(14, 1))
plt.imshow(np.arange(14).reshape(1, 14), cmap=colormap, aspect='auto', origin='lower')
plt.xticks(range(14), class_names, rotation=45, fontsize=10)
plt.yticks([])  # Hide y-axis ticks
plt.title("Colormap")
plt.show()

#iterate over samples and display them:
for i in range(num_samples):
    plt.figure(figsize=(20, 5))
    sample = next(iter(dataloader_plot))
    model.eval()
    output = model(sample["image"][:,:3,:,:].float().to(device)).detach().type(torch.int64)
    plt.subplot(1,3,1)
    plt.title("Input Image")
    plt.imshow(sample["image"][:,:3,:,:].squeeze().permute(1, 2, 0).type(torch.int64)) # for visualization we have to transpose back to HWC
    plt.subplot(1,3,2)
    plt.title("Mask Ground Truth")
    plt.imshow(sample["mask"].permute(1, 2, 0).type(torch.int64), cmap=colormap)  # for visualization we have to remove 3rd dimension of mask
    plt.subplot(1,3,3)
    plt.title("Model's mask")
    plt.imshow(output.argmax(dim=1).squeeze().type(torch.int64).cpu(), cmap=colormap)  # for visualization we have to remove 3rd dimension of mask
    # cbar = plt.colorbar(ticks=range(14), format='%1i', cmap=colormap)
    # cbar.ax.set_yticklabels(class_names)

    plt.show()

				
			

نقوم بعرض:

الصورة الأصلية

الماسك الحقيقي (Ground Truth)

التنبؤ الناتج من النموذج

تناولنا في هذا الدرس بناء نموذج تقطيع دلالي باستخدام مكتبة TorchGeo ونموذج UNet المدعوم بمحول ResNet34، لتصنيف استخدامات الأراضي من صور الأقمار الصناعية NAIP وبيانات Chesapeake. يبدأ الدرس بتحميل وتجهيز البيانات، وإنشاء العينات العشوائية، ثم تدريب النموذج باستخدام Dice Loss، وأخيرًا تقييم النتائج بصريًا وكمياً عبر دقة التنبؤات ورسم منحنى الخسارة. يُعد هذا المشروع مثالاً عمليًا مميزًا على تطبيق الذكاء الاصطناعي في تحليل البيانات الجغرافية والاستشعار عن بُعد.

Google Colab
يمكنكم الاطلاع على ملف نوتبوك كامل يحتوي جميع الأكواد بالكامل وتجربته على منصة Google Colab عبر الرابط التالي
سلسلة الذكاء الاصطناعي والاستشعار عن بعد 3 أجزاء
م. عبدالعزيز العكوز

نـشـــرة فـهـــم البـريديـــة

لتبقى على اطلاع دائم على كل ما هو جديد مما تقدمه منصة فهم، انضم لنشرتنا البريدية.
خريج دراسات عليا في هندسة الحاسب، اختصاص الذكاء الاصطناعي والاستشعار عن بعد من كلية الحاسب بجامعة الملك سعود، شغوف بتطبيقات الذكاء الاصطناعي بجميع أطيافه من تعلم الآلة، والتعلم العميق، ورؤية الحاسب. أقدّر رواد الأعمال أصحاب الفكر الهندسي مثل إيلون ماسك.