traincascade训练面部痣的探测器

时间:2015-04-16 16:58:03

标签: c++ opencv

我使用createsamples.exe和traincascade.exe来训练面部痣的探测器。

我使用150张正面图像(面部图像),其中每张图像包含几个摩尔,总共(所有150张图像)包含1452摩尔;此信息以propierly的形式保存在positive.txt文件中。我还使用1015个没有痣的皮肤区域的负像,这些信息被临时保存在negative.txt文件中。

要创建正样本,我执行了以下命令行:

createsamples.exe -info positive.txt -vec positive.vec -w 3 -h 7

成功创建了1000个样本的正向量;我使用w = 3和h = 7,因为正图像中标记的痣和负像中的皮肤区域非常小。

然后,执行此命令行后,最后训练检测器:

traincascade.exe -data result\ -vec positive.vec -bg negative.txt -numStages 20 -nsplits 1 -minhitrate 0.998 -maxfalsealarm 0.5 -numPos 150 -numNeg 1015 -w 3 -h 7

我得到了这个:

PARAMETERS:
cascadeDirName: result\
vecFileName: positive.vec
bgFileName: negative.txt
numPos: 150
numStages: 20
precalcValBufSize[Mb] : 256
precalcIdxBufSize[Mb] : 256
stageType: BOOST
featureType: HAAR
sampleWidth: 3
sampleHeight: 7
boostType: GAB
minHitRate: 0.995
maxFalseAlarmRate: 0.5
weightTrimRate: 0.95
maxDepth: 1
maxWeakCount: 100
mode: BASIC

===== TRAINING 0-stage =====
<BEGIN
POS count : consumed   150 : 150
Train dataset for temp stage can not be filled. Branch training terminated.
Cascade classifier can't be trained. Check the used training parameters.

我不知道会发生什么。请帮帮我......

3 个答案:

答案 0 :(得分:0)

您需要减少-numPos参数。 -numPos参数应小于.vec文件中的正数总数。尝试将其设置为130。

您可能还想考虑您的-numStages参数。你将过度训练你的分类器,因为你只有150个积极因素。有关traincascade paramaters的更多详细信息,请查看此link

同样通过运行命令&#34; createsamples.exe -info positive.txt -vec positive.vec -w 3 -h 7&#34;你会得到一个150个样本的矢量而不是1000个。

答案 1 :(得分:0)

好像你的negative.txt格式不正确,因为traincascade.exe输出消耗的积极因素但负数却没有。负面示例的路径应该相对于traincascade.exe目录。

答案 2 :(得分:0)

我遇到了和以前一样的问题。我的问题是反面例子。这是我的解决方案。我把文件&#34; neg.txt&#34;与&#34; opencv_traincascade.exe&#34;相同的路径。所有示例都放在名为&#34; neg&#34;的文件夹中。在&#34; neg.txt&#34;文件,我指出相对路径,看起来像这样。 希望可以帮助那些有同样问题的人。

neg/image1.png
neg/image2.png
neg/image3.png
...