Определение занятости парковки по видеозаписи с камеры видеонаблюдения с помощью глубокого обучения

Найти свободное место на парковке - непростая задача. Этими партиями даже сложно управлять, если входящий трафик сильно разнится. Какие слоты свободны в данный момент? В какое время нам нужно больше слотов? Трудно ли пассажирам добраться до определенного слота? Какая машина где припаркована? Кто припарковал машину?

Мы используем либо сеть наземных датчиков присутствия, либо персонал, чтобы определить ответы на некоторые из этих вопросов. Датчики эффективны, но требуют обслуживания и стоят от 40 до 80 долларов за узел при установке и установке.

Для персонала это обременительное и подверженное ошибкам упражнение. Даже если персоналу помогут установить заграждения и билетную консоль, в лучшем случае, это дает общее предположение о реальной занятости на земле.

Один из подходов к этой проблеме может заключаться в использовании видеозаписи с камеры видеонаблюдения для определения занятости парковки в режиме реального времени с использованием глубокого обучения. (Ссылка на полный код в конце)

Подход и архитектура

Маркировка занятости парковочного места - это двухэтапный процесс. Во-первых, нам нужно найти парковочное место в поле зрения. Во-вторых, мы должны определить, занят ли слот.

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

Второй подход может заключаться в использовании белой линии парковки в качестве ориентира для слота. Мы могли бы применить хитрый фильтр и преобразование Hough для использования и обнаружения полигонов. Однако не все парковки имеют белые полосы. Даже те, которые были сбиты, камера снимает на высоте около 6 метров над землей, переулок будет закрыт припаркованными автомобилями. Так что, если мы не будем использовать дрон для съемки кадра сверху, это тоже не поможет.

Мы могли бы использовать стационарный автомобиль, чтобы обнаружить места для парковки. Через несколько дней съемки стоянки мы, вероятно, обнаружим, что все места в какой-то момент были заняты автомобилями. Обнаружение неподвижного автомобиля на видеозаписи является хорошим предиктором фактического местоположения парковочного места. Конечно, будет движение, пока машины входят / выходят из слота. Но это шумы, которые мы можем приглушить.

После определения парковочных мест остается только определить, присутствует или нет автомобиль в новом кадре. Это простая задача классификации в кадрированном изображении парковочного места. Мы можем запустить его в режиме реального времени (~ 1 с) на настольных компьютерах, которые получают поток с камеры.

Обнаружение парковочных мест

Нам нужен детектор объектов для первой части задачи, который даст нам ограничивающую рамку для каждого из парковочных мест. YOLO и MaskRCNN могут нам помочь.

YOLO - это гибкий и точный алгоритм, который дает ограничивающую рамку для каждого обнаруженного объекта вместе с их классификацией и оценкой вероятности. Более ранние алгоритмы обнаружения объектов, которые сканировали сцену несколько раз с разными размерами ограничивающей рамки и пытались найти подходящего кандидата. На это ушло много времени и вычислительных ресурсов. YOLO использует слои CNN, чтобы сделать это разовой проблемой. После обучения сети обнаружение может быть выполнено на компьютере, с меньшими сетями и оптимизацией даже на мобильном телефоне.

В случае стилистически отличных друг от друга (таких как картина выше) YOLO дает справедливую оценку (чаша, апельсин), но также иногда пропускает (книга, кувшин).

MaskRCNN помимо обнаружения объектов представляет собой алгоритм сегментации изображения. MaskRCNN классифицирует каждый пиксель как принадлежащий экземпляру объекта. Это удивительно сложная задача. MaskRCNN опирается на сети FCNN, выравнивая интересующую область. Это видео поможет вам понять основные концепции.

При запуске на GPU MaskRCNN требуется около 200 мс для обработки 1 кадра, поэтому это примерно одна шестая от скорости Yolo, который может разогнаться до 30 кадров в секунду на GPU. Но с другой стороны, MaskRCNN требуется около 20 кадров для получения разумного результата, в то время как YOLO (который пропускает мелкие объекты) требуется примерно в 5 раз больше. Было бы гораздо разумнее выбрать MaskRCNN, если бы он запускал более 20 кадров, захваченных каждый час в течение двух дней. YOLO потребуется примерно в пять раз больше кадров, но некоторые слоты будут пропущены.

Специализация сетей

В случае очень близких объектов, таких как обнаружение всех идущих по дороге людей, YOLO имеет свою слабость. Он разделяет сцену на сетки и может обнаруживать определенное количество объектов в каждой сетке. В случае с парковками, скорее всего, будут пропущены автомобили, припаркованные в верхнем ряду. Я попытался специализировать сеть на обнаружение только автомобилей. Произошло небольшое улучшение производительности.

Окончательное обнаружение осуществляется с помощью RESNET (или любого другого классификатора). Я также специализировался на автомобилях. Я использовал набор данных, предоставленный CNRPARK, поскольку в нем были изображения автомобилей в ориентации, которую мы обычно находим в камерах видеонаблюдения. Я использовал fit_one_cycle FastAI и смог получить точность более 99,7% на проверке, установленной за 10 эпох. Удивительно, как мало данных и вычислительных ресурсов требуется, если у вас есть обученная модель.

Обнаружение парковочных мест

Когда у нас есть специальные веса, мы приступаем к реальной задаче обнаружения парковочных мест. В беспилотных автомобилях вам нужно отслеживать объект между несколькими кадрами. При обнаружении места для парковки нам нужно отслеживать его при переходе от кадра к кадру. Машины будут приходить и уходить, их размеры изменяются, как и ограничивающая рамка.

Отображение слотов от кадра к кадру

Пересечение через союз (IOU) - хороший показатель в таких проблемах. Для каждого из слотов мы определяем соответствующий слот в последующем изображении, который имеет самый высокий IOU с первым, и назначаем его. Слоты, долговые расписки которых ниже порогового значения, скорее всего, будут новыми автомобилями, которые приехали и заняли парковочное место.

После прохождения нескольких кадров необходимо также объединить различные ограничивающие рамки внутри самого кадра, поскольку некоторая случайная запись может вызвать накопление. На этом этапе выбирается более высокий порог долгового обязательства, чтобы получить стабильные результаты.

Удаление переходных действий

Некоторые кадры фиксируют кратковременные движения, например, въезд автомобиля на парковку. Эти экземпляры ограничивающих рамок необходимо отклонить. Выполнение отказа на основе количества занятых экземпляров для парковки за период времени дает нам контроль над этими спорадическими въездами.

Это даст нам список парковочных мест: координаты и типичные модели занятости во время периода обучения.

Определение занятости в слотах

Обнаружение довольно простое. Мы обрезаем изображение до места, указанного в ограничительной рамке на предыдущем шаге. Все, что нам нужно сделать сейчас, это классифицировать, присутствует ли машина или нет. Мы используем наш настроенный RESNET, и это дает нам разумный результат.

Ограничения

Система еще не на должном уровне. Давайте снова разделим его на две части: определение слотов и определение занятости.

Вы не можете определить то, что не видите, и не можете

Деревья, тени ограничивают зону обнаружения. Частичная окклюзия (с навесом дерева) действительно работает в некоторых случаях, но не работает в других. Точно так же наземные камеры (‹6 м) для большинства автомобилей на участке будут скрыты за несколькими камерами, которые находятся в передней части кадра. Только в нескольких кадрах, когда передние парковки пусты, будут обнаружены участки позади.

С очень маленькими объектами MaskRCNN и YOLO с трудом выбирают слоты. Это может быть около 1–5% парковочных мест в кадре. Однако это можно исправить, если человек потратит меньше минуты, чтобы создать правильную ограничивающую рамку. По сравнению с кропотливыми 1-2 часами, если бы ему пришлось аннотировать все слоты.

Это подводит нас ко второй части: определение статуса слотов. Классификатор действительно работает очень хорошо. Однако снова маленькие изображения, странные углы обзора, темнота и препятствия ограничивают этот шаг.

Так где все это сводится? Обнаружение парковки не может распространяться на все варианты использования. На большинстве подземных парковок невозможно установить камеру на высоте 9 м над полом. Деревья, столбы, столбы и т. Д. Будут препятствовать обзору во многих местах.

У него есть свои недостатки, как и, возможно, существующие методы определения занятости. Если мы сможем их объединить, это может создать более эффективную систему.

Что можно из этого расширить

Мы можем использовать систему, чтобы направлять пассажиров к свободным местам на стоянке. Существующие парковочные талоны могут содержать QR-код, который затем может направлять потребителей к свободному участку с помощью системы. Это сокращает количество ручных операций, необходимых на этом этапе.

Комбинируя распознавание номерных знаков с определением занятости, мы можем отслеживать, какой автомобиль занимает какой слот. Таким же образом мы можем отслеживать, кто припарковал машину.

Работая в тандеме с наземными системами, менеджеры объектов могут в режиме реального времени просматривать уровни парковочного инвентаря. Решение об увеличении в будущем может быть основано на реальных исторических данных. Его также можно использовать для определения того, кто припарковал автомобиль, путем создания снимка человека, припарковавшего автомобиль.

Код и инструкция https://github.com/visualbuffer/parkingslot

Нажмите, чтобы просмотреть видео

Использованная литература :

  1. CNR Research area, Пиза Италия http://cnrpark.it/
  2. Https://github.com/qqwweee/keras-yolo3. стартовый код на основе KERAS.
  3. Стартовый код https://github.com/matterport/Mask_RCNN на основе Torch

Искусственный интеллект устраняет препятствия, предоставляя людям доступ к аналитической информации по незначительной цене. Вы работаете над приложением машинного обучения, с которым мы можем сотрудничать? Пожалуйста, напишите мне в Linkedin.