关于DPM(Deformable Part Model)算法中模型结构的解释

含有n个部件的目标模型可以形式上定义为一个(n+2)元组:(F0,P1,…, Pn, b)(Fi,vi, di)anchor positiondeformation cost)。

但是有了这个说明我们在看源码时还是会有很多不明白的地方,刚开始困扰我很长时间,经过一段时间的分析,有了一定的理解,下面是我对这个模型的分析,如有不妥之处,请大家留言指正。

我分析的源码版本是voc-release3.1,从第4版开始加入了语法模型,更加复杂了,这里不讨论。

分析模型结构体主要看initmodel.m这个文件,通过看他如何初始化模型,我们可以明白其中大多数字段的含义。

在这之前,我们可以在matlab中打开一两个源码中自带的训练好的模型m文件,看看是什么样的。

inria_final.mat,Inria数据集上训练的单组件模型

person_final.mat,VOC2007数据集上训练的2组件人体模型

下面我会依次对各个字段做详细解释

(1) sbin,整型标量

sbin是HOG特征中cell的尺寸,即cell的尺寸为sbin * sbin定义cell是为了将像素级特征聚合成为基于cell的特征C(i,j),0<=i<=|(w-1)/k|,0<=j<=|(h-1)/k|,参见,这里的k就是cell尺寸sbin,这样可以更明确的理解sbin的用处。

(2) interval,整型标量

HOG金字塔每组的层数

(3) numblocks,整型标量

模型中总的数据块的个数

(4) numcomponents,整型标量

组件的个数(含多少个组件模型)

(5) blocksizes,double数组,长度等于numblock

blocksizes[]数组的元素个数等于numblock,指明每个数据块的大小,所以,想知道哪个数据的大小,就先找到他的数据块标识,然后去blocksizes[]数组查找对应的数据块大小。

(6) regmult,double数组,长度等于numblock

还不清楚干什么的

(7) learnmult,double数组,长度等于numblock

还不清楚干什么的

(8) lowerbounds,cell类型数组,长度等于numblock

每个数据块的数据值的下界,lowerbounds[]数组的元素个数等于numblock。

假如某个数据块的数据是向量或矩阵的话,则对应的lowerbounds元素值也是一个下界向量或矩阵

(9) maxsize,二元组

所有组件的根滤波器的[高度 宽度]的最大值,maxsize是统计所有组件的根滤波器的尺寸获得的。

(10) minsize,二元组

所有组件的根滤波器的[高度 宽度]的最小值,minsize是统计所有组件的根滤波器的尺寸获得的。

(11) thresh,double类型标量

保证高召回率需要的得分阈值,根据训练结果计算得到的。

也就是说,如果用此模型进行目标检测时,将得分阈值设为thresh能够保证很高的召回率(recall rate),但是同时精度肯定就低了。

(12) rootfilters,cell类型数组,长度为组件个数

根滤波器数组,其每个元素表示一个组件模型的根滤波器的信息,每个元素包括3个字段:

size:根滤波器的尺寸,以cell为单位,w*h

w:根滤波器的参数向量,维数为(w*h)*31

blocklabel:此根滤波器所在的数据块标识

(13) partfilters,cell类型数组,长度为模型中所有组件的部件的个数之和

部件滤波器数组,其每个元素表示一个部件滤波器的信息,每个元素包括4个字段,注意:所有组件的部件是连续编号的

w:部件滤波器的参数向量,维数为(w*h)*31

partner:此部件对应的伙伴部件(对称部件)的索引,如果partner的值为0,表示此部件没有伙伴部件。

fake:是否假部件,值为1表示此部件是假部件,假部件不需要blocklabel

blocklabel:此部件滤波器所在的数据块标识

(14) defs,cell类型数组,长度为模型中所有组件的部件的个数之和

部件的锚点数组 (变形信息数组),每个元素表示对应部件的可变形信息。注意:所有组件的部件在defs中也是连续编号的。每个元素包含3个字段:

anchor:部件的锚点坐标,即部件未变形时的左上角点坐标,参见论文[2010 PAMI]中的公式(3)中的vi变量

w:w是一个四维向量,指明部件的变形花费函数的参数,参见论文[2010 PAMI]中的公式(2)中的di变量

blocklabel:所在的数据块标识

(15) offsets,cell类型数组,长度为组件个数

偏移量数组,每个元素表示对应组件模型的偏移量,每个元素又含有2个字段

w:组件的偏移量,是个实数值

blocklabel:所在的数据块标识

(16) components,cell类型数组,长度为组件个数

组件信息数组,每个元素存储一个组件模型的信息,每个元素又包含7个字段:

rootindex:根滤波器的索引,指出组件的根滤波器在rootfilters[]数组的位置

offsetindex:组件的偏移量索引,指出组件的偏移量在offsets[]数组的位置

part:组件的部件信息数组,长度为该组件的部件个数,每个元素表示一个部件,每个元素又有2个字段:

partindex:部件的索引,指出此部件在partfilters[]数组的位置,注意:所有组件的部件是连续编号的

销售世界上第一号的产品–不是汽车,而是自己。

关于DPM(Deformable Part Model)算法中模型结构的解释

相关文章:

你感兴趣的文章:

标签云: