Введение
В современном мире задача сегментации как оказалось решается на раз-два, хотя я думал что это что-то сложное и удивительное. Все что нужно, это прочитать пару статей, установить определенные библиотеки и разметить данные, на все про все нужно пару часов времени, кроме создания тестовой выборки.
Разметка данных
Данный шаг в реализации сегментации кадров видеопотока один из наиболее трудозатратных с точки зрения работы человека.
Для этого необходимо использовать специальные программы для разметки кадров видеопотока. Просто открываем данной программой нужный видеофайл, и размечаем кадры, предварительно создав классы на которые мы будем сегментировать изображения. В моем ознакомительном примере, кадры делятся на следующие классы (Автомобиль, Дорога, Пешеходный переход, Газон, Здания, Люди, Тротуар, Дорожная разметка).
На самом деле, такие позиции как дорога, строения, газоны, тротуары и т.д. можно не распознавать, так как камера в данном случае жестко зафиксирована и поэтому данные области всегда будут находиться в одном и том же месте.
Тренировка нейросети для сегментации изображений
Данный шаг в реализации сегментации кадров видеопотока один из наименее трудозатратных с точки зрения работы человека (если не учитывать проектирование архитектуры нейросети, но есть заранее сформированные архитектуры обеспечивающие хорошие результаты).
Все что необходимо это запустить процесс тренировки на заранее подготовленной обучающей выборке.
Использование натренированной сети для сегментации изображений
Последний шаг, это использование натренированной сети. Рассмотрим результат тренировки на 4 кадрах видеопотока (да, да, да ... выборка очень маленькая, но задача факультативная, чтобы посмотреть как работает, а не создание массового продукта) и 60 эпох тренировки используя архитектуру сети DeepLab v3+ (основанная на ResNet-18). Результат приведен на Рис. 2.
Таким образом, как видно в данном примере, сегментировать изображения сейчас максимально просто и быстро, вся проблема упирается только в очень трудоёмкую часть создания обучающей выборки. Рассмотрим как можно дальше использовать результат сегментации изображений с камеры установленной во дворе дома.
Использование результатов сегментации
Данную камеру можно использовать в качестве анализатора пробок на дороге, для этого можно создать маску (Рис. 3 и 4), в пределах которой анализируется количество присутствующих машин.
Таким образом, нам необходимо сегментировать изображение только на интересующем участке (Рис. 5 и 6).
Для упрощения задачи подсчета количества автомобилей, можно просто считать количество пикселей дороги и автомобилей, и по процентному соотношению выставлять бальное значение индекса загруженности (Рис. 7 и 9). Дополнительно рассмотрим случай когда дорога сильно загружена (Рис. 8).
В случае когда дорога свободна процент загруженности составил 3%, а когда дорога загружена процент загруженности составил 54%. Это связано с тем что автомобили вблизи камеры имеют большее количество пикселей, чем автомобили вдали от камеры. Для решения этой задачи, необходимо ввести веса пикселей, пиксели вблизи должны иметь меньший вес, чем пиксели в дали. Таким образом получится довольно простой и довольно качественный детектор загруженности дороги.
Дополнительные варианты использования результатов сегментации
Дополнительно по результатам сегментации данных можно определять количество свободных парковочных мест, записать время въезда и выезда автомобилей на территорию жилого комплекса и многое другое. В общем идей может быть масса (накидайте вариантов в комментариях), и можно делать действительно интересные вещи за один вечер, но все упирается в создание больших обучающих выборок для первоклассного качества сегментации.
Вывод
В настоящее время создавать какие-либо системы анализа и наблюдения не так сложно как может показаться, в данной схеме наиболее сложная и трудозатратная часть работы это создание обучающей выборки. Скорее всего в ближайшее время появятся сервисы (возможно они уже есть, если есть напишите в комментарии), где будут нанимать сотрудников для создания обучающих выборок наподобие Яндекс.Еда и Яндекс.Такси, где люди сидя дома будут зарабатывать в свободное время. Зато небольшие компании смогут размещать задание и за относительно небольшую сумму денег, они смогут создавать огромные тестовые выборки и получать наиболее качественные нейросети для сегментации и классификации данных. Ну и учитывая что занейросетить можно все что угодно, то я боюсь представить какие интересные вещи будут появляться, когда обучающие выборки будут создаваться очень быстро. Просто когда обучающие выборки создает один человек, время ее создания может растянуться на неделю, или даже на месяцы, а когда будет вариант распаралелить на сотню, или тысячи человек, тогда обучающие выборки будут создаваться за день, а то и менее.
P.S. Если кто знает, каким софтом можно максимально просто записывать видеопоток с ютуб стрима?) Просто камеры пишут данные в циклический буфер (последние 12 часов) в виде ютуб стрима, таким образом формируется видеонаблюдение, где каждый житель дома может просмотреть последние 12 часов.
cepera_ang
Но зачем так сложно? Сегментировать полосу, выделять вручную, считать пиксели — когда можно просто натренировать детектор автомобилей (и/или взять готовый) и получать количество напрямую?
YakMik Автор
Что за детектор автомобилей?) вы же в курсе что от расположения камеры, ее оптических искажений и т.д. для качественной сегментации необходима своя обучающая выборка и соответственно своя натренированная сетка
lair
Для распознавания одного и того же объекта? Нет, не нужна. Различия между разными представителями класса "автомобиль" (еще и при разном освещении и других факторах) намного больше, чем различия между тем, как они показываются в разных камерах.
Собственно, иначе бы вообще не работали решения по распознаванию (включая AR) на мобильных телефонах — камеры и положения у всех телефонов разные, а обучает модель разработчик.
YakMik Автор
Если покажете результат на фотографии из статьи к вам бы было меньше недоверия)
lair
YakMik Автор
Ну я так понимаю теперь вы понимаете про то что он работает плохо?) автомобили вдалеке не распознаются, правильно?) пришли к тому что я и писал ранее.
lair
Нет, не понимаю.
Вы хотите сказать, что вот в этом вашем примере они распознались?
YakMik Автор
Бинго!) смотрите на количество белой области у маски и на фото выше) единственное процентное соотношение может смутить, но если добавить веса все будет классно)
lair
Неа. У вас там ничего не распозналось. Неизвестно, какой там объект — машина или листик на камеру прилип.
YakMik Автор
Я же для первого примера кучу скринов сделал поэтапно, а во втором случае только 2 вставил, так вот там результат авто и не авто)
lair
Не вижу. Вижу черно-белую маску (т.е. два класса). Попробуйте банально закрыть участок картинки чем-нибудь и перераспознать. Или светофор на переходе добавить.
cepera_ang
Вы сравниваете детектор, который вашу конкретную ситуацию никогда не видел и всё равно нашёл все автомобили, где очевидно, что это автомобили, а не фонарные столбы со своей сегментацией, которую вы натренировали и проверяете на одних и тех же картинках и которая отмечает почти все белые точки как автомобили, да и дорогу вы в конечном итоге вручную нарисовали, потому что автоматическая сегментация налепила дороги везде.
Расскажите чего вы добиться-то хотите в итоге? Чтобы с каждого отдельного ракурса и каждой камеры нужно было эксперта по нейросетям рядом садить, чтобы он разметочку сделал, а потом сеть перетренировал, а потом вручную нужные зоны выделил и подобрал коэффициенты загруженности и т.д.?
YakMik Автор
Я хотел всего лишь показать, что все делается легко и быстро) и за один вечер можно получить громкое название инженер глубокого обучения)
lair
Получить — нельзя. Можно себе написать.
Ну так написать можно вообще все что угодно, это несложно. Для этого и вечер не нужен, достаточно пары минут.
cepera_ang
Мне кажется, что вы добились противоположного результата — прекрасно показали за что именно берут деньги настоящие носители громкого звания инженер глубокого обучения.
В частности, за понимание того, где искать prior art, знать какие ресурсы доступны для решения разных классов задач, иметь обзор области и оценивать сложность (понимать, чем решение за пять минут выдающее на одних и тех же картинках какую-то мазню отличается от решения, которое будет выдавать нужное в рабочих условиях).
А сейчас это как если кому-то показали hello world, он скопировал, но заменил на Hello Vasya и начал рассуждать о том, что "всё в принципе понятно, можно стать программистом за один вечер"
YakMik Автор
Напишите то что сделали вы) а то я чувствую ваше эго задели)
cepera_ang
Хотел было написать нормальный комментарий, как бы я стал решать задачу поиска машинок, где данные подходящие и размеченные с камер взять, какие детекторы/сегментаторы можно пофайнтюнить, как на видеопотоке улучшить, потом подумал что и задачи-то у вас такой не было, а больше-то сюда в комментарии никто и не зайдёт. Поэтому и забил, эго опять же задетое.
А вашему успеху с сегментацией рад, не у всех так легко заходит сходу, попробуйте на соревнование по сегментации зайти, чем чёрт не шутит, может получится с ноги превзойти "экспертов" (тем более там 90% студенты, да начинающие). Заодно и пользу науке/медицине принесёте и денег подзаработаете.
YakMik Автор
Предоставьте хотя бы ссылку на этот детектор автомобилей, так и быть, сам даже попробую использовать, не будете напрягаться) но те которые использовал я работают не очень качественно, а те которые качестаенно работают стоят не малых денег, так как учитывая каких сил стоит их разработка, вряд ли кто то будет их дарить просто так.
lair
Если вы внимательно посмотрите в тред, то увидите, что я вам никакой детектор автомобилей не предлагал. Я спорю с утверждением "от расположения камеры, ее оптических искажений и т.д. для качественной сегментации необходима своя обучающая выборка".
Это, кстати, повод задуматься над (вашим) утверждением "сегментировать изображения сейчас максимально просто и быстро, вся проблема упирается только в очень трудоёмкую часть создания обучающей выборки".
cepera_ang
Особенно учитывая, что сложность разметки под сегментацию раз в пятьдесят выше, чем под детекцию :)
YakMik Автор
Тааааак) я про это и говорил) что все максимально просто за исключением создания тестовых выборок, а учитывая средний уровень ЗП то у нас куча народа готова будет дома сидеть за эти же деньги, работать в свободное время и зарабатывать те же деньги, да я бы и сам не отказался позалипать во время просмотра какого-нибудь сериальчика) Короче нужна платформа, где народ сможет зарабатывать как в Яндекс.Еда и Яндекс.Такси)
lair
Ну так есть уже.
YakMik Автор
А что, не просто сегментировать?) Просто все эти громкие названия не несут за собой вообще ничего) я про этих инженеров глубокого обучения и биг дата)
lair
Нет, не просто.
Гм, а DeepLab v3+, которым вы пользуетесь — он сам зародился, как мышь в сене? Или все-таки его сделали инженеры Google AI?
YakMik Автор
Не, ну это инженеры) я не спорю) вы создавали какую нибудь архитектуру с нуля сами?) если да, то да, вы инженер) но скорее всего использовали готовые схемы
Выразился не очень, просто в большинстве случаем используют готовые архитектуры)
lair
Нет, а зачем?
Не обязательно. Много архитектур создается исследователями. А инженеры их потом внедряют.
Ну да, задача инженера — выбрать максимально удовлетворяющее задаче решение. Если готовая архитектура удовлетворяет — то зачем придумывать свою? Работа инженера от этого никуда не делась.
cepera_ang
Директор по ИИ в Тесле — инженер? Инженер! И он сказал: "Don't be a hero. There is no need to invent your own unique architecture, just take what's already best".
И это не обсуждая вопрос того, что изобретать новое — задача исследователя, а не инженера. Задача инженера — создавать рабочие системы, продукты, в том числе и из готовых частей, коих сейчас даже больше, чем реально уследить.
cepera_ang
Первый попавшийся детектор на базе OpenImages:
YakMik Автор
Вы вообще видите свои результаты? они ловятся только вблизи, да это тоже классный результат учитывая что ничего делать не нужно
cepera_ang
А вы свои видите? Игнорируете тот факт, что вы вручную выделили область интереса и по сути считаете процент из этой ручной области, который определился как не дорога. А это для нейросети весьма просто, да, даже с четырёх кадров, особено учитывая, что вы тренируете и тестируете на одной и той же статической области. По сути, у вас нейронка за 60 эпох научилась определять "где серенькое — там дорога", а дальше вы руками подбираете "коэффициент несеренького"
YakMik Автор
Разрешение камеры 2мп, и ночью если вы обратите внимание, все что видно от автомобиля это стоп сигналы, точнее размазанные световые круги от стоп сигналов, естественно я пробовал натренированную сетку и результаты там были не очень) странно, вроде deep learning это ваш профиль)
lair
Яндекс.Толока, Amazon Mechanical Turk, AWS SageMaker Ground Truth.
Вот вам конкретно разметка видео.
YakMik Автор
Это не совсем то что я имел ввиду, в толоке нужно разбираться в задаче, устанавливать программы какие то, кучу времени потратить на то чтобы начать, а тут просто зашёл на определенную страничку и вам там весь функционал, просто тыкайте мышкой, чтобы каждый мог начать это делать буквально за 10 мин)
lair
Я вам специально ссылку на Ground Truth привел.
Аналогично есть у GCP (и у Azure тоже должно быть, я сходу найти не могу).
YakMik Автор
Вы этим пользовались?)
lair
Нет.
drWhy
«В современном мире задача сегментации как оказалось решается на раз-два, хотя я думал что это что-то сложное и удивительное. Все что нужно, это прочитать пару статей, установить определенные библиотеки и разметить данные, на все про все нужно пару часов времени, кроме создания тестовой выборки.»
КМК смотря что потом делать с полученными данными. К примеру, если прокладывать маршрут быстрой/тяжёлой техники то пары библиотек и наспех собранной тестовой выборки может не хватить.
YakMik Автор
Так там и бюджеты другие, а для домашнего пользования, все делается легко и непринужденно)