RCNN系列总结

目标检测

Object Detection,在给定的图像中,找到目标图像的位置。这就涉及到两个问题:

  • 目标分类,识别出来目标是猫还是狗,Image Classification解决了图像的识别问题。
  • 定位,找出来目标例猫狗的位置。

R-CNN

2012年AlexNet在ImageNet举办的ILSVRC中大放异彩,R-CNN作者受此启发,尝试将AlexNet在图像分类上的能力迁移到PASCAL VOC的目标检测上。这就要解决两个问题:

  • 如何利用卷积网络来实现目标定位
  • 如何在小规模的数据集上训练出较好的网络模型

对于问题1,R-CNN利用了候选区域(Region Proposal)的方法,这也是该网络被称为R-CNN的原因:Region with CNN features。对于小规模数据集的问题,R-CNN使用了微调的方法,利用AlexNet在ImageNet上预训练好的模型。

R-CNN 检测整体流程:
  • 给定一张输入图片,从图片中选取2000个独立的候选区域(Region Proposal)
  • 将每个候选区域输入到预训练好的AlexNet中,提取固定长度(4096)的特征向量
  • 对每个目标(类别)训练一个SVM分类器,识别区域中是否包含此类目标
  • 训练一个回归器,修正候选区域中目标的位置:对于每个类,训练一个线性回归模型,判断当前框是否完美
    如下图所示:
    在这里插入图片描述
R-CNN 训练流程:

R-CNN训练流程如下:

  • 通过区域生成算法,生成2000个候选区域,这里使用的为Selective Search(SS)
  • 对生成的2000个候选区域,使用预训练好的AlexNet网络进行特征提取

将候选区域变换到网络所需的输入大小227X227。在变换的过程中,在每个区域的边缘添加了P个像素,也就相当于手动增加了个边框,这里P=16
改造了预训练好的AlexNet网络,将其最后的全连接FC层去掉,并设置类别为21(1背景+20目标类别)
这样一个候选区域输入到网络中最后得到4096X21的输出
在这里插入图片描述

  • 利用上面提取到的候选区域的特征,对每一个类别训练一个SVM分类器来判别候选区域中的目标类别,例下图的猫狗的SVM分类器
    狗的SVM分类器,就要能判断出某个候选区域是不是包含狗,包含狗了那就是Positive;不包含就是Negative.这里有个问题是,假如候选区域只是框出来了某个类的一部分,那要怎么来标注这个区域呢。在R-CNN中,设定一个IOU的阈值,如果该区域与Ground truth的IOU低于该阈值,就将给区域设置为Negative。阈值设置为0.3。
    在这里插入图片描述

  • 回归:上面只是得到了候选框中是否包含有某一类别的目标,但是其位置并不是很准确。这里需要再训练一个线性回归模型进行判断候选区域框出的目标是否完美。
    在这里插入图片描述

R-CNN 预测流程:
  • 输入一张图片,提取2000个候选区域
  • 将每个候选区域送入SVM分类器进行正负样本的判别
  • 将SVM分类出的正样本送入候选框回归器,计算每个候选区域的分数
  • 针对每个类,通过每个候选区域的分值然后采用非极大值抑制,以最高分的区域为base,删除重复的区域
  • 从而得到最终的候选框

R-CNN 缺点

  • 多阶段训练,各个阶段独立进行,繁琐且无法统一进行优化。
  • 训练耗时久
  • 中间需要保存候选区域的特征,特征较大,5000张的图片会生成几百G的特征文件
  • 检测速度较慢
  • SVM分类器和边框回归器的训练过程,和CNN提取特征的过程是分开的,并不能进行指导特征提取部分的学和更新

Fast R-CNN

R-CNN虽然取得了不错的成绩,但是缺点也很明显。Ross Girshick在15年推出Fast RCNN,构思精巧,流程更为紧凑,大幅提升了目标检测的速度。同样使用最大规模的网络,Fast RCNN和RCNN相比,训练时间从84小时下降到了9.5小时,测试时间从47秒减少到了0.32秒。在PASCAL VOC 2007上的准确率相差不大约在66%-67%之间。
Fast RCNN主要是来解决RCNN中的问题的:

  • 训练/测试速度慢,主要是由于提取候选区域的特征慢。R-CNN首先从输入图片中提取2000个候选区域,然后将这2000个候选区域分别输入到预训练好的CNN中提取特征,由于候选区域存在大量的重叠,这种提取特征的方法就会重复的计算重叠区域的特征。而在Fast RCNN中,是将整张图输入到CNN中提取特征,在邻接的时候映射到每个候选区域,这样只需要在末尾的少数层单独的处理每个候选框。
  • 训练需要额外的空间保存提取到的特征信息。RCNN中需要将提取到的特征保存下来,用于为每个类训练单独的SVM分类器和边框回归器。在Fast RCNN中,将类别判断和边框回归统一的使用CNN实现,不需要再额外的存储特征。
Fast R-CNN结构

输入是整幅图像和多个感兴趣区域(ROI)的信息,在前面的网络层中并不会处理ROI的信息,在后面的ROI pooling layer中,将每个ROI池化到固定大小的特征图,然后通过全连接层提取特征。最后通过将提取到的每个ROI特征输入到SoftMax分类器和边框回归器中,完成目标定位的端到端的训练。
Fast RCNN网络将整个图像和一组候选框作为输入。网络首先使用几个卷积层和最大池化层来处理图像产生卷积特征图。然后对每个候选框,ROI池化层从特征图中提取固定长度的特征向量。每个特征向量被送入一系列的全连接层中,其最终分支分为两个同级输出层:一个输出类别+背景类别的softmax概率估计,另一个为每个类别输出四个实数值,分别为相应类别的检测框的修正值。
在这里插入图片描述

ROI池化层

ROI池化层前面的网络层是对整幅图像提取特征得到的多个Feature Map。ROI池化层的输入就是这些个Feature Map以及多个ROI(候选区域),这里的ROI是一个矩形框,由其左上角的坐标以及宽高组成的四元组(r,c,h,w)定义。ROI池化层使用最大池化将Feature Map中的任意区域(ROI对应的区域)内的特征转换为固定的HxW的特征图,其中H和W为超参数。对于任意输入的hxw的ROI,将其分割为HxW的子网格,每个子网格的大小为h/H x w/W。如下,为了取得2X2大小的特征图
1:输入的Feature Map
在这里插入图片描述

2:ROI投影到Feature Map上的左上脚坐标为(0, 3),宽高为(7, 5)。在Feature Map上位置如下:
在这里插入图片描述

3:对每个子网格做最大池化
在这里插入图片描述

ROI池化层的标准同标准的池化操作是一样的,在每个通道单独进行

预训练网络

通过ROI池化层可以从整幅图像的特征图中得到每个ROI的特征图(固定大小),而整幅图像的特征图则使用预训练的网络提取得到。对于预训练的网络要做如下的修改:

  • 使用ROI池化层替代预训练网络最后的池化层,并将超参H,W设置为和网络第一个全连接兼容的值,对VGG16,设置H=W=7
  • 原网络的最后一个全连接层替换为两个同级层:K+1个类别的Softmax分类层和类别的边框回归层。
  • 网络的输入修改为两个:图像及相应的ROI列表
训练微调

R-CNN中的特征提取和检测部分是分开进行的,在使用检测样本进行训练的时候是无法更新特征提取部分的参数的。SPPNet也不能更新金字塔层前面的卷积层权重,这是因为当批量训练的样本来自于不同的图片时,反向传播通过SPP层时非常的低效。而Fast R-CNN则可以通过反向传播的方法更新整个网络的参数。
Fast R-CNN提出一个高效的训练方法,可以在训练过程中发挥特征共享的优势。在Fast R-CNN训练过程中随机梯度下降(SGD)的mini-batch是分层采样的,首先取N张图像,然后从每张图片采样RN个RoI。来自同一张图片的RoI在前向和后向传播中共享计算和内存。这样就可以减少mini-batch的计算量。例如N=2,R=128,这个训练模式大概比从128个不同的图像采样1个RoI(这就是R-CNN和SPPnet的训练方式)要快64倍。

该策略一个问题是会导致收敛起来比较慢,因为来自同一张图片的RoI是相关的。但它在实际中并没有成为一个问题,我们的使用N=2,R=128达到了很好的成绩,只用了比R-CNN还少的SGD迭代。

Multi-task Loss

在这里插入图片描述

Truncated SVD for faster detection

在这里插入图片描述

总结

Fast R-CNN是对R-CNN的一种改进,主要体现在以下几点

  • 卷积不再是对每个region proposal进行,而是直接对整张图像,这样减少了很多的重复计算。原本RCNN是对每个region proposal分别做卷积,而一张图像中有2K左右的region proposal,肯定相互之间的重叠率很高,产生大量的重复计算。
  • 用ROI pooling进行特征的尺寸变换,因为全连接层的输入要求大小一致,因此不能直接把region proposal作为输入。
  • 将回归器regressor放入网络中一起进行训练,每个类别对应一个regressor,同时用softmax的全连接层替代原来的SVM分类器。
Faster R-CNN

Fast RCNN实现的目标检测识别网络,在速度和精度上都有了不错的结果。美中不足的是,其候选区域提取方法耗时较长,而且和目标检测网络是分开的,并不是end-to-end的。在Faster R-CNN中提出了区域提议网络(Region Proposal Network,RPN),将候选区域的提取和Fast RCNN中目标检测网络融合到了一起,这样可以在同一个网络中实现目标检测。
在这里插入图片描述

Faster RCNN的网络有四部分组成

  • Conv layers 一组基础的CNN层,由Conv+Relu+Pooling组成,用于提取输入图像的Feature Map。通常可以选择由5个卷积层的ZF网络或者是13卷积层的VGG16网络。Conv layers提取的Feature Map用于RPN网络生成候选区域以及用于分类和边框回归的全连接层。
  • RPN:区域提议网络,输入的是前面卷积层的Feature Map,输出为一系列的候选区域。
  • ROI池化层 输入的卷积层提取的Feature Map和RPN生成的候选区域ROI,其作用是将Feature Map中每一个ROI区域转换为固定大小的HxW的特征图,输入到后面的分类和边框回归的全连接层。
  • 分类和边框回归修正 输入的是ROI池化后的HxW的特征图,通过Softmax判断ROI的类别,并对边框进行修正。
    整体工作流程如下:
  • 样本图像输入到Conv layers中,最后得到Feature Map
  • 将Feature Map送入RPN网络中,提取一系列的候选区域
  • 通过ROI池化层获得ROI区域对应的固定大小HxW的特征图
  • 将候选区域的特征图输入到用于分类的Softmax层以及用于边框回归全连接层。
    Faster RCNN的四个部分,其中的Conv layers,ROI池化和分类/边框修正,相比于Fast RCNN区别不大,主要的改进就是RPN生成候选区域。
卷积层 Conv Layers

前面的卷积层用于提取输入图像的特征,生成Feature Map。这里以VGG-16为例,Conv layers部分共有13个conv层,13个relu层,4个pooling层。在VGG中

  • 所有的卷积层都使用3×3的卷积核,步长为1,并对边缘做了填充padding=1。这样对于输入W×W的图像,通过卷积后,其输出尺寸为(W−3+2∗padding)/1+1=W,也就是通过卷积层图像的尺寸并不会变小
  • 池化层都是用2×2的池化单元,步长为2。对于W×H的图像,通过池化层后,其输出的尺寸为(W−2)/2+1=W/2,也就是通过一个池化层图像的尺寸会变为输入前的1/2
    Conv layers中的13个卷积层不会改变图像的尺寸,而是每个池化层会将输入尺寸缩小到原来的1/2,则对于WxH的输入,经过Conv layers后得到的输出为W/16xH/16,也就是输入尺寸的1/16。有了这个Feature Map相对于原始图像的宽高比,就可以计算出Feature Map中的每个点对应于原图的区域。
    注:由于池化层的降采样,Feature Map中的点映射回原图上,对应的不是某个像素点,而是矩形区域。
区域提议网络 RPN

区域提议网络(RPN)以任意的图像大小作为输入,输出一组矩形的候选区域,并给每个候选区域打上一个分数,如下图:
在这里插入图片描述

RPN输入的是前面Conv layers提取到的Feature Map,输出有两部分:

  • 候选区域的位置信息(一个4维元组)
  • 候选区域对应的类别(二分类,前景还是背景)
    为了得到上述的两种输出,要从输入的Feature Map上得到两种信息
  • 候选区域在原始输入图像的位置信息
  • 每个候选区域对应的Feature Map,用于分类
Anchor

前面提到由于池化层的降采样,Feature Map中的点映射回原图上,对应的不是某个像素点,而是矩形区域。很简单的,可以将Feature Map中的每个点映射回原始图像,就可以得到一个候选区域,但是这样得到的区域太过于粗糙,显然是不行的。Faster R-CNN使用的是将每个Feature Map中的点映射到原图上,并以映射后的位置为中心,在原图取不同形状和不同面积的矩形区域,作为候选区域。 论文中提出了Anchor的概念来表示这种取候选区域的方法:一个Anchor就是Feature Map中的一个点,并有一个相关的尺度和纵横比。说白了,Anchor就是一个候选区域的参数化表示,有了中心点坐标,知道尺寸信息以及纵横比,很容易通过缩放比例在原图上找到对应的区域。
在论文中为每个Anchor设计了3种不同的尺度128×128,256×256,512×512,3种形状,也就是不同的长宽比W:H=1:1,1:2,2:1,这样Feature Map中的点就可以组合出来9个不同形状不同尺度的Anchor。下图展示的是这9个Anchor对应的候选区域:
在这里插入图片描述
在这里插入图片描述

训练

每个anchor即可能包含目标区域,也可能没有目标。 对于包含目标区域的anchor分为positive label,论文中规定,符合下面条件之一的即为positive样本:

  • 与任意GT区域的IoU大于0.7
  • 与GT(Groud Truth)区域的IoU最大的anchor(也许不到0.7)

和任意GT的区域的IoU都小于0.3的anchor设为negative样本,对于既不是正标签也不是负标签的anchor,以及跨越图像边界的anchor就直接舍弃掉。
由于一张图像能够得到WHk个Anchors,显然不能将所有的anchor都用于训练。在训练的时候从一幅图像中随机的选择256个anchor用于训练,其中positive样本128个,negative样本128个。

总结

在这里插入图片描述

转载自:https://www.cnblogs.com/wangguchangqing/p/10384058.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值