D-FINE

Detection transformer yang merumuskan ulang regresi box sebagai distribusi probabilitas atas setiap sisi box, lalu menyempurnakannya di sepanjang lapisan decoder. LibreYOLO mendukungnya untuk deteksi dan segmentasi instance.

Task
detection, instance segmentation
Ukuran
n, s, m, l, x at 640 px
Instalasi
pip install libreyolo
Tier dukungan
Inti, sejak v1.1.0. Detektor inti yang dapat dilatih: fitur menyusul tier unggulan dalam gelombang rilis yang sama.
Proyek upstream
D-FINE oleh University of Science and Technology of China, Apache-2.0. Makalah, sumber
Lisensi
Kode Apache-2.0, bobot Apache-2.0. Penggunaan komersial

Instalasi

D-FINE tidak memerlukan extra opsional. Semua yang diimpornya sudah ada di instalasi dasar.

bash
pip install libreyolo

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

bash
pip install "libreyolo[lora]"

Prediksi

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

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreDFINEn.pt")result = model(SAMPLE_IMAGE, save=True) for box in result.boxes:    print(box.cls, box.conf, box.xyxy)
CLI
libreyolo predict model=LibreDFINEn.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=True
Segmentasi instance
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Sufiks -seg pada nama berkas memilih mask head, jadi argumen task# tidak diperlukan di sini.model = LibreYOLO("LibreDFINEn-seg.pt")result = model(SAMPLE_IMAGE, save=True) print(result.masks.data.shape)

Objek Results yang dikembalikan sama dengan yang dikembalikan setiap family, jadi mengganti detektor cukup lewat perubahan satu baris. Nama berkas dengan -seg mengarah ke task segmentasi dengan sendirinya, dan result.masks lalu membawa mask instance berdampingan dengan box. conf dan max_det menyaring pemilihan query; iou diterima demi keseragaman API tetapi tidak berpengaruh, karena decoder-nya adalah set predictor tanpa langkah NMS. Lihat prediksi untuk sumber, streaming dan penanganan hasil.

Varian

Lima ukuran. Semuanya berjalan pada resolusi input yang sama, jadi tabel membedakannya lewat jumlah parameter dan akurasi.

CheckpointInput (piksel)mAP 50-95Parameter (juta)
LibreDFINEl64060.031.24
LibreDFINEm64057.819.59
LibreDFINEn64045.83.78
LibreDFINEs64053.410.32
LibreDFINEx64061.462.62

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.

Segmentasi memakai ulang backbone, encoder dan decoder deteksi lalu menambahkan mask head, jadi checkpoint -seg menerima argumen yang sama dengan saudaranya yang detect. Family RT-DETRv4 di LibreYOLO ditulis sebagai subclass dari wrapper D-FINE: ia mewarisi jalur decoder ini lalu mengunci daftar task-nya kembali ke deteksi, karena tidak membawa mask head.

Pelatihan

Pelatihan dimulai dari checkpoint yang dipublikasikan, untuk kedua task.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreDFINEn.pt")model.train(data="my-dataset.yaml", epochs=50, imgsz=640, batch=8, lr0=2e-4)
CLI
libreyolo train model=LibreDFINEn.pt data=my-dataset.yaml \  epochs=50 imgsz=640 batch=8 lr0=2e-4
Segmentasi instance
# Melanjutkan dari bobot segmentasi yang dipublikasikan, mask head ikut serta.libreyolo train model=LibreDFINEn-seg.pt data=my-dataset.yaml \  task=segment epochs=50 imgsz=640
Segmentasi dari bobot detect
# Bobot detect tidak membawa mask head, jadi ini transfer eksplisit:# head-nya mulai tanpa pelatihan dan baru berguna setelah dilatih.# Meminta task=segment di sini yang mengizinkan transfer tersebut.libreyolo train model=LibreDFINEn.pt data=my-dataset.yaml \  task=segment epochs=50 imgsz=640
LoRA
from libreyolo import LibreYOLO model = LibreYOLO("LibreDFINEn.pt")model.train(data="my-dataset.yaml", epochs=50, lora=True)
Multi-GPU
libreyolo train model=LibreDFINEn.pt data=my-dataset.yaml \  epochs=50 device=0,1 batch=16

Jika dibiarkan dengan nilai bawaan, trainer menjalankan 132 epoch pada lr0=2e-4 dengan amp=False, batch 16 dan early stopping setelah 50 epoch tanpa perbaikan. Bobot detect adalah titik awal yang sah untuk pelatihan segmentasi, tetapi hanya sebagai transfer eksplisit, karena mask head-nya mulai tanpa pelatihan dan kalau tidak akan mengembalikan mask yang tidak bermakna. Memberikan task=segment ke CLI itulah yang mengizinkannya. Jalur Python lebih sempit: LibreDFINE harus dikonstruksi langsung dengan allow_detect_to_segment_transfer=True, karena factory LibreYOLO() tidak menerima argumen semacam itu, dan konstruksi langsung tidak melakukan pengunduhan, jadi berkas bobotnya harus sudah ada di disk.

lora=True berlaku untuk deteksi. Pelatihan segment menolaknya dan mengarahkan ke freeze='backbone', karena mask head belum diuji dengan adapter. Di Apple silicon trainer memindahkan seluruh proses ke CPU: backward pass dari binned matmul pada modul Integral memicu kegagalan kompilasi Metal. Inferensi di MPS tidak terpengaruh.

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

Validasi

val() mengembalikan dictionary dengan kunci berupa nama metrik, dan mencetak hasil per kelas jika verbose dibiarkan aktif.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreDFINEn.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])
CLI
libreyolo val model=LibreDFINEn.pt data=my-dataset.yaml
Segmentasi instance
from libreyolo import LibreYOLO model = LibreYOLO("LibreDFINEn-seg.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95(M)"])   # maskprint(metrics["metrics/mAP50-95(B)"])   # box

Pada checkpoint -seg, kunci metrics/mAP50-95 yang polos berisi skor mask, dan proses yang sama juga melaporkan box di bawah (B) dan mask di bawah (M) sehingga keduanya tersedia dari satu kali jalan.

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
Instance segmentationInstance segmentation to ONNX: didukungInstance segmentation to TorchScript: didukungInstance segmentation to ExecuTorch: tidak didukungInstance segmentation to TensorRT: didukungInstance segmentation to OpenVINO: didukungInstance segmentation to Paddle: tidak didukungInstance segmentation to MNN: tidak didukungInstance segmentation to RKNN: tidak didukungInstance segmentation to ncnn: tidak didukungInstance segmentation to TFLite: tidak didukungInstance segmentation to CoreML: tidak didukungInstance segmentation to Core AI: tidak didukung

Artefak hasil ekspor dimuat kembali lewat LibreYOLO() berdasarkan sufiks berkasnya, jadi berkas .onnx atau .engine berperilaku seperti checkpoint dan mengembalikan Results yang sama. Jalur OpenVINO, Paddle, MNN dan Core AI mengekspor pada kanvas tetap, bukan bentuk dinamis. Ekspor memuat daftar argumen yang diterima setiap format dan tambahan yang dipakai beberapa di antaranya.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreDFINEn.pt")model.export(format="onnx", imgsz=640)model.export(format="tensorrt", imgsz=640, half=True)
CLI
libreyolo export model=LibreDFINEn.pt format=onnx imgsz=640libreyolo export model=LibreDFINEn.pt format=tensorrt imgsz=640 half=True
Memakai berkas hasil ekspor
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Factory memilih rute lewat sufiks berkas, jadi artefak hasil ekspor# dimuat seperti checkpoint biasa dan mengembalikan Results yang sama.model = LibreYOLO("LibreDFINEn.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)

Checkpoint

Semua berkas bobot yang dipublikasikan untuk family ini.

BerkasInput (piksel)Lisensi bobot
Detection
LibreDFINEn.pt640apache-2.0
LibreDFINEs.pt640apache-2.0
LibreDFINEm.pt640apache-2.0
LibreDFINEl.pt640apache-2.0
LibreDFINEx.pt640apache-2.0
Instance segmentation
LibreDFINEn-seg.pt640apache-2.0
LibreDFINEs-seg.pt640apache-2.0
LibreDFINEm-seg.pt640apache-2.0
LibreDFINEl-seg.pt640apache-2.0
LibreDFINEx-seg.pt640apache-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
D-FINE, University of Science and Technology of China
Lisensi upstream
Apache-2.0
Kode LibreYOLO
MIT
Bobot
Apache-2.0, 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. The segmentation weights carry a second Apache-2.0 upstream, ArgoHA/D-FINE-seg, under the same terms.

Bobot segmentasi punya upstream kedua: mask decoder, mask matching dan mask loss-nya berasal dari ArgoHA/D-FINE-seg, juga Apache-2.0, dan maintainer-nya menyetujui penggunaan ulang dengan atribusi.

Sitasi

@misc{peng2024dfine,
      title={D-FINE: Redefine Regression Task in DETRs as Fine-grained Distribution Refinement},
      author={Yansong Peng and Hebei Li and Peixi Wu and Yueyi Zhang and Xiaoyan Sun and Feng Wu},
      year={2024},
      eprint={2410.13842},
      archivePrefix={arXiv},
      primaryClass={cs.CV}
}

Disalin dari blok sitasi penulis di github.com/Peterande/D-FINE#citation.

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.