
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
Contents
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.
- Bahasa Dasar
- Dibangun di atas NumPy / OpenCV
- Dibangun di atas PyTorch (tensor native)
- Output
- NumPy array / OpenCV
- format PyTorch tensor
- Keunggulan
- Super cepat & kaya augmentasi klasik
- GPU-accelerated, differentiable, cocok untuk DL
- Cocok untuk
- Preprocessing klasik (image classification, dll)
- Advanced vision tasks (DL ops, geometric transform)
- Kompatibilitas
- Output perlu diubah ke tensor
- Langsung masuk ke model PyTorch
- Augmentasi
- Geometrik Ada, tapi tetap berbasis OpenCV
- Sangat kuat, berbasis operasi tensor
- Differentiable
- Tidak
- Ya
- Speed
- Sangat cepat karena pakai OpenCV
- Cukup cepat, apalagi jika di GPU
- Data Aug.
- di Training Bagus, tapi harus convert dulu ke tensor
- Bisa dipakai langsung di training pipeline
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)