Делайте крутые вещи с данными!

Вступление

Многие города в США и Европе сейчас осторожно открываются. Людей проинструктировали следовать правилам социального дистанцирования, когда они выходят на улицу. Но следят ли за ними люди? Для городов может быть важно оценить это и принять соответствующие меры. Если большинство людей последуют им, то можно будет безопасно открыть больше мест. Однако, если нарушений много, может быть безопаснее закрыть. Именно это и произошло в Майами-Бич-парке. Парк открылся в конце апреля, но был закрыт в течение недели, так как слишком многие люди нарушали правила, связанные с ношением масок и социальным дистанцированием. Город обнаружил это, использовав офицеров для наблюдения за парком и вынесения предупреждений. Но человеческий мониторинг не может быть практическим решением.

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

В Deep Learning Analytics мы очень увлечены использованием науки о данных и машинного обучения для решения проблем. Свяжитесь с нами, если вам нужна помощь в области науки о данных в борьбе с этим кризисом. Оригинальный полный рассказ опубликован на нашем сайте здесь.

Отслеживание людей

Данные

Первое, что нам нужно, это видеоданные для построения и тестирования нашей модели. Я использовал общедоступный набор данных ТО. Набор данных MOT - это канонический набор данных для отслеживания людей с помощью компьютерного зрения. Многие современные алгоритмы обучаются и тестируются на этих данных. В этом наборе данных есть множество клипов с открытым исходным кодом, показывающих движение людей под разными углами камеры. Я выбрал дополнительный клип со стационарной камерой, установленной на высоте, показывающей центр города в Германии. Вы можете скачать этот клип здесь. Смотрите ниже один из кадров из этого клипа.

Отслеживание людей с использованием глубокой сортировки

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

Отслеживание, как правило, представляет собой сложную задачу, поскольку люди могут выглядеть одинаково, заставляя модель менять идентификаторы. Люди могли оказаться за спиной другого человека или объекта, и им был назначен новый идентификатор при повторном появлении. За последние несколько лет методы глубокого обучения значительно повысили производительность в тестах отслеживания нескольких объектов. В настоящее время точность отслеживания нескольких объектов составляет 62,0.

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

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

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

Чтобы запустить код для этого видео, вам необходимо передать необработанные изображения и файл обнаружения, в котором указаны позиции всех ограничивающих рамок, в трекер. Затем трекер использует эту информацию для присвоения идентификатора каждому человеку в каждом кадре. README в блоге глубокой сортировки подробно объясняет это. См. Ниже результаты отслеживания этого клипа. Как видите, каждому человеку назначается идентификатор, и этот идентификатор успешно переносится в следующий кадр. Трекер также выводит CSV-файл с подробностями о треках. Я разместил этот файл на своем Github, и мы будем использовать его для следующей части кода.

Выявление нарушений социального дистанцирования

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

Теперь приступим к лепке. Код для этого представлен ниже. Это тот же код, что и в моем Github.

Основные шаги, выполняемые для каждого кадра:

  1. Сравните расстояние в пикселях между каждой дорожкой и каждой другой дорожкой
  2. Если расстояние
  3. Мы также хотим подсчитать общее количество нарушений для каждого идентификатора. Это засчитывается как другие идентификаторы, к которым они подошли слишком близко. Так что в любое время расстояние ‹близость, мы ведем список треков, которые подошли слишком близко друг к другу в словаре track_violations

Код работает довольно медленно, так как ему нужно сравнивать каждую дорожку с каждой другой дорожкой и делать это более 600 кадров. Многие из этих вычислений повторяются, поскольку он будет отдельно измерять расстояние между дорожкой 1 и дорожкой 2, а затем дорожкой 2 и дорожкой 1. Чтобы сэкономить время, я сохраняю результаты обоих вычислений за один проход. Поэтому при сравнении дорожки 1 и дорожки 2 результаты записываются в соответствующие строки фрейма данных. Это сокращает время работы вдвое. Вот и все!

Я обнаружил, что расстояние в 70 пикселей было вполне разумным для обнаружения людей, которые «казались» идущими слишком близко друг к другу. Модуль визуализации кода выделяет блоки красным цветом, когда они подходят слишком близко, а также отображает количество нарушений для каждого поля. Ниже показан образец кадра с результатами.

Практическое развертывание

Если вы собираетесь развернуть это в производственной среде, необходимо учесть несколько моментов.

  1. Камеру необходимо зарегистрировать, чтобы мы могли правильно сопоставить расстояние в пикселях с расстоянием в реальном мире.
  2. Если имеется непрерывный массив камер, нам может потребоваться добавить возможность повторной идентификации человека, чтобы помочь трекеру передавать идентификатор и количество нарушений между камерами. Повторная идентификация личности - это область, в которой за последние несколько лет было проведено множество исследований.
  3. Код здесь довольно легкий и может работать на встроенном устройстве, таком как Jetson TX2, которое привязано к камере.

Заключение

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

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

В Deep Learning Analytics мы очень увлечены использованием машинного обучения для решения реальных проблем. Мы помогли многим компаниям внедрить инновационные решения на основе искусственного интеллекта. Свяжитесь с нами через наш веб-сайт здесь или напишите нам по адресу [email protected], если вы видите возможность сотрудничества.

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

  1. MOT Challenge
  2. Алгоритм глубокой сортировки