DEIM

Detection transformer yang dilatih dengan dense one-to-one matching, dan konvergen dalam epoch jauh lebih sedikit dibanding resep DETR yang mendasarinya. LibreYOLO menyediakan dua versinya, dibedakan lewat checkpoint yang dimuat.

Task
detection
Ukuran
deim: n, s, m, l, x at 640 px
Instalasi
pip install libreyolo
Tier dukungan
Inti, sejak v1.2.0. Detektor inti yang dapat dilatih: fitur menyusul tier unggulan dalam gelombang rilis yang sama.
Proyek upstream
DEIM and DEIMv2 oleh Intellindust AI Lab, Apache-2.0; the DEIMv2 DINOv3 backbone adds Meta's DINOv3 License. Makalah, sumber
Lisensi
Kode Apache-2.0, bobot Apache-2.0; the DEIMv2 DINOv3 backbone adds Meta's DINOv3 License. Penggunaan komersial

Instalasi

Tidak ada versi yang memerlukan extra opsional. Semua yang diimpor keduanya sudah tersedia di instalasi dasar.

bash
pip install libreyolo

Fine-tuning adapter dengan lora=True adalah pengecualiannya, dan memerlukan extra lora.

bash
pip install "libreyolo[lora]"

Prediksi

Bobot diunduh dari Hugging Face saat pertama kali dipakai lalu disimpan di cache lokal.

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreDEIMn.pt")result = model(SAMPLE_IMAGE, save=True) for box in result.boxes:    print(box.cls, box.conf, box.xyxy)
CLI
libreyolo predict model=LibreDEIMn.pt save=True \  source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg
Video
from libreyolo import LibreYOLO # Versinya menjadi bagian dari nama berkas, dan factory-nya memilih# berdasarkan checkpoint, jadi keduanya dimuat dengan cara yang sama.model = LibreYOLO("LibreDEIMv2pico.pt") # Source apa pun yang diterima library: berkas, folder, URL, indeks# webcam, stream RTSP, atau daftar .streamsfor result in model.predict("clip.mp4", stream=True, save=True):    print(len(result.boxes))

Objek Results yang dikembalikan sama dengan yang dikembalikan setiap family, jadi mengganti detektor dengan yang lain hanya butuh perubahan satu baris. conf dan max_det menyaring decode top-k atas query dan kelas; tidak ada langkah NMS yang perlu disetel, dan iou tetap diterima tetapi tidak dipakai. Lihat prediksi untuk source, streaming dan penanganan hasil.

Varian

Versi 1 hadir dengan lima ukuran, semuanya pada ukuran input yang sama. Versi 2 mempertahankan kelima nama itu dan menambahkan tiga ukuran yang lebih kecil, atto, femto dan pico, dan dua yang pertama native pada ukuran input yang lebih rendah daripada sisanya. Karena itu lima kode ukuran ada di kedua versi dan menamai model yang berbeda; versinya ditulis ke dalam nama berkas checkpoint.

CheckpointInput (piksel)mAP 50-95Parameter (juta)
LibreDEIMl64057.831.24
LibreDEIMm64055.419.59
LibreDEIMn64046.83.78
LibreDEIMs64052.110.32
LibreDEIMx64059.662.62
LibreDEIMv2atto32027.50.51
LibreDEIMv2femto41634.50.98
LibreDEIMv2l64058.632.55
LibreDEIMv2m64056.018.36
LibreDEIMv2n64046.73.6
LibreDEIMv2pico64042.21.54
LibreDEIMv2s64053.09.78
LibreDEIMv2x64061.351.21

COCO val2017, 500 images. Diukur oleh perangkat benchmark LibreYOLO dan dipublikasikan di Vision Analysis, tempat latensi pada berbagai hardware dan runtime dibandingkan serta rekaman lengkap setiap pengujian tersedia.

Versi 1 mempertahankan arsitektur D-FINE dan mengganti objective klasifikasinya dengan loss matchability-aware dari resep dense one-to-one, sehingga kedua family berbagi hampir semua key state dict dan dibedakan lewat metadata di dalam checkpoint. Versi 2 mempertahankan kontrak pelatihan itu dan mencampur backbone: HGNetv2 di bawah s, dan vision transformer DINOv3 dengan adapter spatial tuning pada s ke atas. Backbone itulah yang menempelkan lisensi kedua pada keempat checkpoint tersebut, jadi baca lisensi sebelum menerapkan salah satunya ke produksi.

Pelatihan

Pelatihan dimulai dari checkpoint yang sudah dipublikasikan. pretrained tidak pernah sampai ke trainer: versi 1 memperingatkan bahwa key itu tidak dikenal lalu mengabaikannya, versi 2 menghapusnya. Keduanya tidak memberi model dengan inisialisasi acak.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreDEIMn.pt") # coco128.yaml mengunduh sampel 128 gambar saat pertama kali dipakai.# Arahkan `data` ke YAML dataset Anda sendiri untuk pelatihan sungguhan.model.train(data="coco128.yaml", epochs=50, batch=8, lr0=1e-4)
CLI
libreyolo train model=LibreDEIMn.pt data=coco128.yaml \  epochs=50 batch=8 lr0=1e-4
DEIMv2
from libreyolo import LibreYOLO # Bila dibiarkan kosong, epochs, batch, imgsz dan lr0 diambil dari# resep rilis untuk ukuran yang dimuat.model = LibreYOLO("LibreDEIMv2pico.pt")model.train(data="coco128.yaml", epochs=50)
LoRA
# Butuh extra lora: pip install "libreyolo[lora]"from libreyolo import LibreYOLO model = LibreYOLO("LibreDEIMn.pt")model.train(data="coco128.yaml", epochs=50, lora=True)
Multi-GPU
libreyolo train model=LibreDEIMn.pt data=coco128.yaml \  epochs=50 device=0,1

Berikan lr0 sendiri pada versi 1. Signature train() Python-nya memakai default 4e-4, yaitu laju dari resep COCO yang dipublikasikan, sementara config pelatihan family ini memuat 1e-4 sebagai default fine-tune-nya, dan nilai yang lebih rendah itulah yang dipakai CLI ketika argumennya tidak diberikan. Config itu mencatat pengukuran di baliknya: pada ukuran batch yang benar-benar dipakai saat fine-tuning, pada dataset kecil, laju COCO menurunkan kualitas transfer secara terukur.

Versi 2 menentukan default itu sendiri. Membiarkan epochs, batch, imgsz dan lr0 tidak diisi membuatnya membaca masing-masing dari resep rilis untuk ukuran yang dimuat, sehingga ukuran yang kecil dilatih pada resolusi input masing-masing tanpa perlu diberi tahu, dan nilai yang Anda berikan menimpa resep tersebut. imgsz adalah argumen yang dibatasinya: nilainya harus kelipatan positif dari 32, dan jika tidak, versi 2 memunculkan error sebelum run dimulai.

Lihat pelatihan untuk dataset, augmentasi, multi-GPU dan logger.

Validasi

val() mengembalikan dictionary berisi key metrics/ yang mencakup presisi, recall, mAP 50 dan mAP 50-95, diukur terhadap dataset apa pun dalam format yang dipakai saat pelatihan.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreDEIMn.pt") # val() mengembalikan dict biasa, bukan objekmetrics = model.val(data="coco128.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])print(metrics["metrics/precision"], metrics["metrics/recall"])
CLI
libreyolo val model=LibreDEIMn.pt data=coco128.yaml
Terhadap COCO
# coco-val-only.yaml mengambil 5000 gambar val2017 dan melewati set# pelatihan. Di dalamnya ada skrip unduhan tertanam, jadi butuh izin# eksplisit kecuali datasetnya sudah tersedia secara lokal.libreyolo val model=LibreDEIMn.pt data=coco-val-only.yaml \  allow_download_scripts=True

Baris pada tabel benchmark di atas berasal dari harness benchmark LibreYOLO; catatan di bawah tabel itu mencatat dataset mana yang menghasilkannya dan menautkan catatan run-nya.

Ekspor

TaskONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
DetectionDetection to ONNX: didukungDetection to TorchScript: didukungDetection to ExecuTorch: tidak didukungDetection to TensorRT: didukungDetection to OpenVINO: didukungDetection to Paddle: didukungDetection to MNN: didukungDetection to RKNN: tidak didukungDetection to ncnn: tidak didukungDetection to TFLite: tidak didukungDetection to CoreML: tidak didukungDetection to Core AI: didukung

Matriks ini mencakup kedua versi dalam satu halaman: bila keduanya berbeda soal suatu format, selnya menampilkan yang lebih lemah di antara keduanya, sehingga tidak ada yang dilebih-lebihkan untuk versi mana pun yang dimuat.

Artefak hasil ekspor dimuat kembali lewat LibreYOLO() berdasarkan sufiks berkasnya, jadi berkas .onnx atau .engine berperilaku seperti checkpoint dan mengembalikan Results yang sama.

Python
# Butuh extra onnx: pip install "libreyolo[onnx]"from libreyolo import LibreYOLO model = LibreYOLO("LibreDEIMn.pt")path = model.export(format="onnx")print(path)
CLI
libreyolo export model=LibreDEIMn.pt format=onnx
Memakai berkas hasil ekspor
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Factory-nya memilih berdasarkan sufiks berkas, jadi artefak hasil# ekspor dimuat seperti checkpoint biasa dan mengembalikan objek# Results yang sama.model = LibreYOLO("LibreDEIMn.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)

Checkpoint

Semua berkas bobot yang dipublikasikan untuk family ini.

BerkasInput (piksel)Lisensi bobot
Detection
LibreDEIMn.pt640apache-2.0
LibreDEIMs.pt640apache-2.0
LibreDEIMm.pt640apache-2.0
LibreDEIMl.pt640apache-2.0
LibreDEIMx.pt640apache-2.0
LibreDEIMv2n.pt640apache-2.0
LibreDEIMv2s.pt640other
LibreDEIMv2m.pt640other
LibreDEIMv2l.pt640other
LibreDEIMv2x.pt640other
LibreDEIMv2atto.ptapache-2.0
LibreDEIMv2femto.ptapache-2.0
LibreDEIMv2pico.ptapache-2.0

Setiap berkas di atas saat ini tersedia di organisasi LibreYOLO dan diunduh saat pertama kali digunakan.

Lisensi

Periksa lisensi di repositori Hugging Face untuk bobot tertentu yang diunduh. Setiap checkpoint di organisasi LibreYOLO memiliki lisensi, dan lisensinya tidak selalu sama dalam satu family. Repositori tersebut adalah sumber resmi. Ringkasan di bawah menjelaskan ketentuan yang berlaku saat halaman ini terakhir diverifikasi.

Ini adalah deskripsi lisensi yang terlibat, bukan nasihat hukum. Jika jawabannya penting secara komersial, baca sendiri lisensinya dan mintalah nasihat dari penasihat hukum Anda.

Karya asli
DEIM and DEIMv2, Intellindust AI Lab
Lisensi upstream
Apache-2.0; the DEIMv2 DINOv3 backbone adds Meta's DINOv3 License
Kode LibreYOLO
MIT
Bobot
Apache-2.0; the DEIMv2 DINOv3 backbone adds Meta's DINOv3 License, dipublikasikan ulang di huggingface.co/LibreYOLO
Interpretasi
Apache-2.0 is a permissive license, so these weights can be used in commercial and closed-source products. It asks you to keep its license text and attribution notices with any copy of the weights you redistribute, and it grants a patent license. It places no obligation on your own application code, and weights you train yourself on your own data are yours. DEIM is Apache-2.0 throughout, and so are the DEIMv2 sizes below S, which use an HGNetv2 backbone. The DEIMv2 S, M, L and X sizes take their backbone from DINOv3, so both their weights and the backbone source vendored in LibreYOLO are additionally governed by Meta's DINOv3 License Agreement, which is not an OSI license: redistribution has to carry the agreement with it, and it forbids use for military or warfare purposes, weapons development, espionage, nuclear industries and anything subject to ITAR. Their Hugging Face repositories declare both licenses, and DEIMv2 is also cited separately (arXiv 2509.20787).
Empat ukuran DEIMv2 dari S ke atas mengambil backbone-nya dari DINOv3, sehingga repositori bobotnya membawa Apache-2.0 sekaligus DINOv3 License milik Meta, dan LibreYOLO menyertakan source backbone DINOv3 di bawah perjanjian yang sama. Sisa family ini, termasuk setiap ukuran DEIMv2 di bawah S, hanya Apache-2.0.

Sitasi

@misc{huang2024deim,
      title={DEIM: DETR with Improved Matching for Fast Convergence},
      author={Shihua, Huang and Zhichao, Lu and Xiaodong, Cun and Yongjun, Yu and Xiao, Zhou and Xi, Shen},
      booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition},
      year={2025},
}

Disalin dari blok sitasi penulis di github.com/Intellindust-AI-Lab/DEIM#5-citation.

DEIMv2 adalah paper terpisah dan punya blok sitasi sendiri di github.com/Intellindust-AI-Lab/DEIMv2; kutip yang itu jika Anda memakai checkpoint versi 2.

Diverifikasi dengan LibreYOLO v1.5.0. Tabel dukungan, checkpoint, dan angka benchmark di halaman ini dihasilkan dari library yang telah dirilis dan bobot yang dipublikasikan, bukan ditulis manual.