Переглянути як Markdown

Відстеження об'єктів

Відстеження призначає стабільний ідентифікатор кожному виявленню між кадрами відео. LibreYOLO не моделює його як задачу з власними вагами: це режим передбачення model.track(), який запускає вибраний трекер для покадрових результатів моделі виявлення, сегментації чи пози.

Визначення

Відстеження не є одним із ключів задач LibreYOLO, і контрольної точки відстеження для завантаження немає. Це метод моделі model.track(source), який виконує виявлення в кожному кадрі й пов'язує результати в часі. Метод є генератором: він видає по одному Results на оброблений кадр, де result.track_id задано як цілочисельний тензор (N,), узгоджений із result.boxes. Ті самі ідентифікатори також доступні в result.boxes.id.

Повертаються лише підтверджені об'єкти, які відстежуються зараз. Траєкторія, зв'язок з якою втрачено, залишається активною протягом налаштованої кількості кадрів до вилучення: track_buffer для ByteTrack і BoT-SORT та max_age для двох варіантів OC-SORT. Тому об'єкт, відновлений у межах цього вікна, зберігає початковий ID.

Оскільки зіставлення відбувається після виявлення, інші корисні навантаження кадру зберігаються: відстежуваний Results, це Results виявлення, обмежений зіставленими рядками, тому маски та ключові точки надходять разом із рамками.

Моделі

Запуск відстеження передбачає два незалежні вибори: модель, яка створює рамки для кожного кадру, і трекер, який їх пов'язує.

Будь-яка нативна модель LibreYOLO із задачею виявлення, сегментації чи пози надає track(), тому детектор вибирають звичайним способом. Повний список наведено в покажчику моделей, а почати можна з YOLO9, RF-DETR, D-FINE або RTMDet. Задачі, результати яких не мають рамки для зіставлення, відхиляють виклик замість повернення беззмістовних ID. Це класифікація, орієнтовані рамки, точки, глибина, нормалі поверхні, краї, семантична й паноптична сегментація, відновлення, OCR і сітка тіла.

Два рівні моделей LibreYOLO також його не підтримують. Моделі, завантажені через LibreSAM, є сегментаторами зображень, а моделі через LibreOpenVocab, покадровими детекторами; обидва спричиняють помилку для track(), і замість цього для кожного кадру використовують predict().

Відстеження працює на нативних моделях PyTorch. Експортований артефакт, завантажений через LibreYOLO("model.onnx"), повертає об'єкт бекенду виконання, який має predict(), але не track().

Бібліотека постачає чотири трекери, які вибирає аргумент tracker:

"bytetrack", стандартний варіант. Він використовує лише рух, фільтр Калмана та триетапне зіставлення: спочатку виявлення з високою впевненістю, потім другий прохід, який дає виявленням із низькою впевненістю шанс зіставитися з наявною траєкторією до відкидання, а потім непідтверджені траєкторії. Налаштовується через TrackConfig.

"botsort" зберігає триетапний життєвий цикл ByteTrack, але використовує стан Калмана у форматі центр-ширина-висота й компенсує передбачені траєкторії за рух камери перед зіставленням. Це варіант BoT-SORT лише з рухом, без моделі зовнішнього вигляду. Налаштовується через BoTSortConfig, що додає enable_cmc, cmc_method і cmc_downscale.

"ocsort" також використовує лише рух і додає складник напрямку швидкості до вартості зіставлення, другий прохід зіставлення з останнім реальним спостереженням кожної траєкторії та згладжування стану Калмана вздовж віртуальної траєкторії після повторного знаходження. Налаштовується через OCSortConfig.

"deepocsort" розширює OC-SORT зовнішнім виглядом. Кожна траєкторія зберігає зважене за впевненістю ковзне середнє ембедингів повторної ідентифікації, а до вартості зіставлення додається складник косинусної подібності, тому ідентичності переживають тривалі перекриття й перетин цілей. Це коштує одного прямого проходу невеликої мережі ембедингів на кадр, а її ваги OSNet завантажуються під час першого використання. Налаштовується через DeepOCSortConfig.

Передбачення

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO9s.pt") # track(), це генератор: по одному Results на оброблений кадр.for result in model.track("video.mp4"):    print(result.track_id)        # цілочисельний тензор (N,), узгоджений із рамками    print(result.boxes.xyxy)
Вибір трекера
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO9s.pt") # "bytetrack" (стандартний), "botsort", "ocsort" або "deepocsort".for result in model.track("video.mp4", tracker="botsort"):    print(result.track_id)
Збереження анотованого відео
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO9s.pt") # Без output_path файл потрапляє до runs/track/<video_stem>.mp4.for result in model.track("video.mp4", save=True, vid_stride=2):    pass
Налаштування трекера
from libreyolo import BoTSortConfig, LibreYOLO model = LibreYOLO("LibreYOLO9s.pt") # Тип конфігурації вибирає трекер, тому tracker= тут зайвий.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) # Або передайте ті самі поля як аргументи ключових слів, і track() побудує конфігурацію.for result in model.track("video.mp4", tracker="botsort", track_buffer=60):    print(result.track_id)

track_conf задає поріг першого етапу зіставлення: track_high_thresh для ByteTrack і BoT-SORT, det_thresh для OC-SORT і Deep OC-SORT. Це не conf функції predict(). Для ByteTrack, BoT-SORT і OC-SORT детектор внутрішньо працює з нижчим порогом, щоб слабкі виявлення залишалися доступними для проходу відновлення. Deep OC-SORT запускає детектор із самим det_thresh. Для ByteTrack і BoT-SORT значення track_conf має дорівнювати track_low_thresh або бути більшим за нього, а стандартне значення останнього становить 0.1.

Налаштування трекера надходять одним із двох способів. Передайте екземпляр конфігурації до tracker_config=, і його тип вибере трекер, тож tracker= буде зайвим. Або передайте поля як аргументи ключових слів, щоб track() побудував конфігурацію для названого трекера; невідомі ключі показують попередження, а не застосовуються неявно. В обох випадках track_conf ігнорується, якщо відповідний ключ зіставлення задано явно.

Решта аргументів відповідає передбаченню: iou, imgsz, classes, max_det, vid_stride, show і save разом з output_path. Джерелом є шлях до відеофайла. Роботу з результатами описано в розділі передбачення.

Навчання

Трекери не навчаються. Три з чотирьох є суто моделями руху без будь-яких навчених параметрів, а мережа зовнішнього вигляду Deep OC-SORT є опублікованою контрольною точкою повторної ідентифікації, яка завантажується під час першого використання. Поліпшення якості відстеження означає поліпшення детектора або налаштування наведених вище порогів зіставлення.

Перевірено з LibreYOLO v1.5.0.