RCNN将特征提取、分类、回归任务交给了CNN来做;
Fast-RCNN在RCNN的基础上,增加了ROI pooling,注意这里的proposal还是外部提取出来的。
Fast R-CNN的处理流程如上图所示:(1)使用CNN网络提取底层特征(这些特征是整幅图像上所有的Proposal公用的,节省了R-CNN中的计算量);(2)自己写了一个ROI Pooling层,从数据层得到ROIs,即:每一个Proposal的坐标,映射到FeatureMap上的对应位置,把该位置的矩形分成7*7的块,使用max Pooling提取一个维数固定为49的特征向量,送到两个全连接层中;(3)输出网络是两个全连接层,一个做分类,Loss层是SoftMaxWithLoss,一个做回归,Loss层是SmoothL1Loss。网络结构如下图所示。
Fast R-CNN网络的一个缺陷:依赖外部算法提取Proposal,个数太多,仍然占用大量计算量。FasterR-CNN就是解决这个问题的。Faster
R-CNN训练一个RPN(Region Proposal Network)网络来提取Proposal,个数大大减少,然后再结合FastR-CNN做分类和回归。
Faster R-CNN的处理流程如上图所示:(1)使用CNN网络提取底层特征;(2)训练RPN网络,提取Proposal(RPN的处理流程后面有描述);(3)使用现有的Proposal和底层图像特征,训练FastR-CNN做分类和回归。
RPN的处理流程如下图所示:(1)使用一个3×3的滑动窗口在Feature map上滑动,在每一个位置的中心点处遍历指定的scale和aspect ratio,提取K类anchor box;(2)类似FCN,使用卷积层对anchor box进行分类(前景和背景)和回归;(3)根据anchor box和标定的真值的重叠情况(IOU, Intersection OverUnion)进行分类,找出正面样本、负面样本和不参与训练的样本(这些样本决定了网络应该怎么学习);(4)分类任务使用SoftmaxWithLoss层,回归任务使用SmoothL1Loss层,根据Loss调整RPN网络;(5)RPN网络输出Proposal。
Faster R-CNN的网络结构如下图所示,整个网络分成3部分:(1)提取anchor
box,如图中的rpn_conv/3×3;(2)提取样本,如图中的rpn-data;(3)FastR-CNN,如图中Proposal以下的网络结构。
从R-CNN,Fast R-CNN到Faster R-CNN一路走来,都是为了减少重复计算,那么到了FasterR-CNN是不是没有重复计算了?不是。如上图中,Proposal有N个,Proposal下面的网络结构(即:subnet)就需要计算N次,并且Proposal之间的重复比较多,subnet的计算量随之会很大。R-FCN就能够解决这个问题。