Перейти к содержимому
Compvision.ru
Loko

Распознавание дорожных знаков

Recommended Posts

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

Определил следующие этапы решения проблемы:

1) видеопоток рассматриваем как совокупность кадров и работаем с каждым из них

2) на кадре ищем область, где располагается дорожный знак

3) работаем с каждой найденой областью в оттенках серого. Приводим к единому размеру (скажем 30x30) и какой-то усредненной яркости.

4) используем нейросеть (какую бибилиотеку лучше для этого использовать?) для идентификации картинки 30x30 как одного из дорожных знаков

По первому пункту проблем нет.

По второму двигался в двух направлениях:

1) распознавание по цвету. Итог: из-за того, что освещение может быть различным невозможно подобрать такие границы цвета, чтобы однозначно идентифицировать скажем ВЕСЬ красный обод запрещающего знака. Максимум что возможно получить очень рваную битовую карту обода знака. Преобразования не помогают - большие расстояния между пикселями. По скоплению точек на битовой карте человек может легко и однозначно классифицировать форму знака - труегольник, круг, квадрат. Как заставить зделать тоже самое opencv?

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

Нужен совет опытных форумчан в каком направлении двигаться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1. (опционально)находить знак по форме круг\квадрат с помощью хоуга или chamfer matching.

http://docs.opencv.org/doc/tutorials/imgproc/imgtrans/hough_circle/hough_circle.html

http://opencv-code.com/tutorials/automatic-perspective-correction-for-quadrilateral-objects/

2. использовать SVM для классификации.

Или же тупо проходить окном определенного размера по разным скейлам изображения и использовать SVM для классификации того что попадает в окно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Для детектирования использовать LatentSVM.

Для распознавания использовать глубокую сеть с предобучением через отжиг (на задаче распознавания знаков на таких сетях на практике достигают точности в районе 99,8%).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Для детектирования использовать LatentSVM.

Для распознавания использовать глубокую сеть с предобучением через отжиг (на задаче распознавания знаков на таких сетях на практике достигают точности в районе 99,8%).

От Вас первый раз услышал про LatentSVM. Попробовал пример из состава opencv. Честно говоря, впечатлило, но есть недостаток - время выполнения 13 секунд на детектирование кота. Я так думаю, Вы советовали применить детектирование уже после порогового преобразования по цвету, т.е. на битовую карту со рваными контурами? Может быть на такой входной картинке время будет меньше. Или испльзуют сторонние библиотеки не из состава opencv?

Дайте ссылочку как создавать свои модели.

Я может быть пока не въехал во весь сленг. Что значит "предобучением через отжиг"? Подойдет библиотека FANN или используют что-то другое?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Или же тупо проходить окном определенного размера по разным скейлам изображения и использовать SVM для классификации того что попадает в окно.

Напишите пару слов поподробней, если не сложно. Что такое скейлы?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Напишите пару слов поподробней, если не сложно. Что такое скейлы?

ну стандартный подход sliding window detector, т.к. рамка заданного размера, то изображение уменьшается (делается пирамида из изображений).

и получается что то типа

for all scales

for all rects

compute features

do prediction

получается относительно тормозно.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

"Скейл" = Scale - масштаб, в данном случае.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

От Вас первый раз услышал про LatentSVM. Попробовал пример из состава opencv. Честно говоря, впечатлило, но есть недостаток - время выполнения 13 секунд на детектирование кота. Я так думаю, Вы советовали применить детектирование уже после порогового преобразования по цвету, т.е. на битовую карту со рваными контурами? Может быть на такой входной картинке время будет меньше. Или испльзуют сторонние библиотеки не из состава opencv?

Дайте ссылочку как создавать свои модели.

Я может быть пока не въехал во весь сленг. Что значит "предобучением через отжиг"? Подойдет библиотека FANN или используют что-то другое?

С FANN не работал - не знаю.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

С FANN не работал - не знаю.

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

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

И какое количество различных изображений в обучающей выборке подавать на вход для одного класса дорожного знака?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

По поводу подготовки изображений, можно нормировать значения яркости (например, чтобы их среднее было в 0, а дисперсия равнялась 1).

Подавать на вход сети их вытянув изображение в один вектор (тут особо не пофантазируешь).

И какое количество различных изображений в обучающей выборке подавать на вход для одного класса дорожного знака?

штук 200-1000 думаю должно хватить, здесь прямая связь с качеством распознавания.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

По поводу подготовки изображений, можно нормировать значения яркости (например, чтобы их среднее было в 0, а дисперсия равнялась 1).

Извиняюсь за наверное глупый вопрос, а как это сделать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

см. meanStdDev

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

см. meanStdDev

Спасибо, будем пробовать)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×