Обнаружение и распознавание автомобилей с использованием сетей DNN

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

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

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

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

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

Подход к обнаружению

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

После некоторых экспериментов мы решили разделить изображение на 3 отдельные области в качестве первого шага алгоритма. Это важно, поскольку мы хотели вырезать большие области «неба» и нерелевантный пустой контент. Кроме того, параллельная обработка меньших изображений намного эффективнее, чем обработка одного большого изображения с высоким разрешением. Наконец, обработка полного ввода 4K была слишком сложной для оборудования.

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

Для самого обнаружения мы решили использовать трехэтапный подход с использованием 3 индивидуально обученных сетей DNN. Сначала мы обнаруживаем и изолируем сам автомобиль. Затем мы вырезаем номерной знак и, наконец, пропускаем символы через сеть, выбирая отдельные буквы и цифры.

Наконец, данные обнаружения со всех трех изображений объединяются / объединяются, что исключает возможные дубликаты.

Для каждого шага мы использовали специально обученную сеть:

  1. Машины - 90000 итераций
  2. Тарелки - 102 000 итераций
  3. Цифры / буквы - 97 000 итераций

Чтобы подготовить сети, мы много ездили по городу и снимали реальные кадры, чтобы кормить систему обучения… после кропотливого процесса описания и разметки нашей командой QA.

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

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

Почему не OpenALPR?

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

На то есть несколько причин:

  1. Общий подход. Как упоминалось ранее, номерные знаки были всего лишь тестовым примером и сами по себе не представляли для нас интереса. На самом деле мы хотели создать систему для быстрого обнаружения, идентификации, категоризации и реагирования на различные элементы, видимые на дороге, включая, но не ограничиваясь, номерные знаки. Вот почему нам нужно было более глубокое и далеко идущее решение.
  2. Аппаратное ускорение. Мы хотели, чтобы решение было быстрым, и мы хотели, чтобы оно масштабировалось в будущем с учетом технологических достижений в ожидаемой области. Поскольку мы запускаем наше автомобильное программное обеспечение на платформах Nvidia, это означало, что мы хотели иметь поддержку 256 параллельных вычислений ядер CUDA, которые обеспечивает оборудование. Хотя OpenALPR имеет определенный уровень поддержки GPU через лежащий в основе OpenCV, это лишь частично из-за механизма LBP… и мы все равно не смогли заставить его работать на нашей платформе.
  3. Качество обнаружения. OpenALPR и все аналогичные решения оптимизированы для работы с очень конкретным ограниченным набором данных в идеальных условиях освещения / изображения. Номерные знаки различаются в зависимости от страны, как и качество обнаружения OpenALPR. Кажется, он хорошо работает с американскими номерными знаками, в некоторой степени приемлемым с европейскими номерными знаками и трагически падает с сингапурскими номерными знаками, и это просто взгляд на те, которые мы тестировали. Напротив, наше решение на основе глубокого обучения способно обнаруживать сингапурские тарелки с небольшим количеством дополнительных данных обучения.

В общем, изображение номерного знака должно быть в некотором роде идеальным для того, чтобы обнаружение работало приемлемо в OpenALPR - высокая контрастность, темный текст на белом фоне, небольшой перекос / поворот, приемлемое разрешение.

В частности, требование к разрешению означает, что диапазон обнаружения очень ограничен (примечание: при разрешении 4k + широкоугольный объектив изображение пластины с расстояния 10 метров меньше 100 пикселей в ширину и недоступно для обнаружения alpr).

Результаты и сравнение

Номерной знак с высоким разрешением слева может быть обработан OpenALPR, и наше решение одинаково хорошо дает правильный прогноз.

Однако изображение в более низком разрешении на большом расстоянии справа не работает на OpenALPR, но может быть обнаружено нашим решением DNN без проблем.

Кроме того, наше решение может лучше обрабатывать несколько пластин из одного изображения, например:

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

Обратите внимание, что оба изображения могут быть обработаны человеком без проблем. Это определенная схема: часто мы смотрим на изображение, которое прекрасно читается человеком, но просто не соответствует определенным техническим условиям на стороне OpenALPR. Напротив, решения на основе DNN имеют тенденцию приближаться к уровню успеха, аналогичному человеческому («если человек может это прочитать, сеть тоже»).

Таким образом, по нашему опыту, между решениями OpenALPR (и аналогичными) и подходом, основанным на DNN, в практическом тестировании есть по крайней мере значительная разница. Разница видна по всем параметрам: скорости обнаружения, согласованности и физическому диапазону, необходимому для того, чтобы обнаружение вообще работало.

Следующие шаги

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

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

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

Тогда увидимся!

Этот пост написали Михал Доминик Костшева, руководитель отдела специальных проектов, и Артур Бачмага, один из экспертов YND в области искусственного интеллекта. Вам нужна сила мозга? Свяжитесь с нами по адресу [email protected], если у вас возникнут вопросы о проектах ML / AI.

Эта история опубликована в The Startup, крупнейшем предпринимательском издании Medium, за которым следят более 298 432 человека.

Подпишитесь, чтобы получать наши главные новости здесь.