Hyperparameter
Setiap argumen pelatihan adalah kolom pada dataclass TrainConfig. Kelas dasar mendefinisikan kolom dan defaultnya; setiap model family membuat subclass darinya dan mengganti default yang diubah oleh resep yang dipublikasikannya.
Mengatur argumen
train() mengambil argumen kata kunci dan CLI mengambil nama yang sama dalam
format key=value.
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO9s.pt")results = model.train( data="my-dataset.yaml", epochs=100, batch=16, imgsz=640, lr0=0.01,) print(results["best_mAP50_95"])libreyolo train model=LibreYOLO9s.pt data=my-dataset.yaml \ epochs=100 batch=16 imgsz=640 lr0=0.01Kedua jalur berakhir pada tempat yang sama. Kwargs diserahkan ke
TrainConfig.from_kwargs(), yang membangun dataclass konfigurasi family.
Salah ketik tidak menyebabkan error
from_kwargs() menghapus setiap kunci yang bukan merupakan bidang pada konfigurasi dan mengeluarkan sebuah
Memberi nama UserWarning. Pelatihan kemudian dimulai dengan pengaturan default yang ada:
# UserWarning: Kunci konfigurasi pelatihan tidak dikenal (diabaikan): ['learning_rate']model.train(data="my-dataset.yaml", learning_rate=0.001)Tidak ada yang gagal, proses selesai, dan learning rate tidak pernah menjadi apa yang pemanggil diminta. Baca peringatan pada epoch pertama dari resep baru. CLI adalah lebih ketat, karena memvalidasi nama flag sebelum konfigurasi dibuat, sehingga CLI flag yang salah eja langsung ditolak.
Default adalah per family
TrainConfig mendefinisikan bidang dan default dasar. Setiap family menurunkannya dan
menimpa perubahan resep yang dipublikasikannya, jadi tidak ada jawaban yang benar secara tunggal
ke "apa itu learning rate default".
Default dasar adalah optimizer="sgd", lr0=0.01, momentum=0.937,
weight_decay=5e-4, scheduler="yoloxwarmcos", epochs=300, batch=16,
imgsz=640 dan amp=True. Tiga contoh seberapa jauh family bergerak dari itu:
| Bidang | Dasar | YOLOv9 | D-FINE | YOLO-NAS |
|---|---|---|---|---|
optimizer | sgd | sgd | adamw | adamw |
lr0 | 0.01 | 0.01 | 2e-4 | 5e-4 |
weight_decay | 5e-4 | 5e-4 | 1e-4 | 1e-5 |
scheduler | yoloxwarmcos | linear | flat_cosine | cos |
epochs | 300 | 300 | 132 | 300 |
amp | True | True | True | True |
Deteksi D-FINE, DEIM, RT-DETRv4, dan YOLO-NAS memakai amp=True dengan amp_dtype="float16" secara default. Dome-DETR, PP-YOLOE, dan YOLO-NAS OBB mempertahankan default FP32. Berikan amp=False jika memerlukan FP32.
Untuk membaca default nyata family daripada menebak:
from dataclasses import fields from libreyolo import LibreYOLO9from libreyolo.training.config import TrainConfig family_cfg = LibreYOLO9.TRAIN_CONFIG()base_cfg = TrainConfig() for f in fields(family_cfg): family_value = getattr(family_cfg, f.name) base_value = getattr(base_cfg, f.name, None) if not hasattr(base_cfg, f.name) or family_value != base_value: print(f"{f.name}: {family_value}")# Mencetak default train, val, dan predict, termasuk override family.libreyolo cfgukuran Batch
batch adalah batch global. Dalam pelatihan multi-GPU setiap peringkat memuat
batch // world_size, jadi nomor yang Anda berikan adalah jumlah gambar per
dilakukan terlepas dari berapa banyak GPU yang terlibat. Lihat
Pelatihan Multi-GPU.
batch=-1 mengaktifkan autobatch. Trainer memeriksa model dalam mode pelatihan dengan
langkah mundur nyata pada pangkat dua, menyesuaikan garis ke kurva memori, dan memilih
pangkat dua terbesar yang secara ketat di bawah nilai yang diekstrapolasi yang muat dalam
60 persen dari total VRAM.
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO9s.pt") # batch=-1 memeriksa memori GPU dan menyelesaikannya menjadi pangkat dua yang konkret.model.train(data="my-dataset.yaml", batch=-1, imgsz=640)libreyolo train model=LibreYOLO9s.pt data=my-dataset.yaml batch=-1Memeriksa dalam mode pelatihan dengan langkah mundur adalah inti: pemeriksaan dalam mode inferensi melewatkan aktivasi yang dipertahankan dan tensor gradien, yang untuk CNN dalam adalah beberapa kali jejak inferensi. RF-DETR menurunkan fraksi target menjadi 45 persen, karena backward sintetis probe masih meremehkan apa yang dibutuhkan oleh kriteria probe dan lapisan decoder tambahan.
Autobatch adalah fitur CUDA. Pada CPU atau MPS ia mencatat satu baris dan mempertahankan batch default.
min_samples=0 mempertahankan panjang epoch. Nilai minimum positif mengambil sampel dengan pengembalian dari dataset deteksi yang lebih pendek. class_balanced=False mengaktifkan pengambilan sampel repeat-factor per gambar jika diatur ke true; pengaturan ini dapat digabung dengan min_samples dan DDP. Loader khusus yang melewati sampler bersama menolak penyeimbangan yang diaktifkan.
Akumulasi gradien
nbs menetapkan ukuran nominal, atau efektif, batch. Pelatih mengakumulasi
round(nbs / batch) mikro-batch per langkah optimizer.
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO9s.pt") # 4 micro-batch dari 16 per langkah optimizer, batch efektif 64.model.train(data="my-dataset.yaml", batch=16, nbs=64)Dibiarkan sebagai None, default, akumulasi dimatikan dan pelatihan tidak berubah.
Learning rate dan jadwal
lr0 adalah learning rate awal dan optimizer menerima sgd, adam dan
adamw. momentum adalah momentum SGD atau beta1 Adam, weight_decay adalah L2
istilah, dan nesterov berlaku untuk SGD.
Jadwal dibentuk oleh scheduler, warmup_epochs, warmup_lr_start dan
min_lr_ratio. no_aug_epochs mengatur berapa banyak epoch akhir yang dijalankan tanpa kuat
augmentasi, dan beberapa jadwal menggunakannya untuk membentuk ekornya juga, jadi itu
bukan semata-mata kenop augmentasi. Apa yang dilakukan setiap family dengan setengah augmentasi
darinya ada di Augmentations.
Beberapa keluarga menambahkan tombol tingkat pembelajaran mereka sendiri. backbone_lr_mult menyesuaikan
Kelompok backbone melawan head, clip_max_norm menetapkan pemotongan gradien, dan
SegFormer menggunakan head_lr_mult untuk menjalankan decode head-nya sepuluh kali backbone
tingkat. Ini berada pada subclass konfigurasi family, bukan yang dasar.
clip_max_norm memotong norma L2 gradien ke nilai itu sebelum setiap langkah
optimizer, dan 0 mematikan pemotongan. YOLOv9, YOLOv9-E2E, dan YOLOv9-P2 menetapkan
defaultnya 10. D-FINE, Dome-DETR, DEIM, DEIMv2, TinyFormer, RT-DETR, RT-DETRv2,
RT-DETRv4, RF-DETR, DINOv2, GTR, dan EC menetapkan defaultnya 0.1. Di CLI, nilainya
clip_max_norm= atau --clip-max-norm; lihat libreyolo train
untuk family yang menerimanya di sana.
EMA
ema=True menyimpan rata-rata bergerak eksponensial dari bobot bersamaan dengan
bobot yang dilatih. Ini diaktifkan secara default di mana-mana kecuali FOMO.
ema_decay adalah target decay. Decay meningkat secara bertahap daripada dimulai pada
targetnya: nilai efektif pada update n adalah ema_decay * (1 - exp(-n / tau))
dengan tau default ke 2000, sehingga update awal mengikuti model lebih dekat dan
update akhir melicinkannya. Default Family berkisar dari 0.997 pada pose YOLO-NAS
hingga 0.9998 pada YOLOX dan 0.9999 pada YOLOv9 dan lini DETR.
Bobot EMA adalah yang divalidasi dan yang dibawa oleh best.pt dan last.pt.
Berat terlatih mentah juga disimpan, di bawah kunci train_model, jadi dapat dilanjutkan
berlanjut dari lintasan yang dilatih daripada dari rata-rata.
Presisi
amp=True menjalankan forward pass di bawah CUDA autocast. amp_dtype memilih
float16 (default) atau bfloat16; fp16 dan bf16 adalah ejaan yang diterima.
Float16 membutuhkan skala loss dinamis dan mendapatkan GradScaler langsung. Bfloat16 lebih lebar
jangkauan eksponen tidak, jadi skalernya dibuat tetapi dinonaktifkan, yang menjaga
jalur pengoptimal identik. Meminta bfloat16 pada perangkat CUDA tanpa
Dukungan bfloat16 meningkat saat pengaturan alih-alih menurun secara diam-diam.
Keluaran, titik pemeriksaan, dan penghentian
Run ditulis ke project/name. project default ke runs/train
di mana-mana, tetapi name adalah salah satu override per-family: default dasarnya adalah
exp, sementara YOLOv9 menggunakan yolo9_exp dan D-FINE menggunakan dfine_exp. Dengan
exist_ok=False, default, direktori yang ada mendapatkan sufiks yang ditingkatkan
alih-alih ditimpa.
save_period menulis weights/epoch_<N>.pt tambahan setiap N epoch, di atas
weights/last.pt setelah setiap epoch dan weights/best.pt setiap kali metrik yang dilacak
membaik. eval_interval menentukan seberapa sering validasi dijalankan, dan epoch
terakhir selalu divalidasi; val=False mematikan validasi, dan run seperti itu tidak
menulis best.pt. patience menghentikan run setelah selama itu epoch tanpa
perbaikan, dengan 0 menonaktifkan early stopping.
cache mempercepat epoch berulang dengan menyimpan gambar yang telah didekode di RAM (True atau
"ram") atau sebagai berkas .npy di samping sumber ("disk"). Bacaan yang disimpan dalam cache adalah
identik byte dengan yang baru. Dengan pekerja dataloader, "disk" adalah yang lebih aman dari
keduanya.
average_best=0 menonaktifkan perataan checkpoint; N positif menulis weights/average.pt dari maksimal N snapshot terbaik. Tensor floating-point dirata-ratakan secara seragam dan buffer integer berasal dari snapshot terbaik. export_check=False dapat diaktifkan untuk menghentikan proses sebelum epoch pertama jika ekspor ONNX gagal. Keluaran mentah yang cocok dibandingkan dengan rtol=1e-3, atol=1e-4; susunan yang tidak kompatibel mencatat bahwa perbandingan dilewati.
precise_bn=0 menonaktifkan kalibrasi ulang BatchNorm akhir. Nilai positif membatasi jumlah gambar loader pelatihan sebelum validasi akhir; dalam DDP anggaran berlaku per rank yang berpartisipasi. BatchNorm yang dibekukan tetap beku. Callback fitness kustom dapat memilih checkpoint terbaik dan patience.
Ringkasan
resume=True melanjutkan run yang terhenti dari checkpoint yang dimuat;
resume="path/to/last.pt" justru melanjutkan dari berkas tersebut.
from libreyolo import LibreYOLO # Memuat checkpoint dari jalannya yang terhenti, lalu minta untuk melanjutkan.model = LibreYOLO("runs/train/yolo9_exp/weights/last.pt")model.train(data="my-dataset.yaml", resume=True)libreyolo train model=runs/train/yolo9_exp/weights/last.pt \ data=my-dataset.yaml resume=trueResume memulihkan argumen pelatihan tersimpan milik run tersebut, dan argumen yang
diberikan secara eksplisit menggantikan nilai yang tersimpan. Resume tetap menulis
ke direktori run milik checkpoint. Resume memulihkan bobot yang dilatih, status
optimizer, bobot EMA dan
perbarui jumlah, pelacakan metrik terbaik, skala GradScaler, dan PyTorch,
Status acak CUDA dan NumPy. Itu dimulai pada checkpoint epoch ditambah satu dan
mempercepat jadwal ke posisi tersebut.
Tiga hal yang tidak akan dilakukannya. resume=True tidak dapat digabungkan dengan pretrained,
yang menimbulkan masalah. Bobot rilis dan run yang sudah mencapai epochs-nya
tidak menyimpan apa pun untuk dilanjutkan, dan memunculkan ValueError yang
menyebutkan hal itu. Dan ketika kunci metrik-terbaik checkpoint berbeda dari
jalannya saat ini, pelacakan metrik-terbaik direset ke nol dengan peringatan
alih-alih membandingkan nilai yang tidak berarti sama.
Resep dalam sebuah berkas
cfg= memuat pemetaan YAML dari nama-nama bidang TrainConfig dan menggabungkannya
di bawah argumen kata kunci eksplisit, jadi sebuah kwarg selalu menang atas berkas.
from libreyolo import LibreYOLO # Kunci dalam yaml adalah nama kolom TrainConfig. Kwargs eksplisit menang.model = LibreYOLO("LibreYOLO9s.pt")model.train(data="my-dataset.yaml", cfg="my-recipe.yaml", epochs=50)size dan num_classes dihapus dari berkas, karena instansi model
sudah memilikinya. Tidak ada --cfg flag di CLI; jalur berkas adalah Python
argumen.
Terkait
- Dataset untuk apa yang diterima
data=. - Augmentations untuk kenop augmentasi dan yang mana keluarga menghormati mereka.
- Pembekuan layer dan LoRA untuk melatih sebagian dari bobot.
- Validasi dan metrik untuk apa yang dilaporkan oleh jalannya.
Pemilihan kelas dan pembobotan loss
Untuk deteksi YOLO9, RF-DETR, EdgeCrafter, RT-DETR, D-FINE, DEIM, TinyFormer, dan YOLO-NAS, classes=None mempertahankan semua kelas dataset; daftar memfilter supervisi sambil mempertahankan ID asli, nc, dan names. single_cls=False dapat diaktifkan untuk memetakan label yang dipertahankan ke kelas 0, bernama object. Kelanjutan pelatihan dan validasi mewarisi pengaturan tersimpan. Pelatihan OBB model menolak single_cls.
ResNet, ConvNeXt, ConvNeXt V2, MobileNetV4, EfficientNetV2, dan DINOv2 mendukung cls_pw=0.0: nilai dalam [0, 1] membobot setiap kelas dengan invers frekuensi berpangkat nilai tersebut, dinormalisasi ke rata-rata 1. class_weights=False memilih pembobotan alternatif N / (C * n_c) saat diaktifkan. Ini tidak dapat digabung dengan cls_pw positif; kelanjutan pelatihan memerlukan pengaturan pembobotan yang sama.
plot_samples=8 menetapkan anggaran gambar sampel validasi. Gunakan 0 untuk tanpa sampel atau -1 untuk semuanya; ini tidak mengurangi gambar yang dievaluasi.