您的位置:首页 > 移动开发 > Objective-C

形变目标识别DPM论文《Object Detection with Discriminatively Trained Part Based Models》阅读笔记

2017-08-02 23:27 701 查看
DPM论文阅读笔记
        DPM(Deformable Parts Model)本质上是“整体HOG+组件HOG+SVM”进行目标识别,其识别效果非常好。但是在具体如何选择合适的训练集、剪切目标区域、合理设置参数等并不是很清楚。所谓“知其然,知其所以然”,所以决定研究一下DPM算法。

        我主要以《Object Detectionwith Discriminatively Trained Part Based Models》论文为主进行研究,写的东西并不会面面俱到,主要是对研究DPM有所帮助,分为三个重点:DPM整体框架(包括如何训练、如何检测);核心的概念和算法(比如HOG特征、图像金字塔、SVM等);我看Felzenswalb论文的理解,及其一些思考。这些可能是相互穿插的,希望能对后来研究者有所帮助。

        论文:《Object Detection with Discriminatively Trained Part Based Models》

        论文和代码下载地址:www.rossgirshick.info/latent/

 

一、DPM的31维特征

        设图像大小为M*N,Cell大小为k*k,则将图像分成([(M-1)/k]+1)*([(N-1)/k]+1)个互不相交个Cell,每个Cell对应31维的特征。读者可自行了解HOG特征是什么,这个写得很详细http://blog.csdn.net/zouxy09/article/details/7929348,主要就是先计算每个像素的梯度,然后将梯度按梯度值大小加权投影到梯度方向所在区间,一般按20度为一个区间,因为不考虑正负方向,所以一共180/20=9个区间。一般每个Cell只考虑单元内的8*8个像素,这样一个8*8的Cell就产生了9维特征向量。

      接下来就来看DPM每个Cell如何产生31维特征向量。

1、利用距离和方向线性插值产生9维HOG特征



图1 产生9维HOG特征流程图
        上述是每个Cell产生9维HOG特征的流程图,因为于每个Cell的梯度特征不仅与Cell内部的像素有关,还和相邻的Cell有关,所以用线性插值分配梯度:将每个像素的梯度根据影响分配到不同的Cell。

        另外梯度对应的梯度值不是全部分配到梯度方向所在的方向区间,同样还是按照影响按权分配到不同区间。

        上述两个线性插值具体可参见:

                http://blog.csdn.net/u011448029/article/details/11709443

                http://www.chongchonggou.com/g_855649192.html

 

2、归一截断得到Cell对应的36维特征向量

        已知C(i, j)表示第(i, j)个Cell的9维特征向量,下面是9个相邻的Cell及其梯度特征向量:



     定义

,其中



然后根据


得到第(i, j)个Cell对应的4*9=36维的特征向量。其中


3、PCA将36维降维至13维

        下图是36个主成分,前12个横条和竖条状的特征向量占据大部分,所以分别按行和按列求和,一共得到4+9=13维特征向量。

   


图2 36个4*9维特征向量
        注:这里要解释一下特征向量是条状和按行列求和的原因,是将这些特征向量作为基向量,给定4*9维特征向量投影到这些基向量就得到同样的结果。

        另外要吐槽的是:由9维HOG特征得到的4个9维特征向量,按定义本身就很相似,这样升维再降维似乎用处不大,可以试试不这样做的效果。

 

4、取有正负方向梯度,得到31-13=18维特征向量

        上述1、2、3操作是假设梯度无方向,考虑有方向的梯度,那每个Cell就有360/20=18维HOG特征,再由第2步得到4*18维特征,然后按行求和得到18维特征向量。注意此时不再进行列求和。故无向和有向一共31维向量。

 

5、整体示意图如下:



图3 DPM的31维特征向量提取流程图
6、整幅图像

         整幅图像划分为若干个Cell,得到featuremap。

 

二、图像金字塔及其在DPM中的应用

1、图像金字塔和尺度空间金字塔

        参考:http://www.cnblogs.com/ct1104/p/4480928.html

尺度空间金字塔参考博客:http://blog.csdn.net/abcjennifer/article/details/7639681

        图像金字塔:传统的就是直接平滑下采样,即像素越来越少。

        尺度空间金字塔:sift中提到,每层塔由降采样得到;每层塔之间的层由不同k*sigma高斯核卷积得到。



图4 尺度空间金字塔
    由图4可知,尺度空间金字塔与传统金字塔区别在于,每层塔还有不同尺度的高斯卷积核模糊。
 

2、DPM中的应用

        DPM应用的是传统的图像金字塔,每经过λ层分辨率降为1/2,所以下采样scale为s=21/λ。另外还增加一组上采样,后面root filter和part filter检测会用到。论文中第三章提到训练时λ取5,检测时取10。



图5 DPM图像金字塔
3)缺陷

        运用图像金字塔可检测不同尺度的目标,若训练集框较大,则训练出的模型较大,响应的目标区域较大。而图像金字塔是下采样过程,若图像中目标较大,可以在下采样层被响应;但是若图像中目标区域较小,则始终不能被响应。所以做了实验,给定图片,汽车过小,检测不到,但是对其上采样,目标可以被检测:



图6 原图,汽车较小,无法检测到



图7 对原图插值上采样,检测到了目标
 

三、检测

        检测比较简单,主要是“rootfilter响应+part filter响应+part位置偏移量”三部分得分相加,滑动按Cell为单位进行。另外需要结合图像金字塔去看,给定image pyramid第L层得到相应的feature map,root filter和该feature map做卷积;而part filter和第层feature map做卷积,所以part filter对应的feature map分辨率是root filter分辨率的两倍;root filter再遍历各层feature
map(L>=1)。

        这篇博客写得比较清楚:http://blog.csdn.net/masibuaa/article/details/25990309

1、训练模型介绍

1)模型可视化结果

       DPM采用多模型,模型个数自己设定,为保证视角对称,所以一共偶数个;每个模型由6个固定组件组成。下图是汽车训练出来的3个不同角度一共6个模型,左图是整体模型(root filter);中间图是6个部件滤波器(part filter)覆盖到左图对应位置的结果,其分辨率是root filter两倍;右图表示部件滤波器和根滤波器相对位置间的关系。



图8 模型可视化结果
2)模型参数和可视化关系

         


        详细可参见:http://blog.csdn.net/masibuaa/article/details/25990309

 

2、下图是对图像金字塔某层进行检测。



图9 featuremap响应流程图
3、注意多模型、多层feature map

         论文中是采用mixturemodel和图像金字塔,需要理解max与其关系。

 

四、训练

        给定训练集:正样本P={(I1, B1), …, (In, Bn) },负样本是N={ J1…, Jm}。其中I是图像,B是框住目标的box。希望训练出m个模型(论文如此,m可能与负样本个数的m混淆)。

        训练三个关键部分:初始化多个模型(由root filter和6个part filters组成),利用latent SVM训练参数(filters),以及data-mining hard examples。直接上算法流程图:



图10 训练流程图
 

1、初始化模型

        初始化模型主要确定了各个模型的root filter的大小、part filter大小和相对位置以及各自大致轮廓。

1)初始化多个模型的root filters

        作者首先将正样本用聚类的思想按box的长宽比(aspectratio)分成m类;

        然后对于每一类的正样本,选择较小的样本的平均大小作为root filter的尺寸(这样是为了保证大多数样本的box能覆盖root filter);

        每一类正样本随机从框内选取与rootfilter相同大小的区域作为训练集(保证提取的特征向量维数与root filter相同),利用SVM训练出m个root filters。

2)Merging Components(即m个models)

        利用训练集P和N,将m个初始后的rootfilters合在一起,利用latent SVM(此时root filter的位置、在feature map的哪一层都是latent变量)训练这m个root filters。(此时暂不考虑part filters)

3)初始化各模型的part filters

        对给一个模型,用6个互不相交的矩形框,按high-energy和对称的思想尽可能覆盖rootfilter。用双线性插值将这些矩形框内的参数超分辨率到原来的两倍,得到初始化后的各part filters,其大小和相对part filters的位置也固定了。

         初始化汽车模型如下,可以看出基本有了汽车的轮廓了。



图11 初始化模型可视化结果
2、optimize the LatentSVM

        与普通线性SVM类似,只是增加一个latent变量,输出公式如下:



,即输出还与latent变量z(当前窗口在x相对位置、所在层数等)相关。

          对于训练集,需要满足不等式约束条件,利用外点罚函数,将求参转问题换为如下优化问题:



        最后利用随机梯度求解上述优化问题,梯度公式如下:



注:此处latent SVM只用到最简单的线性SVM,也为用到软边缘,而是直接用罚函数方法;求解未用对偶求解,而是直接用SGD求解。

3、data-mining hardexamples

        简单来说,在训练过程中,负样本集是动态变化的,针对当前样本集训练出参数;然后去掉负样本集中分类效果好的点,从N中随机取一些分类效果不好的样本添加到负样本集。(这里的负样本集是用窗口从N中扫描图像构成。)

        论文中有SVM和LSVM版本,本质上都是根据分类结果动态增加删除一些负样本点,具体算法如下:



图12 data-mininghard example算法
 

五、SVM及其在DPM中的应用

        论文中latent SVM关于参数的目标函数与常见的SVM不太相同,这里着重理清SVM的内在逻辑,并与论文中的形式进行比较,具体SVM算法可参见推荐的教材和网站。

1、带约束条件的最值问题及其求解

1)等式约束:拉格朗日求解

    问题:min f(x),s.t c(x)=0

    转化为无约束求解:拉格朗日乘子法。

    从等高线解释:维基百科

    从隐函数解释:http://math.fudan.edu.cn/math_anal/jiaoan/Lagrange.pdf

2)不等式约束

    有两种求解方法:转化为KKT求解;罚函数

   参考:《数值最优化方法》(北京大学出版社)

 

2、SVM

    参考:《数据挖掘导论》,写得条理清晰,通俗易懂。

    三个主线:线性可分、线性不可分(软边缘)、高维映射解决非线性问题

    求解:转化为对偶问题

 

3、DPM中应用

1)线性模型+外点罚函数

        论文中的latentSVM和常见的SVM不同,这里直接用最简单的线性模型+外点罚函数,没有用到核函数(因为特征向量的维数本身就很高了)、也没有用到软边缘;求解最优化问题直接用SGD,并没有转化为对偶问题求解。这两点需要注意,否则会和常见的SVM的形式对不上。

2)latent SVM

        与SVM相比关键是引入latent变量。

   

 

六、DPM使用注意事项

1、多模型

        由模型训练初始化可知,不同模型主要依赖于box尺寸而定,所以在对正样本进行box时,需要根据预先需要的模型数和可能的模型,决定box的尺寸。

        另外上次东南大学某位同学想法很有意思,是否可以直接用SVM训练多个目标模型,实现多类目标识别。

2、检测

        由检测过程可知,一旦rootfilter确定,其大小和方向等就确定了,待检测feature map区域与root filter做卷积,所以区域中的目标大小和轮廓必须与root filter相似,才能产生很高的响应,故DPM对旋转和尺寸检测效果不好。

1)尺寸检测

        由检测过程可知,图像金字塔是下采样,而rootfilter是遍历各层feature map,所以当场景中目标像素远小于root filter大小时,就无法检测到。

2)旋转

        旋转效果也不好,分析同上。取同样一张含car的图像,分别旋转0度、20度、60度,检测结果如下:



图13 原图



图14 旋转20度



图15 旋转60度
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐