2017-06-05 58 views
0

因此,我遵循本指南來培訓我自己的HOG行人檢測器。 https://github.com/DaHoC/trainHOG/wiki/trainHOG-Tutorial如何在OpenCV 2.4.13中導入經過訓練的SVM檢測器

並且它成功生成了4個文件。

  • cvHOGClassifier.yaml
  • descriptorvector.dat
  • features.dat
  • svmlightmodel.dat

有誰知道如何加載descriptorvector.dat文件作爲載體? 我試過這個,但失敗了。

vector<float> detector; 
    std::ifstream file; 
    file.open("descriptorvector.dat"); 
    file >> detector; 
    file.close(); 

這是我最終想要使用的東西。

gpu::HOGDescriptor hog(Size(64, 128), Size(16, 16), Size(8, 8), Size(8, 8),9); 
    hog.setSVMDetector(detector); 

預先感謝您!

回答

0

如果您已經訓練了您的SVM,您可以將權重和截距保存在TXT文件中,然後將其加載到數組/矢量中。那麼你將使用它作爲如下:

std::vector<float> descriptorsValues; //A vector to store the computed HoG values 
std::vector<cv::Point> locations; 
hog.compute(image, descriptorsValues, cv::Size(0, 0), cv::Size(0, 0), locations); 
double res = 0; 
for (int i = 0; i < svmDimension - 1; i++) 
{ 
    res += w[i] * descriptorsValues.at(i); 
} 
res = res + w[svmDimension - 1];    
return res; 

其中svmDimension是陣列/載體,其包含權重SVM隨後由SVM截距,和res是SVM響應