天天看点

关于DPM(Deformable Part Model)算法中模型可视化的解释

        DPM源码(voc-release)中的模型可视化做的还算相当炫酷的,可以让我们直观的看到训练好的模型,甚至我们不用去做模型的评价,直接根据肉眼的观察,就能大致了解一个目标训练的好不好,比如我训练一个人体模型,那他的可视化图当然就是越接近人体越好。

        下面是对DPM源码中有关模型可视化部分代码的分析,通过分析这些代码,有助于更好的理解DPM模型。

        注意:我的源码版本是voc-release3.1,第4版往后的模型变得更复杂,这里不讨论。

        有关模型可视化的代码主要在visualizemodel.m,foldHOG.m和HOGpicture.m中。

(1)简化分类器参数向量(或者叫滤波器权重向量)

        DPM中使用降维后的31维HOG特征向量,所以,与之对应的,训练好的模型的参数向量也是31维的,为了方便可视化,需要将31维的参数向量简化为9维,foldHOG函数就负责参数向量的简化。

        31维的HOG特征向量是有分段含义的,如下:

        设C是聚合有9个对比度不敏感方向的像素级特征映射而获得的基于cell的特征映射,D是聚合有18个对比度敏感方向的像素级特征而获得的基于cell的特征映射。用4种不同的归一化方法对C(i,j)和D(i,j)进行归一化和截断(限幅),可以获得一个4*(9+18)=108维的特征向量F(i,j)。实际中我们使用此108维向量的一个解析投影,此投影由下面几个统计量定义:27个在不同归一化因子上的累加和(即列的和),F中的每个方向通道对应一个;以及4个在不同方向(9维对比度不敏感方向)上的累加和(即行的和),每个归一化因子对应一个。cell尺寸k=8,截断(限幅)阈值α=0.2。最终的特征映射是31维向量G(i,j),其中27维对应不同的方向通道(9个对比度不敏感方向和18个对比度敏感方向),剩下4维表示(i,j)周围4个cell组成的block的梯度能量。

        所以,foldHOG中的简化过程就是将31维参数向量的后4维丢弃,将前27维进行负值抑制和折叠累加,缩减为9维的参数向量,源码及注释如下:

(2)生成滤波器权重向量的可视化图

        这一工作在HOGpicture函数中完成,此函数负责为简化后的w*h*9维的权重向量生成可视化图。

        首先要生成一个间隔为20度的方向坐标基,然后将滤波器向量中的点(i,j,k)向坐标基中的方向k上投影,而用该点的值衡量(i,j)在k方向的幅度。

        源码及注释如下:

下面图1-6是HOGpicture中一个根滤波器可视化图的绘制过程:

关于DPM(Deformable Part Model)算法中模型可视化的解释
关于DPM(Deformable Part Model)算法中模型可视化的解释

                     图1,根滤波器权重向量点(1,1)的可视化                                                    图2,加上点(1,2)的可视化

关于DPM(Deformable Part Model)算法中模型可视化的解释
关于DPM(Deformable Part Model)算法中模型可视化的解释

                                图3,完成第1行的可视化                                                                图4,完成前2行的可视化

关于DPM(Deformable Part Model)算法中模型可视化的解释
关于DPM(Deformable Part Model)算法中模型可视化的解释

                  图5,完成前10行的可视化,可以看出人形了                                          图6,完成整个根滤波器的可视化      

(3)在visualizemodel函数中进行一些后处理,分割绘图区域,依次调用HOGpicture画出根滤波器和各个部件滤波器的可视化图,以及各个部件的变形花费图。

        在visualizemodel中调用HOGpicture画出根滤波器的可视化图,返回值为图6,然后将像素值扩充到[0,255]并转换为8位无符号整型,得到图7:

关于DPM(Deformable Part Model)算法中模型可视化的解释

                         图7,根滤波器可视化图_Uint8

        然后分割绘图区域,将根滤波器的可视化图画到指定区域,如图8;再转换为灰度图,如图9。

关于DPM(Deformable Part Model)算法中模型可视化的解释
关于DPM(Deformable Part Model)算法中模型可视化的解释

                                图8,根滤波器_subplot                                                                            图9,根滤波器_subplot_gray

        再之后依次绘制各个部件的可视化图,如图10是人体头部的可视化图,覆盖到根滤波器的对应位置。

关于DPM(Deformable Part Model)算法中模型可视化的解释

       图10,头部部件可视化

关于DPM(Deformable Part Model)算法中模型可视化的解释

         图11,左图是根滤波器,右图是各个部件的可视化图覆盖到根的对应位置后的可视化图

        从图11中可以看出,部件滤波器明显要比根滤波器细致,能提供更多细节。

        最后就是生成各个部件的变形花费图了,这要用到各个部件的变形信息,在模型的defs[]数组中。defs数组中,每个部件对应一个锚点坐标和一个变形花费参数(4维向量)。计算部件内每个位置距离部件中心的距离,用变形特征向量v = [Δx^2, Δx, Δy^2, Δy]‘ 和 部件的变形花费 相乘,得到的结果可以反映此位置的变形花费。值越大,说明变形费用越高,表明不是部件的理想位置;值越小,说明变形费用越低,表明是该部件的理想位置。反映到变形花费图上,越亮(白)的地方花费越大,越暗(黑)的地方花费越小。

        如下图12是头部的变形花费图:

关于DPM(Deformable Part Model)算法中模型可视化的解释

                      图12,头部的变形花费图

        最后,就获得了完整的模型可视化图

关于DPM(Deformable Part Model)算法中模型可视化的解释

图13,左图:根滤波器的可视化图;中图:各个部件的可视化图覆盖到根的对应位置后的可视化图;右图:各个部件的变形花费图

相关链接:

Deformable Part Model 相关网页:

Pedro Felzenszwalb的个人主页:

PASCAL VOC 目标检测挑战:

继续阅读