RTMDet
RTMDet adalah detektor satu tahap yang memprediksi dari satu prior berbasis titik per lokasi grid, tanpa anchor, melalui head yang konvolusinya dipakai bersama pada berbagai level feature. LibreYOLO mendukungnya untuk deteksi dan segmentasi instance RTMDet-Ins.
- Task
- detection, instance segmentation
- Ukuran
- t, s, m, l, x at 640 px
- Instalasi
pip install libreyolo- Tier dukungan
- Didukung, sejak v. Model pendukung yang dapat dilatih: CI dijaga tetap lulus, fitur ditambahkan saat ada kesempatan.
- Lisensi
- Kode Apache-2.0, bobot Apache-2.0. Penggunaan komersial
Instalasi
RTMDet tidak memerlukan komponen tambahan selain paket dasar.
pip install libreyoloPrediksi
Bobot diunduh dari Hugging Face saat pertama kali digunakan dan disimpan dalam cache lokal.
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreRTMDets.pt")result = model(SAMPLE_IMAGE, save=True) for box in result.boxes: print(box.cls, box.conf, box.xyxy)libreyolo predict model=LibreRTMDets.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=Truefrom libreyolo import LibreYOLO, SAMPLE_IMAGE # Sufiks -seg dalam nama berkas memilih head mask RTMDet-Ins,# sehingga argumen task tidak diperlukan di sini.model = LibreYOLO("LibreRTMDets-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 hanya memerlukan perubahan satu baris. Nama berkas -seg menentukan task
RTMDet-Ins dengan sendirinya, kemudian result.masks menyimpan mask instance di samping
kotak. conf menetapkan ambang batas confidence dan iou menetapkan ambang NMS.
Lihat prediksi untuk sumber, streaming, dan penanganan hasil.
Varian
Lima ukuran, dari t hingga x, memakai satu arsitektur pada resolusi input yang sama.
Family ini tidak memiliki tabel benchmark di sini: bandingkan ukuran melalui ukuran berkas
checkpoint pada tabel di bawah.
Pelatihan
from libreyolo import LibreYOLO model = LibreYOLO("LibreRTMDets.pt")model.train( data="my-dataset.yaml", epochs=300, imgsz=640, batch=16, lr0=0.004,)libreyolo train model=LibreRTMDets.pt data=my-dataset.yaml imgsz=640 epochs=300 batch=16 lr0=0.004Deteksi dilatih melalui train(). Komponen QualityFocalLoss, GIoU, dan
DynamicSoftLabelAssigner di-porting dari mmdetection upstream. Forward pass dan ekspor
ONNX setara hingga tingkat bit dengannya, sedangkan pascapemrosesan cocok dengan output
mmdet dalam selisih 0.001 mAP pada subset val2017.
Hal yang belum diperiksa, sesuai docstring train() sendiri: konvergensi fine-tuning
dataset kecil, kesetaraan makalah dari nol, perilaku multi-GPU, throughput Mosaic dan MixUp
dengan cache, peralihan pipeline dua tahap upstream yang ketat, serta override weight decay
per parameter yang membuat decay nol pada parameter norm dan bias.
RTMDet-Ins tidak memiliki jalur pelatihan. Memanggil train() pada checkpoint -seg,
atau dengan task="segment", akan memunculkan NotImplementedError; segmentasi instance
hanya mendukung inferensi dan validasi.
train() juga menerima argumen pretrained, tetapi nilainya tidak pernah dibaca di dalam
metode: pelatihan selalu berlanjut dari bobot yang dipakai saat model dibuat, sehingga
pretrained=False tidak menginisialisasi ulang jaringan.
Jika pengaturan lain dibiarkan, pelatih berjalan selama 300 epoch dengan AdamW pada
lr0=0.004 dan weight_decay=0.05, warmup 1 epoch pada jadwal kosinus, serta Mosaic dan
MixUp yang dinonaktifkan selama 20 epoch terakhir.
Lihat pelatihan untuk dataset, augmentasi, multi-GPU, dan logger.
Validasi
val() mengembalikan dictionary dengan key metrics/ yang mencakup presisi, recall,
mAP 50, dan mAP 50-95, yang diukur terhadap dataset apa pun dalam format yang digunakan
untuk pelatihan.
from libreyolo import LibreYOLO model = LibreYOLO("LibreRTMDets.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])libreyolo val model=LibreRTMDets.pt data=my-dataset.yamlfrom libreyolo import LibreYOLO model = LibreYOLO("LibreRTMDets-seg.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95(M)"]) # maskprint(metrics["metrics/mAP50-95(B)"]) # kotakUntuk checkpoint -seg, key biasa metrics/mAP50-95 menyimpan skor mask. Proses yang
sama juga melaporkan kotak pada (B) dan mask pada (M), sehingga keduanya tersedia
dari satu tahap.
Ekspor
| Task | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Detection | Detection to ONNX: didukung | Detection to TorchScript: didukung | Detection to ExecuTorch: didukung | Detection to TensorRT: didukung | Detection to OpenVINO: didukung | Detection to Paddle: tidak didukung | Detection to MNN: tidak didukung | Detection to RKNN: tidak didukung | Detection to ncnn: tidak didukung | Detection to TFLite: tidak didukung | Detection to CoreML: tidak didukung | Detection to Core AI: didukung |
| Instance segmentation | Instance segmentation to ONNX: tidak didukung | Instance segmentation to TorchScript: tidak didukung | Instance segmentation to ExecuTorch: tidak didukung | Instance segmentation to TensorRT: tidak didukung | Instance segmentation to OpenVINO: tidak didukung | Instance segmentation to Paddle: tidak didukung | Instance segmentation to MNN: tidak didukung | Instance segmentation to RKNN: tidak didukung | Instance segmentation to ncnn: tidak didukung | Instance segmentation to TFLite: tidak didukung | Instance segmentation to CoreML: tidak didukung | Instance segmentation to Core AI: tidak didukung |
Deteksi dapat diekspor ke sebagian besar format; segmentasi instance saat ini tidak dapat
diekspor ke format mana pun. Matriks di atas mencerminkan perbedaan itu. Artefak deteksi
hasil ekspor dimuat kembali melalui LibreYOLO() berdasarkan sufiks berkasnya, sehingga
berkas .onnx atau .engine berperilaku seperti checkpoint dan mengembalikan Results
yang sama. Menjalankan graph pada runtime mandiri tanpa memasang LibreYOLO juga didukung,
tetapi prapemrosesan dan pascapemrosesannya harus ditulis sendiri.
from libreyolo import LibreYOLO model = LibreYOLO("LibreRTMDets.pt")model.export(format="onnx", imgsz=640)model.export(format="tensorrt", imgsz=640, half=True)libreyolo export model=LibreRTMDets.pt format=onnx imgsz=640libreyolo export model=LibreRTMDets.pt format=tensorrt imgsz=640 half=Truefrom libreyolo import LibreYOLO, SAMPLE_IMAGE # Factory merutekan berdasarkan sufiks berkas, sehingga artefak hasil ekspor# dimuat seperti checkpoint lain dan mengembalikan objek Results yang sama.model = LibreYOLO("LibreRTMDets.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)Checkpoint
Setiap berkas bobot yang dipublikasikan untuk family ini.
| Berkas | Input (piksel) | Lisensi bobot |
|---|---|---|
| Detection | ||
| LibreRTMDett.pt | 640 | apache-2.0 |
| LibreRTMDets.pt | 640 | apache-2.0 |
| LibreRTMDetm.pt | 640 | apache-2.0 |
| LibreRTMDetl.pt | 640 | apache-2.0 |
| LibreRTMDetx.pt | 640 | apache-2.0 |
| Instance segmentation | ||
| LibreRTMDett-seg.pt | 640 | apache-2.0 |
| LibreRTMDets-seg.pt | 640 | apache-2.0 |
| LibreRTMDetm-seg.pt | 640 | apache-2.0 |
| LibreRTMDetl-seg.pt | 640 | apache-2.0 |
| LibreRTMDetx-seg.pt | 640 | apache-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
- RTMDet, OpenMMLab
- Lisensi upstream
- Apache-2.0
- Sumber upstream
- github.com/open-mmlab/mmdetection
- 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 published RTMDet and RTMDet-Ins checkpoints are converted from mmdetection's own COCO weights, trained by OpenMMLab under the same license.
Sitasi
@misc{lyu2022rtmdet,
title={RTMDet: An Empirical Study of Designing Real-Time Object Detectors},
author={Chengqi Lyu and Wenwei Zhang and Haian Huang and Yue Zhou and Yudong Wang and Yanyi Liu and Shilong Zhang and Kai Chen},
year={2022},
eprint={2212.07784},
archivePrefix={arXiv},
primaryClass={cs.CV}
}Disalin dari blok sitasi penulis di github.com/open-mmlab/mmdetection/tree/main/configs/rtmdet#citation.