OpenCV:OpenCV目标检测Boost方法单独训练

59 篇文章 1 订阅
33 篇文章 1 订阅

        在古老的CNN方法出现以后,并不能适用于图像中目标检测。20世纪60年代,Hubel和Wiesel( 百度百科 )在研究猫脑皮层中用于局部敏感和方向选择的神经元时发现其独特的网络结构可以有效地降低反馈神经网络的复杂性,继而提出了卷积神经网络(Convolutional Neural Networks-简称CNN)。

        参考:DNN的演进结构——CNN   

        AdaBoost,是英文"Adaptive Boosting"(自适应增强)的缩写,由Yoav Freund和Robert Schapire在1995年(Adaboost原理与推导)提出。它的自适应在于:前一个基本分类器分错的样本会得到加强,加权后的全体样本再次被用来训练下一个基本分类器。同时,在 每一轮中加入一个新的弱分类器,直到达到某个预定的足够小的错误率或达到预先指定的最大迭代次数。

       不同于同属于集成算法的随机森林算法,随机森林使用了模型平均,而boost后一层是学习前一层的残差,因此产生了“boost”功能。

       boost算法的功能致力于降低模型偏差,增强学习器的准确性;随机森林使用模型平均,致力于降低模型的方差,增强模型的泛化性能

       使用OpenCV作图像检测, Adaboost+haar训练过程,工程已经生成了opencv_haartraining.exe文件。

       打开OpenCV的源码工程,发现函数调用栈是这样的。

 

1、对OpenCV源代码载入工程

      源代码apps里面opencv_haartraining 工程的sources\apps\haartraining\haartraining.cpp

      main函数使用了cvCreateTreeCascadeClassifier()函数,函数体在\sources\apps\haartraining\cvhaartraining.cpp文件

在cvhaartraining.h 前面添加 #define cvBoost_API __declspec (dllexport) 

函数名

	void cvCreateTreeCascadeClassifier(const char* dirname,
		const char* vecfilename,
		const char* bgfilename,
		int npos, int nneg, int nstages,
		int numprecalculated,
		int numsplits,
		float minhitrate, float maxfalsealarm,
		float weightfraction,
		int mode, int symmetric,
		int equalweights,
		int winwidth, int winheight,
		int boosttype, int stumperror,
		int maxtreesplits, int minpos, bool bg_vecfile = false);

修改为:

#ifdef __cplusplus
extern "C"
{
#endif
	cvBoost_API void __stdcall cvCreateTreeCascadeClassifier(const char* dirname,
		const char* vecfilename,
		const char* bgfilename,
		int npos, int nneg, int nstages,
		int numprecalculated,
		int numsplits,
		float minhitrate, float maxfalsealarm,
		float weightfraction,
		int mode, int symmetric,
		int equalweights,
		int winwidth, int winheight,
		int boosttype, int stumperror,
		int maxtreesplits, int minpos, bool bg_vecfile = false);

}

对应函数体的头修改为:

cvBoost_API void cvCreateTreeCascadeClassifier(const char* dirname,
//__declspec (dllimport) void __stdcall cvCreateTreeCascadeClassifier(const char* dirname,
                                    const char* vecfilename,
                                    const char* bgfilename,
                                    int npos, int nneg, int nstages,
                                    int numprecalculated,
                                    int numsplits,
                                    float minhitrate, float maxfalsealarm,
                                    float weightfraction,
                                    int mode, int symmetric,
                                    int equalweights,
                                    int winwidth, int winheight,
                                    int boosttype, int stumperror,
                                    int maxtreesplits, int minpos, bool bg_vecfile )
{

}

去掉opencv_haartraining 工程的main函数,
修改opencv_haartraining 工程exe 替换为 dll工程,则可以生成lib和dll文件,可添加引用。

(若不生成lib文件,则表示在opencv_haartraining_engine.lib  中导出了函数声明,需要引用此库)

 

函数体为:




 

CNN 维基百科:https://en.wikipedia.org/wiki/Convolutional_neural_network

Adaboost维基百科: https//en.wikipedia.org/wiki/AdaBoost

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值