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

Dua pengaturan memiliki ejaan CLI yang lebih pendek: mosaic dipetakan ke mosaic_prob dan mixup ke mixup_prob. 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 samples
and 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 ImageFolder classification mengabaikan semua pengaturan deteksi. Horizontal flip-nya ditetapkan ke 0,5 dan tidak dipengaruhi flip_prob. Pipeline ini memiliki paket pengaturan sendiri yang dijelaskan di bawah.

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 dan NAFNet menjalankan pipeline khusus task dengan randomisasi tetap. Untuk SegFormer, 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_probdigunakandigunakandigunakandiabaikan
flipuddigunakandigunakandiabaikandiabaikan
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 digunakan di semua tempat, tetapi artinya berbeda. Pada pipeline mosaic, pengaturan ini menonaktifkan mosaic dan MixUp untuk epoch terakhir. Pada pipeline bergaya DETR, pengaturan ini menghentikan augmentasi photometric, zoom-out, dan crop serta membentuk ujung schedule. Pada pipeline classification dan semantic, pengaturan ini hanya membentuk ujung schedule.

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.

Ada benturan nama: pada CLI, mixup adalah alias untuk mixup_prob deteksi. Kolom mixup classification tidak memiliki ejaan CLI dan hanya dapat dicapai melalui model.train(mixup=...) di Python.

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
YOLOv9max_labelsBatas ground truth per gambar dalam transform pelatihan, default 100
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 diam-diam menghilangkan data. Bounding box setelah batas dibuang tanpa error, sehingga imagery padat seperti foto aerial perlu menaikkan nilainya.

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

Terkait

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

Diverifikasi dengan LibreYOLO v1.5.0.