2011-09-07 130 views
4

我嘗試使用OpenCV2.3實現基於SVM和HOG的人檢測系統。但我被困住了。OpenCV + HOG + SVM:支持SVM單特徵向量所需的幫助

我來到目前爲止: 我可以從圖像數據庫計算HOG值,然後用LIBSVM計算SVM向量,所以我得到了例如1419個SVM向量,每個值爲3780。

OpenCV只是想要方法hog.setSVMDetector()中的一個特徵向量。因此,我必須計算LIBSVM計算出的1419個SVM向量中的一個特徵向量。

我發現一個提示,如何計算此單個特徵向量:link

「在成分中的檢測的特徵向量(其中i的範圍是從例如0-3779)構建出的總和的支持向量i *該支持向量的alpha值,例如 det[i] = sum_j (sv_j[i] * alpha[j]),其中j是支持向量的數量,i 是支持向量的組件數「

根據這一點,我的日常工作是這樣的:。 我把我的第一次的第一個元素SVM載體,具有阿爾法值相乘,並與第二SVM矢量已經乘以alpha值,第一個元素添加它...

但綜合各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, 

如果peopledetect.cpp(和hog.cpp在OpenCV的源)對它們進行比較,爲默認矢量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之間的邊界,但是我的數值超過了它們。

我想,我的單一特徵向量例程需要一些調整,有什麼想法嗎?

問候,

克里斯托夫

回答

0

的聚合載體的價值觀不看高。
我用的loadSVMfromModelFile()位於http://lnx.mangaitalia.net/trainer/main.cpp
我不得不從代碼中刪除svinstr.sync();,因爲它導致部分線路丟失,並得到錯誤的結果。
我對文件的其餘部分了解不多,我只使用這個函數。