我正在使用一个程序对道路信号进行分类,我希望获得0-1之间的预测信心。
好吧,我试图计算置信度并将其与概率进行比较,但是它不起作用,因为有图像表示(exp 60 Km / h),且速率低于0.9,另一个图像表示(也表示60 Km / h) )的比率更高,为0.9。
但对于无法识别的流量唱歌会重复同样的事情:有些图像不代表流量唱歌,其速率小于0.9,其他图像的速率大于0 9。
我尝试了这个
decision = svmob.predict(testData, true);
confidence = 1.0 / (1.0 + exp(-decision));
我发现here,但是在OpenCv3.0中不起作用。
你能帮我吗。
比我尝试过的要多:
int classObject = decision.at<float>(currentFile) < 0.0 ? 1 : -1;
float confidence = classObject == -1 ? (1.0 / (1.0 + exp(-decision.at<float>(currentFile)))) : (1.0 - (1.0 / (1.0 + exp(-decision.at<float>(currentFile)))));
if(confidence<0.9)
printf("le panneau n'est pas reconnu");
else
printf("decision = %f, response = %f\n",
decision.at<float>(0), response);
我想知道何去做吗?
最佳答案
在opencv3.0中,我们应该使用接口(interface)Forecast(p,noArray(),cv::ml::StatModel::RAW_OUTPUT)。它的作用等于opencv2.4中的predict(p,true)
Opencv文档解释了接口(interface):C++:float StatModel::predict(InputArray samples,OutputArray results = noArray(),int flags = 0)const
参数:
样本–输入样本,浮点矩阵
结果–结果的可选输出矩阵。
标志–可选标志,取决于型号。某些模型(例如Boost,SVM)可以识别StatModel::RAW_OUTPUT标志,这使方法返回原始结果(总和),而不是类标签。