В предыдущей части мы рассмотрели один из методов для детектирования и распознавания дорожных знаков. Однако рассмотренный метод имеет свои плюсы и недостатки. В этой части мы рассмотрим еще один метод для решения данной задачи а также все подводные камни которые встретились в данном методе.
И так, речь пойдет об обучаем методе на основании метода Виолы-Джонса (Viola-Jones method).
Для данного метода нам необходима выборка фотографий с дорожными знаками. Нам необходимо не мене 1000 разных вариантов самого знака. И тут возникает главный вопрос «где взять выборку для обучения?». На просторах интернета есть пару вариантов где можно посмотреть ее раз два три
Одна в нашей работе была возможность нарезать самостоятельно такое количество знаков. И мы смогли получить более 1000 элементов.
После того как мы получили знаки, нам теперь необходимо сделать так называемую «отрицательную» выборку. Данная выборка включает в себя фотографии, на которых нету дорожного знака. Хочу обратить внимание, что при создание данной выборки учитывается окружение в котором будет тестироваться алгоритм. Что это означает, если Вы сделаете негативную выборки из фотографий сделанных в домашней обстановке а алгоритм будет тестироваться на улице, то алгоритм работать не будет. Что является большим минусом.
Позитивная выборка
Для негативной выборки необходимо в несколько раз больше изображений нежели для позитивной. Если У вас 1000 элементов позитивной выборки то для негативной необходимо не менее 2000.
И так вооружившись фотографиями мы приступили к создание каскада. Для этого в составе OpenCV есть готовые утилиты для работы.
Создав выборку мы поставили для обучения наш каскад. В данном примеры мы указали что количество положительных элементов 800, хотя по факту 1000. Это указывается для того что бы в процессе у нас не возникло ошибок. Обычно советуют указывать на 20% меньше чем существует.
opencv_traincascade -data ./cascade/ -vec samples.vec -bg bad.txt -numStages 16 -minHitRate 0.998 -maxFalseAlarmRate 0.5 -numPos 800 -numNeg 1800 -w 20 -h 20 -mode ALL -precalcValBufSize 2048 -precalcIdxBufSize 2048
Поставив на обучения приключения на этом не закончились. В первом разе ей что то не понравилось и она про обучавшись 4 чеса просто повисла. Поставил снова на обучение мы прождали порядка 2ух дней пока он завершил свое обучение. И при этом нам еще повезло, по комментариям в интернете некоторые каскады обучались порядка недели.
В результате обучения мы получили каскад, который мы в дальнейшем будем использовать в программе.
Особенность данного проявляется в том что он обучаемый и распознает знаки которые могут быть повернутыми или же частично попали в кадр. Также данный метод не учитывает цветовую характеристику, так как поиск производится на градации серого и по этому знаки которые потеряли в цвете детектируются данным алгоритмом.
Из минусов можно отметить что для создание каскада необходимо большая выборка элементов для обучения, которая может и не оказаться под рукой или же создание выборки окажется дорогостоящим процессом.
Процент обнаружения знака составило более 90%.
Комментарий (0)