Doctor AI

Dr. Savath Saypadith

240 ບົດຄວາມ

ແນະນຳໃຫ້ຮູ້ຈັກກັບ Convolutional Neural Networks (CNNs)

ໂພສເມື່ອ # Computer Vision # Deep Learning # Neural Networks # Python

ແນະນຳໃຫ້ຮູ້ຈັກກັບ Convolutional Neural Networks (CNNs): ພື້ນຖານຂອງ Computer Vision ໃນຍຸກປັດຈຸບັນ

ລອງນຶກພາບເບິ່ງວ່າ ຖ້າເຮົາຕ້ອງການຕິດຕັ້ງກ້ອງວົງຈອນປິດ (CCTV) ຢູ່ສີ່ແຍກໄຟແດງດົງໂດກ ໃນນະຄອນຫຼວງວຽງຈັນ ເພື່ອນັບຈຳນວນລົດຈັກ ແລະ ລົດໃຫຍ່ແບບອັດຕະໂນມັດ ຫຼື ພັດທະນາລະບົບ AI ເພື່ອກວດຫາພະຍາດໃບໝ້ຽງໃນສວນກາເຟຢູ່ເມືອງປາກຊ່ອງ. ຄຳຖາມຄື: ຄອມພິວເຕີຮູ້ໄດ້ແນວໃດວ່າຮູບພາບໃດແມ່ນລົດຈັກ, ຮູບພາບໃດແມ່ນລົດໃຫຍ່ ຫຼື ໃບກາເຟໃບໃດທີ່ກຳລັງເປັນພະຍາດ?

ນັ້ນຄືໜ້າທີ່ຂອງ Convolutional Neural Networks (CNNs) ເຊິ່ງເປັນໂຄງສ້າງເຄືອຂ່າຍປະສາດທຽມ (Neural Network) ທີ່ຖືກອອກແບບມາເພື່ອປະມວນຜົນຂໍ້ມູນທີ່ມີໂຄງສ້າງແບບຕາໜ່າງ (Grid-like topology) ເຊັ່ນ: ຮູບພາບ.

ໃນບົດຄວາມນີ້, ເຮົາຈະມາທຳຄວາມເຂົ້າໃຈກັບໂຄງສ້າງການເຮັດວຽກຂອງ CNNs ແລະ ລອງຂຽນໂຄດເບື້ອງຕົ້ນໄປພ້ອມໆກັນ.

CNN ແມ່ນຫຍັງ ແລະ ເປັນຫຍັງຈຶ່ງສຳຄັນ?

ກ່ອນໜ້າທີ່ຈະມີ CNNs, ການປະມວນຜົນຮູບພາບດ້ວຍ Multi-Layer Perceptron (MLP) ແບບເກົ່າ ແມ່ນພົບກັບບັນຫາໃຫຍ່. MLP ຈະທຳການ “ແປງຮູບພາບໃຫ້ເປັນແຖວລຽນຍາວ” (Flattening) ເຊິ່ງເຮັດໃຫ້ສູນເສຍຂໍ້ມູນທາງພື້ນທີ່ (Spatial Information). ສົ່ງຜົນໃຫ້ໂມເດວບໍ່ຮູ້ວ່າພິກເຊວທີ່ຢູ່ໃກ້ຄຽງກັນນັ້ນມີຄວາມສຳພັນກັນແນວໃດ.

CNN ຖືກສ້າງຂຶ້ນມາເພື່ອແກ້ໄຂບັນຫານີ້ ໂດຍການສະກັດເອົາລັກສະນະເດັ່ນ (Feature extraction) ຂອງຂອບ (Edges), ສີ (Colors) ແລະ ພື້ນຜິວ (Textures) ອອກມາຈາກຮູບພາບ ໂດຍຍັງຄົງຮັກສາໂຄງສ້າງ 2 ມິຕິຂອງຮູບພາບໄວ້.

ໂຄງສ້າງຫຼັກຂອງ CNN (Core Architecture of CNNs)

ໂຄງສ້າງຂອງ CNN ສ່ວນໃຫຍ່ຈະປະກອບດ້ວຍ 4 ຊັ້ນ (Layers) ຫຼັກດັ່ງນີ້:

1. Convolutional Layer (ຊັ້ນຄອນໂວລູຊັນ)

ນີ້ຄືຫົວໃຈສຳຄັນຂອງ CNN. ຊັ້ນນີ້ຈະໃຊ້ເຄື່ອງມືທີ່ເອີ້ນວ່າ Filter (ຫຼື Kernel) ເລື່ອນກວາດໄປທົ່ວຮູບພາບ (Sliding window) ເພື່ອເຮັດການຄຳນວນທາງຄະນິດສາດລະຫວ່າງFilter ກັບຄ່າພິກເຊວຂອງຮູບ. ຜົນໄດ້ຮັບຈາກຊັ້ນນີ້ເຮົາເອີ້ນວ່າ Feature Map, ເຊິ່ງຈະເປັນຕົວບອກວ່າພົບລັກສະນະເດັ່ນ (ເຊັ່ນ: ເສັ້ນຕັດຊື່, ເສັ້ນໂຄ້ງ) ຢູ່ຈຸດໃດຂອງຮູບພາບແດ່.

2. Activation Function (ຫຼາຍທີ່ສຸດແມ່ນໃຊ້ ReLU)

ຫຼັງຈາກຜ່ານ Convolutional Layer, ເຮົາຈະນຳໃຊ້ Activation Function ປະເພດ ReLU (Rectified Linear Unit) ເພື່ອປ່ຽນຄ່າລົບທັງໝົດໃຫ້ກາຍເປັນສູນ (0) ແລະ ຮັກສາຄ່າບວກໄວ້ຄືເກົ່າ. ໜ້າທີ່ຂອງຂັ້ນຕອນນີ້ຄືການເພີ່ມຄວາມບໍ່ເປັນເສັ້ນຊື່ (Non-linearity) ໃຫ້ກັບໂມເດວ ເຮັດໃຫ້ມັນສາມາດຮຽນຮູ້ຮູບແບບທີ່ຊັບຊ້ອນໄດ້.

3. Pooling Layer (ຊັ້ນພູລິງ)

ຊັ້ນນີ້ມີໜ້າທີ່ໃນການ “ຫຼຸດຂະໜາດ” ຂອງ Feature Map ລົງ (Downsampling). ວິທີທີ່ນິຍົມທີ່ສຸດຄື Max Pooling ເຊິ່ງຈະເລືອກເອົາຄ່າທີ່ຫຼາຍທີ່ສຸດໃນກຸ່ມພິກເຊວທີ່ກຳນົດ. ການເຮັດ Pooling ຈະຊ່ວຍ:

4. Fully Connected Layer (ຊັ້ນເຊື່ອມຕໍ່ເຕັມຮູບແບບ)

ຫຼັງຈາກທີ່ຮູບພາບຜ່ານການສະກັດ Feature ມາຫຼາຍຊັ້ນແລ້ວ, ຂໍ້ມູນຈະຖືກປ່ຽນໃຫ້ເປັນແຖວດຽວເພື່ອສົງເຂົ້າສູ່ Neural Network ແບບປົກກະຕິ ໃນການຕັດສິນໃຈແຍກປະເພດ (Classification) ໃນຂັ້ນຕອນສຸດທ້າຍ.

ການຂຽນໂຄດສ້າງ CNN ເບື້ອງຕົ້ນດ້ວຍ PyTorch

ສຳລັບນັກພັດທະນາ, PyTorch ແມ່ນໜຶ່ງໃນ Framework ທີ່ນິຍົມທີ່ສຸດ. ມັນຊ່ວຍໃຫ້ເຮົາສາມາດສ້າງໂຄງສ້າງ CNN ໄດ້ຢ່າງງ່າຍດາຍ. ລຸ່ມນີ້ແມ່ນການສ້າງໂມເດວ CNN ແບບງ່າຍໆສຳລັບແຍກປະເພດຮູບພາບ (ເຊັ່ນ: ການແຍກລົດຈັກ ແລະ ລົດໃຫຍ່):

import torch
import torch.nn as nn
import torch.nn.functional as F

class SimpleCNN(nn.Module):
    def __init__(self):
        super(SimpleCNN, self).__init__()
        # Convolutional Layer 1: ຮັບຮູບພາບສີ RGB (3 channels), ສ້າງ 16 ເສັ້ນໃຍສະກັດ (Filters), ຂະໜາດ 3x3
        self.conv1 = nn.Conv2d(in_channels=3, out_channels=16, kernel_size=3, padding=1)
        # Pooling Layer: ຫຼຸດຂະໜາດຮູບລົງເຄິ່ງໜຶ່ງ
        self.pool = nn.MaxPool2d(kernel_size=2, stride=2)
        # Convolutional Layer 2: ຮັບ 16 channels, ສ້າງ 32 Filters
        self.conv2 = nn.Conv2d(in_channels=16, out_channels=32, kernel_size=3, padding=1)
        
        # Fully Connected Layer: ສົມມຸດວ່າຮູບນຳເຂົ້າຂະໜາດ 32x32 pixels
        # ຫຼັງຈາກຜ່ານ Pooling 2 ຄັ້ງ ຂະໜາດຈະເຫຼືອ 8x8 (32 channels * 8 * 8)
        self.fc1 = nn.Linear(32 * 8 * 8, 128)
        self.fc2 = nn.Linear(128, 2) # Output 2 classes (ເໝາະສຳລັບ: ລົດຈັກ vs ລົດໃຫຍ່)

    def forward(self, x):
        # ຜ່ານ Conv1 -> ReLU -> Pool
        x = self.pool(F.relu(self.conv1(x)))
        # ຜ່ານ Conv2 -> ReLU -> Pool
        x = self.pool(F.relu(self.conv2(x)))
        
        # ແປງຂໍ້ມູນເປັນ 1D Tensor (Flattening)
        x = x.view(-1, 32 * 8 * 8)
        
        # ຜ່ານ Fully Connected Layers
        x = F.relu(self.fc1(x))
        x = self.fc2(x)
        return x

# ທົດລອງສ້າງ Object ສຳລັບໂມເດວ
model = SimpleCNN()
print(model)

ໂຄດດ້ານເທິງນີ້ແມ່ນພື້ນຖານໃນການກຳນົດໂຄງສ້າງ (Architecture). ເມື່ອນຳໃຊ້ຈິງ, ທ່ານຈະຕ້ອງນຳເອົາຮູບພາບມາຝຶກສອນ (Train) ໂມເດວ ໂດຍຜ່ານຂະບວນການອັບເດດນໍ້າໜັກ (Weight update/Backpropagation).

ການນຳໃຊ້ CNN ໃນບໍລິບົດຂອງປະເທດລາວ

ການຮຽນຮູ້ CNN ບໍ່ແມ່ນພຽງແຕ່ທິດສະດີ ແຕ່ມັນສາມາດນຳມາແກ້ໄຂບັນຫາໃນປະເທດເຮົາໄດ້ແທ້:

ສິ່ງທີ່ຄວນຈື່ (Key Takeaways)

ສະຫຼຸບ

Convolutional Neural Networks (CNNs) ບໍ່ແມ່ນພຽງແຕ່ຄຳສັບທາງເທັກນິກທີ່ອ່ານເຂົ້າໃຈຍາກ, ແຕ່ມັນແມ່ນຜົນງານທາງດ້ານວິສະວະກຳຊອບແວທີ່ຊ່ວຍເປີດ “ດວງຕາ” ໃຫ້ຄອມພິວເຕີສາມາດມອງເຫັນ ແລະ ເຂົ້າໃຈໂລກພາຍນອກໄດ້. ສຳລັບນັກສຶກສາ ແລະ ນັກພັດທະນາໃນປະເທດລາວ ການສຶກສາ ແລະ ທຳຄວາມເຂົ້າໃຈກັບເຕັກໂນໂລຊີນີ້ ຈະເປັນການເປີດປະຕູສູ່ໂອກາດໃນການສ້າງນັດວະກຳໃໝ່ໆ ທີ່ສາມາດຕອບໂຈດບັນຫາລະດັບທ້ອງຖິ່ນໄດ້ຢ່າງມີປະສິດທິພາບ ທັງໃນຂະແໜງການກະສິກຳ, ການຄົມມະນາຄົມ ຈົນເຖິງການຮັກສາສິ່ງແວດລ້ອມ.