感谢watersink的渊博知识,本文合并自:
(1)https://blog.csdn.net/qq_14845119/article/details/52187774
(2)https://blog.csdn.net/qq_14845119/article/details/52625426
HOG:
写在前面的话
HOG绝对说的是行人检测领域的一个标志性的里程碑,虽然2008年出现的DPM(DeformablePart Model)方法取得了更好的检测效果,但是实时性实在堪忧,就算用多线程实现也得大约200ms每帧的样子,勉强可以用于实时检测。而就算是DPM在中间过程还是用到了HOG。
HOG的发明者是Navneet Dalal,在2005年其在CVPR上发表了Histograms of Oriented Gradients forHuman Detection这一篇论文,HOG一战成名。当然ND大神也就是我们经常使用的Inria数据集的缔造者。其博士的毕业论文Finding People in Images and Videos更是HOG研究者的一手资料。让我们不经感慨,人家的毕业论文才叫真干货啊。
HOG算法思想:
在计算机视觉以及数字图像处理中梯度方向直方图(HOG)是一种能对物体进行检测的基于形状边缘特征的描述算子,它的基本思想是利用梯度信息能很好的反映图像目标的边缘信息并通过局部梯度的大小将图像局部的外观和形状特征化。一些研究者利用梯度HOG特征并结合其他特征对人体进行检测得到了较好的结果。
HOG特征的提取可以用下图所示的过程表示: 颜色空间的归一化是为了减少光照以及背景等因素的影响;划分检测窗口成大小相同的细胞单元(cell),并分别提取相应的梯度信息;组合相邻的细胞单元成大的相互有重叠的块(block),这样能有效的利用重叠的边缘信息,以统计整个块的直方图;并对每个块内的梯度直方图进行归一化,从而进一步减少背景颜色及噪声的影响;最后将整个窗口中所有块的HOG特征收集起来,并使用特征向量来表示其特征。在这一过程中,不同尺度的参数模板、梯度方向的选择、重叠块及单元格的大小还有归一化因子等因素都会影响最终的检测结果。最终通过SVM分类器分离出正确的行人目标。
HOG的整体流程图如下所示。
颜色空间归一化:
在现实的情况,图像目标会出现在不同的环境中,光照也会有所不一样,颜色空间归一化就是对整幅图像的颜色信息作归一化处理从而减少不同光照及背景的影响,也为了提高检测的鲁棒性,引入图像Gamma和颜色空间归一化来作为特征提取的预处理手段。ND大神等人也对不同的图像像素点的表达方式包括灰度空间等进行了评估,最终验证RGB还有LAB色彩空间能使检测结果大致相同且能起到积极的影响,且另一方面,ND大神等人在研究中分别在每个颜色通道上使用了两种不同的Gamma归一化方式,取平方根或者使用对数法,最终验证这一预处理对检测的结果几乎没有影响,而不能对图像进行高斯平滑处理,因平滑处理会降低图像目标边缘信息的辨识度,影响检测结果。
梯度计算:
边缘是由图像局部特征包括灰度、颜色和纹理的突变导致的。一幅图像中相邻的像素点之间变化比较少,区域变化比较平坦,则梯度幅值就会比较小,反之,则梯度幅值就会比较大。梯度在图像中对应的就是其一阶导数。模拟图像f(x,y)中任一像素点(x,y)的梯度是一个矢量:
其中,Gx是沿x方向上的梯度,Gy是沿y方向上的梯度,梯度的幅值及方向角可表示如下:
数字图像中像素点的梯度是用差分来计算的:
一维离散微分模板在将图像的梯度信息简单、快速且有效地计算出来,其公式如下:
式中,Gx,Gy,H(x,y)分别表示的是像素点(x,y)在水平方向上及垂直方向上的梯度以及像素的灰度值,其梯度的幅值及方向计算公式如下:
ND大神等人也验证,不同的梯度运算模板在其检测效果上也不一样,如下表,可以看出,使用简单的一维离散微分模板[-1,0,1]进行的梯度运算得到的检测效果是最好的,而使用其他形式的梯度运算模板如Prewitt和Sobel等算子,如下图所示,不仅增加运算量而同时也降低了其检测效果。
计算细胞单元的梯度直方图:
对于整个目标窗口,我们需要将其分成互不重叠大小相同的细胞单元(cell),然后分别计算出每个cell的梯度信息,包括梯度大小和梯度方向。ND大神等人实验指出,将像素的梯度方向在0-180°区间内平均划分为9个bins,超过9个时不仅检测性能没有明显的提高反而增加了检测运算量, 每个cell内的像素为其所在的梯度方向直方图进行加权投票,加权的权值可以是像素本身的梯度幅值,也可以是幅值的平方或平方根等,而若使用平方或平方根,实验的检测性能会有所降低,ND大神等人也验证,使用梯度幅值的实验效果更可靠。
梯度直方图的计算
对组合成块的梯度直方图作归一化:
从梯度计算公式中可以看出,梯度幅值绝对值的大小容易受到前景与背景对比度及局部光照的影响,要减少这种影响得到较准确的检测效果就必须对局部细胞单元进行归一化处理。归一化方法多种多样,但整体思想基本上是一致的:将几个细胞单元(cell)组合成更大的块(block),这时整幅图像就可看成是待检测窗口,将更大的块看成是滑动窗口,依次从左到右从上到下进行滑动,得到一些有重复细胞单元的块及一些相同细胞单元(cell)在不同块(block)中的梯度信息,再对这些块(block)信息分别作归一化处理,不同的细胞单元尺寸大小及不同块的尺寸大小会影响最终的检测效果。
假设64×64像素是检测的窗口的尺寸,分成 4×4=16 个细胞单元(cell),如下图中黑色的小框(1-16),16×16 像素是每个细胞单元的大小,块(block)是由相邻的 2×2=4 个细胞单元组成的,如图紫色的小框,滑动窗口的大小为一个块的大小,依次将滑动窗口从左到右从上到下进行滑动来获得整个待测窗口的边缘信息,得到9个块,统计这9个块在9个不同方向上的梯度信息,在整个窗口中得到的梯度特征是9×9=81 维的向量。在实际情况中我们的检测窗口的大小为128×64像素,一个细胞单元的大小为8×8像素,由2×2个细胞单元组成大小为16×16像素的块,一个细胞单元的梯度直方图化成9个bins,块的移动步长是8个像素,则检测窗口在图像中移动的步长也为8个像素,这样检测窗口就有((128-16)/8+1)×((64-16)/8+1)= 105个块,一个块有4个细胞单元,每个细胞单元的HOG特征向量长度是9,则最终的HOG特征描述符大小就是105×4×9 = 3780维。
对于块的梯度直方图向量的归一化,ND大神等人使用了不同方法,并对结果进行了比较,假设V是未归一化的向量,是一个很小的必要的常数,下式是定义的范数的函数表达式:
L1范数:
L2范数:
归一化计算公式为:
L2常规:
L1常规:
L1平方根:
ND大神等人指出,用L1常规方法进行向量归一化比用L2常规和L1平方根方法而得到的检测效果降低5%。
对归一化梯度特征进行SVM分类:
如下图所示,对于滑动窗口提取的2个窗口,分别计算出归一化的梯度特征,然后应用SVM实现是人还是背景的分类判定。
经过多张图片的测试可以得出下表的结论
DPM:
DPM(Deformable Part Model),正如其名称所述,可变形的组件模型,是一种基于组件的检测算法,其所见即其意。该模型由大神Felzenszwalb在2008年提出,并发表了一系列的cvpr,NIPS。并且还拿下了2010年,PASCAL VOC的“终身成就奖”。
算法思想:
(1)Root filter+ Part filter:
该模型包含了一个8*8分辨率的根滤波器(Root filter)(左)和4*4分辨率的组件滤波器(Part filter)(中)。其中,中图的分辨率为左图的2倍,并且Part filter的大小是Root filter的2倍,因此,看的梯度会更加精细。右图为其高斯滤波后的2倍空间模型。
(左)Rootfilter(中) Part filter (右)高斯滤波后模型
(2)响应值(score)的计算:
响应值得分公式如下:
其中,
x 0, y 0, l 0分别为锚点的横坐标,纵坐标,尺度。
R 0,l 0 (x 0, y 0)为根模型的响应分数
Di,l 0−λ(2(x 0, y 0) + vi)为部件模型的响应分数
b为不同模型组件之间的偏移系数,加上这个偏移量使其与跟模型进行对齐
2(x 0, y 0)表示组件模型的像素为原始的2倍,所以,锚点*2
vi为锚点和理想检测点之间的偏移系数,如下图中红框和黄框
其部件模型的详细响应得分公式如下:
其中,
x, y为训练的理想模型的位置
Ri,l(x + dx, y + dy)为组件模型的匹配得分
di · φd(dx, dy))为组件的偏移损失得分
di ·为偏移损失系数
φd(dx, dy))为组件模型的锚点和组件模型的检测点之间的距离
简单的说,这个公式表明,组件模型的响应越高,各个组件和其相应的锚点距离越小,则响应分数越高,越有可能是待检测的物体。
(3)DPM特征定义:
DPM首先采用的是HOG进行特征的提取,但是又有别于HOG,DPM中,只保留了HOG中的Cell。如上图所示,假设,一个8*8的Cell,将该细胞单元与其对角线临域的4个细胞单元做归一化操作。
提取有符号的HOG梯度,0-360度将产生18个梯度向量,提取无符号的HOG梯度,0-180度将产生9个梯度向量。因此,一个8*8的细胞单元将会产生,(18+9)*4=108,维度有点高,Felzenszwalb大神给出了其优化思想。
首先,只提取无符号的HOG梯度,将会产生4*9=36维特征,将其看成一个4*9的矩阵,分别将行和列分别相加,最终将生成4+9=13个特征向量,为了进一步提高精度,将提取的18维有符号的梯度特征也加进来,这样,一共产生13+18=31维梯度特征。实现了很好的目标检测。
( 4 ) DPM 检测流程:如上图所示,对于任意一张输入图像,提取其DPM特征图,然后将原始图像进行高斯金字塔上采样,然后提取其DPM特征图。对于原始图像的DPM特征图和训练好的Root filter做卷积操作,从而得到Root filter的响应图。对于2倍图像的DPM特征图,和训练好的Part filter做卷积操作,从而得到Part filter的响应图。然后对其精细高斯金字塔的下采样操作。这样Root filter的响应图和Part filter的响应图就具有相同的分辨率了。然后将其进行加权平均,得到最终的响应图。亮度越大表示响应值越大。
(5)Latent SVM:
传统的Hog+SVM和DPM+LatentSVM的区别如上面公式所示。
由于,训练的样本中,负样本集肯定是100%的准确的,而正样本集中就可能有噪声。因为,正样本的标注是人工进行的,人是会犯错的,标注的也肯定会有不精确的。因此,需要首先去除里面的噪声数据。而对于剩下的数据,里面由于各种角度,姿势的不一样,导致训练的模型的梯度图也比较发散,无规则。因此需要选择其中的具有相同的姿势的数据,即离正负样本的分界线最近的那些样本,将离分界线很近的样本称为Hard-examples,相反,那些距离较远的称为Easy-examples。
实际效果图如下图所示:
实验效果:
如下图所示,左面为检测自行车的检测效果,右面为Root filter,Part filter,2维高斯滤波下的偏离损失图
References:
[1]: https://people.eecs.berkeley.edu/~rbg/latent/index.html
[2]: P. Felzenszwalb, D. McAllester, D.Ramanan A Discriminatively Trained, Multiscale, Deformable Part Model IEEEConference on Computer Vision and Pattern Recognition (CVPR), 2008
[3]: P. Felzenszwalb, R. Girshick, D.McAllester, D. Ramanan Object Detection with Discriminatively TrainedPart Based Models IEEE Transactions on Pattern Analysis and MachineIntelligence, Vol. 32, No. 9, Sep. 2010
[4]: P. Felzenszwalb, R. Girshick, D.McAllester Cascade Object Detection with Deformable Part Models IEEEConference on Computer Vision and Pattern Recognition (CVPR), 2010
[5]: P. Felzenszwalb, D. McAllester ObjectDetection Grammars University of Chicago, Computer Science TR-2010-02, February2010
[6]: R. Girshick, P. Felzenszwalb, D.McAllester Object Detection with Grammar Models Neural InformationProcessing Systems (NIPS), 2011
[7]: R. Girshick From RigidTemplates to Grammars: Object Detection with Structured Models
Ph.D. dissertation, The University of Chicago, Apr. 2012