opencv3-基于opencv_traincascade级联分类器的训练步骤

最近在做识别的过程中发现sift与surf的特征并不容易筛选,想找一下有没有比较好筛选特征的方法,在检索的过程中发现了基于haar特征的级联adboost的方法,这个方法能有效的筛选哪些是更好的haar特征。虽然暂时还没有相处关联的思路,但用这个可以做基于传统方法的目标识别,所以就在网上学习了一下怎么训练这个级联分类器。网上训练这个分类器基本上是基于opencv2中的open_haartraining.exe,这是一个封装好了的训练算法,只要把文件格式弄好,参数输入进去,就可以训练出来级联分类器了,但是我用的是opencv3,很苦恼,没有这个open_haartraining.exe,只有opencv_traincascade,索性就开始使用了(open_haartraining.exe只能训练haar特征的分类器,但是opencv_traincascade可训练多种特征的分类器,比如haar,hog,lbp等等)。

opencv_traincascade的原理暂时没有详细的探查过,之后回来补上。接下来详细的讲一下整个级联分类器的整个训练过程。
训练过程主要分为以下四步:

1.配置训练环境
2.制作训练数据集
3.生成正样本描述文件(.vec文件)
4.训练样本分类器
5.常见错误

配置训练环境

opencv的源代码是用c++写的,但是提供了其他主流语言的接口,但是这个训练的过程需要调用opencv自带的两个可执行程序open_createsample.exe和opencv_traincascade.exe来训练分类器里面的参数,并保存在xml文件中,这样你的其他语言就可以调用了。
首先需要找到open_createsample.exe和opencv_traincascade.exe这两个程序在计算机中的位置,比如我的在C:\Users\lowkeybin\Anaconda3\pkgs\opencv-3.3.1-py36h20b85fd_1\Library\bin(如果找不到,在搜索栏直接搜索这两个程序)
这是我这个地址里面的文件目录,我只截取了很小一段内容,其实还有很多dll文件和很多其他的文件,但是我们现在不需要那些


xml:用于存放训练好的分类器的参数,这个文件夹不是自带的,需要创建
negdata:存放负样本的文件夹,这个文件不是自带的,需要创建
posdata:存放正样本的文件夹,这个文件不是自带的,需要创建
negdata.txt:负样本的文件路径,这个文件不是自带的,需要创建,创建过程下面会提到
posdata24x16.txt:正样本的文件路径,这个文件不是自带的,需要创建,创建过成下面会提到
posdata24x16.vec:生成的正样本描述文件,这个文件不是自带的,需要创建,创建过程下面会提到
opencv_createsamples.exe:生成正样本描述文件的可执行程序,这个是文opencv中自带的
opencv_haartraining.exe:训练样本的可执行程序,这个也是opencv中自带的

制作训练数据集

首先将要训练的正类样本和负类样本放入posdata这个文件夹中,这里的样本图片需要是灰度图片,且不要大于100*100。备注:负样本的数量要大于正样本的数量,我用的是正负样本数量比为1:3,这个会影响大训练效果,具体需要怎样的比例需要自己把控,但负样本过少会出现错误。
接下来需要生成正负样本的文件路径,使得训练中可以顺利的找到每个样本。先进入正样本目录,新建一个txt文件,并在中输入如下内容
dir /b/s/p/w *.jpg > num.txt


然后关掉这个txt,把这个txt的后缀名改为bat,他会变成下面这个样子

双击这个bat文件,会生成这样一个txt文件


我们现在需要通过记事本的替换功能修改一下这个txt文件的内容


替换好之后应该是这个样子

posdata是样本的相对路径,最后的1 0 0 64 64,最后两位数代表你的样本图像的大小,需要根据自己的样本图片改写,由于文件中指出的位置是相对路径,所以我们需要把这个txt文件放到与open_createsample.exe和opencv_traincascade.exe这两个程序的同一级文件当中,并把这个txt文件的名字改为posdata
以上给出了正样本文件路径的生成方法,负样本的方法也相同,但是负样本的绝对路径不用改为相对路径,也不需要在最后加1 0 0 64 64,且名字改为negdata就可以了,negdata.txt内应该是这样的

生成正样本描述文件

打开cmd.exe输入以下内容进入open_createsample.exe和opencv_traincascade.exe这两个程序的文件地址(以下是我的)
cd C:\Users\lowkeybin\Anaconda3\pkgs\opencv-3.3.1-py36h20b85fd_1\Library\bin
再继续输入以下内容(num后是正样本数,w和h代表样本图片的大小)
opencv_createsamples.exe -info posdata.txt -vec pos.vec -num 100 -w 64 -h 64
运行成功是这样的

-info 样本的说明文件
-vec 正样本描述文件的名字以及路径
-num 正样本数量
-w-h样本图片的大小
程序成功运行后会生成posdata.vec

训练样本分类器

打开cmd.exe输入以下内容进入open_createsample.exe和opencv_traincascade.exe这两个程序的文件地址(以下是我的)
cd C:\Users\lowkeybin\Anaconda3\pkgs\opencv-3.3.1-py36h20b85fd_1\Library\bin
再继续输入以下内容(numPos后是正样本数,numNeg后是负样本数,w和h代表样本图片的大小)
opencv_traincascade.exe -data xml -vec pos.vec -bg negdata.txt -numPos 100 -numNeg 226 numStages 20 -featureType LBP -w 64 -h 64
运行成功是这样的(会迭代很多轮,直到达到阈值或者训练完二十轮)

常见错误

posdata.txt中的路径需要是相对路径,而negdata.txt中的路径需要是绝对路径,如果路径写错会出现下面的情况



在创建训练数据集和训练样本分类器是代码中的空格不能少,如果少了会出现下面的情况



最后正样本集中的样本需要只包含目标物体,尽量不要包含其他物体,如果要识别人脸,那就整张图都只有脸。否则训练效果会很差。另外正样本的尺寸必须小于等于负样本的尺寸
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,723评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,080评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,604评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,440评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,431评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,499评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,893评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,541评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,751评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,547评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,619评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,320评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,890评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,896评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,137评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,796评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,335评论 2 342

推荐阅读更多精彩内容