two-stage目标检测算法介绍

综述

two-stage是基本深度学习的目标检测算法的一种。主要通过一个完整的卷积神经网络来完成目标检测过程,所以会用到的是CNN特征,通过卷积神经网络提取对候选区域目标的特征的描述。典型的代表:R-CNN到faster RCNN。如果不考虑two-stage方法需要单独训练RPN网络这一过程,可以简单的广义的理解为端到端的过程。但不是完全的端到端,因为训练的整个网络过程中需要两个步骤:1.训练RPN网络 2.训练最关键的目标区域检测网络  。相对于传统的检测算法,不需要额外的训练 分类器,特征表示的过程,整个目标检测的过程都通过一个从A到B的一个完整的CNN完成。相对于传统的算法 准确度得到了非常大的提升,速度相对与one stage的方法慢一点,但精度高。

Two-stage基本流程

首先输入图片,然后对图片进行深度特征提取(经过卷积神经网络,称之为主干网络),然后通过RPN网络完成传统目标检测算法中滑动窗口所完成的任务(也就是产生候选区域)同时完成对候选框的分类(这个分类过程就将后选区分为 背景 和 目标两个类别)并且RPN网络会对目标的位置进行初步的预测。  然后需要一个roi_pooling层 将候选区域进行进一步的位置的精确的回归和修正。(实际上可以将roi_pooling层理解为“抠图”,对于多个featuremap想要不去重复的计算CNN特征,往往通过roi_pooling进行一个抠图的操作。)接下来得到候选目标对应到feature map上它的那一段区域(特征)之后,会通过一个全连接层来进一步的对候选区域的特征进行表示。然后通过分类回归的两个分支,来分别完成对候选目标类别的判断和位置的精修。(这里的类别不同于RPN网路的类别,这里通常会得到物体真实的类别)

 常见的Two-stage算法

 

 

核心结构

1.CNN网络(主干网络)

CNN网络设计原则:

对于经典的目前主流的CNN如何调研:主要面向与image net挑战赛,比较有代表性的往往会应用与这些比赛。另外会用在..数据集上

·从简到繁再到间的卷积神经网络:最开始cnn的结构非常简单,但性能在大规模任务中有瓶颈;然后提出了一些复杂的网络结构,这些网络一般有两种策略:一种尽可能的增加网络的深度,因为网络越深非线性表达能力越强,对于现实中很多任务是非线性的。同时网络越深,越深层次的特征对于图像最初的变化更加的不敏感,也就是越深层次的特征它的鲁棒性越好。所以尽可能的加大网络的规模,但加大深度一方面会加大网络的规模,另一方面会导致梯度消失梯度离散等问题。这也是目前cnn难以设计到非常非常深的原因(一般几百层后就很难训练了)比较典型的:resnet  ;另一种比较经典的卷积神经网的设计是追求网络的宽度,通过加大网络的宽度增加网络的表达能力,代表:google;

 在发展到现在,很多卷积神经网想要跑在终端,而不是跑在云端。因此在设计网络结构时希望网络尽可能轻量点,这就出现了轻量级的网络设计原则,也就是说在设计网络时考虑性能、网络模型大小的平衡。除此之外还有对网络压缩,裁剪,量化等等一系列的策略来减小网络的大小,能够使网络在尽可能小的损失性能的情况下压缩模型大小使网络能够跑在一些性能功耗比较差的设备上。

·多尺度特征融合的网络:

·更轻量级的CNN网络:

2.RPN网络

输入的图片在经过主干网络后会得到提取出来得feature map,这个feature map通常为ncwh四维卷积特征,n:batchsize的数量,当前处理的样本的数量;c:表示了feature map的数量,也就是通道数;w,h为feature map的长宽,这个长宽和原始图像的长宽可能会相差一定的倍数,这个差距产生的原因:一方面卷积时可能产生长宽损失(使用没有padding的策略),另一方面pooling时也会对图像进行下采样来获得更大的感受野但会缩小尺寸。 得到feature map后会通过一个RPN网络来完成区域推荐和候选目标的筛选。(这个步骤相当于传统目标检测方法中会用到的滑动窗口的方法)所以需要了解区域推荐(anchor机制),ROI Pooling。

 

(1)RPN网络中的区域推荐(Anchor机制)

对于RPN网络,比较重要的就是区域推荐,称之为Anchor机制。对于当前的feature map它的大小为n×c×w×h,anchor是指我们称w*h大小的feature map中的每一个点作为锚点,这个锚点就是所谓的候选区域的中心点。以每一个点作为中心点去提取候选区域,这样的每一个点都称为anchor。接下来以这个点为中心来提取候选区域,通常候选区域会按照一定的比例来进行提取。候选区域提取出来后会通过针对于 候选区域以及真值  ,利用真值对候选区域进行筛选,筛选后会得到正样本和负样本(正样本就是包含了目标的区域,使用IoU判断是否包含

(2)ROI Pooling(可以理解为抠图+resize的操作)

ROI Pooling是RPN网络中的一个层,对于这个层它的输入包括:特征图、rois(1×5×1×1)区域的坐标 以及 ROI参数(尺度标识,比如当前图像下采样了8倍,需要设置为1/8表示为原始的1/8,计算时就会按照这个比例从原始的feature map中进行抠图)rois这个坐标区域为什么是5个值呢?正常表示一个矩形四个值就够了(x,y,w,h)。第5个值放在第一个位置,表示当前的roi的信息所对应到的当前的batchsize中的哪一个图片,实际它是一个索引,这个索引表示了当前这个roi所对应到的特征图这个一整个的batchsize数据的第几个图片。因为对网络训练时通常会处理n张图,对于这样一个batchsize的数据,每一个roi需要知道对应的特征图是哪一张。   在经过了ROIPooling后会输出一个固定尺寸的feature map,这个固定尺寸具体是多大也由ROI参数来决定,比如将ROI参数设置为8*8,最终输出的feature map就为 m*c*8*8.      为什么要固定到同样的大小呢?因为如果后面要使用fc的话,如果特征图的大小是不一致的,在使用fc时会出错,因为fc的参数量是定的

Two-stage改进方向

更好的网络特征:更好的主干网络来挖掘更有代表性的深度学习的特征,来完成对目标区域特征的处理

更精准的RPN:通过更好的RPN网络完成更精准的区域筛选和推荐

更完善的ROI分类:在使用ROI Pooling时会出现一些问题,在对网络进行下采样时如果只使用pooling层进行下采样的话那么图像的尺寸是按照整数倍进行下采样的,但使用卷积时同样可能会对图像进行尺寸的损失。也就是说如果使用没有padding的策略进行卷积时同样会使原始的特征图减小几个像素点,这几个像素点通常会依赖于卷积核的大小。这时在使用ROI Pooling进行抠图时就可能会有一些偏差,这些偏差如果作用在小的feature map上虽然偏差很小,但是返回到原先的位置上就会差的很远。因此需要更完善的ROI Pooling的策略来提高网络的精度。

样本后处理:

更大的mini-Batch:

 

 

 

 

 

 

 

 

 

 

 

 

  • 10
    点赞
  • 73
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值