【发布时间】:2020-03-16 18:16:50
【问题描述】:
我在使用 detectmultiScale() 函数时遇到问题。我正在开发多个对象(汽车、树、建筑物……)的对象识别器。为此,我训练了 n 个二进制 SVM(object_i/no_object_i)。在测试集(具有相同大小的补丁)上,我得到大约 90% 的准确率,这非常好。然而,当我使用它们来检测更大图像中的对象(即使用 MultiScale() )时,无论我使用什么模型,我都会在图像中间得到一个漂亮的窗口。
您对这里可能出现的问题有任何想法吗?我使用了 detect() 函数,在这种情况下,我得到了完全相反的情况。到处都是正方形。
我还给出了一个向量作为函数参数以获得置信权重。但是,返回的值始终在 20 - 30 左右。有人知道它们是什么意思吗?它应该针对哪个因素进行归一化?
// get the support vectors
cv::Mat sv = svm->getSupportVectors();
const int sv_total = sv.rows;
// get the decision function
cv::Mat alpha, svidx;
double rho = svm->getDecisionFunction(0, alpha, svidx);
std::vector< float > hog_detector(sv.cols + 1);
memcpy(&hog_detector[0], sv.ptr(), sv.cols * sizeof(hog_detector[0]));
hog_detector[sv.cols] = (float)-rho;
//hog.winSize = cv::Size(64, 48);
hog.setSVMDetector(hog_detector);
//look for cars in an image:
cv::Mat test_img = cv::imread(SCENE_IMG_PATH + "street_par150.jpg");
cv::imwrite("result_1.jpg", test_img);
std::vector<cv::Rect> obj_locations;
std::vector<double> coinfidence_value;
hog.detectMultiScale(test_img, obj_locations, coinfidence_value,0.00, cv::Size(4,4), cv::Size(0, 0), 1.05, 2.0, false);
//what with normal?
std::vector<cv::Point> obj_locs;
std::vector<double> coinfidence_values;
hog.detect(test_img, obj_locs,coinfidence_values, (0.0), cv::Size(4, 4), cv::Size(0,0));
【问题讨论】: