ການແບ່ງສ່ວນຮູບພາບ (Image Segmentation): ການວິເຄາະພື້ນທີ່ປ່າໄມ້ໃນລາວ
ການແບ່ງສ່ວນຮູບພາບ (Image Segmentation): ການວິເຄາະພື້ນທີ່ປ່າໄມ້ໃນລາວດ້ວຍ U-Net
ປະເທດລາວອຸດົມສົມບູນໄປດ້ວຍຊັບພະຍາກອນປ່າໄມ້, ໂດຍສະເພາະເຂດສາຍພູຫຼວງ ແລະ ພາກເໜືອ. ແນວໃດກໍຕາມ, ບັນຫາການຖາງປ່າເຮັດໄຮ່ ແລະ ການລັກລອບຕັດໄມ້ ຍັງຄົງເປັນສິ່ງທ້າທາຍໃຫຍ່ສຳລັບການອະນຸລັກ. ເພື່ອແກ້ໄຂບັນຫານີ້ໃນລະດັບມະຫາພາກ, ການນຳໃຊ້ Computer Vision (CV) ໂດຍສະເພາະເທັກນິກ Semantic Image Segmentation ຮ່ວມກັບຮູບພາບດາວທຽມ (ເຊັ່ນ: Sentinel-2 ຫຼື Landsat) ແມ່ນກາຍເປັນເຄື່ອງມືທີ່ຊົງພະລັງທີ່ສຸດ.
ໃນບົດຄວາມນີ້, ເຮົາຈະລົງເລິກເຖິງສະຖາປັດຕະຍະກຳ U-Net ເຊິ່ງເປັນໂມເດວ Deep Learning ທີ່ໄດ້ຮັບຄວາມນິຍົມສູງສຸດໃນການຈັດແຍກພິກເຊວ (Pixel-level classification) ຂອງຮູບພາບດາວທຽມ, ພ້ອມທັງວິທີການແກ້ໄຂບັນຫາ Class Imbalance (ຄວາມບໍ່ສົມດຸນຂອງຂໍ້ມູນ) ທີ່ມັກພົບໃນວຽກງານການຕິດຕາມການສູນເສຍປ່າໄມ້.
1. ເປັນຫຍັງຕ້ອງໃຊ້ U-Net ສຳລັບຮູບພາບດາວທຽມໃນລາວ?
ຮູບພາບດາວທຽມຂອງພື້ນທີ່ປ່າໄມ້ໃນລາວ (ເຊັ່ນ: ບໍລິເວນພູພຽງນາກາຍ) ມັກຈະມີຄວາມຊັບຊ້ອນສູງ ເນື່ອງຈາກມີເມກບັງ, ເງົາຂອງພູເຂົາ, ແລະ ສີຂອງດິນແດງລູກຮັງທີ່ມັກຈະປົນກັບພື້ນທີ່ປ່າເຊື່ອມໂຊມ. U-Net ຖືກພັດທະນາມາເພື່ອກວດຈັບລາຍລະອຽດທີ່ຊັດເຈນໃນລະດັບພິກເຊວ ຜ່ານສະຖາປັດຕະຍະກຳແບບ Encoder-Decoder ທີ່ມີ Skip Connections.
ສະຖາປັດຕະຍະກຳພື້ນຖານ (Architecture Overview)
- Contracting Path (Encoder): ໜ້າທີ່ຫຼັກແມ່ນການສະກັດຄຸນລັກສະນະ (Feature Extraction). ໃນແຕ່ລະຂັ້ນຕອນຈະມີການໃຊ້ Convolutional layers ສອງຄັ້ງ ຕາມດ້ວຍ ReLU activation ແລະ Max Pooling. ຂະບວນການນີ້ຈະຫຼຸດຂະໜາດ Spatial resolution ລົງ ແຕ່ເພີ່ມຈຳນວນ Feature channels ຂຶ້ນ, ຊ່ວຍໃຫ້ໂມເດວຈັບ Context ລວມຂອງພື້ນທີ່ (ເຊັ່ນ: ນີ້ຄືບໍລິເວນພູເຂົາ ຫຼື ທົ່ງນາ).
- Expansive Path (Decoder): ເຮັດໜ້າທີ່ຂະຫຍາຍຮູບພາບກັບຄືນ (Up-sampling) ໂດຍໃຊ້ Transposed Convolutions ເພື່ອກູ້ຄືນລາຍລະອຽດດ້ານ Spatial.
- Skip Connections: ນີ້ຄືຫົວໃຈສຳຄັນຂອງ U-Net. ມັນຈະທຳການ Concatenate ຂໍ້ມູນ feature maps ຈາກຂັ້ນຕອນ Encoder ມາລວມເຂົ້າກັບ Decoder ໃນລະດັບດຽວກັນ. ສິ່ງນີ້ຊ່ວຍປ້ອງກັນບັນຫາ Vanishing Gradients ແລະ ຊ່ວຍໃຫ້ໂມເດວສາມາດແຍກແຍະຂອບເຂດຂອງປ່າໄມ້ກັບພື້ນທີ່ດິນແປນໄດ້ຢ່າງຊັດເຈນ ເຊິ່ງເປັນສິ່ງສຳຄັນຫຼາຍໃນການລະບຸການຖາງປ່າໃໝ່ໆ.
2. ການກຽມຂໍ້ມູນ (Data Preparation) : Multi-spectral Tensors
ໃນການດຶງຂໍ້ມູນດາວທຽມ, ເຮົາຈະບໍ່ໃຊ້ພຽງແຕ່ພາບສີ RGB ເທົ່ານັ້ນ. ການຕິດຕາມພືດພັນໃນລາວຈະຕ້ອງອາໄສແບນ (Band) ໄລຍະຄື້ນອິນຟາເຣດໃກ້ (Near-Infrared - NIR) ເພື່ອຄິດໄລ່ຄ່າ NDVI (Normalized Difference Vegetation Index).
ສູດການຄິດໄລ່ຄ່າ NDVI:
ໃນ PyTorch, ຮູບພາບດາວທຽມຈະຖືກໂຫຼດເຂົ້າເປັນ Tensors ໃນຮູບແບບ (Batch_Size, Channels, Height, Width) ໂດຍ Channels ສາມາດມີເຖິງ 13 ແບນສຳລັບ Sentinel-2.
3. ການສ້າງໂມເດວ U-Net ດ້ວຍ PyTorch ຄົບວົງຈອນ (Implementation)
ນີ້ຄືຕົວຢ່າງຂອງການຂຽນໂມເດວ U-Net ຂັ້ນພື້ນຖານໃນ PyTorch ສໍາລັບຮັບຂໍ້ມູນພາບດາວທຽມແບບ 4 ຂະໜາດ (RGB + NIR):
import torch
import torch.nn as nn
import torch.nn.functional as F
class DoubleConv(nn.Module):
""" ເຮັດ Spatial Convolutions ສອງຄັ້ງດ້ວຍ Batch Normalization """
def __init__(self, in_channels, out_channels):
super().__init__()
self.double_conv = nn.Sequential(
nn.Conv2d(in_channels, out_channels, kernel_size=3, padding=1),
nn.BatchNorm2d(out_channels),
nn.ReLU(inplace=True),
nn.Conv2d(out_channels, out_channels, kernel_size=3, padding=1),
nn.BatchNorm2d(out_channels),
nn.ReLU(inplace=True)
)
def forward(self, x):
return self.double_conv(x)
class UNet(nn.Module):
def __init__(self, n_channels=4, n_classes=1): # 4 channels: RGB+NIR, 1 class: Deforestation
super(UNet, self).__init__()
self.inc = DoubleConv(n_channels, 64)
self.down1 = nn.Sequential(nn.MaxPool2d(2), DoubleConv(64, 128))
self.down2 = nn.Sequential(nn.MaxPool2d(2), DoubleConv(128, 256))
self.up1 = nn.ConvTranspose2d(256, 128, kernel_size=2, stride=2)
self.conv_up1 = DoubleConv(256, 128) # 128 + 128 (skip connection)
self.up2 = nn.ConvTranspose2d(128, 64, kernel_size=2, stride=2)
self.conv_up2 = DoubleConv(128, 64)
self.outc = nn.Conv2d(64, n_classes, kernel_size=1)
def forward(self, x):
# Encoder
x1 = self.inc(x)
x2 = self.down1(x1)
x3 = self.down2(x2)
# Decoder ກັບ Skip Connections
y = self.up1(x3)
# Handle padding inconsistencies
diffY = x2.size()[2] - y.size()[2]
diffX = x2.size()[3] - y.size()[3]
y = F.pad(y, [diffX // 2, diffX - diffX // 2, diffY // 2, diffY - diffY // 2])
y = torch.cat([x2, y], dim=1) # Skip connection
y = self.conv_up1(y)
y2 = self.up2(y)
diffY = x1.size()[2] - y2.size()[2]
diffX = x1.size()[3] - y2.size()[3]
y2 = F.pad(y2, [diffX // 2, diffX - diffX // 2, diffY // 2, diffY - diffY // 2])
y2 = torch.cat([x1, y2], dim=1) # Skip connection
y2 = self.conv_up2(y2)
logits = self.outc(y2)
return torch.sigmoid(logits)
# ທົດສອບ Tensor Input
model = UNet(n_channels=4, n_classes=1)
dummy_tensor = torch.randn(1, 4, 256, 256) # Batch=1, Channels=4, 256x256 image
output = model(dummy_tensor)
print(f"Output shape: {output.shape}")
4. ການປັບປຸງຄວາມແມ່ນຍຳ (Optimization) ດ້ວຍ Loss Functions ຂັ້ນສູງ
ໃນປະເທດລາວການກວດຈັບການຖາງປ່າ ມີລັກສະນະເປັນ Highly Imbalanced Data Problem. ໝາຍຄວາມວ່າ ໃນຮູບດາວທຽມຂະໜາດ ພິກເຊວ, ພື້ນທີ່ເຊິ່ງຖືກຕັດໄມ້ອາດຈະກວມເອົາພຽງແຕ່ ຂອງຮູບພາບທັງໝົດ, ອີກ ແມ່ນປ່າໄມ້ທີ່ອຸດົມສົມບູນ.
ຖ້າເຮົາໃຊ້ Binary Cross Entropy (BCE) Loss, ໂມເດວອາດຈະຮຽນຮູ້ທີ່ຈະທຳນາຍທຸກຢ່າງວ່າເປັນ “ປ່າໄມ້” ໝົດ ແລ້ວໄດ້ Accuracy ທີ່ສູງເຖິງ 95% ແຕ່ໃຊ້ງານຈິງບໍ່ໄດ້. ວິທີການແກ້ໄຂແມ່ນການນຳໃຊ້ Dice Loss ຫຼື Focal Loss:
Dice Coefficient Loss
Dice Loss ແມ່ນການວັດແທກຄວາມທັບຊ້ອນ (Overlap) ລະຫວ່າງການທຳນາຍຂອງໂມເດວ ແລະ Ground Truth (Annotation) ທີ່ອະນຸຍາດໃຫ້ໂມເດວເລັ່ງເປົ້າໃສ່ການ Segmentation ທີ່ຊັດເຈນ.
(ໂດຍ ແມ່ນຄ່າຄວາມໜ້າຈະເປັນທີ່ໂມເດວທຳນາຍ ແລະ ແມ່ນຄ່າຄວາມຈິງ (Ground Truth), ແມ່ນຄ່າຄົງທີ່ນ້ອຍໆເພື່ອປ້ອງກັນການຫານດ້ວຍສູນ)
Focal Loss
Focal loss ຈະລົງໂທດ (penalize) ການທຳນາຍທີ່ຜິດພາດໃນກຸ່ມ Class ທີ່ຫາຍາກ (Minority class - ໃນກໍລະນີນີ້ຄືພື້ນທີ່ປ່າຖືກທຳລາຍ) ຫຼາຍກວ່າປົກກະຕິ ໂດຍການຕື່ມປັດໄຈການດັດປັບ .
ຂໍ້ສັງເກດສຳຄັນ ສຳລັບການໃຊ້ງານໃນລາວ (Key Takeaways)
- Multi-Spectral Data is a Must: ການວິເຄາະພາບດາວທຽມໃນລາວ ຕ້ອງພິຈາລະນາໃຊ້ແບນ Near-Infrared (NIR) ຂອງ Sentinel-2 ເພື່ອແຍກຄວາມແຕກຕ່າງລະຫວ່າງ “ປ່າຕຶບດົງໜາ” ແລະ “ພື້ນທີ່ສວນກະສິກຳ”.
- Skip Connections Matter: ການນຳໃຊ້ Feature ແບບ Spatial ລະດັບຕໍ່າຈາກ Encoding path ຊ່ວຍແຍກແຍະຂອບເຂດທີ່ດິນລະຫວ່າງບ້ານເຮືອນປະຊາຊົນ ແລະ ຂອບເຂດປ່າສະຫງວນໄດ້ຊັດເຈນຂຶ້ນ.
- Loss Combination: ໃນທາງປະຕິບັດ, ການລວມ BCE ບວກກັບ Dice Loss
(BCE + Dice)ມັກຈະໃຫ້ຜົນລັດການ Optimization ແລະ Gradient flow ທີ່ດີທີ່ສຸດໃນການ Train ໂມເດວ U-Net ສັງເກດການປ່າໄມ້.
ບົດສະຫຼຸບ
ເຕັກໂນໂລຊີ Computer Vision ໂດຍສະເພາະແບບຈຳລອງ U-Net ໄດ້ຍົກລະດັບວິທີການຕິດຕາມແລະຄຸ້ມຄອງຊັບພະຍາກອນທຳມະຊາດໃນປະເທດລາວໄປອີກຂັ້ນ. ຈາກແຕ່ກ່ອນທີ່ເຈົ້າໜ້າທີ່ກະຊວງກະສິກຳ ແລະ ປ່າໄມ້ ຕ້ອງໃຊ້ເວລາຫຼາຍເດືອນໃນການລົງພື້ນທີ່ສຳຫຼວດດິນແດນອັນກວ້າງໃຫຍ່ໄພສານແລະຫຍຸ້ງຍາກໃນການເຂົ້າເຖິງ ດຽວນີ້ດ້ວຍການຂຽນໂມເດວ Deep Learning ຮ່ວມກັບພາບດາວທຽມ ເຮົາສາມາດທີ່ຈະລະບຸຈຸດພິກັດທີ່ມີການບຸກລຸກ ຫຼື ການປ່ຽນແປງພື້ນທີ່ປ່າໄດ້ໃນລະດັບຄວາມແມ່ນຍຳສູງ ແລະ ເປັນແບບ Real-time. ສິ່ງນີ້ບໍ່ພຽງແຕ່ເປັນການປະຍຸກໃຊ້ຄະນິດສາດ ແລະ ວິທະຍາການຄອມພິວເຕີລະດັບສູງ ແຕ່ມັນຄືອາວຸດສຳຄັນໃນການຊ່ວຍປົກປັກຮັກສາສິ່ງແວດລ້ອມສີຂຽວຂອງລາວໃຫ້ຍືນຍົງຕໍ່ໄປ.