Tracking objek

Tracking memberikan identitas stabil kepada setiap deteksi lintas frame video. LibreYOLO tidak memodelkannya sebagai task dengan bobot sendiri: ini adalah mode predict, model.track(), yang menjalankan tracker terpilih pada output per frame dari model deteksi, segmentation, atau pose.

Definisi

Tracking bukan salah satu kunci task LibreYOLO dan tidak ada checkpoint tracking untuk diunduh. Tracking adalah metode pada model, model.track(source), yang menjalankan deteksi pada setiap frame dan mengasosiasikan hasil lintas waktu. Metode ini berupa generator: menghasilkan satu Results per frame yang diproses, dengan result.track_id berupa tensor bilangan bulat (N,) yang selaras dengan result.boxes. Id yang sama juga tersedia pada result.boxes.id.

Hanya objek terkonfirmasi yang sedang dilacak yang dihasilkan. Track yang kehilangan asosiasi tetap hidup selama jumlah frame yang dikonfigurasi sebelum dihapus, track_buffer untuk ByteTrack dan BoT-SORT serta max_age untuk dua varian OC-SORT, sehingga objek yang ditemukan kembali dalam window tersebut mempertahankan id asli.

Karena asosiasi terjadi setelah deteksi, payload lain pada frame tetap tersedia: Results tracking adalah Results deteksi yang dipotong ke baris cocok, sehingga mask dan keypoint diteruskan bersama bounding box.

Model

Dua pilihan independen membentuk run tracking: model yang menghasilkan bounding box per frame dan tracker yang menghubungkannya.

Setiap model LibreYOLO native dengan task deteksi, segmentation, atau pose menyediakan track(). Lihat indeks model untuk list lengkap, atau mulai dari YOLO9, RF-DETR, D-FINE, atau RTMDet. Task tanpa bounding box untuk diasosiasikan menolak pemanggilan: classification, oriented bounding box, point, depth, surface normal, edge, semantic dan panoptic segmentation, restoration, OCR, serta body mesh.

Dua tier model juga menolaknya. Model LibreSAM adalah gambar segmenter dan model LibreOpenVocab adalah detektor per frame; keduanya memunculkan error dari track() dan menggunakan predict() per frame.

Tracking berjalan pada model PyTorch native. Artefak hasil ekspor yang dimuat melalui LibreYOLO("model.onnx") mengembalikan objek backend runtime dengan predict(), tetapi tanpa track().

Empat tracker disertakan dan dipilih melalui argumen tracker:

"bytetrack" adalah default. Tracker ini hanya menggunakan motion, dengan Kalman filter dan asosiasi tiga tahap: deteksi confidence tinggi, pass kedua yang memberi deteksi confidence rendah kesempatan mencocokkan track sebelum dibuang, lalu track belum terkonfirmasi. Dikonfigurasi dengan TrackConfig.

"botsort" mempertahankan lifecycle tiga tahap ByteTrack, tetapi memakai status Kalman center-width-height dan mengompensasi track prediksi terhadap gerakan kamera sebelum pencocokan. Ini adalah varian motion-only BoT-SORT tanpa model appearance. Dikonfigurasi dengan BoTSortConfig, yang menambahkan enable_cmc, cmc_method, dan cmc_downscale.

"ocsort" juga hanya memakai motion dan menambahkan term arah velocity ke biaya asosiasi, pass asosiasi kedua terhadap observasi nyata terakhir setiap track, serta smoothing status Kalman sepanjang trajectory virtual ketika track ditemukan kembali. Dikonfigurasi dengan OCSortConfig.

"deepocsort" memperluas OC-SORT dengan appearance. Setiap track mempertahankan moving average embedding re-identification yang dibobot confidence, dan cosine similarity masuk biaya asosiasi, sehingga identitas bertahan melalui occlusion panjang dan target yang bersilangan. Biayanya satu forward jaringan embedding kecil per frame, dan bobot OSNet diunduh saat penggunaan pertama. Dikonfigurasi dengan DeepOCSortConfig.

Prediksi

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO9s.pt") # track() adalah generator: satu Results per frame yang diproses.for result in model.track("video.mp4"):    print(result.track_id)        # tensor int (N,), selaras dengan bounding box    print(result.boxes.xyxy)
Pilih tracker
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO9s.pt") # "bytetrack" (default), "botsort", "ocsort", atau "deepocsort".for result in model.track("video.mp4", tracker="botsort"):    print(result.track_id)
Simpan video beranotasi
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO9s.pt") # Tanpa output_path, berkas berada di runs/track/<video_stem>.mp4.for result in model.track("video.mp4", save=True, vid_stride=2):    pass
Sesuaikan tracker
from libreyolo import BoTSortConfig, LibreYOLO model = LibreYOLO("LibreYOLO9s.pt") # Jenis konfigurasi memilih tracker, sehingga tracker= redundan di sini.config = BoTSortConfig(track_buffer=60, frame_rate=25, enable_cmc=False)for result in model.track("video.mp4", tracker_config=config):    print(result.track_id) # Atau berikan kolom yang sama sebagai keyword argument dan biarkan track() membuatnya.for result in model.track("video.mp4", tracker="botsort", track_buffer=60):    print(result.track_id)

track_conf menetapkan ambang batas tahap asosiasi pertama: track_high_thresh untuk ByteTrack dan BoT-SORT, det_thresh untuk OC-SORT dan Deep OC-SORT. Nilai ini bukan conf milik predict(). Untuk ByteTrack, BoT-SORT, dan OC-SORT, detektor berjalan pada ambang batas lebih rendah secara internal agar deteksi lemah tersedia bagi recovery pass. Deep OC-SORT menjalankan detektor pada det_thresh. Untuk ByteTrack dan BoT-SORT, track_conf harus sama dengan atau di atas track_low_thresh, dengan default 0.1.

Pengaturan tracker masuk melalui dua cara. Berikan instance konfigurasi ke tracker_config=, dan jenisnya memilih tracker sehingga tracker= redundan. Atau berikan kolom sebagai keyword argument dan biarkan track() membuat konfigurasi untuk tracker terpilih; kunci tidak dikenal menghasilkan peringatan. Dalam kedua cara, track_conf diabaikan setelah kunci pencocokan ditetapkan eksplisit.

Argumen lain mencerminkan prediksi: iou, imgsz, classes, max_det, vid_stride, show, dan save bersama output_path. Sumber adalah path berkas video. Lihat prediksi untuk penanganan hasil.

Pelatihan

Tracker tidak dilatih. Tiga dari empat tracker merupakan model motion murni tanpa parameter terpelajari, sedangkan jaringan appearance Deep OC-SORT adalah checkpoint re-identification terbitan yang diunduh saat penggunaan pertama. Peningkatan kualitas tracking berarti memperbaiki detektor atau menyesuaikan ambang batas asosiasi di atas.

Diverifikasi dengan LibreYOLO v1.5.0.