Deteksi objek di LibreYOLO
Deteksi objek menemukan setiap contoh objek dalam gambar dan mengembalikan persegi panjang yang sejajar dengan sumbu, label kelas, dan skor untuk masing-masing. Kunci task adalah detect.
Definisi
Deteksi objek menjawab di mana setiap objek berada dan apa itu. Satu gambar masuk, satu baris per instance keluar: empat angka untuk persegi panjang, indeks kelas dan sebuah . Tidak ada informasi tentang bentuk piksel, orientasi, atau bagian yang disertakan, yang menjadi pembeda dari instance segmentation, kotak berorientasi dan pose.
detect adalah kunci task kanonik dan default: sebuah checkpoint yang nama filenya
tidak memiliki akhiran task dimuat sebagai detektor.
predict() mengisi result.boxes. .xyxy memberikan sudut piksel pada
kanvas gambar asli, .conf skor, dan .cls indeks kelas ke dalam
result.names. .xywh, .xyxyn dan .xywhn adalah tampilan turunan dari
baris yang sama, dan .id membawa id pelacak setelah pelacak dipasang. Iterasi
sebuah objek Boxes menghasilkan irisan satu baris, jadi box.cls, box.conf dan
box.xyxy semuanya berfungsi per deteksi.
Model
Dua belas keluarga baik melatih maupun memprediksi: YOLOv9,
RF-DETR, EdgeCrafter,
RT-DETR, D-FINE,
DEIM, Dome-DETR,
YOLO-NAS,
YOLOX, YOLOv7,
RTMDet dan PicoDet. YOLOv9 dan
RF-DETR adalah dua keluarga unggulan, dan fitur-fitur mendarat pada mereka terlebih dahulu. RF-DETR
membutuhkan tambahan sendiri, pip install "libreyolo[rfdetr]"; sisanya berjalan pada
paket dasar.
Sebelas lagi memprediksi, memvalidasi dan mengekspor, tetapi train() mereka naik
NotImplementedError: LW-DETR,
DETR, DETR yang dapat berubah bentuk,
DINO-DETR, Faster R-CNN,
Mask R-CNN, FCOS,
RetinaNet, SSD,
CenterNet dan
EfficientDet.
Garis keturunan Darknet, YOLOv1, YOLOv2, YOLOv3 dan YOLOv4, disimpan sebagai pameran beku: prediksi, validasi dan ekspor pekerjaan, pelatihan tidak.
Sebuah kelompok terpisah mengambil daftar kelasnya saat runtime daripada dari checkpoint, jadi mendeteksi nama yang belum pernah terlihat dalam pelatihan: Grounding DINO, OWLv2, OMDet-Turbo dan OV-DEIM, ditambah keluarga vision-language Florence-2, Kosmos-2, Qwen3-VL, SmolVLM2, InternVL3, LFM2-VL, LocateAnything, SenseNova-Vision dan LibreMODUS. Ini dimuat melalui pabrikannya sendiri dan tambahan; setiap halaman model membawa panggilan yang tepat.
Prediksi
Bobot diunduh dari Hugging Face saat penggunaan pertama dan disimpan secara lokal.
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreYOLO9t.pt")result = model(SAMPLE_IMAGE, save=True) for box in result.boxes: print(result.names[int(box.cls)], float(box.conf), box.xyxy)libreyolo predict model=LibreYOLO9t.pt save=True \ source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpgfrom libreyolo import LibreYOLO, SAMPLE_IMAGE # Pabrik merutekan di checkpoint, dan setiap pendeteksi mengembalikan# objek Results yang sama, sehingga mengganti family hanya butuh satu baris perubahan.model = LibreYOLO("LibreDFINEn.pt")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy.shape)from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO9t.pt") # Sumber apa pun yang diterima perpustakaan: berkas, folder, URL, indeks webcam,# aliran RTSP, atau daftar .streams.for result in model.predict("clip.mp4", stream=True, save=True): print(len(result.boxes))conf mengatur ambang kepercayaan dan max_det membatasi jumlah baris.
iou adalah ambang NMS, sehingga hanya berpengaruh pada family yang menjalankan NMS;
RF-DETR dan YOLOv9 head ujung ke ujung mendekodekan satu set prediksi tetap dan
abaikan itu. Lihat prediksi untuk sumber, streaming, dan hasil
penanganan.
Format dataset
Satu berkas label .txt per gambar, ditemukan dengan menukar images dengan labels di
jalur gambar dan mengubah ekstensi.
dataset/
data.yaml
images/
train/000001.jpg
val/000101.jpg
labels/
train/000001.txt
val/000101.txtSetiap baris terdiri dari tepat lima kolom, sebuah indeks kelas diikuti oleh sebuah nilai yang dinormalisasi kotak-tengah-dan-ukuran:
<class_id> <cx> <cy> <w> <h>Koordinat adalah bilangan desimal di [0, 1], relatif terhadap lebar gambar asli dan
tinggi. w dan h harus positif. Berkas label yang hilang atau kosong berarti
Gambar tidak memiliki objek. Baris tidak membawa kepercayaan dan tidak ada ID jalur.
YAML menamai pembagian dan kelas-kelasnya:
path: dataset
train: images/train
val: images/val
names:
0: person
1: bicycletrain dan val mungkin adalah direktori gambar, berkas daftar-gambar .txt, atau daftar
dari keduanya. nc bersifat opsional dan harus cocok dengan names jika ada. Native COCO
JSON juga berfungsi: tambahkan pemetaan annotations dari nama split ke berkas JSON, dan
jalur yang terpisah kemudian memberikan akar gambar. Ketika names ada, itu menentukan
ID label, jadi nama kategori JSON harus cocok dengannya.
Kereta
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO9t.pt") # coco128.yaml mengunduh sampel 128 gambar pada penggunaan pertama. Arahkan data# ke YAML dataset Anda sendiri untuk menjalankan yang sesungguhnya.model.train(data="coco128.yaml", epochs=50, imgsz=640, batch=8)libreyolo train model=LibreYOLO9t.pt data=coco128.yaml \ epochs=50 imgsz=640 batch=8libreyolo train model=LibreYOLO9t.pt data=coco128.yaml \ epochs=50 device=0,1 batch=-1epochs, imgsz, batch dan lr0 adalah argumen yang bergerak terlebih dahulu. lr0 adalah
yang tidak terbawa antar keluarga: sebuah laju detektor konvolusional
tolerates akan menyimpang dari satu transformer, jadi ambil nilai dari halaman model
daripada dari contoh family lainnya. family juga dapat mengabaikan sebuah argumen
secara langsung, dan halamannya mencantumkan yang mana. Lihat pelatihan untuk set data,
augmentasi, multi-GPU, dan pencatat.
Validasi
val() mengembalikan kamus biasa dari kunci metrics/, dihitung dengan COCO
evaluasi atas pembagian yang dinamai oleh val dalam YAML dataset.
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO9t.pt") # val() mengembalikan dict biasa, bukan objek.metrics = model.val(data="coco128.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"], metrics["metrics/mAP75"])print(metrics["metrics/AR100"])libreyolo val model=LibreYOLO9t.pt data=coco128.yamlmetrics/mAP50-95 adalah rata-rata presisi yang dihitung rata-rata atas ambang IoU 0,50
hingga 0,95, dan ini adalah angka utama. metrics/mAP50 dan metrics/mAP75 adalah
versi ambang tunggal. metrics/mAP_small, metrics/mAP_medium dan
metrics/mAP_large membagi rata-rata yang sama berdasarkan area objek, dan metrics/AR1,
metrics/AR10, metrics/AR100, metrics/AR_small, metrics/AR_medium dan
metrics/AR_large adalah angka rata-rata yang cocok-recall.
metrics/AR_max_det dan metrics/max_det mencatat batas deteksi yang digunakan oleh
.
Bacalah metrics/precision dan metrics/recall dengan teliti pada task ini. Mereka
disimpan untuk kompatibilitas mundur dan adalah alias, bukan titik operasi:
metrics/precision memegang nilai yang sama seperti metrics/mAP50-95, dan
metrics/recall memiliki nilai yang sama seperti metrics/AR100. Memplotnya sebagai
pasangan presisi-recall melaporkan satu angka dua kali. Empat kunci juga diulang di bawah
akhiran (B), untuk kotak, sehingga sebuah kunci deteksi terbaca sama pada sebuah model yang
juga memprediksi mask: metrics/mAP50-95(B), metrics/mAP50(B),
metrics/precision(B) dan metrics/recall(B).
Ekspor
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO9t.pt")model.export(format="onnx", imgsz=640)libreyolo export model=LibreYOLO9t.pt format=onnx imgsz=640from libreyolo import LibreYOLO, SAMPLE_IMAGE # Pabrik memproses berdasarkan akhiran berkas, jadi artefak yang diekspor dimuat# seperti checkpoint dan mengembalikan objek Results yang sama.model = LibreYOLO("LibreYOLO9t.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)Sebuah artefak yang diekspor dimuat kembali melalui LibreYOLO() pada akhiran berkas-nya, jadi sebuah
Berkas .onnx atau .engine berperilaku seperti checkpoint dan mengembalikan hal yang sama
Results. Cakupan format berbeda menurut family; matriks pada setiap halaman model adalah
dihasilkan dari set yang tervalidasi daripada diketik dengan tangan. Lihat
ekspor dan deploy untuk format, tambahannya, dan mereka]
batasan.