使用 LBP 训练 Haar 级联的问题
Troubles on training Haar cascade with LBP
我正在尝试使用 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
表示"there's one object between (0,0) and (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
使用这些参数:
PARAMETERS:
cascadeDirName: cascade/
vecFileName: ../logo.vec
bgFileName: ../Negatives/bg.txt
numPos: 2500
numNeg: 3019
numStages: 25
precalcValBufSize[Mb] : 256
precalcIdxBufSize[Mb] : 256
stageType: BOOST
featureType: LBP
sampleWidth: 24
sampleHeight: 24
boostType: GAB
minHitRate: 0.995
maxFalseAlarmRate: 0.5
weightTrimRate: 0.95
maxDepth: 1
maxWeakCount: 100
我有两种错误:
- OpenCV 错误:cvPreprocessIndexArray 文件 /tmp/buildd/opencv-2.3.1/modules/ml/src/inner_functions.cpp,第 432 行中的一个参数值超出范围(未选择 components/input_variables!)
在抛出 'cv::Exception' 的实例后调用终止
what(): /tmp/buildd/opencv-2.3.1/modules/ml/src/inner_functions.cpp:432: error: (-211) 没有选择 components/input_variables!在函数 cvPreprocessIndexArray
...
当您在 图像数量 和 -num
参数之间没有给出显着差异时,通常会发生此错误。所以,让我们尽量少给100!!
好吧,当我将参数调整为不从数组中退出时,我得到了与图像相同类型的输出,但是我得到了这个错误:
OpenCV Error: Assertion failed (tempNode->left) in write, file /tmp/buildd/opencv-2.3.1/modules/traincascade/boost.cpp, line 628
terminate called after throwing an instance of 'cv::Exception'
what(): /tmp/buildd/opencv-2.3.1/modules/traincascade/boost.cpp:628: error: (-215) tempNode->left in function write
Aborted
我试过:
- 更改图像的最终尺寸(24x24、36x36...)
- 正在更改
-mode
参数。
- 尝试将#positiveSamples < #negativeSamples 和#positiveSamples > #negativeSamples
我必须做的是使用 LBP(不是 HAAR)进行强制性训练。有人知道吗?
提前致谢。
卸载并重建 OpenCV 解决了问题。
我正在尝试使用 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
表示"there's one object between (0,0) and (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
使用这些参数:
PARAMETERS:
cascadeDirName: cascade/
vecFileName: ../logo.vec
bgFileName: ../Negatives/bg.txt
numPos: 2500
numNeg: 3019
numStages: 25
precalcValBufSize[Mb] : 256
precalcIdxBufSize[Mb] : 256
stageType: BOOST
featureType: LBP
sampleWidth: 24
sampleHeight: 24
boostType: GAB
minHitRate: 0.995
maxFalseAlarmRate: 0.5
weightTrimRate: 0.95
maxDepth: 1
maxWeakCount: 100
我有两种错误:
- OpenCV 错误:cvPreprocessIndexArray 文件 /tmp/buildd/opencv-2.3.1/modules/ml/src/inner_functions.cpp,第 432 行中的一个参数值超出范围(未选择 components/input_variables!) 在抛出 'cv::Exception' 的实例后调用终止 what(): /tmp/buildd/opencv-2.3.1/modules/ml/src/inner_functions.cpp:432: error: (-211) 没有选择 components/input_variables!在函数 cvPreprocessIndexArray
...
当您在 图像数量 和 -num
参数之间没有给出显着差异时,通常会发生此错误。所以,让我们尽量少给100!!
好吧,当我将参数调整为不从数组中退出时,我得到了与图像相同类型的输出,但是我得到了这个错误:
OpenCV Error: Assertion failed (tempNode->left) in write, file /tmp/buildd/opencv-2.3.1/modules/traincascade/boost.cpp, line 628 terminate called after throwing an instance of 'cv::Exception' what(): /tmp/buildd/opencv-2.3.1/modules/traincascade/boost.cpp:628: error: (-215) tempNode->left in function write
Aborted
我试过:
- 更改图像的最终尺寸(24x24、36x36...)
- 正在更改
-mode
参数。 - 尝试将#positiveSamples < #negativeSamples 和#positiveSamples > #negativeSamples
我必须做的是使用 LBP(不是 HAAR)进行强制性训练。有人知道吗?
提前致谢。
卸载并重建 OpenCV 解决了问题。