ແນະນຳການເຮັດ Image Augmentation ສຳລັບຊຸດຂໍ້ມູນຂະໜາດນ້ອຍ
ແນະນຳການເຮັດ Image Augmentation ສຳລັບຊຸດຂໍ້ມູນຂະໜາດນ້ອຍ
ລອງນຶກພາບວ່າ ທ່ານກຳລັງສ້າງໂມເດວ Computer Vision (CV) ເພື່ອກວດຈັບພະຍາດໃນໃບກາເຟທີ່ເມືອງປາກຊ່ອງ ຫຼື ກວດຈັບປ້າຍທະບຽນລົດໃນການຈະລາຈອນນະຄອນຫຼວງວຽງຈັນ. ບັນຫາທີ່ນັກພັດທະນາໃນປະເທດລາວພົບຫຼາຍທີ່ສຸດຄື “ບໍ່ມີຂໍ້ມູນພຽງພໍ”. ທ່ານອາດຈະລົງພື້ນທີ່ເກັບຮູບພາບມາໄດ້ພຽງແຕ່ 100 ຫຼື 200 ຮູບ ເຊິ່ງໜ້ອຍເກີນໄປສຳລັບການຝຶກສອນ (Train) ໂມເດວ Deep Learning. ສະຖານະການແບບນີ້ມັກຈະພາໃຫ້ເກີດບັນຫາ Overfitting (ໂມເດວຈື່ຈຳແຕ່ຮູບເດີມໆ ແລະ ໃຊ້ງານຈິງບໍ່ໄດ້).
ວິທີແກ້ໄຂທີ່ມີປະສິດທິພາບສູງສຸດ ແລະ ເປັນມາດຕະຖານໃນວົງການ AI ຄືການໃຊ້ເຕັກນິກ Image Augmentation.
Image Augmentation ແມ່ນຫຍັງ?
ເວົ້າງ່າຍໆ, ມັນຄືເຕັກນິກການສ້າງຂໍ້ມູນຮູບພາບໃໝ່ໆຈາກຊຸດຂໍ້ມູນເດີມທີ່ເຮົາມີຢູ່ແລ້ວ ໂດຍການດັດແປງຄຸນລັກສະນະບາງຢ່າງເລັກນ້ອຍ ເຊັ່ນ: ການໝຸນຮູບ, ການຕັດຮູບ, ການປ່ຽນສີ ຫຼື ການປັບແສງ. ສິ່ງນີ້ຊ່ວຍເພີ່ມຈຳນວນຮູບພາບສຳລັບການ Train ແລະ ຊ່ວຍໃຫ້ໂມເດວຮຽນຮູ້ທີ່ຈະຈຳແນກວັດຖຸໄດ້ດີຂຶ້ນໃນຫຼາຍສະພາບແວດລ້ອມ.
ເປັນຫຍັງເຕັກນິກນີ້ຈຶ່ງສຳຄັນສຳລັບການພັດທະນາ AI ໃນລາວ?
ໃນຂະນະທີ່ຕ່າງປະເທດມີ Dataset ມາດຕະຖານຂະໜາດໃຫຍ່ (ເຊັ່ນ ImageNet ທີ່ມີຫຼາຍລ້ານຮູບ), ແຕ່ສຳລັບຂໍ້ມູນທ້ອງຖິ່ນຂອງເຮົາ ເຊັ່ນ: ຮູບອາຫານລາວ, ຮູບປ້າຍທະບຽນລົດລາວ, ຕົ້ນໄມ້ທ້ອງຖິ່ນ ຫຼື ລະດັບນ້ຳຂອງ ເຮົາຕ້ອງໄດ້ເກັບກຳເອງທັງໝົດ. ການໃຊ້ Dataset ຂະໜາດນ້ອຍເປັນເລື່ອງທີ່ຫຼີກລ່ຽງບໍ່ໄດ້ໃນເບື້ອງຕົ້ນ. ຖ້າທ່ານມີຮູບໝາກຫຸ່ງ 100 ຮູບ, ການໃຊ້ Image Augmentation ສາມາດສ້າງຄວາມຫຼາກຫຼາຍ ຈຳລອງມຸມມອງໃໝ່ໆ ຊ່ວຍໃຫ້ໂມເດວຂອງທ່ານເຫັນພາບນັ້ນໃນແບບຄ້າຍຄືມີ 1,000 ຮູບໄດ້.
ເຕັກນິກຍອດນິຍົມ ແລະ ບໍລິບົດໃນການນຳໃຊ້
ກ່ອນຈະຂຽນໂຄດ, ເຮົາຕ້ອງເຂົ້າໃຈກ່ອນວ່າເຕັກນິກແຕ່ລະແບບເໝາະກັບວຽກປະເພດໃດ:
- ການປີ້ນຮູບທາງຂວາງ (Horizontal Flipping): ສ້າງພາບສະທ້ອນຂອງຮູບ. ເໝາະຫຼາຍສຳລັບຮູບໃບໄມ້, ໝາກໄມ້ ຫຼື ສັດ ເພາະການປີ້ນຊ້າຍຂວາບໍ່ເຮັດໃຫ້ຄວາມໝາຍປ່ຽນ. ແຕ່ຕ້ອງລະວັງ: ຫ້າມໃຊ້ ກັບປ້າຍທະບຽນລົດ ຫຼື ຕົວໜັງສືລາວ ເພາະມັນຈະພາໃຫ້ໂຕໜັງສືປີ້ນກັບ ແລະ ໂມເດວຮຽນຮູ້ຜິດພາດ.
- ການປັບແສງ ແລະ ສີ (Color Jittering): ປັບຄວາມສະຫວ່າງ (Brightness), ຄວາມຄົມຊັດ (Contrast) ທັງລົບ ແລະ ບວກ. ຕົວຢ່າງ: ຈຳລອງພາບການຈະລາຈອນທາງແຍກໄຟແດງດົງໂດກໃນຕອນທ່ຽງທີ່ແດດຮ້ອນຈັດ ປຽບທຽບກັບຕອນແລງຍາມຝົນຕົກ. ມັນເຮັດໃຫ້ໂມເດວທົນທານຕໍ່ສະພາບແສງທີ່ປ່ຽນແປງ.
- ການຕັດບາງສ່ວນ (Random Cropping): ຕັດເອົາສະເພາະບາງສາຍຕາຂອງຮູບ. ມັນຊ່ວຍສອນໃຫ້ໂມເດວຈັບຈຸດສຳຄັນ ໂດຍບໍ່ຈຳເປັນຕ້ອງເຫັນວັດຖຸເຕັມຮູບສະເໝີໄປ.
ລົງມືຂຽນໂຄດດ້ວຍ PyTorch (Torchvision)
ສຳລັບນັກພັດທະນາລະດັບກາງ (Intermediate), ການໃຊ້ torchvision.transforms.v2 ຂອງ PyTorch ແມ່ນວິທີທີ່ສະດວກ ແລະ ມີປະສິດທິພາບຫຼາຍ. ມາເບິ່ງວິທີສ້າງ Pipeline ສຳລັບເຮັດ Image Augmentation ກັນ.
ສິ່ງທີ່ຕ້ອງການ: ຕິດຕັ້ງ Libraries ຜ່ານ Terminal: pip install torch torchvision pillow matplotlib
import torch
import torchvision.transforms.v2 as v2
from PIL import Image
import matplotlib.pyplot as plt
# 1. ໂຫຼດຮູບພາບຕົວຢ່າງ (ສົມມຸດວ່າເປັນຮູບ 'ໃບກາເຟປາກຊ່ອງ' ທີ່ຊາວກະສິກອນຖ່າຍມາ)
# ກະລຸນາປ່ຽນຊື່ໄຟລ໌ໃຫ້ກົງກັບຮູບໃນເຄື່ອງຂອງທ່ານ
try:
img = Image.open('coffee_leaf.jpg').convert('RGB')
except FileNotFoundError:
print("ບໍ່ພົບໄຟລ໌ຮູບພາບ! ກະລຸນາກວດສອບຊື່ໄຟລ໌.")
# 2. ສ້າງ Pipeline ສຳລັບການເຮັດ Augmentation (Transforms)
data_transforms = v2.Compose([
# ມີໂອກາດ 50% ທີ່ຈະປີ້ນພາບຊ້າຍ-ຂວາ (ຂຶ້ນກັບການສຸ່ມ)
v2.RandomHorizontalFlip(p=0.5),
# ໝຸນຮູບໄປມາແບບສຸ່ມ ບໍ່ເກີນ 15 ອົງສາ ຂວາ ຫຼື ຊ້າຍ
v2.RandomRotation(degrees=15),
# ປັບຄວາມສະຫວ່າງ ແລະ ຄວາມຄົມຊັດ ແບບສຸ່ມຊ່ວງ +/- 20%
v2.ColorJitter(brightness=0.2, contrast=0.2),
# ແປງຮູບພາບໃຫ້ກາຍເປັນ Tensor ເພື່ອກຽມປ້ອນເຂົ້າ Neural Network
v2.ToImage(),
v2.ToDtype(torch.float32, scale=True)
])
# 3. ທົດລອງນຳໃຊ້ Transform ກັບຮູບເດີມຫຼາຍໆຄັ້ງ ເພື່ອຈຳລອງພາບໃໝ່
fig, axes = plt.subplots(1, 4, figsize=(15, 4))
# ສະແດງຮູບຕົ້ນສະບັບ
axes[0].imshow(img)
axes[0].set_title("ຮູບຕົ້ນສະບັບ (Original)")
axes[0].axis('off')
# ສະແດງຮູບທີ່ຜ່ານການ Augment ແລ້ວ 3 ຮູບ
for i in range(1, 4):
augmented_img_tensor = data_transforms(img)
# ການວາດຮູບ Tensor ດ້ວຍ Matplotlib ຕ້ອງປ່ຽນ Format ຈາກ (C, H, W) ເປັນ (H, W, C)
augmented_img_numpy = augmented_img_tensor.permute(1, 2, 0).numpy()
axes[i].imshow(augmented_img_numpy)
axes[i].set_title(f"Augmented {i}")
axes[i].axis('off')
plt.tight_layout()
plt.show()
ອະທິບາຍໂຄດ:
- ເຮົາໃຊ້
v2.Composeເພື່ອຮວບຮວມເອົາຫຼາຍໆເຕັກນິກເຂົ້າກັນເປັນ Workflow ດຽວ (Pipeline). - ໃນທຸກໆຄັ້ງທີ່ຮູບພາບເດີມຖືກດຶງເຂົ້າໄປໃນ
data_transforms(), ມັນຈະສຸ່ມສ້າງຮູບໃໝ່ທີ່ແຕກຕ່າງກັນ (ໝຸນໜ້ອຍໜຶ່ງ, ສີປ່ຽນໜ້ອຍໜຶ່ງ). ສິ່ງນີ້ຈຳລອງຄວາມຜັນຜວນຕາມທຳມະຊາດ (Natural variations) ເຊັ່ນດຽວກັບຕອນທີ່ຊາວກະສິກອນຈັບກ້ອງຖ່າຍຮູບໃນມຸມທີ່ຕ່າງກັນໃນແຕ່ລະວັນ.
ບົດສະຫຼຸບທີ່ສຳຄັນ (Key Takeaways)
- ແກ້ບັນຫາຂໍ້ມູນໜ້ອຍ: Image Augmentation ຊ່ວຍເພີ່ມຄວາມຫຼາກຫຼາຍໃຫ້ຊຸດຂໍ້ມູນຂະໜາດນ້ອຍ ແລະ ຫຼຸດຜ່ອນອັດຕາຊີ້ບອກທີ່ຜິດພາດ (Overfitting).
- ເຂົ້າໃຈບໍລິບົດສະເໝີ: ບໍ່ແມ່ນທຸກເຕັກນິກຈະເໝາະສົມກັບທຸກວຽກ. ຕ້ອງເລືອກເຕັກນິກໃຫ້ເໝາະສົມກັບສະພາວະຕົວຈິງ ເຊັ່ນ ບໍ່ໃຊ້ວິທີການປີ້ນຮູບກັບຕົວໜັງສື ຫຼື ປ້າຍທະບຽນ.
- PyTorch (Torchvision): ສະໜອງເຄື່ອງມືທີ່ສະດວກສະບາຍ ຊ່ວຍໃຫ້ເຮົາສາມາດສ້າງ Data Pipeline ສຳລັບການຝຶກສອນໂມເດວໄດ້ພາຍໃນໂຄດບໍ່ຈັກແຖວ.
ການຂະຫຍາຍຊຸດຂໍ້ມູນຮູບພາບດ້ວຍເຕັກນິກ Image Augmentation ຖືເປັນທັກສະພື້ນຖານທີ່ສຳຄັນຫຼາຍສຳລັບນັກພັດທະນາ AI ລະດັບກາງ ໂດຍສະເພາະໃນປະເທດລາວທີ່ເຮົາກຳລັງເລີ່ມຕົ້ນສ້າງໂຄງສ້າງພື້ນຖານຂໍ້ມູນຂອງພວກເຮົາເອງ. ການນຳໃຊ້ເຕັກນິກນີ້ຢ່າງຖືກຕ້ອງຈະຊ່ວຍໃຫ້ໂມເດວຂອງທ່ານມີຄວາມທົນທານ, ເຊື່ອຖືໄດ້ ແລະ ພ້ອມສຳລັບການນຳໄປໃຊ້ງານຈິງໃນສະພາບແວດລ້ອມທ້ອງຖິ່ນໄດ້ຢ່າງມີປະສິດທິຜົນ.