使用 LBP 训练 Haar 级联的问题

Posted

技术标签:

【中文标题】使用 LBP 训练 Haar 级联的问题【英文标题】:Troubles on training Haar cascade with LBP 【发布时间】:2015-09-12 07:05:32 【问题描述】:

我正在尝试使用 haar_cascade 训练一些分支徽标。我所做的是,我拍摄了 2500 张 500 x 500 的平方图片来填充 opencv_createsamples 的样本。然后我将它们生成为:

opencv_createsamples -info 'logo.info' -vec '../logo.vec' -bg '../Negatives/bg.txt' -w 24 -h 24 -num 2500

在我的logo.info 中,我有与每张图片的相对路径相对应的行,1 0 0 500 500 表示“在 (0,0) 和 (500, 500) 之间有一个对象”

然后我将级联训练为:

opencv_traincascade -data 'cascade/' -vec '../logo.vec' -bg '../Negatives/bg.txt' -numPos 2500 -numNeg 3019 -numStages 25 -featureType LBP -w 24 -h 24

使用这些参数:

参数:

cascadeDirName: 级联/

vecFileName: ../logo.vec

bgFileName: ../Negatives/bg.txt

numPos: 2500

numNeg: 3019

numStages:25

precalcValBufSize[Mb] : 256

precalcIdxBufSize[Mb] : 256

stageType:提升

特征类型:LBP

样本宽度:24

样本高度:24

boostType:GAB

minHitRate: 0.995

maxFalseAlarmRate: 0.5

weightTrimRate:0.95

最大深度:1

maxWeakCount: 100

我有两种错误:

    OpenCV 错误:cvPreprocessIndexArray 文件 /tmp/buildd/opencv-2.3.1/modules/ml/src/inner_functions.cpp 中的参数值之一超出范围(未选择组件/输入变量!) 432 在抛出 'cv::Exception' 的实例后调用终止 什么():/tmp/buildd/opencv-2.3.1/modules/ml/src/inner_functions.cpp:432:错误:(-211)未选择组件/输入变量!在函数 cvPreprocessIndexArray

...

当您在 图像数量-num 参数之间没有给出显着差异时,通常会发生此错误。所以,让我们尽量少给100!

好吧,当我将参数调整为不从数组中输出时,我得到与图像相同类型的输出,但出现此错误:

OpenCV 错误:写入时断言失败(tempNode->left),文件 /tmp/buildd/opencv-2.3.1/modules/traincascade/boost.cpp,第 628 行 在抛出 'cv::Exception' 的实例后调用终止 what(): /tmp/buildd/opencv-2.3.1/modules/traincascade/boost.cpp:628: error: (-215) tempNode->left in function write

中止

我试过了:

更改图像的最终尺寸(24x24、36x36...) 更改-mode 参数。 试图放置一个#positiveSamples #negativeSamples

我必须做的是使用 LBP(不是 HAAR)进行强制性培训。有人知道吗?

提前谢谢你。

【问题讨论】:

【参考方案1】:

卸载并重建 OpenCV 解决了这个问题。

【讨论】:

以上是关于使用 LBP 训练 Haar 级联的问题的主要内容,如果未能解决你的问题,请参考以下文章

级联分类器 HAAR LBP 建议

使用OpenCV,Haar级联检测器进行面部眼睛嘴部检测

人脸检测中的 Haar Cascades 与 LBP Cascades [关闭]

OpenCV3.1.0级联分类器训练与使用

OpenCV-Python实战(番外篇)——基于 Haar 级联的猫脸检测器

OpenCV-Python实战(番外篇)——基于 Haar 级联的猫脸检测器