中文翻译:http://blog.csdn.net/masibuaa/article/details/14056807
英文原文:https://wenku.baidu.com/view/69d2bac9482fb4daa48d4b77.html?re=view【免券下载】
原理方面
1. 特征提取和目标检测流程。检测窗口划分为重叠的块,在块中计算HOG描述子,形成的特征向量放到线性SVM中进行目标/非目标的分类。检测窗口在整个图像的所有位置和尺度上进行扫描,并在输出的用来检测目标的金字塔上进行非极大值抑制
2. HOG和SIFT特征有个优点,它们提取的边缘和梯度特征能很好的抓住局部形状的特点,并且由于是在局部进行提取,所以对几何和光学变化都有很好的不变性:变换或旋转对于足够小的区域影响很小。对于人体检测,在粗糙的空域采样(coarse spatial sampling)、精细的方向采样(fine orientationsampling)和较强的局部光学归一化(stronglocal photometric normalization)这些条件下,只要行人大体上能够保持直立的姿势,就容许有一些细微的肢体动作,这些细微的动作可以被忽略而不影响检测效果。
3. 用正负样本训练一个初始的分类器,然后用初始分类器在负样本原图上进行行人检测,检测出来的矩形区域自然都是分类错误的负样本,这就是所谓的难例(hard examples)。然后,把误报的负样本(难例)集加入到初始的负样本集中,重新训练,生成最终的分类器
4.结果表明,HOG检测器要显著优于小波、PCA-SIFT、形状上下文方法,在MIT数据集上相比于其他方法有非常明显性能提升,在INRIA数据集上FPPW值有至少一个数量级的下降。
算法实现方面
5. 检测器参数如下:
5.1 无伽马校正的RGB颜色空间;
5.2 梯度算子为[-1,0,1]并且无平滑;
5.3 梯度方向离散化(投票)到0-180间的9个bin中;
5.4 块(block)大小为16*16,细胞单元(cell)大小为8*8;
5.5 高斯滤波参数σ为8;
5.6 L2-Hys块归一化;
5.7 块移动步长为8个像素;
5.8 检测窗口为64*128;
5.9 线性SVM分类器。
5.10 gamma = 0.5;
6. 优化性能
6.1 梯度计算 增加高斯平滑会降低性能,最简单的的梯度算子结果是最好的,eg [-1 0 1];
6.2 对于带颜色的图像,分别计算每个颜色通道的梯度,以范数最大者作为该点的梯度向量。
6.3增加方向bin的个数可以显著提高检测器的性能,直到大约9个bin为止;
6.4 bin指无符号梯度的0~180°均方方向直方图,若有符号(0~360°)则会导致性能下降;
6.5 组成block,对每个block进行对比度归一化;
6.6 将cell组成块(block),对每个块进行对比度归一化;
6.7 最终的描述子是检测窗口内所有块内的细胞单元的直方图构成的向量;
6.8 block是由重叠的,cell的直方图会多次用于最终描述子的运算,看似冗余,但却显著提升性能。
6.9 对于人体检测,每个块内含3*3个细胞单元,每个细胞单元含6*6个像素时最优,此时漏检率大约为10.4%。
事实上,无论块尺寸为多大,细胞单元为6-8个像素宽时性能最优——巧合的是,我们的测试图片中人体大约也是6-8个像素宽。每个块内含2*2或3*3个细胞单元时最优。除此之外,结果不好:当块过大时,对局部图像的适应性变差;当块过小时,有价值的空间信息减少。
6.10 在统计直方图bin之前用高斯加权使得块边缘的像素的权重降低是有很用的。经试验,在10-4FPPW时使用σ = 0.5 *block_width的二维高斯核进行加权可使性能提升1%左右;
6.11 块归一化,是block中向量的2范数方法归一化,效果比1范数要好。(2范数:v = v/sqrt(sum(v.^2))[matlab写法哦],其中v表示未经归一化的描述子向量)
6.12 样本图像,64*128大小的检测窗口在人体周围有大约16个像素的空白边缘,此边缘增加了有助于检测的上下文信息。若将空白边缘从16像素减少为8像素(48*112大小的检测窗口)会在10-4FPPW时导致6%的性能下降。保持窗口大小为64*128不变,增加人体的尺寸(同样会使空白边缘减少),虽然使得人体的解析度变高,但也会导致性能下降。
6.13 SVM:我们默认使用带有松弛变量(C=0.01)的线性SVM分类器SVMLight[10](在原版SVM上稍作改动使得处理大规模特征向量时可减少内存占用)。如果使用高斯核函数SVM可以在10-4FPPW时提高大约3%的性能,但需要以更多的运行时间为代价。
7 总结
7.1 HOG特征表现远好于小波。
7.2 计算梯度前任何大尺度的平滑都会导致性能下降,大多数可用的图像信息都来自精细尺度中的陡峭边缘,为了减少对空间位置的敏感度而模糊陡峭边缘的做法都是错误的。
7.3 梯度应该在最精细尺度的金字塔层中计算,然后进行校正或用于方向bin的投票,只有在投票时才需要进行模糊。
7.4 较强的局部对比度归一化对于取得好的结果至关重要。
7.5 传统的中心环绕式归一化方法并不太好。
7.6 要想取得更好的结果,可在不同的局部区域对每个元素(边、细胞单元)归一化多次。
7.7 在我们的标准HOG检测器中,每个细胞单元在不同的归一化中出现4次,这种“冗余”的方法可在10-4FPPW时将性能由84%提高到89%。
7.8 小尺度梯度(fine-scale gradients),精细的方向采样(fine orientation binning),相对粗糙的空间采样(relatively coarse spatialbinning),和重叠描述子块中高质量的局部对比度归一化(high-quality localcontrast normalization in overlapping descriptor blocks)都对好的检测效果至关重要
8 圆形block
8.1 极坐标网格的想法源于允许精细的相邻结构编码与粗糙的广域上下文编码相结合的思想;
8.2 信号由视觉向人类大脑皮层的转换是对数级的这一事实;
8.3 实时证明,含有很少的半径bin的描述子结果最好,所以实际中几乎不会有不均匀的情况出现。可以将C-HOG简单看做中心环绕编码的一种高级形式。
8.4 每个细胞单元包含一个以梯度为权重的方向栈,而不是单纯的方向无关的边缘计数;
8.5 C-HOG的块有两种形式,一种是中间有一个完整细胞单元的形式(类似[14]中的GLOH特征),另一种是中心单元被分为四个90度扇形的形式,类似形状上下文方法
8.6 C-HOG可以用四个参数表示:角度bin的个数,半径bin的个数,中心圆的半径(以像素为单位),子半径的伸展因子。要想保证好的性能,至少需要两个半径bin(一个中心半径、一个周围的半径),四个角度bin。
8.7 增加额外的半径bin并不能改善多少性能,如果增加角度bin的个数反而会降低性能。中心圆的半径为4个像素时最好,但3或5像素结果相似。将伸展因子从2增加到3性能不会变化。为细胞单元的投票加上高斯权重或逆高斯权重不会改变性能。形状上下文方向(只含一个方向bin)需要更精细的空间子划分才能表现良好。