Meningkatkan ke 1.7.0
Versi 1.7.0 tetap memuat checkpoint YOLO9 lama dengan box float yang sama. Versi ini mengubah pelatihan family YOLO9, nama yang dilihat kode di dalam jaringan, dan beberapa kontrak validasi dan predict.
1.6.0 ke 1.7.0
-
Checkpoint YOLO9, YOLO9-E2E, dan YOLO9-P2 yang disimpan oleh 1.7.0 memakai nama tensor baru dan tidak dapat dimuat di 1.6.x: 1.6.x memuat yang YOLO9 dan YOLO9-P2 dengan peringatan missing-keys dan tidak memprediksi box, dan memunculkan error ketidakcocokan
model_familyuntuk yang YOLO9-E2E. Tingkatkan setiap lingkungan yang membacanya. Checkpoint float, terkuantisasi, dan pelatihan yang ditulis rilis sebelumnya dapat dimuat di 1.7.0, dan ekspor ONNX tidak terpengaruh. -
Kode yang mengakses
model.modelpada model family YOLO9 melihat nama modul MultimediaTechLab/YOLO, tanpa alias.DDetectmenjadiYOLO9Head(anchor_convs/class_convs),RepConvNmenjadiRepConv,RepNBottleneckmenjadiBottleneck,DFLmenjadiAnchor2Vec(anchor2vec),ncmenjadinum_classes, dan sublayer blok menjadiconv1/conv2/bottleneck. Pada YOLO9-E2E,YOLO9E2EDetectmenjadiYOLO9E2EHeaddanone2one_cv2/one2one_cv3menjadione_to_one_anchor_convs/one_to_one_class_convs.LibreYOLO9Model.fuse(),RepConvN.fuse_convs(),Conv.forward_without_bn(),Concat, danyolo9.utils.decode_boxesdihapus. Changelog mencantumkan setiap penggantian nama. -
Nama node ONNX mengikuti nama modul baru pada head, backbone, dan neck, misalnya
/head/anchor_convs.0/.... Perbarui alat yang bergantung pada nama node, seperti konfigurasi end-node Hailo. Input, output, dan nama output model tidak berubah. -
Fine-tuning YOLO9 dari bobot tanpa tensor PGI, termasuk
LibreYOLO9{t,s,m,c}.ptyang dipublikasikan, hanya melatih head utama, seperti di 1.5.0; 1.6.0 memasang cabang PGI yang diinisialisasi acak denganaux_weight=0.25. Bobot yang membawa tensor PGI, dan run dari nol, tetap dilatih dengan PGI. Berikanaux_weight=0.25untuk tetap memasang cabang baru, atauaux_weight=0untuk memaksanya mati. -
Saat PGI dipasang, YOLO9-m dan YOLO9-c membangun cabang auxiliary MultimediaTechLab: 12.8M (m) dan 25.7M (c) parameter khusus pelatihan pada 80 kelas, naik dari 7.5M dan 10.2M, sehingga pelatihan PGI pada ukuran ini memerlukan lebih banyak memori dan waktu per langkah. Checkpoint pelatihan m/c dari 1.6.0 dapat dilanjutkan dan di-fine-tune dengan cabang yang dipakai saat pelatihannya. Inferensi serta YOLO9-t/s tidak berubah.
-
YOLO9, YOLO9-E2E, dan YOLO9-P2 memotong norma L2 gradien pada 10, dan assigner pelatihannya menilai anchor dalam fp32, sehingga positif yang dipilih di bawah fp16 AMP bisa berbeda. Berikan
clip_max_norm=0untuk pemotongan 1.6.0; run yang dimulai di 1.6.0 dan dilanjutkan di 1.7.0 juga memotong kecuali Anda memberikannya. Penetapan fp32 tidak punya sakelar. -
perspectivebukan nol sekarang membengkokkan lewat pergeseran sudut di setiap family yang memakai affine warp bersama (YOLO9 beserta varian E2E dan P2, YOLOX, YOLOv7, YOLO-NAS, PP-YOLOE, RTMDet, PicoDet, RT-DETR, dan RT-DETRv2), termasuk run yang dilanjutkan dari checkpoint 1.6.0 yang menetapkannya. Nilai0.002ke atas memberi warp maksimum yang sama, dan nilai negatif memunculkanValueError. Tidak ada pengaturan yang mereproduksi warp 1.6.0; defaultperspective=0tidak berubah. -
Pipeline mosaic YOLO9 menarik rasio mixup dari Beta(1, 1), bukan Beta(32, 32), tanpa pengaturan untuk nilai lama. Pelatihan YOLOv7 default berubah, karena YOLOv7 mengaktifkan mixup secara default. YOLO9, YOLO9-E2E, YOLO9-P2, RT-DETR, dan RT-DETRv2 hanya berubah bila mixup diaktifkan.
-
libreyolo traintanpaname=menulis run EC, D-FINE, SegFormer, dan LingBot-Vision keruns/train/ec_exp,dfine_exp,segformer_exp, danlingbotvision_exp, bukanruns/train/exp, probe V-JEPA 2 keruns/train/train, dan run YOLO9-P2 keruns/train/yolo9_exp. Berikanname=expuntuk path lama, atauname=yolo9_p2_expuntuk YOLO9-P2. -
libreyolo trainmemulai D-FINE, SegFormer, dan LingBot-Vision dari resepnya sendiri. Untuk D-FINE itu berarti 132 epoch,lr0=2e-4,weight_decay=1e-4, 2 epoch warmup, dan tanpa augmentasi mosaic, mixup, HSV, maupun affine. Untuk mengirim nilai yang dikirim 1.6.0, berikanepochs=300 optimizer=sgd lr0=0.01 weight_decay=5e-4 warmup_epochs=5 mosaic=1.0 mixup=1.0 hsv_prob=1.0 degrees=10 translate=0.1 shear=2.0. -
libreyolo.validation.ConfusionMatrixmengindeksmatrix[predicted, true](dulu[actual, predicted]), menghitung deteksi padaconf_thres=0.25(dulu 0.15), menerimanames=dantask=hanya sebagai argumen keyword, danmatrix-nya tidak dapat lagi ditetapkan ulang. Transpos kode yang mengindeks matriks lama, dan berikanconf_thres=0.15untuk hitungan lama.plots=Truemenulis hitungan keconfusion_matrix.pngdan plot ternormalisasi keconfusion_matrix_normalized.png. -
predict(agnostic_nms=True)menekan kotak tumpang tindih lintas kelas, bukan lagi memberi peringatan. Task tanpa kotak memunculkanValueError,LibreEnsembledan HRNet memunculkanNotImplementedError, dan tier SAM menolak keyword itu denganTypeError; hapus argumen dari pemanggilan tersebut. -
interpolationclassifier yang tidak dikenal memunculkanValueError, termasuk mode torchvisionLANCZOS,BOX,HAMMING, danNEAREST_EXACT. Gunakanbilinear,bicubic,nearest, ataubilinear_no_antialias. -
Jalankan ulang validasi sebelum membandingkan dengan angka 1.6.0 untuk
val(single_cls=True)pada model yang dilatih dengan beberapa kelas, dataset segmentasi yang mencampur baris box-saja dan poligon, dan RTMDet-Ins, yang mempertahankan hinggamax_det=300mask per gambar secara default; berikanmax_det=100untuk pengaturan MMDetection. -
Tanpa
libreyolo[rfdetr], pemanggilan CLI dengan nama model RF-DETR atau DINOv2 keluar dengan kode error JSONmodel_load_failed, bukanmodel_not_found, dan pesannya menyebutpip install libreyolo[rfdetr].
Lihat changelog untuk rilis lengkapnya.
1.5.0 ke 1.6.0
-
Tingkatkan lingkungan yang dipatok di bawah ONNX Runtime 1.18 ke
onnxruntime>=1.18.0sebelum memasang extra ONNX. -
SAM 3D Body menerima kumpulan aset snapshot yang sudah ditinjau. Pasang
libreyolo[hf], dapatkan akses terbatas, lalu gunakan pengambilan otomatis, atau sediakan direktori snapshot tanpa perubahan dan aset MHR yang dipatok pada sistem berkas lokal tepercaya. -
Jalankan ulang validasi setelah koreksi pengubahan ukuran RF-DETR non-pose dan normalisasi pengklasifikasi. Periksa ulang ambang skor keyakinan yang diterapkan sebelum membandingkan hasil dengan 1.5.0; tidak ada flag prapemrosesan lama.
-
Deteksi D-FINE, DEIM, RT-DETRv4, dan YOLO-NAS mengaktifkan FP16 AMP secara default. Berikan
amp=Falseuntuk mempertahankan FP32. -
Untuk pilihan fine-tuning YOLO9 sebelumnya, atur
aux_weight=0,max_labels=100, danwarmup_momentum=0.937. Aturletterbox_pad="topleft"jika konversi baru bertanda center harus mereproduksi geometri lama. Checkpoint lama dengan satu head melanjutkan pelatihan dengan graf aslinya. Run YOLO9 baru memakai lebih banyak memori GPU, jadi turunkanbatchjika ukuran batch dari 1.5.0 kehabisan memori. -
RF-DETR dan DINOv2 membuat direktori proses bernomor dengan nama family. Perbarui pengguna path artefak, atau atur
output_dir="runs/train", exist_ok=Trueuntuk mempertahankan lokasi lama dan perilaku penggunaan ulang. -
Pertahankan
mixup + cutmix <= 1untuk klasifikasi; kombinasi tidak valid kini menimbulkan galat saat penyiapan. -
QAT menonaktifkan EMA, SyncBatchNorm, dan perataan checkpoint. Gunakan checkpoint best/last QAT tanpa bergantung pada status tersebut.
-
Loader kustom dengan hook mutasi dataset harus memakai
persistent_workers=Falseatau membangun ulang worker setelah mutasi. Salinan persisten multi-worker yang tidak kompatibel kini menimbulkan galat. -
Array gambar NumPy dibaca sebagai BGR, urutan OpenCV. Berikan
color_format="rgb"saat memberikan array RGB sepertinp.asarray(pil_image); keluarancv2.imread()dan frame video tidak perlu diubah. -
Array NumPy atau tensor 4D adalah batch:
predict()mengembalikan daftar berisi satuResultsper gambar, alih-alih hanya memakai gambar pertama. -
train(resume=True)dantrain(resume="path/to/last.pt")memulihkan argumen pelatihan tersimpan milik proses tersebut dan tetap menulis ke direktori prosesnya; argumen yang diberikan secara eksplisit lebih diutamakan. Melanjutkan bobot rilis, atau proses yang sudah mencapaiepochs-nya, menimbulkanValueError. -
Dengan validasi aktif, epoch terakhir selalu divalidasi, sehingga proses yang lebih pendek dari
eval_intervalkini melaporkan metrik dan menulisbest.pt.val=Falsemematikan validasi, termasuk pada epoch terakhir. Validasi selama pelatihan kini menulis ke<run>/val, bukanruns/val/. -
Kegagalan
traindi CLI melaporkan jenis galatnya, sehingga galat konfigurasi keluar dengan kode 2, bukan 1 denganio_error.
Lihat changelog untuk rilis lengkap dan mengimpor bobot untuk konversi checkpoint.
1.4.0 ke 1.5.0
Halaman ini membahas upgrade LibreYOLO. Untuk memuat checkpoint dari project upstream, lihat impor bobot yang ada, yang merupakan topik lain.
Entri rilis lengkap tersedia pada changelog. Bagian berikut hanya membahas tindakan yang diperlukan.
Perubahan kode yang wajib dilakukan
allow_experimental=True tidak lagi ada
Gate konfirmasi telah dihapus beserta mekanisme
ddp_aware(experimental_key=...) di baliknya. Pelatihan dan ekspor EC, RTMDet,
PicoDet, dan FOMO sebelumnya memerlukan argumen tersebut, sehingga semua script
yang melatih family itu terpengaruh.
# 1.4.0model.train(data="data.yaml", epochs=100, allow_experimental=True) # 1.5.0: hapus argumenmodel.train(data="data.yaml", epochs=100)Tidak ada shim deprecation. Pemanggilan yang masih memberikannya mendapat
peringatan Unknown training config keys (ignored), dan argumen itu tidak
berpengaruh. BaseModel.EXPERIMENTAL_WEIGHT_FILENAMES juga dihapus. Hook
get_download_notice() tetap ada dan masih diganti oleh MiDaS, SegFormer,
dan YOLO9-P2.
Tingkat dukungan tetap dipublikasikan, tetapi bukan lagi argumen: lihat tier stabilitas.
Tier ekspor "experimental" tidak lagi ada
from libreyolo.export.support import Tier # 1.4.0: Literal["validated", "experimental", "blocked"]# 1.5.0: Literal["validated", "available", "blocked"]Kode yang bercabang berdasarkan string tier harus membaca "available" di
tempat yang sebelumnya membaca "experimental". BaseExporter tidak lagi
menghasilkan RuntimeWarning untuk format tersebut. Status per format tersedia
dalam matriks ekspor.
pretrained=False bersama resume kini ditolak
Kombinasi ini sebelumnya berjalan secara tidak koheren. Kini muncul error:
ValueError: pretrained=False cannot be combined with resume.Pilih salah satu. pretrained=False memulai dari initialization baru dengan
seed, yang pada 1.5.0 berfungsi bagi setiap family yang dapat dilatih, bukan
hanya tiga. resume melanjutkan run yang terputus dari checkpoint. Keduanya
didokumentasikan dalam pelatihan.
--imgsz CLI berupa string, bukan int
Perubahannya lebih sempit daripada kedengarannya. Kedua contoh ini tidak terpengaruh:
libreyolo predict --model yolo9-t --source img.jpg --imgsz 640 # tetap berfungsimodel.predict("img.jpg", imgsz=640) # tetap berfungsiHanya kode yang memanggil fungsi perintah CLI langsung dari Python
yang harus berubah, karena predict, train, dan val memperluas --imgsz
dari int ke str agar dapat menerima ukuran rectangle:
from libreyolo.cli.commands.predict import predict_cmd predict_cmd(..., imgsz=640) # 1.4.0predict_cmd(..., imgsz="640") # 1.5.0, dan "480x640" kini juga berfungsiDefault train kini string "640". export --imgsz sudah berupa string, dan
profile tidak berubah.
Angka yang berubah
Tiga perubahan menggeser metrik pada pengaturan default. Jika melacak hasil lintas versi, baca bagian ini sebelum membandingkan run 1.5.0 dengan 1.4.0.
faster-coco-eval menjadi backend metrik COCO default
val() dan validasi pelatihan per epoch kini menghitung metrik COCO dengan
backend C++ faster-coco-eval, bukan pycocotools.
Peralihan diputuskan berdasarkan paritas terukur pada semua 100 split pengujian RF100-VL: 1381 dari 1400 nilai metrik identik secara bit, deviasi maksimum 2.22e-16, delta headline tepat 0, dengan kecepatan keseluruhan 15.6x dan 56x pada dataset padat deteksi. Angka seharusnya tidak berubah. Namun, angka tetap dihasilkan implementasi berbeda, sehingga perubahan ini dicantumkan.
pycocotools tetap menjadi fallback otomatis jika faster-coco-eval tidak diinstal. Untuk memaksanya:
libreyolo val --model yolo9-t --data coco.yaml --no-faster-coco-evalmodel.val(data="coco.yaml", faster_coco_eval=False)LIBREYOLO_FASTER_COCO_EVAL=0 melakukan hal yang sama secara global. Backend
yang benar-benar digunakan dicatat pada INFO, tersedia sebagai
model.last_eval_backend setelah val(), dan disertakan sebagai eval_backend
dalam payload JSON CLI. Instal jalur cepat dengan
pip install libreyolo[fast-eval].
Checkpoint YOLOX sebelum 1.5.0 memerlukan override eps
Ini adalah jebakan dalam rilis. Baca jika memiliki hasil fine-tuning YOLOX.
YOLOX menetapkan BatchNorm eps=1e-3 dan momentum=0.03. Hingga 1.5.0, nilai
tersebut diterapkan sebagai perbaikan setelah konstruksi yang tidak bertahan
melalui rebuild jumlah kelas yang dilakukan train() ketika nc dataset
berbeda dari checkpoint. Fine-tuning tersebut berlatih dan melaporkan validasi
dalam pelatihan pada default torch eps=1e-5, lalu dimuat ulang untuk inferensi
pada 1e-3: tensor sama di bawah normalisasi berbeda.
Ukuran regular-conv hampir tidak berubah. Depthwise n berubah besar karena
running_var per channel cukup kecil hingga eps mendominasi. Pada RF100-VL
ball, checkpoint nano yang sama mendapat 0.566 mAP50-95 saat dievaluasi
dengan eps pelatihan dan 0.151 setelah pemuatan ulang standar.
Checkpoint yang dilatih sebelum 1.5.0 memiliki semantik eps=1e-5. Untuk melaporkan angka yang tepat, evaluasi dengan eps BN diganti ke 1e-5:
import torchfrom libreyolo import LibreYOLO model = LibreYOLO("my-yolox-finetune.pt")for module in model.model.modules(): if isinstance(module, torch.nn.BatchNorm2d): module.eps = 1e-5 model.val(data="data.yaml")Alternatifnya, lipat sqrt((var + 1e-3) / (var + 1e-5)) ke bobot BN sekali dan
simpan hasilnya. Checkpoint yang dilatih pada 1.5.0 dan setelahnya tidak
memerlukan keduanya.
Pelatihan multi-scale D-FINE memakai resep upstream per ukuran
base_size_repeat sebelumnya ditetapkan langsung ke 3 untuk setiap ukuran. Kini nilai
diselesaikan per ukuran sesuai upstream: n berlatih pada ukuran tetap dengan
multi-scale nonaktif, s 20, m 6, l 4, x 3. Hanya x yang cocok
sebelumnya, sehingga n, s, m, dan l melihat distribusi skala berbeda dan
konvergen ke metrik berbeda.
Untuk memulihkan perilaku lama, tetapkan secara eksplisit:
from libreyolo.training.config import DFINEConfig config = DFINEConfig(base_size_repeat=3)DEIM tetap memakai nilai 3 yang ditetapkan langsung. Detail family tersedia pada D-FINE.
Perlu diketahui, tanpa tindakan
- Hasil
imgszrectangle berubah karena sebelumnya salah. Koordinat bounding box, pengubahan ukuran mask RTMDet, rescaling YOLO-NAS, dan scaling ground truth validator kini menggunakan tinggi dan lebar per sumbu, bukan satu skalar.imgszpersegi tidak berubah secara bit. Inferensi atau validasi rectangle pada 1.4.0 salah skala. YOLO-NAS kini menolakimgszrectangle alih-alih diam-diam menghasilkan output salah. - Dictionary metrik mendapatkan kunci baru.
max_det,ar_max_det, danAR_max_detdari evaluator COCO, sertametrics/lossdanmetrics/loss/cedari FOMO. Nilai default tidak berubah, tetapi semua proses yang mengiterasi kunci metrik, termasuk logger kustom dan header CSV, melihat kolom baru. - Run YOLO9 dengan seed yang memicu rebuild head memulai dari initialization berbeda karena seed kini diterapkan sebelum rebuild, bukan setelahnya. Fine-tuning 1.4.0 dengan seed ke jumlah kelas berbeda tidak dapat direproduksi bit demi bit pada 1.5.0.
libreyolo[hub-kernels]pada CUDA kini benar-benar mengaktifkan kernel MS-deform-attn native. 1.4.0 membatasinya di balik kondisi yang tidak pernah diambil RF-DETR, sehingga kernel tidak pernah berjalan. Prediksi dapat bergeser dalam toleransi float untuk RF-DETR dan family deformable-attention lain. Instalasi standar tidak terpengaruh, danLIBREYOLO_HUB_KERNELS=0menonaktifkannya.libreyolo predictmembuang opsi tidak didukung, bukan memunculkan error. CLI memfilter kwargs terhadap signature__call__model, sehingga opsi yang tidak diterima family diabaikan alih-alih memunculkanTypeError. Nama flag yang tidak dikenal tetap ditolak denganNo such option.- Live sumber mengubah bentuk output JSON. Webcam, stream RTSP, dan screen capture secara implisit mengaktifkan streaming, yang menghasilkan satu rekaman per frame, bukan satu untuk pemanggilan. Sumber tersebut baru pada 1.5.0, jadi script 1.4.0 tidak terpengaruh.
- Ekspor ulang
rfdetr-poseatauyolonas-poseke ONNX menghasilkan nama output berbeda. 1.4.0 keliru membaca head pose multi-tensor sebagai segmentation melalui heuristic jumlah output. Berkas.onnxyang sudah ada di disk tidak berubah. - Pada instalasi tanpa torch, hasil memuat array numpy, bukan
torch.Tensor, sehingga.boxes.datamengembalikan jenis berbeda dan tie-breaking NMS dapat berbeda dari torchvision. Jika torch terinstal, perilaku identik per byte. Lihat instalasi ringan. - Objek konfigurasi melakukan lebih banyak validasi saat konstruksi.
TrainConfigmendapatkan__post_init__, sehingga konfigurasi yang sebelumnya sudah tidak valid kini langsung memunculkan error, bukan gagal jauh di dalam run. SerialisasiValidationConfigmendapatkan kunciedge_thresholds, yang merusak round-trip ketatValidationConfig(**dump)dari dump 1.4.0. - Nama berkas bobot untuk family dengan suffix task diselesaikan secara berbeda.
segformer-b0kini diselesaikan menjadiLibreSegformerb0-sem.pt. Ini memperbaiki 404 pengunduhan otomatis dan merusak script yang melakukan hard-code nama tanpa suffix lama. - Marker pytest
experimental_backendkini menjadiextended_backend. Hanya relevan jika menjalankan test suite dengan-m.
Checkpoint dan dataset
Checkpoint yang ditulis oleh 1.4.0 dimuat tanpa perubahan.
Skema mendapatkan imgsz_h dan imgsz_w
untuk model rectangle dan tetap menulis skalar imgsz = max(h, w) bagi reader
lama. Ekspor ExecuTorch dan MNN
kini memerlukan sidecar, masing-masing <program>.pte.json dan
<model>.mnn.json, sedangkan ekspor HRNet memuat
pose_input: "person_crop". Format dataset tidak berubah.