OpenCV:OpenCV目标检测Boost方法单独训练
??????? 在古老的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" { #endifcvBoost_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
?
總結
以上是生活随笔為你收集整理的OpenCV:OpenCV目标检测Boost方法单独训练的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 邮政储蓄银行查询余额怎么查
- 下一篇: 中职学生资助卡可以当银行卡用吗