во-первых, это мой первый вопрос здесь, поэтому я надеюсь, что смогу объяснить его понятным образом.
Моя цель — обнаружить различные классы дорожных знаков на изображениях. Для этой цели я обучил бинарные SVM, выполнив следующие шаги:
- Сначала я получил базу данных обрезанных дорожных знаков, как та, что по ссылке. Я рассматривал разные классы (запрет, опасность и т. д.) и негативные образы. Все они были масштабированы до 40x40 пикселей.
http://i.imgur.com/Hm9YyZT.jpg
- Я обучил линейные модели SVM для каждого класса (1 против всех), используя HOG в качестве функции. Каждое изображение описывается 1728-мерным признаком. (Я добавляю три вектора признаков для всех трех плоскостей изображения). Я выполнил перекрестную проверку, чтобы установить параметр C, и протестировал ранее невиданные изображения 40x40, и я получил очень точные результаты (оценка F1 более 0,9 для всех классов). Я использовал libsvm для обучения и тестирования.
Теперь я хотел бы обнаруживать знаки на полных дорожных изображениях, сдвигая окно в разных масштабах изображения. Проблема, с которой я столкнулся, заключается в том, что я не смог найти ни одной функции, которая могла бы сделать это за меня (например, DetectMultiScale в OpenCV), и мое решение очень медленное и рудиментарное (я просто выполняю тройной цикл for и для каждого я обрезаю последовательные и перекрывающиеся изображения 40x40, получаю функции HOG и применяю svmpredict для каждого из них).
Может ли кто-нибудь дать мне ключ, чтобы найти более быстрый способ сделать это? Я также подумал о том, чтобы получить вектор признаков HOG всего входного изображения, а затем изменить порядок этого вектора в матрицу, где каждая строка будет иметь признаки, соответствующие каждому окну 40x40, но я не смог найти простой способ сделать это.
Спасибо,