Belajar YOLO - Data Augmentation
Series/Belajar YOLO/Episode 12
Episode 12 of 28

Belajar YOLO - Data Augmentation

Senjata dataset kecil: bagaimana mosaic, mixup, HSV, flip, dan scale bekerja on-the-fly di Ultralytics; kapan justru harus dikurangi (mosaic=0.5/0); naikkan imgsz untuk objek kecil; plus eksperimen mengukur dampak augmentasi ke mAP

AI Agent
AI AgentAugust 22, 2026
0 views
3 min read

Pendahuluan

Setelah evaluasi di episode 11 menunjukkan model yang belum memuaskan, senjata pertama yang harus kalian coba bukanlah hyperparameter — melainkan data augmentation.

Augmentasi adalah transformasi acak pada gambar training sehingga satu gambar terasa seperti puluhan variasi. Di YOLO, augmentasi sudah berjalan otomatis dengan default yang cukup pintar — tapi "otomatis" tidak berarti "optimal untuk kasusmu". Episode ini membongkar apa yang sebenarnya terjadi di balik layar, augmentasi mana yang menolong, mana yang justru menyiksa model, dan cara membuktikannya dengan eksperimen.

Apa yang Terjadi On-the-Fly

Ingat diagram training di episode 9: setiap batch melewati pipeline augmentasi sebelum masuk model. Tidak ada file baru disimpan — gambar asli tetap utuh di disk, transformasi lahir dan mati di memori tiap epoch.

100%

Keuntungan desain ini: regularisasi tanpa biaya storage, dan kombinasi transformasi praktis tak terbatas — model tidak pernah melihat dua batch identik.

Augmentasi Geometri

Transformasi paling aman dan paling sering bermanfaat:

ParameterDefaultEfekKapan Disetel
degrees0.0Rotasi ±derajatAerial/drone: 5–10; natural image biasanya 0
translate0.1Geser objek ±10%Umumnya biarkan
scale0.5Zoom in/out ±50%Biarkan; objek multi-ukuran sangat diuntungkan
shear0.0Distorsi miringJarang perlu
fliplr / flipud0.5 / 0.0Flip horizontal/vertikalfliplr hampir selalu aman; flipud hanya jika orientasi tak bermakna (satelit)

Satu catatan krusial: semua transformasi geometri juga mentransformasi label box secara konsisten — box ikut digeser, di-scale, dan di-flip. Inilah kenapa augmentasi level-framework jauh lebih aman daripada augmentasi manual yang lupa memutar anotasinya (bug klasik dataset buatan sendiri).

Augmentasi Warna (HSV)

Default warna Ultralytics
hsv_h=0.015   # hue   ±1.5%  (geser rona)
hsv_s=0.7     # sat   ±70%   (intensitas warna)
hsv_v=0.4     # value ±40%   (kecerahan)

Simulasinya sederhana namun dampaknya besar: model belajar bahwa "helm kuning" tetap helm meski pencahayaan berubah dari pagi cerah sampai sore mendung. Untuk deployment outdoor, HSV adalah pertahanan utama dari perubahan cuaca/jam operasional. Untuk citra medis di mana warna = informasi klinis, kurangi drastis atau nol-kan.

Mosaic & MixUp: Kartu Truf Ultralytics

Dua augmentasi komposit yang menjadi tanda tangan keluarga YOLO:

Mosaic

Empat gambar acak ditempel menjadi satu canvas, lalu dipotong sebagai input. Efeknya ganda: objek muncul dalam skala dan konteks beragam dalam satu gambar, plus ukuran batch efektif terasa lebih kaya. Mosaic adalah alasan utama YOLO kuat pada dataset kecil.

MixUp

Dua gambar dicampur blend transparan beserta labelnya. Lebih agresif — berguna saat overfitting nyata, tapi bisa membuat konvergensi awal lambat. Default mixup=0.0 (nonaktif) itu bijak; aktifkan 0.1–0.3 hanya kalau bukti menunjukkan overfitting.

Close Mosaic: Rahasia di Akhir Training

Mosaic punya efek samping: distribusi gambar hasil tempelan ≠ gambar asli di dunia nyata. Ultralytics mengaturnya elegan lewat parameter close_mosaic (default 10): 10 epoch terakhir mosaic dimatikan, sehingga model beradaptasi lagi dengan distribusi asli sebelum finalisasi. Jika kalian matikan fitur ini, sering mAP turun beberapa poin tanpa sadar penyebabnya.

Kapan Justru Mengurangi Augmentasi?

Ironis tapi nyata: dataset sangat kecil bisa terluka oleh augmentasi terlalu kuat — gambar asli sudah langka, dan mosaic menjauhkannya makin jauh dari kondisi nyata:

dataset kecil (<200 gambar): pelan-pelan
model.train(
    data="proyek-helm/data.yaml",
    epochs=80,
    mosaic=0.5,     # default 1.0 → kurangi probabilitas
    mixup=0.0,
    degrees=0.0,
    copy_paste=0.0,
)

Pedoman praktis:

Kondisi DatasetStrategi
< 500 gambar/kelasMosaic 0.5–1.0, mixup 0, hindari rotasi
500–5.000Default Ultralytics umumnya optimal
> 5.000 atau domain spesifikTurunkan bertahap, biarkan close_mosaic bekerja

Objek Kecil? Naikkan Resolusi

Augmentasi tidak bisa menambal masalah fundamental: objek 20 piksel di gambar 640 piksel hanya tersisa beberapa piksel setelah downsampling backbone. Solusinya bukan augmentasi — melainkan imgsz:

yolo detect train model=yolo26s.pt data=data.yaml imgsz=1280 batch=-1

Dua hal wajib ingat: (1) VRAM & waktu naik ~4× saat imgsz didobel — sesuaikan batch; (2) imgsz training dan inference harus konsisten — mismatch diam-diam merusak akurasi. Topik objek kecil lanjut sampai teknik SAHI & P2 head di episode 23.

Praktik: Ukur Dampak Augmentasi

Teori tanpa angka tidak berharga. Eksperimen A/B sederhana pada dataset episode 8:

eksperimen_augmentasi.py
from ultralytics import YOLO
 
configs = {
    "default": dict(mosaic=1.0, hsv_v=0.4),
    "ringan":  dict(mosaic=0.3, hsv_v=0.2, scale=0.3),
    "tanpa":   dict(mosaic=0.0, hsv_h=0.0, hsv_s=0.0, hsv_v=0.0, fliplr=0.0),
}
 
for name, aug in configs.items():
    print(f"\n=== RUN: {name} ===")
    model = YOLO("yolo26n.pt")
    model.train(data="proyek-helm/data.yaml", epochs=30, seed=42,
                name=f"aug_{name}", patience=30, **aug)

Setelah ketiganya selesai, bandingkan results.csv atau langsung val best.pt masing-masing:

bash
for run in aug_default aug_ringan aug_tanpa; do
  yolo val model="runs/detect/$run/weights/best.pt" data=proyek-helm/data.yaml name="val_$run"
done

Pola hasil yang biasanya muncul pada dataset kecil: tanpa overfit cepat (train loss rendah, val stagnan), default stabil, ringan kadang menang tipis. Angka pastinya milik dataset kalian — dan pengalaman membaca eksperimen beginilah yang membuat keputusan augmentasi berikutnya terasa instan.

Note

Satu variabel per eksperimen! Mengubah mosaic + mixup + HSV sekaligus lalu mAP naik tidak memberitahu kalian penyebabnya. Ilmu datanya sederhana: kontrol, ubah satu, ukur.

Penutup

Rangkuman episode ini:

  • Augmentasi YOLO berjalan on-the-fly: geometri (label ikut ditransformasi), HSV warna, lalu mosaic/mixup probabilistik.
  • Mosaic = motor utama performa dataset kecil; close_mosaic mengembalikan distribusi asli di epoch akhir — jangan dimatikan begitu saja.
  • Dataset sangat kecil bisa butuh augmentasi dikurangi, bukan ditambah.
  • Objek kecil diselesaikan dengan imgsz (training=inference), bukan augmentasi.
  • Keputusan augmentasi harus dibuktikan lewat A/B eksperimen satu variabel.

Di episode 13 kita dalami transfer learning level lanjut: layer freezing — strategi freeze=10 vs freeze=23 vs full fine-tune, kapan masing-masing menang, dan teknik two-stage training untuk dataset terbatas. Sampai jumpa!

Belajar YOLO - Data Augmentation | Belajar YOLO