libreyolo quantize

Mengganti modul float pada model dengan modul terkuantisasi, mengkalibrasinya pada gambar tanpa label ketika resep membutuhkan statistik, lalu menyimpan hasilnya sebagai checkpoint PyTorch.

Perintah
libreyolo quantize
Wajib
model
Output
Path sumber dengan -<recipe> sebelum akhiran, misalnya LibreYOLO9s-int8.pt

Sinopsis

bash
libreyolo quantize model=<name|path> [recipe=<recipe>] [key=value ...]

Argumen berupa pasangan key=value, dan bentuk POSIX juga berlaku, jadi recipe=int8 dan --recipe int8 adalah argumen yang sama.

Argumen

ArgumenDefaultArti
modelBobot model .pt. Wajib
recipeint8Resep kuantisasi: fp16, bf16, fp8, int8, w4a16, w4a8, nvfp4, mxfp4, int2
calibcoco128.yamlGambar kalibrasi: YAML data atau nama dataset bawaan. Tanpa label, hanya forward. none melewati kalibrasi
samples128Jumlah maksimum gambar kalibrasi
batch8Ukuran batch kalibrasi
algorithmautoEstimasi rentang aktivasi: auto, yang memilih minmax, atau minmax, atau percentile
outPath checkpoint keluaran. Secara bawaan berupa path sumber dengan -<recipe> sebelum akhiran
deviceautoPerangkat
allow_download_scriptsfalseMengizinkan Python yang tertanam di blok download pada YAML dataset
jsonfalseOutput JSON ke stdout
quietfalseMenyembunyikan stderr
help_jsonfalseMenampilkan skema perintah sebagai JSON lalu keluar

Contoh

Dasar
# Mengkalibrasi pada coco128 dan menulis LibreYOLO9s-int8.ptlibreyolo quantize model=LibreYOLO9s.pt recipe=int8
Hanya cast, tanpa kalibrasi
libreyolo quantize model=LibreYOLO9s.pt recipe=fp16 calib=none \  out=weights/LibreYOLO9s-fp16.pt
Kalibrasi lebih luas, lalu pemulihan
libreyolo quantize model=LibreYOLO9s.pt recipe=int8 \  calib=coco128.yaml samples=256 batch=16 algorithm=minmax # Pelatihan quantization-aware pada checkpoint terkuantisasi memulihkan akurasi.libreyolo train model=LibreYOLO9s-int8.pt data=coco8.yaml epochs=10 lr0=0.001

Catatan

Family yang menerimanya

Kuantisasi mencakup empat family: yolo9, rfdetr, birefnet, dan feynobg. Family lain akan keluar dengan quantize_failed yang membawa daftar tersebut.

Apa yang disentuh setiap resep

fp16 dan bf16 adalah cast. Keduanya hanya mengubah dtype, tidak perlu kalibrasi, dan calib=none adalah pengaturan yang tepat untuk keduanya.

int8 dan fp8 mengkuantisasi modul Conv2d dan Linear, itulah sebabnya keduanya cocok untuk family konvolusional.

w4a16, w4a8, nvfp4, mxfp4, dan int2 hanya mengkuantisasi nn.Linear, jadi sasarannya adalah family transformer. Meminta salah satunya pada yolo9 akan ditolak disertai penjelasan, bukan diam-diam menghasilkan model yang tidak terkuantisasi, karena akselerasi di bawah 8 bit di sana hanya berlaku untuk GEMM dan konvolusinya akan tetap berada pada presisi yang lebih tinggi.

int8, fp8, w4a8, dan int2 membutuhkan statistik kalibrasi untuk aktivasinya. int2 juga membutuhkan pelatihan pemulihan setelahnya, jadi resep ini ditolak pada birefnet dan feynobg, yang tidak punya trainer.

Setiap family mempertahankan sejumlah modul dalam float apa pun resepnya: lapisan pertama, head prediksi, dan pada YOLOv9 konvolusi DFL, yang merupakan operator ekspektasi integral tetap dan tidak boleh dikuantisasi.

Data kalibrasi bukan data pelatihan

calib menunjuk ke kumpulan gambar kecil tanpa label, dipakai hanya untuk forward, guna menurunkan rentang aktivasi. Model tidak dievaluasi terhadapnya dan labelnya tidak pernah dibaca. Nilai bawaan coco128.yaml diunduh dari sebuah URL saat pertama kali dipakai, jadi tidak butuh izin tambahan; YAML dengan skrip download Python yang tertanam membutuhkan allow_download_scripts=true.

algorithm=percentile tersedia dan dapat menurunkan akurasi pada family transformer, itulah sebabnya auto memilih minmax.

Memulihkan akurasi

Keluarannya adalah checkpoint PyTorch biasa, jadi libreyolo train menerimanya secara langsung. Melatih checkpoint terkuantisasi berarti melakukan quantization-aware training; menambahkan distill_model=<teacher> menjadikannya quantization-aware distillation.

Output dan kode keluar

Hasilnya mencetak path yang disimpan, resep, mode eksekusi, apakah kalibrasi dijalankan, dan jumlah modul yang ditukar per jenis. Kode keluar adalah 0 jika berhasil, 4 jika model tidak dapat dimuat, 5 jika kuantisasi atau penyimpanan gagal, dan 1 untuk kegagalan runtime lainnya.

Terkait: libreyolo export, yang keluar dari PyTorch dan justru menulis artefak deployment.

Diverifikasi dengan LibreYOLO v1.5.0.