我正在尝试训练级联以检测具有特定结构化文本(MRZ)的区域。 我收集了200份阳性样本和572份阴性样本。
Trainig如下:
opencv_traincascade.exe -data cascades -vec vector/vector.vec -bg bg.txt -numPos 200 -numNeg 572 -numStages 3 -precalcValBufSize 2048 -precalcIdxBufSize 2048 -featureType LBP -mode ALL -w 400 -h 45 -maxFalseAlarmRate 0.8 -minHitRate 0.9988
PARAMETERS:
cascadeDirName: cascades
vecFileName: vector/vector.vec
bgFileName: bg.txt
numPos: 199
numNeg: 572 numStages: 3 precalcValBufSize[Mb] : 2048 precalcIdxBufSize[Mb] : 2048 acceptanceRatioBreakValue : -1 stageType: BOOST featureType: LBP sampleWidth: 400 sampleHeight: 45 boostType: GAB minHitRate: 0.9988 maxFalseAlarmRate: 0.8 weightTrimRate: 0.95 maxDepth: 1 maxWeakCount: 100 Number of unique features given windowSize [400,45] : 8778000
===== TRAINING 0-stage ===== <BEGIN POS count : consumed 199 : 199 NEG count : acceptanceRatio 572 : 1 Precalculation time: 26.994
+----+---------+---------+ | N | HR | FA |
+----+---------+---------+ | 1| 1| 1|
+----+---------+---------+ | 2| 1|0.0244755|
+----+---------+---------+ END>
Training until now has taken 0 days 0 hours 36 minutes 35 seconds.
===== TRAINING 1-stage ===== <BEGIN POS count : consumed 199 : 199 NEG count : acceptanceRatio
0 : 0 Required leaf false alarm rate achieved.
Branch training terminated.
该过程运行约35分钟,产生一个2kB的文件,只有45行,对于良好的级联来说似乎太小了。 不用说,它没有检测到所需的区域。
我试图调整参数但无济于事。
我知道最好使用一组更大的样本,但我认为这个样本数的结果也应该产生一些合理的结果,但不是那么准确。
haar级联是否是检测特定文本区域(MRZ)的好方法? 如果是这样,如何更好地实现准确性?
提前致谢。
答案 0 :(得分:2)
您希望以最大误报率3 stages
生成0.8 per stage
,这意味着在3个阶段后,分类器的最大值为0.8^3 false alarm rate = 0.512
,但在第一阶段之后,分类器已达到0.0244755
的误报率比你的最终目标(0.512)要好得多,所以分类器已经足够好,不再需要任何阶段。
如果这对您不适合,请增加numStages或将maxFalseAlarmRate降低到您未达到的最终质量&#34;在你的第一阶段。
您可能需要收集更多代表环境的样本和样本,达到如此低的误报率通常是不良训练数据的标志(太简单或太相似?)。
我无法告诉你,haar级联是否适合解决你的任务。