Введение
В современном мире задача сегментации как оказалось решается на раз-два, хотя я думал что это что-то сложное и удивительное. Все что нужно, это прочитать пару статей, установить определенные библиотеки и разметить данные, на все про все нужно пару часов времени, кроме создания тестовой выборки.
Разметка данных
Данный шаг в реализации сегментации кадров видеопотока один из наиболее трудозатратных с точки зрения работы человека.
Для этого необходимо использовать специальные программы для разметки кадров видеопотока. Просто открываем данной программой нужный видеофайл, и размечаем кадры, предварительно создав классы на которые мы будем сегментировать изображения. В моем ознакомительном примере, кадры делятся на следующие классы (Автомобиль, Дорога, Пешеходный переход, Газон, Здания, Люди, Тротуар, Дорожная разметка).
На самом деле, такие позиции как дорога, строения, газоны, тротуары и т.д. можно не распознавать, так как камера в данном случае жестко зафиксирована и поэтому данные области всегда будут находиться в одном и том же месте.
Тренировка нейросети для сегментации изображений
Данный шаг в реализации сегментации кадров видеопотока один из наименее трудозатратных с точки зрения работы человека (если не учитывать проектирование архитектуры нейросети, но есть заранее сформированные архитектуры обеспечивающие хорошие результаты).
Все что необходимо это запустить процесс тренировки на заранее подготовленной обучающей выборке.
Использование натренированной сети для сегментации изображений
Последний шаг, это использование натренированной сети. Рассмотрим результат тренировки на 4 кадрах видеопотока (да, да, да ... выборка очень маленькая, но задача факультативная, чтобы посмотреть как работает, а не создание массового продукта) и 60 эпох тренировки используя архитектуру сети DeepLab v3+ (основанная на ResNet-18). Результат приведен на Рис. 2.
Таким образом, как видно в данном примере, сегментировать изображения сейчас максимально просто и быстро, вся проблема упирается только в очень трудоёмкую часть создания обучающей выборки. Рассмотрим как можно дальше использовать результат сегментации изображений с камеры установленной во дворе дома.
Использование результатов сегментации
Данную камеру можно использовать в качестве анализатора пробок на дороге, для этого можно создать маску (Рис. 3 и 4), в пределах которой анализируется количество присутствующих машин.
Таким образом, нам необходимо сегментировать изображение только на интересующем участке (Рис. 5 и 6).
Для упрощения задачи подсчета количества автомобилей, можно просто считать количество пикселей дороги и автомобилей, и по процентному соотношению выставлять бальное значение индекса загруженности (Рис. 7 и 9). Дополнительно рассмотрим случай когда дорога сильно загружена (Рис. 8).
В случае когда дорога свободна процент загруженности составил 3%, а когда дорога загружена процент загруженности составил 54%. Это связано с тем что автомобили вблизи камеры имеют большее количество пикселей, чем автомобили вдали от камеры. Для решения этой задачи, необходимо ввести веса пикселей, пиксели вблизи должны иметь меньший вес, чем пиксели в дали. Таким образом получится довольно простой и довольно качественный детектор загруженности дороги.
Дополнительные варианты использования результатов сегментации
Дополнительно по результатам сегментации данных можно определять количество свободных парковочных мест, записать время въезда и выезда автомобилей на территорию жилого комплекса и многое другое. В общем идей может быть масса (накидайте вариантов в комментариях), и можно делать действительно интересные вещи за один вечер, но все упирается в создание больших обучающих выборок для первоклассного качества сегментации.
Вывод
В настоящее время создавать какие-либо системы анализа и наблюдения не так сложно как может показаться, в данной схеме наиболее сложная и трудозатратная часть работы это создание обучающей выборки. Скорее всего в ближайшее время появятся сервисы (возможно они уже есть, если есть напишите в комментарии), где будут нанимать сотрудников для создания обучающих выборок наподобие Яндекс.Еда и Яндекс.Такси, где люди сидя дома будут зарабатывать в свободное время. Зато небольшие компании смогут размещать задание и за относительно небольшую сумму денег, они смогут создавать огромные тестовые выборки и получать наиболее качественные нейросети для сегментации и классификации данных. Ну и учитывая что занейросетить можно все что угодно, то я боюсь представить какие интересные вещи будут появляться, когда обучающие выборки будут создаваться очень быстро. Просто когда обучающие выборки создает один человек, время ее создания может растянуться на неделю, или даже на месяцы, а когда будет вариант распаралелить на сотню, или тысячи человек, тогда обучающие выборки будут создаваться за день, а то и менее.
P.S. Если кто знает, каким софтом можно максимально просто записывать видеопоток с ютуб стрима?) Просто камеры пишут данные в циклический буфер (последние 12 часов) в виде ютуб стрима, таким образом формируется видеонаблюдение, где каждый житель дома может просмотреть последние 12 часов.