Data augmentation adalah teknik memperluas data pelatihan dengan transformasi yang menjaga makna label, seperti membalik, memotong, dan menggeser warna pada citra. Topik ini menetapkan syarat yang membedakan augmentasi yang sah dari yang merusak, memeragakan transformasi utamanya dengan torchvision, dan menutup dengan cara memasangkannya ke pipeline pelatihan. Setelah selesai, keputusan mengenai augmentasi dapat dibuat per dataset, bukan disalin dari resep asing.
Syarat yang menentukan augmentasi yang sah#
Transformasi augmentasi hanya layak dipakai apabila label tetap benar setelah datanya diubah. Membalik citra angka 6 secara horizontal menghasilkan bentuk yang menyerupai angka lain, sehingga flip horizontal tidak sah untuk dataset tulisan tangan, tetapi sah untuk citra kucing yang dibalik tetap kucing. Memotong terlalu lebar dapat menghilangkan objek yang membuat labelnya benar, dan menggelapkan citra lampu lalu lintas hingga warnanya hilang membuang informasi yang menentukan kelasnya. Pertanyaan yang menuntun setiap keputusan adalah sederhana, yaitu apakah pembaca manusia masih akan memberi label yang sama pada hasil transformasinya.
Augmentasi bekerja pada data pelatihan saja, karena data validasi dan test harus mengukur kinerja pada data asli tanpa gangguan. Perilaku ini diatur lewat perbedaan pipeline transformasi pelatihan dan evaluasi, dan pipeline evaluasi biasanya hanya memuat konversi tipe serta normalisasi. Efek augmentasi paling terlihat ketika dataset kecil, karena setiap epoch memperlihatkan versi berbeda dari contoh yang sama dan model kehilangan kesempatan menghafal versi persisnya.
Transformasi utama dan peraganya#
Tiga keluarga transformasi menutup sebagian besar kebutuhan pada citra. Keluarga geometri mengubah posisi, yaitu flip horizontal dan vertikal, pemotongan acak, rotasi kecil, serta pergeseran. Keluarga warna mengubah pencahayaan, yaitu pengaturan kecerahan, kontras, dan saturasi yang sering disebut color jitter. Keluarga campuran menghapus bagian citra, seperti cutout dan RandomErasing, yang memaksa model tidak bergantung pada satu wilayah saja.
Peragaan berikut menerapkan beberapa transformasi pada satu tensor citra kecil dan mengukur perbedaannya secara numerik, sehingga efeknya dapat diverifikasi tanpa melihat gambar.
import torch
import torchvision.transforms as T
torch.manual_seed(0)
citra = torch.rand(3, 32, 32)
flip = T.RandomHorizontalFlip(p=1.0)(citra)
crop = T.RandomCrop(24)(citra)
jitter = T.ColorJitter(brightness=0.5)(citra)
print("bentuk asli :", tuple(citra.shape))
print("bentuk crop :", tuple(crop.shape))
print("flip identik dengan asli :", bool(torch.equal(flip, citra)))
print("beda rata-rata brightness :", round(float((jitter - citra).abs().mean()), 4))bentuk asli : (3, 32, 32)
bentuk crop : (3, 24, 24)
flip identik dengan asli : False
beda rata-rata brightness : 0.0446Pembacaannya langsung. Flip horizontal dengan peluang satu menghasilkan tensor yang berbeda dari aslinya tetapi bertukar kolom kiri dan kanan, crop 24 memotong kedua dimensi spasial dari 32, dan color jitter menggeser nilai piksel secara seragam dengan beda rata-rata yang terukur. Ketiganya mempertahankan makna label pada dataset yang tepat, dan itulah syarat yang sudah ditetapkan di awal.
Memasang augmentasi ke pipeline pelatihan#
Pada PyTorch, transformasi dirangkai dengan transforms.Compose dan diletakkan pada dataset, sehingga setiap sampel yang ditarik DataLoader melewati transformasinya. Transformasi acak diterapkan ulang pada setiap tarikan, sehingga satu citra yang muncul pada epoch berbeda diwujudkan dalam versi berbeda. Kode berikut membangun dua pipeline, satu untuk pelatihan dan satu untuk evaluasi, sesuai kaidah di atas.
import torchvision.transforms as T
latih = T.Compose([
T.RandomHorizontalFlip(),
T.RandomCrop(32, padding=4),
T.ColorJitter(brightness=0.2, contrast=0.2),
T.ToTensor(),
])
evaluasi = T.Compose([T.ToTensor()])
print("jumlah transformasi latih :", len(latih.transforms))
print("jumlah transformasi evaluasi:", len(evaluasi.transforms))jumlah transformasi latih : 4
jumlah transformasi evaluasi: 1Pipeline pelatihan memuat tiga transformasi acak sebelum konversi tensor, sedangkan pipeline evaluasi hanya konversinya, dan pemisahan ini yang menjaga evaluasi tetap jujur. Pemilihan kekuatannya mengikuti ukuran data, yaitu dataset kecil mengambil manfaat penuh dari augmentasi yang agak agresif, sedangkan dataset besar biasanya cukup dengan flip dan crop yang ringan. Kekuatan yang berlebihan membuat data sintetisnya menyimpang dari distribusi nyata, dan gejalanya sama seperti regularisasi yang terlalu kuat, yaitu underfitting yang terlihat pada kurva pembelajaran.
Posisi augmentasi di dalam strategi anti-overfit#
Augmentasi termasuk kelompok perbaikan yang bekerja dari sisi data, berbeda dengan dropout dan weight decay yang bekerja dari sisi model. Karena itu urutan pertimbangannya juga berbeda, yaitu augmentasi yang sah dipasang lebih dulu karena murah dan tanpa efek samping pada arsitektur, lalu regularisasi model menyusul bila kurva validasi masih menuntut lebih. Pada tugas citra nyata, kombinasi flip, crop, dan jitter ringan sudah menjadi bagian standar dari resep pelatihan, dan keluarga augmentasi otomatis seperti RandAugment mengotomatiskan pencarian kombinasinya.
Satu catatan penutup menyangkut kejujuran pengukuran. Karena augmentasi hanya hidup pada data pelatihan, perbandingan dua eksperimen yang sah dilakukan pada pipeline evaluasi yang identik, dan itulah alasan pipeline evaluasi di atas sengaja dibuat seringan mungkin.
Ringkasan#
- Augmentasi yang sah menjaga benarnya label, dan pertanyaan penuntunnya adalah apakah label yang sama tetap benar setelah transformasi.
- Tiga keluarga utamanya adalah geometri, warna, dan penghapusan wilayah, dengan flip, crop, dan jitter sebagai wakil paling umum.
- Transformasi dipasang pada pipeline pelatihan melalui
Compose, dan pipeline evaluasi tetap ringan tanpa transformasi acak. - Augmentasi bekerja dari sisi data dan dipasang lebih dulu daripada regularisasi model, dengan kekuatan yang disesuaikan ukuran dataset.
Referensi#
- torchvision.transforms — PyTorch — Dokumentasi transformasi citra beserta daftar lengkap keluarga geometri dan warnanya.
- Image Augmentation — Dive into Deep Learning — Bab yang memeragakan augmentasi beserta dampaknya pada overfitting.
- RandAugment: Practical automated data augmentation — arXiv — Makalah yang mengotomatiskan pemilihan kombinasi augmentasi.