Impor bobot yang ada
LibreYOLO melakukan port family model dari project upstream, sehingga checkpoint rilisnya hampir dapat langsung dimuat. Yang tidak ada adalah metadata. Konversi otomatis menyediakannya saat pemuatan.
- Entry point
LibreYOLO("path/to/upstream.pth")- Ditulis di samping sumber sebagai
<sumber>-<Prefix><size>[-task].pt- Konverter berbasis script
bobot/ dalam repositori
Halaman ini membahas checkpoint dari project lain. Jika memindahkan kode sendiri dari LibreYOLO lama, lihat upgrade ke 1.5.0.
Yang terjadi ketika berkas asing dimuat
LibreYOLO() terlebih dahulu memuat setiap berkas bobot melalui jalur restricted
bobot-only. Jika hasil memiliki metadata LibreYOLO lengkap, berkas langsung
digunakan. Jika tidak, berkas dikirim ke konverter otomatis sebelum proses lain.
Jika pemuatan restricted gagal sepenuhnya, yang terjadi ketika checkpoint
memiliki objek pihak ketiga yang diserialisasi dengan pickle, konverter otomatis dicoba dengan
loader yang menetralkan objek tersebut.
Konversi otomatis melakukan empat hal. Proses ini membuka dictionary tensor dari tata letak yang digunakan project upstream. Lalu, setiap family terdaftar ditanya apakah mengenali kunci tersebut, dengan remapping nama ketika penamaan upstream berbeda dari port LibreYOLO. Pemenang dibungkus dalam checkpoint yang memenuhi skema metadata v1.0, dengan ukuran, task, dan jumlah kelas dibaca dari tensor. Terakhir, hasil ditulis di samping berkas sumber dan dimuat.
from libreyolo import LibreYOLO # Ganti dengan path checkpoint yang sudah tersedia. Tata letak upstream yang# dikenali dikonversi saat pemuatan, ditulis di samping sumber,# lalu dimuat.model = LibreYOLO("path/to/upstream-checkpoint.pth") # Jumlah dan nama kelas berasal dari tensor serta metadata berkas sendiri,# sehingga hasil fine-tuning mempertahankan kumpulan labelnya, bukan COCO.print(model.family, model.size, model.task, model.nb_classes)print(model.names)libreyolo predict model=path/to/upstream-checkpoint.pth \ source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg# Berkas hasil konversi memenuhi skema yang sama seperti berkas terbitan.libreyolo metadata path=path/to/upstream-checkpoint-LibreYOLO9t.ptKonversi tidak berlangsung diam-diam. Berkas hasil konversi dicatat bersama family, nama sumber, nama output, dan jumlah kelas hasil, sehingga log run merekam yang dimuat secara tepat.
Tata letak yang dibuka
Checkpoint upstream menempatkan bobot di sejumlah lokasi konvensional, dan
konverter mencobanya berurutan hingga menemukan tensor: block EMA di bawah
ema.module atau ema flat, ema_state_dict setelah prefix module. dihapus,
lalu params_ema, params, ema_net, net, model, state_dict, dan
akhirnya objek itu sendiri. Mencoba beberapa kandidat berarti block ema yang
hanya berisi counter tidak menutupi bobot asli di bawahnya.
Prefix wrapper juga dihapus: module. dari pelatihan terdistribusi,
_orig_mod. dari model terkompilasi, dan nesting model.model. yang ditambahkan
beberapa redistribusi.
Yang dibaca dan sumbernya
Ukuran, task, dan jumlah kelas berasal dari tensor, bukan nama berkas. Karena itu,
checkpoint hasil fine-tuning dikonversi dengan jumlah kelas sendiri, bukan
default arsitektur. Nama kelas diambil dari metadata checkpoint jika ada, dari
block args atau hyper_parameters jika berada di sana, lalu dipangkas hingga
jumlah kelas terdeteksi agar hasil fine-tuning yang mempertahankan kumpulan label
dasar tidak membawa indeks yang sudah tidak dimiliki head.
Task padat ditangani secara eksplisit, bukan diberi label buatan. Checkpoint depth
mendapat satu kelas bernama depth, checkpoint restore satu kelas bernama
image. Checkpoint pose harus menghasilkan jumlah keypoint, baik dari tensor
maupun family; jika keduanya tidak menghasilkan nilai, konversi ditolak
alih-alih menulis berkas tidak lengkap.
RF-DETR memiliki recognizer sendiri karena deteksi ukuran memerlukan seluruh checkpoint dan head-nya memiliki 91 output ketika LibreYOLO menggunakan konvensi COCO 80 kelas. Checkpoint dinormalisasi menjadi 80 kelas ketika memiliki tepat 80 nama, menyatakan jumlah kelas 80, menamai COCO sebagai dataset, atau sama sekali tidak memiliki metadata kelas maupun dataset. Model 90 kelas asli yang diidentifikasi berdasarkan nama, jumlah eksplisit selain 80, atau petunjuk dataset non-COCO dipertahankan sebagaimana adanya.
Lokasi berkas hasil konversi
Output ditulis di samping sumber dengan nama berdasarkan sumber:
<source stem>-<FilenamePrefix><size>[-<task suffix>].ptDetektor YOLOv9 tiny yang disimpan sebagai upstream-checkpoint.pth menjadi
upstream-checkpoint-LibreYOLO9t.pt. Penamaan berdasarkan sumber berarti dua
hasil fine-tuning dari family dan ukuran sama dalam satu direktori tidak saling
menimpa dan tidak bertabrakan dengan checkpoint resmi. Berkas ditulis ulang pada
setiap pemuatan agar tidak pernah tertinggal dari sumber. Jika direktori
read-only, berkas hasil konversi masuk ke direktori sementara privat baru dan log
menyatakan lokasinya.
Setelah itu, berkas menjadi checkpoint LibreYOLO biasa: dimuat melalui jalur
metadata, dan libreyolo metadata melaporkannya valid.
Kasus yang memerlukan penanganan manual
Dua family berada di luar recognizer generik. Family gaze dikecualikan sepenuhnya: hanya mendukung inferensi dan bobot rilisnya memiliki batasan distribusi ulang. RF-DETR dikecualikan karena memiliki recognizer khusus yang dijelaskan di atas, dan recognizer itulah yang menanganinya.
Checkpoint PIDNet upstream mentah ditolak, dengan error yang menunjuk ke
weights/convert_pidnet_weights.py. Script tersebut menulis metadata semantic
Cityscapes yang diperlukan checkpoint.
D-FINE dan DEIM berbagi kunci arsitektur yang sama, sehingga tensor saja tidak
dapat membedakannya. Ketika keduanya mengklaim berkas dan tidak ada sibling family
dengan marker pembeda, nama berkas menentukan: nama berbentuk
dfine_hgnetv2_n_coco.pth atau deim_hgnetv2_n_coco.pth menyelesaikannya,
sedangkan nama tanpa petunjuk ditolak dengan penjelasan, bukan ditebak. Membuat
LibreDFINE atau LibreDEIM secara langsung juga menyelesaikannya.
Jika beberapa family secara sah mengklaim satu berkas, subclass mengalahkan base kelas yang disempurnakannya, dan urutan registry menentukan sisanya karena urutan tersebut mengenkode spesifisitas pemeriksaan setiap family. Nama berkas hanya diperiksa untuk tie D-FINE dan DEIM, sehingga nama berkas tidak pernah dapat mempromosikan kecocokan luas di atas kecocokan tepat.
Konverter berbasis script
Repositori memiliki script konversi per family di bawah weights/, ditambah
helper bersama untuk plumbing berulang. Script menjadi jalur bagi berkas yang
ditolak runtime, untuk menghasilkan checkpoint sebelum waktu pemuatan, serta
bagi family yang metadata-nya harus diberikan, bukan disimpulkan dari tensor.
Script tersebut merupakan bagian repositori, bukan paket terinstal, sehingga penggunaannya memerlukan clone:
git clone https://github.com/LibreYOLO/libreyolo.git
cd libreyolo
python weights/convert_pidnet_weights.py --helpSetiap script menulis checkpoint yang memenuhi skema v1.0, yaitu standar sama yang dipenuhi konversi otomatis dan bobot terbitan. Lihat checkpoint dan bobot untuk isi skema tersebut.