Этот проект был вдохновлён:
Я заменил YOLO v3 на YOLO v4 и добавил опцию асинхронной обработки, что значительно улучшает FPS. Однако при использовании асинхронной обработки мониторинг FPS отключается, так как он неточен.
Кроме того, я взял алгоритм из этой статьи и внедрил его в deep_sort/track.py
.
Оригинальный метод подтверждения треков основывался просто на количестве раз, когда объект был обнаружен, без учёта достоверности обнаружения, что приводило к высоким показателям ложных срабатываний при отслеживании, когда происходили ненадёжные обнаружения (например, истинные срабатывания с низкой достоверностью или ложные срабатывания с высокой достоверностью). Алгоритм фильтрации треков значительно снижает это, вычисляя среднюю достоверность обнаружения по заданному количеству обнаружений перед подтверждением трека.
Смотрите видео сравнения ниже.
Перейдите в соответствующую папку, чтобы использовать фильтрацию треков с низкой достоверностью обнаружения. Видео выше демонстрирует разницу.
См. раздел настроек для инструкций по параметрам.
Как вы можете видеть на гифке, асинхронная обработка имеет лучший FPS, но вызывает заикание.
Этот код обнаруживает и отслеживает только людей, но может быть изменён для обнаружения других объектов путём изменения строк 103 в yolo.py
. Например, чтобы обнаруживать людей и автомобили, измените
if predicted_class != 'person':
continue
на
if predicted_class not in ('person', 'car'):
continue
FPS в реальном времени с записью видео:
Отключение отслеживания дало ~12,5 кадров в секунду с YOLO v4.
YOLO v4 работает намного быстрее и кажется более стабильным, чем YOLO v3. Все тесты проводились с использованием графического процессора Nvidia GTX 1070 8 ГБ и процессора i7-8700k.
Скачать и преобразовать модель Darknet YOLO v4 в модель Keras, соответствующим образом изменив convert.py
, и запустить:
python convert.py
Затем запустите demo.py:
python demo.py
По умолчанию отслеживание и запись видео включены, а асинхронная обработка отключена. Их можно изменить в demo.py
, изменив:
tracking = True
writeVideo_flag = True
asyncVideo_flag = False
Чтобы изменить целевой файл в demo.py
:
file_path = 'video.webm'
Чтобы изменить настройки вывода в demo.py
:
out = cv2.VideoWriter('output_yolov4.avi', fourcc, 30, (w, h))
Эта версия имеет возможность скрывать обнаружения объектов вместо отслеживания. Настройки в demo.py
следующие:
show_detections = True
writeVideo_flag = True
asyncVideo_flag = False
Установка show_detections = False
скроет обнаружения объектов и покажет среднюю достоверность обнаружения и наиболее часто обнаруживаемый класс для каждого трека.
Чтобы изменить порог средней достоверности обнаружения, перейдите в deep_sort/tracker.py
и измените аргумент adc_threshold
в строке 40. Здесь вы также можете изменить количество шагов, на которые будет усредняться достоверность обнаружения, изменив здесь n_init
.
См. https://github.com/Ma-Dan/keras-yolo4.
Обратите внимание, что используемая здесь модель отслеживания обучена только на отслеживании людей, поэтому вам нужно самостоятельно обучить модель для отслеживания других объектов.
Подробнее об обучении собственной модели отслеживания см. на странице https://github.com/nwojke/cosine_metric_learning.
Для тех, кто хочет обучить собственную модель отслеживания транспортных средств, я создал инструмент для преобразования набора данных DETRAC в обучаемый. Формат для обучения косинусной метрики можно найти в моём репозитории отслеживания объектов здесь. Инструмент был создан с использованием упомянутой ранее статьи как источника с теми же параметрами.
Перейдите в соответствующую папку и запустите скрипты Python.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )