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.

Python
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)
CLI
libreyolo predict model=LibreYOLO9t.pt save=True \  source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg
family lain, panggilan yang sama
from 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)
Video dan streaming
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.txt

Setiap 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:

yaml
path: dataset
train: images/train
val: images/val
names:
  0: person
  1: bicycle

train 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

Python
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)
CLI
libreyolo train model=LibreYOLO9t.pt data=coco128.yaml \  epochs=50 imgsz=640 batch=8
Multi-GPU
libreyolo train model=LibreYOLO9t.pt data=coco128.yaml \  epochs=50 device=0,1 batch=-1

epochs, 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.

Python
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"])
CLI
libreyolo val model=LibreYOLO9t.pt data=coco128.yaml

metrics/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

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO9t.pt")model.export(format="onnx", imgsz=640)
CLI
libreyolo export model=LibreYOLO9t.pt format=onnx imgsz=640
Gunakan berkas yang diekspor
from 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.

Diverifikasi dengan LibreYOLO v1.5.0.