使用 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 Cascades 与 LBP Cascades [关闭]