opencv_traincascade训练失败求助:0-stage无法填充数据集
opencv_traincascade 0-stage训练失败:Train dataset for temp stage can not be filled 解决方法
问题重现
执行的训练命令:
C:\Users\gamer\PycharmProjects\bsbot\opencv\build\x64\vc15\bin\opencv_traincascade.exe -data C:\Users\gamer\PycharmProjects\bsbot\capturing\cascade -vec C:\Users\gamer\PycharmProjects\bsbot\pos.vec -bg C:\Users\gamer\PycharmProjects\bsbot\capturing\neg.txt -w 24 -h 24 -numPos 900 -numNeg 2500 -numStages 10
报错输出:
===== TRAINING 0-stage =====
<BEGIN
POS count : consumed 900 : 900
Train dataset for temp stage can not be filled. Branch training terminated.
Cascade classifier can't be trained. Check the used training parameters.
用户已完成排查:
- 核对过参数格式
- 尝试过不同OpenCV版本
- 删除并重新生成pos.vec文件
具体解决步骤
1. 降低numPos参数值
训练过程中会自动过滤部分不符合要求的正样本,numPos不能设置为与pos.vec内的样本总数完全一致。建议先将其下调10%-20%,比如从900改为800,后续训练稳定后再逐步提升:
C:\Users\gamer\PycharmProjects\bsbot\opencv\build\x64\vc15\bin\opencv_traincascade.exe -data C:\Users\gamer\PycharmProjects\bsbot\capturing\cascade -vec C:\Users\gamer\PycharmProjects\bsbot\pos.vec -bg C:\Users\gamer\PycharmProjects\bsbot\capturing\neg.txt -w 24 -h 24 -numPos 800 -numNeg 2500 -numStages 10
2. 检查neg.txt的格式与内容
- 确保每行是负样本图片的路径(相对/绝对路径均可),路径无空格、特殊字符,且所有图片能正常打开
- 删除文件末尾的空行
- 确认实际负样本数量≥设置的
numNeg(2500),不足则补充样本或降低numNeg值
3. 验证pos.vec的有效性
重新生成pos.vec时,确保正样本描述文件(如info.txt)格式正确:每行是图片路径 目标数量 x1 y1 w h ...,且标注的目标尺寸与训练参数-w 24 -h 24完全匹配。生成命令示例:
opencv_createsamples.exe -info info.txt -vec pos.vec -w 24 -h 24 -num 900
4. 清理并检查数据集目录权限
- 删除
-data指定目录下的所有残留文件(之前训练失败的缓存),确保目录为空且程序有读写权限 - 手动创建该目录后再执行训练命令
5. 调整训练严格度并切换OpenCV版本
部分OpenCV 3.x分支存在0-stage训练bug,可切换至OpenCV 4.x稳定版,同时降低初始训练的严格程度:
C:\Users\gamer\PycharmProjects\bsbot\opencv\build\x64\vc15\bin\opencv_traincascade.exe -data C:\Users\gamer\PycharmProjects\bsbot\capturing\cascade -vec C:\Users\gamer\PycharmProjects\bsbot\pos.vec -bg C:\Users\gamer\PycharmProjects\bsbot\capturing\neg.txt -w 24 -h 24 -numPos 800 -numNeg 2500 -numStages 10 -minHitRate 0.99 -maxFalseAlarmRate 0.6
内容的提问来源于stack exchange,提问作者user25624043
相关产品推荐
相关产品推荐

