白话解读fast RCNN论文

fast RCNN论文笔记

  • 背景介绍
    RBG大神14年创作出RCNN之后,仿佛打开了潘多拉魔盒,一年之后又创作出了fast PCNN和faster RCNN,这里先介绍前者。fast RCNN更像是一篇业内的学术battle(同年首先由另一大神何凯明的SPPnet对RCNN率先做出了优化,之后RBG在SPP的思想下又做出了改进即fast RCNN)。
    论文特点有以下几个方面,第一是速度上的提升,将VGG16的pool5这一层换为ROI pool(借鉴的SPP层),再也不用将一张图的2000个候选框都进入神经网络做训练,而是只将一张图进入训练(但候选框的选取上还是采用的ss算法,这一点在faster RCNN上做了优化)。第二RCNN在做训练的时候非常占内存,因为要把第五层和第七层全连接层的所有特征都要存入内存中(原因是SVM和回归都不是和神经网络的训练同步进行的),针对这一点作者将分类和回归替换了VGG的输出层,同步做训练。第三,解决了SPPnet训练时spp层之前的卷积层的参数不变的问题,好处就是提升了准确度。总之,相较于SPPnet和RCNN最大特点就是速度上的提升。
    因为在原理上对RCNN作出的改变只有两处,所以下面对三个方面作介绍,前两个是与RCNN的不同(ROI和对分类回归的处理),最后一个是与SPP的不同。
    下图是fast RCNN的网络结构图白话解读fast RCNN论文_第1张图片

  • ROI poll
    VGG16白话解读fast RCNN论文_第2张图片
    由于候选框的尺度各不相同,而期望提取出来的特征向量维度相同(为什么需要是相同维度的呢,因为后面的全连接层的维度不能变,如果改变参数的个数就会变,模型就不能做训练了),因此需要某种特殊的技术来做保证即ROI。
    ROI层将每个候选区域均匀分成M×N块,对每块进行最大池化。将特征图上大小不一的候选区域转变为大小统一的数据,送入下一层。这样就解决了由于候选框大小不一致而进行暴力放缩导致的像素点的改变的问题。
    白话解读fast RCNN论文_第3张图片
    在本文中作者ROI M×N是7×7的(这样他的特征数量上和原VGG pool5上的一致,就可以直接连入后面的全连接),一定要和替换掉的保持一致,为了方便。那么作者是怎么使用ROI 解决对图片只做一次卷积的呢。
    1、根据输入的图片,将候选框映射到feature map(最后一层卷积)对应的位置
    2、将映射后的区域划分为相同大小的sections(M×N)
    3、对每个section进行max pooling操作;即每一个网格对应一个输出值)
    4、将所有输出值组合起来便形成固定大小的特征图(这里是7×7×512)
    白话解读fast RCNN论文_第4张图片

  • 分类与回归
    Fast RCNN放弃了SVM分类器,而是选择微调后网络自身的softmax分类器。这样一来,特征提取,目标分类、候选框回归三部分可以同时进行端到端(end-to-end)训练。这样做不需要占内存,而且文中提到通softmax分类效果好于SVM。怎么做到的呢是将两个损失函数融合。
    白话解读fast RCNN论文_第5张图片
    下面对上面的公式做一个解读,全连接输出的应该是2000×4096维的,将IOU大与等于0.5的作为正样本,其余为背景,softmax输出的是2000×21维的,20为类,1为背景,第一个分类损失函数对2000个候选框计算属于该类的对数概率值。第二个回归损失函数计算正样本对于目标框的偏差。然后对二者按照最后一个公式求和,即为总的损失函数,有了损失函数,就可以对整个网络做后向传播,就能一步解决目标检测问题。

  • 更新所有层的参数问题
    文章中将个mini-batch包含2张图像和128个候选框(或者叫ROI),也就是每张图像有64个ROI。然后从这些ROI中挑选约25%的ROI,这些ROI和的IOU值都大于0.5。这样做使得每个图没有大量的重复特征,可以更新所有层的参数。

  • 结果
    实际上只对速度提升很大,并且马上就出现了faster RCNN,但确实还是

你可能感兴趣的:(深度学习)