简介

DPM(Deformable Part Model),正如其名称所述,可变形的组件模型,是一种基于组件的检测算法,这种模型非常地直观,它将目标对象建模成几个部件的组合。比如它将人类视为头部/身体/手/腿的组合。

基于部件的可变形模型(DPM)

DPM检测算法原理

过上面对HOG特征的学习,可以使用HOG+linear SVM来做行人检测。DPM可以看做是HOG的扩展,HOG算法只关注整个物体的特征表示,但是在现实生活中,物体是有很多变化的,包括人的各种动作/车的各种形状/不同的视角和光照等等。所以DPM除了关注检测物体整体的特征表示,还关注物体的各个部位(如人的手,脚,头)的特征表示。这就能解决物体变化的问题。其大体思路与HOG一致。先计算梯度方向直方图,然后用SVM训练得到物体不同模板的梯度模型(Model)。这个模型实质上就是一个和DPM特征向量维数相同的向量,然后选取了这样的模型就可以直接用来分类了。

把训练好的模板进行hog特征可视化的一样操作,得到的可视化矩阵称作滤波器算子,下图1展示了训练学习的根滤波器模型(Root filter),组件滤波器模型( Part filter)和空间模型(Gaussian filter)

 图 1 根滤波器模型(左),组件滤波器模型( 中),空间模型(右)

上图包含了一个8*8分辨率的根滤波器模型用于表示人的整体特征和四个4*4分辨率的组件滤波器模型。其中组件滤波器模型的分辨率为左图的2倍,并且组件滤波器模型的大小是根滤波器模型的2倍,因此,看的梯度会更加精细。右图为组件滤波器模型其高斯滤波后的2倍空间模型。

显而易见,根滤波器模型描述的是人的整体特征,如果只用一个模型去检测物体的话肯定不如多个模型检测的效果好,所以DPM还有一个组件滤波器模型,组件滤波器的个数和部位可以自己设计,上图组件滤波器描述的是人的头,手,脚的局部特征。

还有个小细节,组件滤波器检测到的局部特征位置肯定不能离根滤波器中的这个局部特征的位置太远了,试想下假如手到身体的位置有两倍身高那么远,那这还是人吗。所以DMP加入了组件滤波器模型与根滤波器模型的位置偏移作为偏移系数,如图的空间模型,每个方框中心自然就是组件模型的理性位置,如果检测出来的组件模型的位置恰好在此,那偏移系数就为0,在周边那就要减掉一定的值,偏离的越远减掉的值越大。也就是说综合得分要减去偏移系数,本质上就是使用根模型和组件模型的空间先验知识。

在进行检测时会计算输入图像的DMP特征向量与滤波器算子的内积,就会得到这个滤波器算子的响应值,最后综合不同滤波器算子的响应值,会计算出一个综合分数,再训练出一个分数阀值就可以检测人类。

DPM特征提取

DPM首先采用的是HOG进行特征的提取,但是又有别于HOG,DPM中,只保留了HOG中的Cell。

图 2 DMP特征提取

如图2所示,假设一个8*8的Cell,将该细胞单元与其对角线临域的4个细胞单元做归一化操作。提取有符号的HOG梯度,0-360度将产生18个梯度向量,提取无符号的HOG梯度,0-180度将产生9个梯度向量。因此,一个8*8的细胞单元将会产生,(18+9)*4=108,维度有点高,下面给出降维的方法:

  1. 首先,只提取无符号的HOG梯度,将会产生4*9=36维特征,将其看成一个4*9的矩阵,分别将行和列分别相加,最终将生成4+9=13个特征向量,
  2. 为了进一步提高精度,将提取的18维有符号的梯度特征也加进来,这样,一共产生13+18=31维梯度特征,这就是DPM的特征向量。

 (HOG特征的原理可以看我上一篇博客)

https://blog.csdn.net/qq_40959462/article/details/124695675?spm=1001.2014.3001.5502

 检测步骤

如下图3所示,其检测步骤主要如下:

  1. 提取其DPM特征图:将原始图像进行高斯金字塔上采样,然后提取其DPM特征图。
  2. 根滤波器模型的响应图:对于原始图像的DPM特征图和训练好的根滤波器算子做卷积操作,从而得到根滤波器模型的响应图。
  3. 组件滤波器模型的响应图:对于2倍图像的DPM特征图,和训练好的组件滤波器算子做卷积操作,从而得到组件滤波器模型的响应图。
  4. 得到最终的响应图:对组件滤波器模型的响应图进行高斯金字塔的下采样操作。这样根滤波器模型的响应图和组件滤波器模型的响应图就具有相同的分辨率了。然后将其进行加权平均,得到最终的响应图。亮度越大表示响应值越大。

图 3 DPM检测步骤

计算综合分数的公式如下式所示。

 

组件滤波器模型的响应分数计算公式如下式: