我正在尝试用C++实现P. Viola和M. Jones检测框架(一开始,只是序列分类器 - 不是级联版本).我认为我设计了所有必需的类和模块(例如积分图像,Haar特征),尽管有一个 - 最重要的:AdaBoost核心算法.
我读过P. Viola和M. Jones的原始论文和许多其他出版物.不幸的是,我仍然不明白我应该如何找到一个弱分类器的最佳阈值?我发现只有小的参考"加权中位数"和"高斯分布"算法和许多数学公式......
我曾尝试使用OpenCV Train Cascade模块源作为模板,但它非常全面,因此对代码进行逆向工程非常耗时.我还编写了自己的简单代码来理解Adaptive Boosting的概念.
问题是:你能解释一下计算一个弱分类器最佳阈值的最佳方法吗?
下面我将介绍AdaBoost伪代码,从Google中的样本重写,但我不相信它是否正确接近.计算一个弱分类器非常慢(几个小时),我对计算最佳阈值的方法有疑问.
(1) AdaBoost::FindNewWeakClassifier
(2) AdaBoost::CalculateFeatures
(3) AdaBoost::FindBestThreshold
(4) AdaBoost::FindFeatureError
(5) AdaBoost::NormalizeWeights
(6) AdaBoost::FindLowestError
(7) AdaBoost::ClassifyExamples
(8) AdaBoost::UpdateWeights
DESCRIPTION (1)
-Generates all possible arrangement of features in detection window and put to the vector
DO IN LOOP
-Runs main calculating function (2)
END
DESCRIPTION(2)
-Normalizes weights (5)
DO FOR EACH HAAR FEATURE
-Puts sequentially next feature from list on all integral images
-Finds the best threshold …Run Code Online (Sandbox Code Playgroud) pattern-recognition artificial-intelligence machine-learning computer-vision viola-jones
我正在寻找关于加权中值算法和/或C++中的示例代码的计算的好的学习材料.我的中位数的权重是0到1之间的值.你能推荐一些链接吗?
我SEH exceptions在StackOverflow和CodeProject.net上读过很多文章.
SEH exceptions在我的C++程序中实现处理后,我受到堆栈溢出异常的影响,我的软件没有捕获它.
经过下一部分研究后我明白,以编程方式检测这种异常是不可能的,因为我们没有可用的堆栈地址空间,因此程序内存已损坏.
我想问你有关处理堆栈溢出异常的经验.它看起来像是一个挑战,如果在非托管代码编程语言中不可能,我真的很感兴趣?
下面我将介绍我的示例程序(C++)的一部分,它可以重现stack overflow exception.它适用于任何SEH exception,但不是堆栈溢出:
LONG WINAPI SehHandler(PEXCEPTION_POINTERS pExceptionPtrs)
{
cerr << "Handled SEH exception!\n";
cerr << "ContextRecord: " << pExceptionPtrs->ContextRecord << endl;
cerr << "ExceptionRecord: " << pExceptionPtrs->ExceptionRecord << endl;
// Write minidump file
CreateMiniDump(pExceptionPtrs);
// Terminate process
TerminateProcess(GetCurrentProcess(), 1);
return EXCEPTION_EXECUTE_HANDLER;
}
int fib(unsigned int n) {
if(n == 0) return 0;
if(n == 1) return 1;
return fib(n-1)+fib(n-2);
}
int main(){
SetUnhandledExceptionFilter(SehHandler);
cout << fib(1000000); …Run Code Online (Sandbox Code Playgroud)