Augmentasi Gambar dengan Albumentation dan kornia

By | April 13, 2025
148 Views

Dalam dunia machine learning, khususnya di bidang computer vision, memiliki banyak data adalah kunci keberhasilan model. Tapi, mengumpulkan gambar dalam jumlah besar bisa memakan waktu dan biaya. Di sinilah augmentasi data gambar (image augmentation) menjadi solusi. Augmentasi adalah teknik memperbanyak data dengan cara memodifikasi gambar yang sudah ada, tanpa mengubah labelnya. Teknik ini sangat berguna untuk: Meningkatkan akurasi model; Mengurangi overfitting; Membuat model lebih kuat terhadap variasi dunia nyata.

Bayangkan kamu melatih model untuk mengenali kucing. Jika semua gambar hanya diambil dari sudut depan, model mungkin gagal saat melihat kucing dari samping atau dalam pencahayaan berbeda. Dengan augmentasi, kamu bisa: Membalik gambar → seolah-olah objek dilihat dari sisi berbeda; Memutar gambar → untuk mendeteksi objek di berbagai orientasi; Mengubah warna, kontras, atau pencahayaan → agar model tahan terhadap kondisi pencahayaan nyata.

Library Augmentasi Populer

Berikut beberapa library Python yang populer untuk augmentasi gambar:

1. Torchvision

  • Bagian dari PyTorch

  • Cocok untuk augmentasi dasar

from torchvision import transforms

transform = transforms.Compose([
    transforms.RandomHorizontalFlip(),
    transforms.RandomRotation(30),
    transforms.ToTensor()
])

2. Albumentations

  • Cepat, fleksibel, dan mendukung augmentasi kompleks

import albumentations as A
from albumentations.pytorch import ToTensorV2

transform = A.Compose([
    A.RandomCrop(224, 224),
    A.HorizontalFlip(p=0.5),
    A.Normalize(),
    ToTensorV2()
])

3. Kornia

  • Augmentasi berbasis tensor, cocok untuk augmentasi real-time

import kornia.augmentation as K
import torch.nn as nn

augment = nn.Sequential(
    K.RandomHorizontalFlip(p=1.0),
    K.RandomRotation(degrees=30)
)

Baik Albumentations maupun Kornia adalah library augmentasi gambar yang powerful dan efisien, tapi mereka berbeda tujuan, cara kerja, dan integrasinya.

  1. Bahasa Dasar
    1. Dibangun di atas NumPy / OpenCV
    2. Dibangun di atas PyTorch (tensor native)
  2. Output
    1. NumPy array / OpenCV
    2. format PyTorch tensor
  3. Keunggulan
    1. Super cepat & kaya augmentasi klasik
    2. GPU-accelerated, differentiable, cocok untuk DL
  4. Cocok untuk
    1. Preprocessing klasik (image classification, dll)
    2. Advanced vision tasks (DL ops, geometric transform)
  5. Kompatibilitas
    1. Output perlu diubah ke tensor
    2. Langsung masuk ke model PyTorch
  6. Augmentasi
    1. Geometrik Ada, tapi tetap berbasis OpenCV
    2. Sangat kuat, berbasis operasi tensor
  7. Differentiable
    1. Tidak
    2. Ya
  8. Speed
    1. Sangat cepat karena pakai OpenCV
    2. Cukup cepat, apalagi jika di GPU
  9. Data Aug.
    1. di Training Bagus, tapi harus convert dulu ke tensor
    2. Bisa dipakai langsung di training pipeline
See also  Belajar RNN untuk kasus Sederhana

Albumentations (klasik & sangat cepat)

import albumentations as A
from albumentations.pytorch import ToTensorV2

transform = A.Compose([
    A.Normalize(mean=(0.0,), std=(1.0,), max_pixel_value=255.0), #biar sama kayak Pillow
    ToTensorV2()  # ubah ke PyTorch tensor
])

pada kode diatas, kalian wajib menggunakan A.Normalize() biar nanti angka digunakan diubah skalanya dari semula 0 sd 255 menjadi 0 sd 1. Mengikuti library Pillow sesuai standar pada umumnya. Berikut contoh penggunaanya Albumentation dengan input dari OpenCV

import cv2
img_numpy = cv2.imread('cat.jpeg',0)
img_tensor = transform(image = img_numpy)['image']

Kornia

Untuk kornia wajib menggunakan input berupa tensor!  Kenapa?

Karena:

  • Kornia adalah native PyTorch, dan semua operasinya berbasis tensor (torch.Tensor)

  • PIL.Image adalah objek dari library Pillow, bukan tensor

  • Jadi Kornia tidak tahu bagaimana cara memproses gambar PIL

Untuk bisa pakai Kornia, kamu perlu konversi dulu gambar dari Pillow ke tensor dalam format (N, C, H, W). Kalian bisa baca Mempersiapkan Format Image di Deep Learning dan Mengggunakan OpenCV dan Pillow sebagai Input dataset di Pytorch

Berikut transform pada Kornia secara umum

 import torch.nn as nn
import kornia.augmentation as K

transformK = nn.Sequential(
    K.Resize((224, 224)),
    K.RandomHorizontalFlip(p=0.5),
    K.Normalize(mean=0.5, std=0.5)
)

Perhatikan cara penggunaan berikut ketika menggunakan Pillow

from PIL import Image
import torchvision.transforms as T
import kornia.augmentation as K
import torch.nn as nn

# 1. Buka gambar pakai PIL
img_pil = Image.open("gambar.jpg").convert("RGB")

# 2. Ubah ke tensor (C, H, W) dan normalisasi ke 0–1
to_tensor = T.ToTensor()
img_tensor = to_tensor(img_pil)  # shape: (3, H, W)

# 3. Tambahkan batch dimensi → (1, 3, H, W)
img_tensor = img_tensor.unsqueeze(0)

# 4. Augmentasi dengan Kornia
aug = nn.Sequential(
    K.RandomHorizontalFlip(p=1.0),
    K.RandomRotation(degrees=45),
)

img_aug = aug(img_tensor)

Untuk menggunakan OpenCV kalian bisa menyesuaikan sendiri, misalkan dengan cara berikut tanpa melibatkan Pillow

import cv2
import torch
import kornia.augmentation as K
import torch.nn as nn

# 1. Baca gambar pakai OpenCV (hasilnya BGR, HWC)
img_bgr = cv2.imread("gambar.jpg")

# 2. Ubah ke RGB (karena Kornia pakai RGB)
img_rgb = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB)

# 3. Ubah ke float32 dan normalisasi 0–1
img_rgb = img_rgb.astype('float32') / 255.0  # shape: (H, W, C)

# 4. Ubah ke tensor PyTorch dan ubah ke format (C, H, W)
img_tensor = torch.from_numpy(img_rgb).permute(2, 0, 1)  # (3, H, W)

# 5. Tambahkan batch dimensi → (1, 3, H, W)
img_tensor = img_tensor.unsqueeze(0)

# 6. Buat augmentasi Kornia
aug = nn.Sequential(
    K.RandomHorizontalFlip(p=1.0),
    K.RandomRotation(degrees=45),
)

# 7. Augmentasi gambar
img_aug = aug(img_tensor)

 

See also  Tuning Model pada Machine Learning: Meningkatkan Performa dan Akurasi