赞
踩
ACF在行人检测取得了不错的成绩,适合刚性目标或者准刚性目标的训练
1,数据量说明
本文准备了12W+正样本,以竖直手掌为主,有部分样本存在轻微的旋转
负样本7k+(不够,训练一级分类器就停止了,后面增加到2W+)
2,熟悉acfTrain
输入 opts=acfTrain returns all default options
opts =
pPyramid: [1x1 struct]
filters: []
modelDs: [100 41]
modelDsPad: [128 64]
pNms: [1x1 struct]
stride: 4
cascThr: -1
cascCal: 0.0050
nWeak: 128
pBoost: [1x1 struct]
seed: 0
name: ''
posGtDir: ''
posImgDir: ''
negImgDir: ''
posWinDir: ''
negWinDir: ''
imreadf: @imread
imreadp: {}
pLoad: [1x1 struct]
nPos: Inf
nNeg: 5000
nPerNeg: 25
nAccNeg: 10000
pJitter: {}
winsSave: 0
在acfTrain的注释中说明参数的含义
1)pPyramid指定通道特征,详细查看chnsCompute.m and chnsPyramid.m。
通道可能被一系列filters的卷积,用于去除局部关联(查看NIPS14 on LDCF),用于提高精度但是降低速度
如果filters=[wFilter, nFilter],这些都是自动计算的
模型维度modelDs(默认为[100, 41])定义窗口的高度和宽度,padded维度modelDsPad(默认为[128, 64])确定围绕目标边缘拓展的维度,这样有利于分类。
例如对于100个像素高的行人,128像素高的区域用于决策
pNms控制极大值抑制(bbNms.m),stride控制窗口步长,cascThr和cascCal是constant soft cascades的阈值和标度
通常cascThr设置为-1,调整cascCal直到达到期望的召回率
训练在采样bootstrapping和分类Adaboost Classifier之间切换
nWeak决定训练级数和每级中tree的个数,例如nWeak=[32 128 512 2048]确定四级,最后一级有2048棵树
pBoost指定Adaboost的参数,pBoost.pTree是决策树的参数(参考adaBoostTrain.m)
seed是随机种子使得训练结果reproducible,name指定detector和log文件的路径
2)训练数据可以是多种形式的,正样本可以使用预先裁剪的窗口目录(posWinDir)或者整幅图像(posImgDir)+Groundtruth目录(posGtDir)
负样本可以使用预先裁剪的窗口目录(negWinDir)或者使用整幅并不包含任何正样本的图像目录(negImgDir)
如果没有指定negWinDir也没有指定negImgDir的话,负样本使用posImgDir中采集
对于预先裁剪的图像,尺寸最小为modelDsPad(默认为[128, 64]),目标位于裁剪图像中心不小于modelDs(默认为[100, 41])
imreadf用于指定加载图像的常规函数(默认为imread函数),imreadp为imreadf的额外参数
当从整幅图像采集时,pLoad指定groundtruth是如何被加载的,并且将正样本集合进行转换(查看bbGt>bbLoad)
nPos控制训练时总正样本(如果nPos=inf,正样本数量受限于训练集,默认nPos=inf)
nNeg控制总负样本数量(默认为5000),nPerNeg(默认为25)限制每个图像上采集的负样本数量,nAccNeg(默认10000)控制最大负样本总数,在bootstrapping过程中累计计数
pJitter用于扰动正样本,这样可以增加正样本数量(默认flip=1)
winsSave如果为true的话,裁剪的窗口以mat文件形式保存到disk中(默认为0)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。