【dlib代码解读】人脸检测器的训练

基于dlib训练自己的人脸检测器
摘要由CSDN通过智能技术生成

#1. 综述
首先给出实验结果。训练得到的基于hog的人脸检测器如图左,可以看出这是一个主要针对正脸的人脸检测器。对几张测试图片的人脸检测效果如图右:
这里写图片描述
以下给出完整的人脸检测器训练代码(详细代码解读请看第2部分):

/*faceDetectorTrain.cpp
function:借助dlib训练自己的人脸检测器(参考dlib/examples/fhog_object_detector_ex)
date:2016/11/5
author:Elaine_Bao
*/

#include <dlib/svm_threaded.h>
#include <dlib/gui_widgets.h>
#include <dlib/image_processing.h>
#include <dlib/data_io.h>

#include <iostream>
#include <fstream>

using namespace std;
using namespace dlib;

// ----------------------------------------------------------------------------------------

int main(int argc, char** argv)
{

	try
	{
		//一、preprocessing
		//1. 载入训练集,测试集
		const std::string faces_directory = "faces";
		dlib::array<array2d<unsigned char> > images_train, images_test;
		std::vector<std::vector<rectangle> > face_boxes_train, face_boxes_test;

		load_image_dataset(images_train, face_boxes_train, faces_directory + "/training.xml");
		load_image_dataset(images_test, face_boxes_test, faces_directory + "/testing.xml");

		//2.图片上采样
		upsample_image_dataset<pyramid_down<2> >(images_train, face_boxes_train);
		upsample_image_dataset<pyramid_down<2> >(images_test, face_boxes_test);
		
		//3.训练图片做镜像处理,扩充训练集
		add_image_left_right_flips(images_train, face_boxes_train);

		//二、training
		//1.定义scanner类型,用于扫描图片并提取特征(HOG)
		typedef scan_fhog_pyramid<pyramid_down<6> > image_scanner_type;
		image_scanner_type scanner;
		
		//2. 设置scanner扫描窗口大小
		scanner.set_detection_window_size(80, 80);
		
		//3.定义trainer类型(SVM),用于训练人脸检测器				  
	structural_object_detection_trainer<image_scanner_type> trainer(scanner);
		// Set this to the number of processing cores on your machine.
		trainer.set_num_threads(4);
		// 设置SVM的参数C,C越大表示更好地去拟合训练集,当然也有可能造成过拟合。通过尝试不同C在测试集上的效果得到最佳值
		trainer.set_c(1); 
		trainer.be_verbose();
		//设置训练结束条件,"risk gap"<0.01时训练结束,值越小表示SVM优化问题越精确,训练时间也会越久。
		//通常取0.1-0.01.在verbose模式下每一轮的risk gap都会打印出来。
		trainer.set_epsilon(0.01);

		//4.训练,生成object_detector
		object_detector<image_scanner_type> detector = trainer.train(images_train, face_boxes_train);

		//三、测试
		// 输出precision, re
  • 12
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值