Подача HOG в SVM: HOG имеет 9 корзин, но SVM принимает 1D матрицу - PullRequest
3 голосов
/ 15 июля 2011

В OpenCV есть класс CvSVM, который принимает матрицу выборок для обучения SVM.Матрица 2D, с выборками в строках.

Я создал свой собственный метод для генерации гистограммы ориентированных градиентов (HOG) из видеопотока.Для этого я создал 9-канальную матрицу для хранения HOG, где каждый канал соответствует ячейке ориентации.В итоге у меня есть матрица 40х30 типа CV_32FC(9).

. Также я сделал визуализацию для HOG, и она работает.

Я не понимаю, как я должен кормитьэта матрица в OpenCV SVM, потому что, если я сплющу ее, я не вижу, как SVM должен изучать 9D гиперплоскость из 1D входных данных.

1 Ответ

4 голосов
/ 22 июля 2011

SVM всегда получает по одной строке данных на вектор объектов.Таким образом, размерность вектора признаков равна длине строки.Если вы имеете дело с двумерными данными, то для каждого вектора объектов есть 2 элемента.Пример двумерных данных на этой веб-странице:

http://www.csie.ntu.edu.tw/~cjlin/libsvm/

код эквивалентной демонстрации в OpenCV http://sites.google.com/site/btabibian/labbook/svmusingopencv

Дело в том, что даже если вы думаетегистограммы как 2D с 9-элементными ячейками, вектор признаков фактически является уплощенной версией этого.Так что правильно сгладить его в длинный вектор признаков.Результатом для меня стал вектор признаков длины 2304 (16x16x9), и я получаю 100% точность прогноза на небольшом тестовом наборе (то есть, вероятно, он немного меньше 100%, но работает исключительно хорошо).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...