转载+理解:hog:https://www.cnblogs.com/wyuzl/p/6792216.html
hog:https://blog.csdn.net/masibuaa/article/details/14056807
基础知识:http://blog.sina.com.cn/s/blog_60e6e3d50101bier.html
非极大值抑制NMS:https://www.cnblogs.com/makefile/p/nms.html
概述
CVPR2005这篇文章中,HOG是用来做行人检测的。作者研究了行人检测的特征集问题,局部归一化的HOG描述子相比于现存的特征集(包括小波)有更好的表现。相比于边缘方向直方图(Edge Orientation Histograms)、SIFT描述子、形状上下文(Shape Contexts),HOG是在网格密集的大小统一的细胞单元(dense grid of uniformly spaced cells)上进行计算,而且为了提高性能,还采用了重叠的局部对比度归一化(overlapping local contrast normalizations)。作者用行人检测(行人是大部分可见的并且基本上是直立的)进行测试,为了保证速度和简洁性,使用线性SVM作为分类器。
作者在文中提到他们的非正式实验表明,即使截止到05年最好的基于特征点的方法,在行人检测方面比本论文的方法的错检率也要高上至少1-2个数量级,主要是因为这些基于特征点的检测器不能可靠地检测行人结构。HOG有个优点,提取的边缘和梯度特征能很好的抓住局部形状的特点,且因是对图像做了Gamma校正和采用cell方式进行梯度方向量化,在局部进行提取,所以对几何和光学变化都有很好的不变性,变换或旋转对于足够小的区域影响很小。对于行人检测,在粗糙空域采样(coarse spatial sampling)、精细方向采样(fine orientation sampling)和强局部灰度归一化(strong local photometric normalization)这些条件下,只要行人大体上能够保持直立的姿势,就容许有一些细微的肢体动作,这些细微的动作可以被忽略而不影响检测效果。综上,HOG特征很适合于做图像中的人体检测。
1 Overview of the Method
HOG方法是基于对稠密网格中归一化的局部方向梯度直方图的计算。此方法的基本观点是:局部目标的外表和形状可以被局部梯度或边缘方向的分布很好的描述,即使我们不知道对应的梯度和边缘的位置。在实际操作中,将图像分为小的元胞(cells),在每个元胞内累加计算出一维的梯度方向(或边缘方向)直方图。为了对光照和阴影有更好的不变性,需要对直方图进行对比度归一化,这可以通过将元胞组成更大的块(blocks)并归一化块内的所有元胞来实现。归一化的块描述符就叫作HOG描述子。将检测窗口中的所有块的HOG描述子组合起来就形成了最终的特征向量,然后使用SVM分类器进行行人检测。如上图描述了特征提取和目标检测流程。检测窗口划分为重叠的块,对这些块计算HOG描述子,形成的特征向量放到线性SVM中进行目标/非目标的二分类。检测窗口在整个图像的所有位置和尺度上进行扫描,并对输出的金字塔进行非极大值抑制来检测目标。
详细的过程在上面的博客中写的很清楚了。我就简单说一下流程。
拿到图片,先做预处理,规范化之类的,然后把图片分成很多block,再把block分成很多cell,分别求出每个cell的梯度,然后做每个cell的空间/方向bin统计,再对block做归一化,得到图片的所有特征,输入svm做分类。再对分类得到的检测框做NMS处理。
非极大值抑制
- 对得到的所有检测框按照得分进行排序。
- 选出得分最大的检测框,分别计算它与剩下的所有框之间的IOU,选定一个阈值,去除IOU大于这个阈值的。
- 把得分最大的检测框标记出来,保留并不再参与接下来但比较。
- 重复做1-3步,直到所有但框都是被标记过的。