Python3+OpenCV学习笔记(五):鸟类检测模型的训练

最近各种事情耽搁,OpenCV的学习也没有进展。

因为项目需求,所以自己做了这样一个基于Haar特征级联分类器的鸟类检测模型,记录下来。

OpenCV官方文档中有一个Haar级联分类器做的人脸检测例程,自行参阅文档。

做一个鸟类检测模型首先需要训练出一个识别用的.xml文件,下面就开始进行训练。

 

一、准备样本集

样本集需要正样本集和负样本集。

正样本集:正样本集为包含“鸟类”的灰度图,一般大于等于2000张,尺寸不能太大(20*40),尺寸太大会导致训练时间过长。

负样本集:负样本集为不含“鸟类”的任何图片,一般大于等于5000张,尺寸比正样本集稍大(60*60)。

由于项目要求不高,所有的样本集都是我自己在网上找的图片,然后用python脚本对尺寸进行了调整,全部为灰度图。

Python3+OpenCV学习笔记(五):鸟类检测模型的训练_第1张图片Python3+OpenCV学习笔记(五):鸟类检测模型的训练_第2张图片

左边是正样本集(40*40),右边是负样本集(100*100)。PS:由于自己做的样本集数量不大,所有尺寸稍大

 

二、准备文件夹

将正负样本集分别放入pos和neg文件夹,存放在路径D:\Anaconda\pkgs\opencv-3.3.0-py35_200\Library\bin(PS:个人的安装环境不同,路径有差异)。

在该路径下新建xml文件夹。

Python3+OpenCV学习笔记(五):鸟类检测模型的训练_第3张图片

 

三、cmd打开dos命令窗口,进入pos路径下

输入以下命令,创建pos.txt文件

dir/b >pos.txt

 

                               Python3+OpenCV学习笔记(五):鸟类检测模型的训练_第4张图片

 

打开pos.txt,将jpg全部替换为jpg 1 0 0 40 40

删除最后一行路径pos.txt

保存

Python3+OpenCV学习笔记(五):鸟类检测模型的训练_第5张图片

Python3+OpenCV学习笔记(五):鸟类检测模型的训练_第6张图片

"1"为图片数量,“0,0”为坐标(Left,Top),“40,40”为图片尺寸(width, height)。

 

同理,进入neg文件夹,输入以下命令生成neg.txt

dir/b >neg.txt

 

Python3+OpenCV学习笔记(五):鸟类检测模型的训练_第7张图片

 

打开neg.txt,将图片名前面加入路径:

neg/

删除最后一行路径neg.txt

Python3+OpenCV学习笔记(五):鸟类检测模型的训练_第8张图片Python3+OpenCV学习笔记(五):鸟类检测模型的训练_第9张图片

 

四、生成pos.vec

dos窗口进入路径D:\Anaconda\pkgs\opencv-3.3.0-py35_200\Library\bin,及pos、neg、xml文件夹所在的路径,输入下列命令生成pos.vec文件。

 

opencv_createsamples.exe -info pos\pos.txt -vec pos.vec -bg neg\neg.txt -num 50 -w 40 -h 40

 

 

 

 

 

-bg 作为背景

-num 正样本数量

-w 正样本宽度

-h 正样本高度

生成成功后出现如下界面:

Python3+OpenCV学习笔记(五):鸟类检测模型的训练_第10张图片

 

五、开始训练

接下来输入以下命令,开始进行训练

 

opencv_traincascade.exe -data xml -vec pos.vec -bg neg\neg.txt -numPos 50 -numNeg 100 -numStages 20 -featureType HAAR -w 40 -h 40

 

 

 

 

 

-data 后面跟文件夹名

-vec vec文件

-bg 作为背景的文件

-numPos 正样本数量

-numNeg 负样本数量

-numStages 级数

-featureType 特征类型,可以跟HAAR、LBP、HOG

Python3+OpenCV学习笔记(五):鸟类检测模型的训练_第11张图片

接下来就是等待训练结果的过程。

训练完成后会在xml文件夹中出现一个***.xml文件,这就是我们需要的东西。检验过程类似人脸检测(官方教程中可以找到),只是将haarcascade_frontalface_default.xml换成了我们自己训练的***.xml文件。

在上面这些过程中可能会遇到各种问题,各个论坛的大神都给出了解答,这里就不献丑了。

补:

昨天又将样本扩大进行了训练,识别正确率有了明显提升。不过训练过程中也遇到了更多细节问题,比如因为minhirateh(最小正确测试率)和maxfalsealarm(最大错误接受率)设置得不恰当,导致训练提前结束,还有根据HAAR特征、LBP特征、HOG特征各自的特性,似乎HOG更适合做此类检测。下面给出一个链接,可以参考:

参考链接

 

 

你可能感兴趣的:(Python图像处理)