一文详解DeepID-Net

DeepID-Net简介

 DeepID-Net是由香港中文大学多媒体实验室开发的图像检测模型,全称DeepID-Net: deformable deep convolutional neural network for generic object detection(用于一般性物体检测的可变形深度卷积神经网络),该论文发表在CVPR2014上。之后该团队将该模型专注应用在人脸识别的具体应用上,相应对DeepID模型进行了一些更改和优化,更新后的两个版本模型分别称之为DeepID2和DeepID3。

框架流程简介

下图展示了DeepID框架对一幅输入图片进行处理的过程。
在这里插入图片描述
 从图中可以看出DeepID框架和R-CNN有很多相似之处。初始化时构件候选集均采用了selective search策略。因为DeepID用于参加了ILSVRC比赛的分类定位任务,故在框架最后也采用了BB盒回归策略。中间红色字体标注的流程就是特征提取和分类过程,这一部分和R-CNN有所不同。值得说明的是,所有红色字体标注的是一种框架应用策略,但作者在论文中指出,最后参加比赛时并没有采用所有的策略。每一步策略在下文中进行详解。

Bounding Box Rejection

 通过selectIve search方法构件候选目标区域时,会产生大量的候选矩形框。论文中指出一副图片的平均矩形框数量大约是2400个,但是实际图片中目标对象可能会很少。由此会造成大量的消耗。
 作者在论文提出可以先用R-CNN模型进行筛选一遍。在RCNN中的分类层输出200个类,然后每个bb盒经过RCNN模型后会得到每个类的score。如果最高分小于阈值T,则认为其是背景,就将其reject掉。论文中T取的是-1.1。经过这一步的操作,bb盒的数量会被剔除94%。这里在分类层设置成200类是因为比赛的输出是200个类。

DeepID-Net 网络结构

先看看DeepID-Net 网络的内部结构,如下所示
在这里插入图片描述
 图中所示的(a)、(b)、(c)、(d)分别表示图像特征提取四种方法,这四种方法可以独立的进行图像特征提取和分类,也可以进行组合进行特征提取和分类。图中展示了四种方法的组合策略。方法(a)中的Baseline deep model(clarifai-fast)是整个DeepID-net网络的核心部分,可以看出(b)©方法均是在clarifai-fast模型的卷积5(conv5)之后做的变化。
 clarifai-fast模型实际上是2013年ILSVRC比赛分类项目组第一名。该模型的框架示意图如下所示:
在这里插入图片描述
 从图中可以看出整个clarifai-fast模型和Alexnet模型一模一样(每一层的参数大小都是一致的),不同之处在于实现上的两个细节。第一个细节是clarifai-fast不对原始图片进行修剪,而输入的是224224大小的图片。第二个细节是clarifai-fast将卷积核大小从1111改为7*7,另外将移动步长从4改为2。效果上clarifai-fast模型比alexnet模型精度提高了大约1.6个精度。

预训练和微调

 DeepID-net中的CNN模型需要进行训练和微调以得到模型参数。首先作者将使用的数据进行了区分。training data中的数据分为两类,第一类用于分类任务(task1)的训练,作者将这一批数据称为Imagelevel的图片,通常这类图片目标单一,包含更多的背景信息。在进行分类任务的时候是直接将整张图片作为输入,然后基于整张图片给出图片内的目标label。作者认为在这种图片中一个目标可能以任意大小出现在图片中的任意位置。分类任务往往要求算法对于目标的位置和大小变化有一定的鲁棒性。第二类是用于分类定位任务(task2)的训练,作者将这一部分数据称之为object-level。对于这一部分数据往往会先进行图像切割,并用包围盒将可能存在的目标对象“框住”,此时就不需要算法对目标的位置和大小变化有鲁棒性。
 作者实验测试得出那分类任务的imagelevel图片拿来预训练模型,然后再做检测任务会有很好的效果。
论文中提出了两种不同的策略。
第一种:

  1. 用Cls-Loc training data 中Imagelevel的图片进行预训练
  2. 用Cls-Loc training data 中objectlevel的图片进行微调
  3. 用det data中的 train data和val1 data进行微调
    第二种:
    1.用Cls-Loc training data 中objectlevel的图片进行预训练
    2.用det train data和val1 data进行微调
    上述每一步训练的参数结果将作为下一步训练的初始化参数。实验结果显示,对比RCNN,第一种策略精度提高1.6%,第二种策略精度提高4.4%。

Multi-stage training

 multi-stage训练策略是DeepID-net中一种特征提取分类策略。示意图如下所示:
在这里插入图片描述

 直观的看是在pool5之后给出了多种全连接层(大概就是文中说的多stage),然后每个层都会输出一种分类结果,图下的注释指出每一个stage处理的对象复杂程度(different difficulty levels)不同(例如图中的示例是第一个stage是行人正面、第二个stage是行人侧面、第三个是行人背面或模糊处理)。
 具体做法是:

  1. 先训练第一个fc(全连接层)
  2. 固定住conv(前面的5个卷积层)和第一个fc不训练(参数不变),然后训练第二个fc。
  3. 同时训练conv,第一个fc和第二个fc
  4. 固定住 conv和第一个和第二个fc,训练第三个fc
  5. 同时训练conv,第一二三个fc
    直到每个stage都训练完毕。
    文中给出这么做的理由是一个新的stage可以去处理一些被错误分类(misclassified)的样本,当然被正确分类的样本不会对新的stage造成影响。第二个理由是这种项目协作的方式很好,第三个理由是能够避免过拟合。

def-pooling layer

 作者认为一个目标对象可能存在多个子区域(parts),如一个行人可能有头部、手、脚、躯干等区域,每个区域有不同的大小。作者首先用三种不同的卷积核去卷积conv5。如图示:
在这里插入图片描述

  1. 在conv5之后分别用3X3、5X5、9X9的卷积核去卷积,得到conv61、conv62、conv63。
  2. 对conv6分别做def-pooling操作,得到def61、def62、def63
  3. 然后用1X1的卷积核去卷积def6层,得到卷积结果conv7。
    常规的池化操作是max-pooling和avg-pooling。这里作者给出了一种特殊的max-pooling方法。即在pooling的时候对每个像素设置一个惩罚项。如下图示:
    在这里插入图片描述
    其中kx、ky是采样的步长,(kx · x, ky · y)是B的中心。b(x,y)是B中第(x,y)位置的元素。(2R+1)*(2R+1)是池化用的核大小,cn、dn是人为设定的参数,这一项称之为惩罚约束项。cn=0时,这就是max-pooling。
    实际上这一步的策略出自行人检测那篇论文的思想。

上下文建模

 sub-box是用来做bb盒特征提取的。一个bb盒可以被分割成多个部分,论文中将其切分成四个部分。如下图示
在这里插入图片描述
 论文中说这么做可以提高精度,实验结果是能够将mAP提高0.5%。具体做法:

  1. 假设已知每个proposal的特征,将proposal P0进行四等分,如上图示,然后计算其他proposal 分别和这四个等分区域的IoU(重叠率)。
  2. 选取其中IoU最大的四个proposal,记为p1、p2、p3、p4。
  3. 对这四个特征向量做max-pooling取值操作,得到fmax特征。具体做法是取每个维度上的最大值。
  4. 对这四个特征向量做avg-pooling取值操作,得到favg特征。具体做法是取每个维度上的均值。
  5. 设P0的特征为f0,则将(f0、fmax、favg)作为P0新的特征向量。

hinge-loss

 hinge-loss是SVM分类的损失函数,作者在微调阶段将deep model的softmax loss函数替换成hinge-loss。

上下文建模

 作者提出上下文建模思路是认为这样一种观点:图片分类任务会将“场景信息”考虑进去,而物体识别任务更多的是关注在物体定位上,于是作者认为图片分类任务的结果考虑到了可用于物体识别的上下文信息。因此作者将要识别的目标对象先拿去做分类任务,由于比赛的任务分类是1000中类别,故会产生1000个分类结果(score),接着作者在将要识别的目标对象拿去做物体识别任务,由于识别任务是200个类别的识别,故会产生200个识别结果。作者将这两类结果组合成1200维的特征向量,将此向量看做是图片的特征向量,接着利用该向量再进行200个类别的分类任务(比赛的最终目的)。

模型均化策略

 上述提到的诸多方法中,并不是需要将所有的方法均设置在一个DeepID网络中。作者提出了构建十种不同架构的DeepID-net中。如下图中给出了10个不同的DeepID模型在val2数据集上测试的结果:
在这里插入图片描述
 表中:A表示Alexnet,C表示Clarifai-fast,D-D表示DeepID-Net with def-pooling,D-MS表示DeepID-Net with multi-stage training。[23]表示RCNN的预训练策略,1表示上文中提到的第一种预训练策略,2表示上文中提到的第二种预训练策略。
 这十种不同的模型区别之处可能包括:预训练方案不同,deep model使用的损失函数不同,是否使用了def-pooling/multi-stage training/sub-box,是否使用了bb盒回归。在现有的方案中def-pooling/multi-stage training/sub-box是不会使用在同一模型中,但作者不排除未来会将其整合至一起。作者认为这样做使得模型之间相互补充从而改善检测的结果。这十个模型在val2上的平均精度能够达到40.9%。

猜你喜欢

转载自blog.csdn.net/songguangfan/article/details/106376910