OpenCV + HOG + SVM: нужна помощь с вектором SVM для одного объекта - PullRequest
4 голосов
/ 07 сентября 2011

Я пытаюсь реализовать систему обнаружения людей на основе SVM и HOG, используя OpenCV2.3.Но я застрял.

Я зашел так далеко: я могу вычислить значения HOG из базы данных изображений, а затем вычислять с помощью LIBSVM векторы SVM, поэтому я получаю, например, 1419 векторов SVM с 3780 значениями каждый.

OpenCV просто хочет один вектор объектов в методе hog.setSVMDetector ().Поэтому я должен вычислить один вектор признаков из моих 1419 векторов SVM, которые LIBSVM рассчитал.

Я нашел один совет, как рассчитать этот единственный вектор признаков: ссылка

«детектирование вектор признаков в компоненте я (где я нахожусь в диапазоне, например, 0-3779) построено из суммы векторов поддержки на г * альфа-значение этого опорного вектора, например, det[i] = sum_j (sv_j[i] * alpha[j]), где j это число вектора поддержки, i это число компонент вектора поддержки «

1015 * в соответствии с этим, моим рутинными работает следующим образом:. Я беру первый элемент моего первого вектора SVMумножьте его на альфа-значение и добавьте к первому элементу второго вектора SVM, умноженному на альфа-значение,…

Но после суммирования всех 1419 элементов я получу довольно высокие значения:

16.0657, -0.351117, 2.73681, 17.5677, -8.10134, 
11.0206, -13.4837, -2.84614, 16.796, 15.0564, 
8.19778, -0.7101, 5.25691, -9.53694, 23.9357,

Если сравнить их с вектором по умолчанию в примере OpenCV peopledetect.cpp hog.cpp в источнике OpenCV)

0.05359386f, -0.14721455f, -0.05532170f, 0.05077307f,
0.11547081f, -0.04268804f, 0.04635834f, -0.05468199f, 0.08232084f,
0.10424068f, -0.02294518f, 0.01108519f, 0.01378693f, 0.11193510f,
0.01268418f, 0.08528346f, -0.06309239f, 0.13054633f, 0.08100729f,
-0.05209739f, -0.04315529f, 0.09341384f, 0.11035026f, -0.07596218f,
-0.05517511f, -0.04465296f, 0.02947334f, 0.04555536f,

вы видите, что значения вектора по умолчанию находятся в границах между –1 и +1, но мои значения намного превышают их.

Я думаю, что моя подпрограмма с вектором одного объекта требует некоторой корректировки, любойидеи?

С уважением,

Кристоф

1 Ответ

0 голосов
/ 01 ноября 2011

Значения агрегированного вектора выглядят высокими.
Я использовал loadSVMfromModelFile(), расположенный в http://lnx.mangaitalia.net/trainer/main.cpp
Мне пришлось удалить svinstr.sync(); из кода, так как это привело к потере частей строк и получению неверных результатов..
Я не знаю много об остальной части файла, я использовал только эту функцию.

...