检测算法对比_测试

不同检测算法误检率、漏检率、检测时间对比测试:

void main()
{
	DetectTask* d_task = NewDetectTaskInstance(60,"pico"); //给facedeletedll就是facedeletedll算法,根据参数,有不同的分配算法

	FileSupport file;

	std::string root = "D:\\project\\weifu-jpg"; 
   <span style="white-space:pre">	</span>std::vector<std::string> all = file.get_file_names(root, ".jpg");  
	size_t n = all.size();
	
	int losedet = 0;
	int falsedet = 0;
	clock_t total_time = 0;
	for (size_t i = 0; i < n; i++)
	{
		cv::Mat img = cv::imread(all[i],0);
		
		clock_t tic = clock();
		std::vector<cv::Rect> rects = d_task->detect(img, 60);
		clock_t toc = clock();
		total_time += toc - tic;
		
		if (rects.size() == 0)
			losedet += 1;
		else if (rects.size() > 1)
			falsedet += rects.size()-1;

		for (auto &r : rects)
			cv::rectangle(img, r, cv::Scalar(0,0,255), 3); //把所有检测到的窗口加到图片上去

		cv::imshow("test", img);
		cv::waitKey(1); //opencv显示图片,必须要的waitKay。参数大小不管。
	}
	
	printf("total_time = %d ms\n", total_time);
	printf("losedect: %d/%d = %f\n", losedet, n, double(losedet)/n);
	printf("falsedect: %d/%d = %f\n", falsedet, n, double(falsedet)/n);
}

漏检算法:图片没有检测到窗口算漏检一个。算法bug: 1. 图片中不止一张人脸,算漏检一个。2. 即使检测到一个窗口, 也有可能不是人脸,却算检测到的。

误检算法:检测窗口>1的,把多余1的算成误检窗口。算法bug: 1. 因为背景小人脸也有可能被检测到,算误检,提高了误检率。2.  检测到的主窗口,也有可能不是人脸。


大数据,不能人工数的前提下,目前只有采取这个算法。如果想进一步精确数据,可以改进数据集,即:在无背景,每张只有一张人脸的数据集上测试。(但仍无法避免检测到一个窗口,该窗口不是人脸的情况)





你可能感兴趣的:(检测算法对比_测试)