机器学习-分类器-级联分类器训练(Train CascadeClassifier )
一、简介:
adaboost分类器由级联分类器构成,"级联"是指最终的分类器是由几个简单分类器级联组成。在图像检测中,被检窗口依次通过每一级分类器,这样在前面几层的检测中大部分的候选区域就被排除了,全部通过每一级分类器检测的区域即为目标区域。
分类器训练完以后,就可以应用于输入图像中的感兴趣区域的检测。检测到目标区域输出为1,否则输出为0。为了检测整副图像,在图像中移动搜索窗口,检测每一个位置来确定可能的目标。为了搜索不同大小的目标物体,在图像中检测未知大小的目标物体,扫描过程中用不同比例大小的搜索窗口对图片进行扫描。
目标检测分为三个步骤:
、 样本的创建
、 训练分类器
、 利用训练好的分类器进行目标检测。
二、样本收集
训练样本分为正例样本和反例样本,其中正例样本是指待检目标样本,反例样本指其它任意图片,所有的样本图片都被归一化为同样的尺寸大小(例如,24x24)。负样本可以来自于任意的图片,但这些图片不能包含目标特征。负样本由背景描述文件来描述。
三、准备训练数据
训练需要一些列样本。样本分两类:负样本和正样本。负样本是指不包括物体的图像。正样本是待检测的物体的图像。负样本必须手工准备,正样本使用opencv_createsamples 创建。
1、负样本
负样本可以是任意图像,但图像中不能包含待检测的物体。用于抠取负样本的图像文件名被列在一个文件中。这个文件是纯文本文件,每行是一个文件名(包括相对目录和文件名)。负样本和样本图像也叫做背景样本,或者背景样本图像,本文档中对之不予区分。这些图像可以是不同的尺寸,但是图像尺寸应该比训练窗口的尺寸大,因为这些图像将被用于抠取负样本,并将负样本缩小到训练窗口大小。
下面是一个描述文件的例子:
假如目录结构如下:
/img
img1.jpg
img2.jpg
bg.txt
则bg.txt文件中的内容将如下所示:
img/img1.jpg
img/img2.jpg
2、正样本
正样本由 opencv_createsamples 生成。正样本可以由包含待检测物体的一张图片生成,也可由一系列标记好的图像生成。
请注意你需要一个很大的负样本库送给训练程序进行训练。如果是绝对刚性的物体,如OpenCV的标志,你只有一张正样本图像;如果是人脸,你需要几百甚至几千个正样本。在待检测物体是人脸的情况下,你需要考虑所有的人种、年龄、表情甚至胡子的样式。
如果只有一张包含物体的图像,如一个公司的标志,那么可以通过对物体图像的随机旋转、改变标志亮度以及将标志放在任意的背景上而获得大量的正样本。生成的正样本数目以及随机的程度都可以通过opencv_createsamples 的命令行参数控制。
命令行参数:
-vec<vec_file_name>
输出文件,内含用于训练的正样本。
-img<image_file_name>
输入图像文件名(例如一个公司的标志)。
-bg<background_file_name>
背景图像的描述文件,文件中包含一系列的图像文件名,这些图像将被随机选作物体的背景。
-num<number_of_samples>
生成的正样本的数目。
-bgcolor<background_color>
背景颜色(目前为灰度图);背景颜色表示透明颜色。因为图像压缩可造成颜色偏差,颜色的容差可以由 -bgthresh 指定。所有处于 bgcolor-bgthresh 和bgcolor+bgthresh 之间的像素都被设置为透明像素。
-bgthresh<background_color_threshold>
-inv
如果指定该标志,前景图像的颜色将翻转。
-randinv
如果指定该标志,颜色将随机地翻转。
-maxidev<max_intensity_deviation>
前景样本里像素的亮度梯度的最大值。
-maxxangle<max_x_rotation_angle>
X轴最大旋转角度,必须以弧度为单位。
-maxyangle<max_y_rotation_angle>
Y轴最大旋转角度,必须以弧度为单位。
-maxzangle<max_z_rotation_angle>
Z轴最大旋转角度,必须以弧度为单位。
-show
很有用的调试选项。如果指定该选项,每个样本都将被显示。如果按下Esc 键,程序将继续创建样本但不再显示。
-w<sample_width>
输出样本的宽度(以像素为单位)。
-h<sample_height>
输出样本的高度(以像素为单位)。
创建样本的流程如下: 输入图像沿着三个轴随机旋转。旋转的角度由 -max?angle 限定。然后像素的亮度值位于 [bg_color-bg_color_threshold;bg_color+bg_color_threshold]范围的像素被设置为透明像素。将白噪声加到前景图像上。如果指定了-inv ,那么前景图像的颜色将被翻转。如果指定了-randinv ,程序将随机选择是否将颜色进行翻转。任选背景图像,将获得的前景图像放到背景图像上,并将图像调整到-w 和-h 指定的大小。最后将图像存入vec文件,vec文件名由命令行参数-vec 指定。
正样本也可从一系列事先标记好的图像中创建。标记信息可以存储于一个文本文件,与背景描述文件类似。文件中的每行对应一个图像文件。每行的第一个元素为图像文件名,后面是物体的数目,最后是物体位置和大小的描述 (x, y, width, height)。
下面是描述文件的例子:
假设目录结构如下:
/img
img_with_faces_1.jpg
img_with_faces_2.jpg
info.dat
文件info.dat里的内容如下:
img/img_with_faces_1.jpg 1 140 100 45 45
img/img_with_faces_2.jpg 2 100 200 50 50 50 30 25 25
图像img_with_faces_1.jpg中包含一个物体实例(如人脸),标示其在图像中的位置和大小的矩形为(140, 100, 45, 45)。图像img_with_faces_2.jpg包含两个物体实例。
从这样的一系列数据中创建正样本,需要在命令行指定 -info 而非前面所用的 -img 参数:
-info<collection_file_name>
描述物体所在图像以及大小位置的描述文件。
此部分样本创建过程如下:将物体实例从图像中抠取出,然后将之调整尺寸到目标尺寸,然后保存到输出的vec文件。在此过程中不会对图像进行变形,所以有效的命令行参数仅有-w,-h,-show 和-num 。
opencv_createsamples 也可以用来查看和检查保存于vec正样本文件中的正样本。这时只需指定-vec ,-w 和 -h 三个参数则可。opencv_createsamples 将逐一显示正样本图像。
在训练中,训练程序并不关心包含正样本的vec文件如何生成的,你可以自己写程序来生成vec文件。但是OpenCV提供的工具中,只有 opencv_createsamples 程序能够创建包含正样本的vec文件。
一个vec文件的例子位于 opencv/data/vec_files/trainingfaces_24-24.vec 。它可用来训练人脸分类器,窗口大小为:-w24-h24 。
三、训练级联分类器
下一步是训练分类器。如前面所述, opencv_traincascade 和opencv_haartraining 都可用来训练一个级联分类器,但是此处只介绍opencv_traincascade 。opencv_haartraining 的用法与opencv_traincascade 类似。
下面是 opencv_traincascade 的命令行参数,以用途分组介绍:
通用参数:
-data<cascade_dir_name>
目录名,如不存在训练程序会创建它,用于存放训练好的分类器。
-vec<vec_file_name>
包含正样本的vec文件名(由 opencv_createsamples 程序生成)。
-bg<background_file_name>
背景描述文件,也就是包含负样本文件名的那个描述文件。
-numPos<number_of_positive_samples>
每级分类器训练时所用的正样本数目。
-numNeg<number_of_negative_samples>
每级分类器训练时所用的负样本数目,可以大于 -bg 指定的图片数目。
-numStages<number_of_stages>
训练的分类器的级数。
-precalcValBufSize<precalculated_vals_buffer_size_in_Mb>
缓存大小,用于存储预先计算的特征值(feature values),单位为MB。
-precalcIdxBufSize<precalculated_idxs_buffer_size_in_Mb>
缓存大小,用于存储预先计算的特征索引(feature indices),单位为MB。内存越大,训练时间越短。
-baseFormatSave
这个参数仅在使用Haar特征时有效。如果指定这个参数,那么级联分类器将以老的格式存储。
级联参数:
-stageType<BOOST(default)>
级别(stage)参数。目前只支持将BOOST分类器作为级别的类型。
-featureType<{HAAR(default),LBP}>
特征的类型: HAAR - 类Haar特征;LBP - 局部纹理模式特征。
-w<sampleWidth>
-h<sampleHeight>
训练样本的尺寸(单位为像素)。必须跟训练样本创建(使用opencv_createsamples 程序创建)时的尺寸保持一致。
Boosted分类器参数:
-bt<{DAB,RAB,LB,GAB(default)}>
Boosted分类器的类型: DAB - Discrete AdaBoost,RAB - Real AdaBoost,LB - LogitBoost, GAB - Gentle AdaBoost。
-minHitRate<min_hit_rate>
分类器的每一级希望得到的最小检测率。总的检测率大约为 min_hit_rate^number_of_stages。
-maxFalseAlarmRate<max_false_alarm_rate>
分类器的每一级希望得到的最大误检率。总的误检率大约为 max_false_alarm_rate^number_of_stages.
-weightTrimRate<weight_trim_rate>
Specifies whether trimming should be used and its weight. 一个还不错的数值是0.95。
-maxDepth<max_depth_of_weak_tree>
弱分类器树最大的深度。一个还不错的数值是1,是二叉树(stumps)。
-maxWeakCount<max_weak_tree_count>
每一级中的弱分类器的最大数目。The boosted classifier (stage) will have so many weak trees (<=maxWeakCount), as needed to achieve the given-maxFalseAlarmRate.
类Haar特征参数:
-mode<BASIC(default)|CORE|ALL>
选择训练过程中使用的Haar特征的类型。 BASIC 只使用右上特征,ALL 使用所有右上特征和45度旋转特征。更多细节请参考[Rainer2002] 。
LBP特征参数:
LBP特征无参数。
当 opencv_traincascade 程序训练结束以后,训练好的级联分类器将存储于文件cascade.xml中,这个文件位于-data 指定的目录中。这个目录中的其他文件是训练的中间结果,当训练程序被中断后,再重新运行训练程序将读入之前的训练结果,而不需从头重新训练。训练结束后,你可以删除这些中间文件。
训练结束后就可以测试训练好的级联分类器了.
机器学习-分类器-级联分类器训练(Train CascadeClassifier )的更多相关文章
- 使用Harr特征的级联分类器实现目标检测
前言 最近在学习人脸的目标检测任务时,用了Haar人脸检测算法,这个算法实现起来太简洁了,读入个.xml,调用函数就能用.但是深入了解我发现这个算法原理很复杂,也很优秀.究其根源,于是我找了好些篇相 ...
- OpenCV开发笔记(五十五):红胖子8分钟带你深入了解Haar、LBP特征以及级联分类器识别过程(图文并茂+浅显易懂+程序源码)
若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...
- 【原/转】opencv的级联分类器训练与分类全程记录
众所周知,opencv下有自带的供人脸识别以及行人检测的分类器,也就是说已经有现成的xml文件供你用.如果我们不做人脸识别或者行人检测,而是想做点其他的目标检测该怎么做呢?答案自然是自己训练一个特定的 ...
- 如何利用OpenCV自带的级联分类器训练程序训练分类器
介绍 使用级联分类器工作包括两个阶段:训练和检测. 检测部分在OpenCVobjdetect 模块的文档中有介绍,在那个文档中给出了一些级联分类器的基本介绍.当前的指南描述了如何训练分类器:准备训练数 ...
- 使用OpenCV训练好的级联分类器识别人脸
一.使用OpenCV训练好的级联分类器来识别图像中的人脸 当然还有很多其他的分类器,例如表情识别,鼻子等,具体可在这里下载: OpenCV分类器 import cv2 # 矩形颜色和描边 color ...
- opencv:级联分类器训练(cascade classifier training)(两个分类器的区别)
# 介绍 级联分类器包括两个工作阶段:训练(traning),检测(detection).检测阶段在文档<objdetect module of general OpenCV documenta ...
- 级联分类器训练-----OpenCV
关键词:级联分类器.opencv_traincascade 下面简述操作过程: 准备正负样本:neg.pos 正负样本路径生成:dir /a/b>path.txt //path:pos or n ...
- OpenCV——级联分类器(CascadeClassifier)
级联分类器的计算特征值的基础类FeatureEvaluator 功能:读操作read.复制clone.获得特征类型getFeatureType,分配图片分配窗口的操作setImage.setWindo ...
- OpenCV人脸识别-训练级联分类器
OpenCV中以及附带了训练好的人脸特征分类器,3.2版本的有三种: 分别是LBP,Haar,Hug 在Data目录下. 也可以训练自己的特征库,具体参照如下: 级联分类器训练 — OpenCV 2. ...
随机推荐
- Office Web Apps 错误日志
前言 最近一直在用Office Web Apps,使用过程会有各种各样的错误,众所周知,sharepoint的错误都在15/Logs下面保存错误日志,那么OWA呢? 经过查找,发现Office Web ...
- git 拉取远程指定分支 pull本地不存在的分支
默认,git项目只有一个分支,就是master,我们当然可以在本地创建多个分支,并推送到远程git管理平台上,或者将远程git管理平台上的其他分支拉取到自己电脑上. 一.查看本地已有的分支 进入到项目 ...
- 苹果无法连接到itunes store怎么办
方法1:设置--还原--还原网络设置,再进app store就可以了.方法2:重置访问限制“设置”–> “通用” –> “访问限制”,开启访问限制5秒,然后再关闭访问限制.方法3:重置当前 ...
- 实习医生风云第一至九季/全集Scrubs迅雷下载
本季看点:<实习医生风云>一批医学院的学生来到圣心医院开始他们的实习生涯,但是从第一天起就发现这里并不是想象中安详宁静的医学圣地,从医生到护士甚至门卫个个不同寻常.内科实习医生杰迪是个聪明 ...
- 傲骨贤妻第一季/全集The Good Wife迅雷下载
第一季 The Good Wife Season 1 (2009)看点:在经受丈夫Peter的背叛以及因此而带来的公众羞辱后,Alicia Florrick选择重新继续自己原来的事业,一名辩护律师,以 ...
- Ubuntu 查找文件的方法
1. whereis+文件名 用于程序名的搜索,搜索结果只限于二进制文件(参数-b).man说明文件(参数-m)和源代码文件(参数-s),如果省略参数,则返回所有信息. 2. find / -name ...
- SecureCRT SSH 语法高亮
主要原因 1.term类型不对,不支持彩色.在secureCRT上设置 Options->SessionOptions ->Emulation,然后把Terminal类型改成xterm,并 ...
- 「BZOJ」「3262」陌上花开
CDQ分治 WA :在solve时,对y.z排序以后,没有处理「y.z相同」的情况,也就是说可能(1,2,3)这个点被放到了(2,2,3)的后面,也就是统计答案在前,插入该点在后……也就没有统计到! ...
- iOS:通过Self-Sizing Cells新特性自动计算cell的高度
iOS8 新特性Self-Sizing Cells,自动计算cell的高度 一.简单介绍 UITableView是iOS开发最常用的一个控件,通过代理和数据源方法,几乎能实现各种各样的列表功能.在这里 ...
- Google和Baidu的站内搜索代码
<!-- SiteSearch Google --> <form method="get" action="http://www.google.com/ ...