Augmentasi

Augmentasi dikonfigurasi melalui pengaturan pada TrainConfig, tetapi setiap family model menjalankan pipeline pelatihannya sendiri, dan pipeline tanpa cabang mosaic mengabaikan mosaic_prob, bukan mengaproksimasinya.

Mengatur pengaturan

Pengaturan augmentasi adalah argumen train() biasa.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO9s.pt")model.train(    data="my-dataset.yaml",    epochs=100,    mosaic_prob=1.0,    mixup_prob=0.15,    hsv_prob=1.0,    flip_prob=0.5,    no_aug_epochs=15,)
CLI
# CLI menulis mosaic_prob sebagai mosaic dan mixup_prob sebagai mixup.libreyolo train model=LibreYOLO9s.pt data=my-dataset.yaml \  epochs=100 mosaic=1.0 mixup=0.15 hsv_prob=1.0 \  flip_prob=0.5 no_aug_epochs=15

Tiga pengaturan memiliki ejaan yang lebih pendek, yang diterima train() maupun CLI: mosaic dipetakan ke mosaic_prob, fliplr ke flip_prob, dan pada deteksi mixup dipetakan ke mixup_prob. Memberikan ejaan pendek beserta field-nya dengan nilai berbeda akan memunculkan error. Pengaturan lain dieja sama di keduanya.

Tiga status, bukan dua

Pengaruh suatu pengaturan bergantung pada family. Library menyimpan tabel deklaratif dengan tiga kemungkinan status.

used berarti pengaturan mencapai pipeline dan mengubah sampel. ignored berarti pengaturan tidak pernah mencapai pipeline. gated_by_mosaic berarti hanya berlaku pada sampel yang masuk cabang mosaic, sehingga tidak pernah aktif jika mosaic_prob=0.

Status ketiga sering mengejutkan. Pada pipeline bergaya YOLOX, affine warp berjalan pada kanvas mosaic dan MixUp mencampur sampel mosaic, sehingga mosaic_prob=0 sekaligus menonaktifkan degrees, translate, shear, perspective, mosaic_scale, mixup_prob, dan mixup_scale. Trainer mencatat warning khusus untuk MixUp:

mixup_prob=0.15 has no effect for YOLOv9: mixup only applies to mosaic samplesand mosaic_prob=0. Set mosaic_prob > 0 to enable mixup.

CLI juga memperingatkan tentang pengaturan yang diabaikan, hanya yang diketik:

Warning: RF-DETR ignores these parameters: degrees, mosaic

Empat bentuk pipeline

Family terbagi dalam empat pipeline pelatihan yang menentukan hampir semua jawaban.

Pipeline mosaic bergaya YOLOX menerapkan HSV jitter dan flip per sampel, lalu menjalankan affine serta MixUp dalam cabang mosaic. Pipeline ini mencakup YOLOX, YOLOv7, YOLOv9 beserta varian E2E dan P2, RTMDet, PicoDet, RT-DETR, RT-DETRv2, dan FOMO.

Pipeline pass-through bergaya DETR tidak memiliki mosaic atau affine warp. Photometric distortion, zoom-out, dan IoU crop adalah konstanta resep, sehingga hanya flip_prob serta no_aug_epochs yang aktif. Pipeline ini mencakup D-FINE, Dome-DETR, DEIM, DEIMv2, RT-DETRv4, EC, dan RF-DETR dengan satu perubahan.

Pipeline klasifikasi ImageFolder memiliki kontrol augmentasi sendiri. flip_prob mengontrol pembalikan horizontal dengan default 0.5; fliplr adalah aliasnya.

YOLO-NAS memiliki bentuk tersendiri: tanpa mosaic, affine per sampel yang selalu aktif, dan MixUp yang diterapkan secara independen. Nilai mosaic_scale digunakan kembali sebagai rentang skala affine.

SegFormer, LingBot-Vision, dan NAFNet menjalankan pipeline khusus task dengan randomisasi tetap. Untuk SegFormer dan LingBot-Vision, pengaturan aktif adalah atribut kelas semantic_scale_jitter dan semantic_hsv_prob, bukan mosaic_scale serta hsv_prob. Crop dan flip NAFNet merupakan operasi input-target berpasangan dengan probabilitas tetap 0,5.

Pengaturan yang dipatuhi setiap family

Tabel berikut adalah spesifikasi yang disertakan di libreyolo/data/augment/spec.py dan diuji terhadap wiring pipeline sebenarnya. Baca sumber itu, jangan menyimpulkan dari arsitektur.

Baca tabel dukungan suatu family
from libreyolo.data.augment.spec import AUG_KNOBS, aug_support for knob, description in AUG_KNOBS.items():    support = aug_support("yolo9")[knob]    print(f"{knob:16} {support.status:16} {support.note or description}")
Hanya yang diabaikan
from libreyolo.data.augment.spec import ignored_aug_params print(sorted(ignored_aug_params("rfdetr")))

Ringkasan per pipeline untuk pengaturan dasar:

PengaturanGaya YOLOXYOLO-NASGaya DETRClassification
mosaic_probdigunakandiabaikandiabaikandiabaikan
mixup_probdibatasi mosaicdigunakandiabaikandiabaikan
hsv_probdigunakandigunakandiabaikandiabaikan
flip_probdipakaidipakaidipakaidipakai
flipuddipakaidipakaidiabaikandipakai
degreesdibatasi mosaicdigunakandiabaikandiabaikan
translatedibatasi mosaicdigunakandiabaikandiabaikan
sheardibatasi mosaicdigunakandiabaikandiabaikan
perspectivedibatasi mosaicdigunakandiabaikandiabaikan
mosaic_scaledibatasi mosaicdigunakandiabaikandiabaikan
mixup_scaledibatasi mosaicdigunakandiabaikandiabaikan
no_aug_epochsdigunakandigunakandigunakandigunakan

Pengecualian dalam kolom tersebut hanya mempersempit dukungan:

  • RTMDet, PicoDet, RT-DETR, RT-DETRv2, dan FOMO tidak memiliki vertical flip, sehingga flipud diabaikan. Wrapper mosaic FOMO juga tidak memiliki perspective.
  • Pipeline native RF-DETR tidak memiliki HSV jitter, sehingga hsv_prob diabaikan.
  • EC mematuhi hsv_prob, degrees, dan translate hanya untuk task="pose", yang transform-nya memahami keypoint. Jalur detect dan segment memakai resep tetap.
  • DINOv2 mengikuti kolom gaya DETR untuk task detect dan semantic, lalu menambahkan paket classification untuk task="classify".

no_aug_epochs berstatus used di mana pun, tetapi maknanya berbeda. Pada pipeline mosaic, ini mematikan mosaic dan MixUp pada epoch terakhir. Pada pipeline gaya DETR, ini menghentikan augmentasi fotometrik, zoom-out, dan crop serta mengatur bagian akhir jadwal. Pada pipeline klasifikasi, ini menonaktifkan augmentasi otomatis, erasing, MixUp, dan CutMix; crop dan pembalikan tetap aktif.

perspective menambahkan projective warp di atas rotasi, skala, shear, dan translasi. Setiap sudut kanvas bergeser ke dalam sejauh nilai acak hingga min(perspective * 100, 0.2) kali setengah sisi kanvas, per sumbu, sehingga perspective=0.001 menggeser sudut paling banyak 5 persen sisi pada resolusi apa pun, dan setiap nilai dari 0.002 ke atas mencapai maksimum yang sama. Default 0 menjaga warp tetap affine, dan nilai negatif memunculkan ValueError saat sampel pertama di-warp. YOLOv9 beserta varian E2E dan P2-nya, YOLOX, YOLOv7, YOLO-NAS, PP-YOLOE, RTMDet, PicoDet, RT-DETR, dan RT-DETRv2 menerapkannya.

MixUp di pipeline mosaic YOLOv9, yang dipakai untuk melatih YOLOv9 beserta variannya, YOLOv7, RT-DETR, dan RT-DETRv2, menarik rasio blend dari Beta(1, 1), seragam pada [0, 1]. Wrapper mosaic YOLOX, yang dipakai YOLOX, RTMDet, dan PicoDet, melakukan blend pada 0.5 tetap.

Paket classification

Empat pengaturan mengendalikan pipeline classification dan tidak memengaruhi yang lain. Family deteksi mengabaikan keempatnya.

Paket classification
from libreyolo import LibreYOLO model = LibreYOLO("LibreConvNeXtt-cls.pt")model.train(    data="my-classification-dataset",    epochs=50,    auto_augment="randaugment",    erasing=0.25,    mixup=0.2,    cutmix=0.2,)

auto_augment menerima "randaugment", "autoaugment", "augmix", atau None. erasing adalah probabilitas RandomErasing. mixup dan cutmix adalah probabilitas per batch yang menghasilkan soft label; paling banyak satu berjalan per batch, dengan MixUp lebih dahulu, sehingga jumlah keduanya maksimal 1.

Keempatnya default nonaktif, sehingga pelatihan classification tidak berubah kecuali diminta.

train() dan CLI mengarahkan mixup berdasarkan task: klasifikasi memakai pencampuran batch, sedangkan deteksi memakai mixup_prob.

scale=0.5 berarti rentang area crop acak (0.5, 1.0); pasangan nilai eksplisit menetapkan kedua batas. crop_pct=None mempertahankan rasio pengubahan ukuran evaluasi family; penggantian nilai memengaruhi evaluasi pelatihan/validasi, sedangkan ekspor mempertahankan prapemrosesan native family.

CLI menyediakan auto_augment, erasing, cutmix, fliplr, dan flipud. mixup klasifikasi berarti pencampuran batch dan default-nya 0.0. Pembalikan horizontal default 0.5 dan vertikal 0.0. mixup + cutmix tidak boleh melebihi 1.

no_aug_epochs menonaktifkan augmentasi otomatis, erasing, MixUp, dan CutMix pada epoch terakhir, sambil mempertahankan crop dan pembalikan. Resep klasifikasi menetapkan bagian akhir ini ke 0 secara default.

Pengaturan khusus family

Sebagian pengaturan berada pada subclass konfigurasi family, sehingga hanya ada untuk family tersebut dan tidak memiliki flag CLI.

FamilyPengaturanEfek
YOLOv9, YOLOv9-E2E, YOLOv9-P2copy_pasteProbabilitas augmentasi instance copy-paste, hanya task="segment"
YOLOv9, YOLOv9-E2E, YOLOv9-P2copy_paste_mode"flip" memakai ulang sampel yang dicerminkan, "mixup" mengambil sampel kedua
YOLOv9, YOLOv9-E2E, YOLOv9-P2rot90Probabilitas rotasi acak 90 derajat
YOLOv9, YOLOv9-E2E, YOLOv9-P2max_labelsBatas ground truth per gambar dalam transform pelatihan, default 300
RF-DETRcopy_paste, copy_paste_modeCopy-paste untuk task="segment", hanya mode "flip"
RF-DETR, D-FINE, ECcrop_resize_probProbabilitas random crop-resize
EC, YOLO-NASbrightness_contrast_prob, affine_probJitter jalur pose dan probabilitas affine yang memahami keypoint

max_labels dapat menghilangkan data. Bounding box setelah batas dibuang dengan satu peringatan, bukan error, sehingga imagery padat seperti foto aerial perlu menaikkan nilainya. Memori penetapan label mengikuti gambar terpadat dalam batch, bukan batas tersebut.

Mosaic dan MixUp dinonaktifkan untuk pelatihan oriented-bounding box tanpa memandang pengaturan karena augmentasi yang memahami sudut bounding box berotasi belum tersedia.

  • Hyperparameter untuk no_aug_epochs sebagai argumen schedule dan bagian lain train().
  • Dataset untuk format label yang digunakan transform ini.

Diverifikasi dengan LibreYOLO v1.6.0.