Quantcast
Channel: Sam的技术Blog
Viewing all articles
Browse latest Browse all 158

Adaboost训练记录

$
0
0
作者: Sam (甄峰)  sam_code@hotmail.com

1. 工具简介:
OpenCV提供了多个小程序用来训练级联检测器以及满足其它需求:
createsample: 用于产生训练程序所需的样本集文件。样本集文件(vec)在训练时会被用到。
haartraining, traincascade:训练程序。
performance: 用于测试模型的性能。(当前只能测试haartraining训练出的基于haar-like特征训练出的检测器模型)。
opencv_annotation: 用来标注图片。把正样本图片中的目标位置和大小指定出来。

haartraining, traincascade: 是由opencv提供的,用于训练物体检测模型的boost级联检测器程序。
haartraining: 是较老的版本,只支持haar-like特征。
traincascade: opencv团队目前推荐的训练程序,不仅可以支持haar-like特征,也可以使用hog和LBP特征。


2. 数据准备:
2.1:准备好正样本图片(图片中包含要检测的物体)。
Sam通常按不同的类型,把图片放到不同的目录内。
例如: 
cat目录下包含很多子目录,每个子目录内才是各个类别(只列了光线条件)的图片。
cat/top_light
cat/back_light
cat/dark



2.2:建立正样本描述文件
为了防止错误,最好使用绝对地址。

可以使用opencv_annotation来建立正样本描述文件。
opencv_annotation.exe -i=Z:\image\cat\top_light  -a=Z:\annoatation\top_light.txt
opencv_annotation.exe -i=Z:\image\cat\back_light  -a=Z:\annoatation\back_light.txt
.
.
.
opencv_annotation.exe -i=Z:\image\cat\dark  -a=Z:\annoatation\dark.txt


opencv_annotation运行程序的时候会遍历文件夹下所有的图片,每次显示一张图片,点击鼠标左键,拖动鼠标确定区域,再点一次鼠标左键,结束。按键盘的字母C为确定选择(矩形框会由红色变为绿色),字母N为下一张图片,ESC为结束此次标注。
注意,程序之后在所有图片都遍历完后才会创建指定的.txt文件,中途退出是没有的。



然后把这些txt整合成一个txt文件。作为正样本描述文件
内容格式为:

image_location number_annotations x0 y0 w0 h0 x1 y1 w1 h1 … xN yN wN hN

代表 number_annotations 个目标在image_location中标注,x0 y0 w0 h0代表左上角的点的xy坐标以及宽度和高度。


例:Z:\image\cat\top_light\0_20200325150709__10604.jpg 1 22 74 36 63



2.3:准备负样本图片:

2.4:建立负样本描述文件:
例如:文件名为:neg_image.txt
内容通常为:
G:\ImageData\neg\neg_046134.jpg


3. 建立样本集文件(.vec):
opencv_createsample.exe -vec pos.vec   -info pos_image.txt    -bg neg_image.txt        -w 18          -h 30 -num 77857

-img指定的单张图片,或者-info指定得样本集描述文件。

-vec 指定输出文件的保存位置。输出是一个以.vec结尾的文件,其中保存着生成得样本集,作为后续训练程序的输入

-num 指定样本集文件保存的样本数。


全部命令参数:

-img  源图像路径+文件名

-info  含有标定信息的样本集描述文件

-vec   含有样本集的.vec文件保存位置

-bg      背景集描述文件(负样本描述文件),用于生成混合变换得图像,将-img指定得图像放入-bg指定得背景图像,产生变换后得图像 

-num   要产生得样本数量

-bgcolor 背景色,处于bgcolor-bgthreshbgcolor+bgthresh之间的像素被视为透明的。the background color denotes the transparent color. Since there might be compression artifacts, the amount of color tolerance can be specified by –bgthresh. All pixels between bgcolor-bgthresh and bgcolor+bgthresh are regarded as transparent.

-bgthresh     背景色阈值             (灰度变化0-255)

-inv  颜色反转

-randinv    颜色随机反转

    -maxidev  样本的最大像素变化值    (灰度变化0-255)

    -maxxangle  x轴旋转得最大角度    (弧度为单位)

    -maxyangle   y轴旋转得最大角度    (弧度为单位)

    -maxzangle  z轴旋转得最大角度 (弧度为单位)

    -show  显示变换后得图片,按Esc键省略后续的显示,通常用于调试效果

-w   输出样本的宽   

-h   输出样本的高 



4. 训练:
opencv_traincascade.exe -data G:\Sam\data 
-vec G:\Sam\ThumbUpAda_Pos0601.vec 
-bg G:\Sam\ThumbUpAda_Neg_0427.txt 
-numPos 7000 -numNeg 12000 -numStages 28 -precalcValBufSize 512 -precalcIdxBufSize 512 -w 18 -h 30 -mode BASIC -baseFormatSave -maxWeakCount 300 -maxDepth 2


traincascade.exe

使用adaboost算法训练模型的程序(新版),可开启openMP加速,支持数据量较大的训练。

 

输入:

-vec,正样本集的.vec文件,由createsamples.exe程序生成

-bg,负样本描述文件

-w -h  

正样本图像的尺寸,必须跟使用createsamples创建得正样本尺寸保持一致,即.vec存储的图像尺寸

 

输出:

-data,最终模型的存放位置,模型文件以.xml结尾,中间文件亦存放于此。 这个目录必须已经存在。


全部命令参数:

-data           最终模型的存放位置(要先建好)

-vec            正样本集的.vec文件

-bg             负样本描述文件

-numPos        每级强分类器训练时用到得正样本数量

-numNeg        每级强分类器训练时用到得负样本数量

  -numStages              stages的数量(级联强分类器的层数,即强分类器的数量)

  -precalcValBufSize         缓存大小,存储预先计算得特征值,单位MB,默认200

-precalcIdxBufSize         缓存大小,存储预先计算得特征索引,单位MB,默认200

-baseFormatSave          仅在使用Haar特征时有效,如果指定,级联分类器将以老格式存储  定要加

-stageType               级联类型,BOOST

-featureType              特征类型,HAAR, LBP, HOG,默认HAAR

-w  -h           正样本图像的尺寸,必须跟使用createsamples创建得正样本尺寸保持一致,即.vec存储的图像尺寸

-bt                     训练算法类型,DAB(discrete Adaboost),RAB(RealAdaboost)

LB(LogiBoost)GAB(Gentle Adaboost)

-minHitRate              每级强分类器的最低检出率,总的最大检出率为

min_hit_rate^number_of_stages

-maxFalseAlarmRate     每级强分类器的最高误检率,总的误检率为

max_false_alarm_rate^number_of_stages,默认为0.5 

-weightTrimRate          Specifies wheter and how much weight trimming should be

used. A decent choice is 0.90.

-maxDepth              每级强分类器中弱分类器树的最大层数,If 1, then a simple

stump classifier is used, if 2 and more, then CART classifier

with number_of_splits internal (split) nodes is used

-maxWeakCount         每级强分类器中所能含有的弱分类器最大数目  目前300

-mode                  使用Haar特征时,该参数指定BASICALLUpRight等类型



训练出的模型为xml文件。


5. 使用模型预测:
CascadeClassifier object_cascade;
object_cascade.load(0525_cascade23.xml);   //载入模型
if (object_cascade.empty())
{
cout << " Load Model File Failed" << endl;
//getchar();
return -1;
}

object_cascade.detectMultiScale(GrayFrame, vecObjects, 1.1, 1, 0, Size(18, 30), Size(90, 150));




 

Viewing all articles
Browse latest Browse all 158

Trending Articles