Deteksi titik

Deteksi titik mengembalikan satu lokasi x, y per objek sebagai pengganti bounding box. LibreYOLO menyediakannya sebagai task point, dan prediksi memuat satu baris x, y, kelas, serta confidence per objek.

Definisi

Task point melokalisasi setiap objek dengan satu koordinat x, y dan kelas, tanpa lebar, tinggi, atau mask. Karena prediksi merupakan daftar datar objek, jumlah baris adalah jumlah objek, yang menjadikannya task penghitungan.

Prediksi mengisi result.points, payload Points yang membungkus array (N, 4) berisi baris x, y, class, confidence dalam piksel gambar asli. .xy mengembalikan koordinat, .xyn mengembalikan koordinat yang sama dibagi ukuran gambar, .cls mengembalikan indeks kelas, dan .conf mengembalikan skor; len() mengembalikan jumlah titik. result.boxes tetap kosong, sehingga iou dan max_det tidak memiliki apa pun untuk diproses.

Model

Tiga family melayani point, dan ketiganya tidak dapat saling dipertukarkan.

FOMO adalah pilihan vocabulary tetap: grid classifier yang memberi label setiap sel grid beresolusi rendah sebagai background atau pusat objek. Ini satu-satunya family point yang dapat dilatih LibreYOLO dan satu-satunya yang dapat diekspor.

LocateAnything menerima teks, bukan indeks kelas, sehingga vocabulary-nya adalah frasa apa pun yang Anda tulis. Model ini memerlukan extra vlm, dibuat sebagai LibreLocateAnything dan bukan melalui factory LibreYOLO(), serta bobotnya dibatasi untuk penggunaan nonkomersial. Ketentuan persis dan dua lisensi tambahan yang digabungkan checkpoint tersedia pada halamannya.

SenseNova-Vision menjalankan point melalui checkpoint prompted-generation yang sama untuk enam task lainnya, dimuat dengan LibreVLM("sensenova-vision", task="point"). Model ini memerlukan extra sensenova, dan setiap prediksi merupakan generation pass pada model 7B, sehingga latensi per gambar jauh lebih tinggi daripada detector khusus. Bobotnya nonkomersial; lisensinya tersedia pada halaman model.

Prediksi

Bobot LibreFOMO adalah satu-satunya pengecualian untuk unduhan otomatis di situs ini. LibreYOLO("LibreFOMOs-point.pt") mencari berkas tersebut di disk dan memunculkan ValueError yang menyebut namanya, bukan mengunduhnya. Unduh checkpoint dari organisasi LibreYOLO di Hugging Face terlebih dahulu dan muat berdasarkan path lokal, atau latih model sendiri.

Prediksi titik dan hitung objek
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Bobot LibreFOMO tidak diunduh otomatis. Ambil checkpoint dari# https://huggingface.co/LibreYOLO dahulu dan muat berdasarkan path lokal.model = LibreYOLO("./LibreFOMOs-point.pt")result = model(SAMPLE_IMAGE, save=True) points = result.pointsprint(len(points))     # jumlah objekprint(points.xy)       # (N, 2) pusat dalam piksel gambar asliprint(points.cls, points.conf)
Koordinat ternormalisasi dan jumlah per kelas
from collections import Counter from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("./LibreFOMOs-point.pt")result = model(SAMPLE_IMAGE) points = result.points.numpy()print(points.xyn)                          # pusat yang sama dalam [0, 1]print(Counter(points.cls.astype(int).tolist()))

Nama berkas harus memuat akhiran task -point agar loader mengenalinya. predict(..., nms_radius=1) mengontrol jarak minimum dalam sel grid agar dua deteksi FOMO sama-sama bertahan. Lihat prediksi untuk sumber, streaming, dan penanganan hasil.

Format dataset

point tidak memiliki format label sendiri. Family point membaca tata letak deteksi YOLO standar dan menurunkan satu pusat dari setiap baris bounding box, sehingga cx cy adalah titiknya dan w h hanya menentukan apakah baris valid.

dataset/
  data.yaml
  images/
    train/scene.jpg
    val/scene.jpg
  labels/
    train/scene.txt
    val/scene.txt

Setiap berkas label memuat satu baris per objek dengan koordinat ternormalisasi:

<class_id> <cx> <cy> <w> <h>
yaml
path: dataset
train: images/train
val: images/val
nc: 1
names: {0: seedling}

Berkas label yang tidak ada atau kosong berarti tidak ada objek. Lihat format dataset untuk kontrak lengkap.

Pelatihan

FOMO adalah satu-satunya family point dengan implementasi pelatihan. train() pada LocateAnything dan SenseNova-Vision memunculkan NotImplementedError; lakukan fine-tuning di upstream dan muat hasilnya.

Latih FOMO pada dataset YOLO
from libreyolo import LibreYOLO model = LibreYOLO("./LibreFOMOs-point.pt")model.train(data="my-dataset.yaml", epochs=40, batch=32, lr0=3e-4)
Prediksi dengan checkpoint hasil pelatihan
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("./LibreFOMOs-point.pt")results = model.train(data="my-dataset.yaml", epochs=40) # train() memuat ulang checkpoint terbaik ke objek yang sama, sehingga# model memprediksi dengan bobot hasil pelatihan saat pemanggilan selesai.print(results["best_checkpoint"])print(model(SAMPLE_IMAGE).points.xy)

imgsz bukan pilihan bebas untuk FOMO: default-nya adalah resolusi native dari checkpoint yang dimuat, dan memberikan nilai berbeda memunculkan ValueError yang menyebutkan ukuran yang diharapkan. Lihat pelatihan untuk dataset, logger, dan multi-GPU, serta halaman FOMO untuk default family ini.

Validasi

val() mencocokkan titik prediksi dengan titik ground truth satu lawan satu menggunakan algoritma Hungarian pada sweep ambang batas jarak. Ambang batas adalah jarak Euclidean dalam koordinat gambar ternormalisasi, dan sweep default terdiri dari sepuluh nilai dari 0,01 hingga 0,10.

Validasi dan baca kunci metrik
from libreyolo import LibreYOLO model = LibreYOLO("./LibreFOMOs-point.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/precision"], metrics["metrics/recall"])print(metrics["metrics/f1"])print(metrics["metrics/mAP@[0.01:0.10]"])   # fitnessprint(metrics["metrics/MLE"])               # mean localization errorprint(metrics["metrics/MAE"], metrics["metrics/RMSE"])   # error jumlah
Ubah ambang batas jarak
from libreyolo import LibreYOLO model = LibreYOLO("./LibreFOMOs-point.pt") # Batas sweep menjadi bagian teks kunci, sehingga sweep kustom# mengubah nama kunci mAP yang dihasilkannya.metrics = model.val(data="my-dataset.yaml", dist_thresholds=[0.02, 0.05]) print(metrics["metrics/mAP@0.02"])print(metrics["metrics/mAP@[0.02:0.05]"])

metrics/precision, metrics/recall, dan metrics/f1 dirata-ratakan secara makro pada semua kelas di ambang batas paling ketat dalam sweep, yaitu 0,01 secara default. metrics/mAP@0.01 adalah presisi rata-rata pada ambang batas yang sama, dan metrics/mAP@[0.01:0.10] adalah mean untuk seluruh sweep. Nilai sweep tersebut juga merupakan fitness, angka yang dibaca saat memilih checkpoint terbaik. Kedua kunci mAP dibangun dari ambang batas yang digunakan, sehingga memberikan dist_thresholds= akan mengubah namanya.

metrics/MLE adalah mean jarak antara pasangan yang cocok pada ambang batas paling ketat, dalam satuan ternormalisasi yang sama. metrics/MAE dan metrics/RMSE merupakan metrik penghitungan, bukan lokalisasi: keduanya mengukur perbedaan per gambar antara jumlah titik prediksi dan ground truth.

FOMO menambahkan kelompok kedua pada tingkat grid di atas metrik tersebut. Model melakukan sweep confidence dan nms_radius, lalu menerbitkan kombinasi F1 terbaik sebagai metrics/grid_F1, metrics/grid_precision, metrics/grid_recall, metrics/grid_mean_distance, metrics/grid_TP, metrics/grid_FP, dan metrics/grid_FN, dengan pengaturan yang menghasilkannya dalam decode/threshold serta decode/nms_radius.

Ekspor

FOMO diekspor melalui jalur ekspor bersama, dan artefak hasil ekspor dimuat kembali melalui LibreYOLO() berdasarkan akhiran filenya, sehingga berkas .onnx atau .engine berperilaku seperti checkpoint dan mengembalikan Results yang sama.

Ekspor
from libreyolo import LibreYOLO model = LibreYOLO("./LibreFOMOs-point.pt")model.export(format="onnx")
Jalankan berkas hasil ekspor
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Factory merutekan berdasarkan akhiran berkas, sehingga artefak hasil# ekspor dimuat seperti checkpoint dan mengembalikan objek Results yang sama.model = LibreYOLO("./LibreFOMOs-point.onnx")result = model(SAMPLE_IMAGE) print(result.points.xy)

Cakupan per format tersedia di halaman FOMO dan matriks ekspor lengkap. LocateAnything dan SenseNova-Vision tidak dapat diekspor: export() memunculkan error pada keduanya karena model generatif tidak memiliki graph deteksi yang dapat diproses dengan tracing.

Diverifikasi dengan LibreYOLO v1.5.0.