所以我按照本指南训练自己的行人HOG探测器。 https://github.com/DaHoC/trainHOG/wiki/trainHOG-Tutorial
成功生成了4个文件。
有谁知道如何将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 :(得分: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响应
答案 1 :(得分:0)
您可以读取文件并将每个值推回到float
的数组中,因此首先声明它:
vector<float> myDescriptorVector;
然后推送每个值:
ifstream infile ("yourFile.dat".c_str());
float number;
while (infile >> number)
myDescriptorVector.push_back(number);
return myDescriptorVector;
最后,对HOG使用标准初始化,然后将向量传递到SVM检测器,就像您已经猜到的那样:
hog.setSVMDetector(myDescriptorVector);