Faster RCNN模型简介
Faster R-CNN 由 Ross Girshick 以及何凯明等人在 2016 年(2015?)应用于目标检测任务中。与传统的 RCNN 相比,它能够高效地完成目标检测,并且利用 RPN(Region Proposal Networks,区域建议网络)来选择候选框。Fast RCNN的结构如下图所示:
如图,Faster R-CNN网络分为两部分,一是Region Proposal Network(RPN),二是Fast R-CNN。其中RPN包括图中proposals和conv layers,Fast R-CNN包括卷积层、ROI pooling及后面全连接层等部分。
Faster RCNN首先将整张图片输进CNN,提取图片的feature maps。将图片特征输入到到RPN,得到候选框的特征信息。RPN对于候选框中提取出的特征,使用分类器判别是否属于待识别的目标的候选框,将属于某一类别的候选框,用回归器进一步调整其位置。最后将目标框和图片的特征向量输入到Roi pooling层,再通过分类器进行分类,完成目标检测的任务。RPN能够协助Fast RNN将注意力集中在候选框中。
补充说明:
- Region Proposal Network (RPN)
- 功能:
- RPN 负责生成候选框(region proposals)。它是一个独立的网络,与分类和回归任务解耦,从而加速整个目标检测流程。
- 组成:
- 共享卷积层(Shared Conv. Layers):这些是预训练好的卷积层(通常来自 CNN 如 VGG 或 ResNet),用于提取特征图(feature maps)。共享卷积层的输出会同时提供给 RPN 和 Fast R-CNN。
- 候选框生成(Proposals):RPN 使用锚框(anchor boxes)机制,从特征图生成多个候选框。这些候选框通过分类(前景/背景)和回归(边界框调整)任务进一步优化。
- Fast R-CNN
- 功能:
- Fast R-CNN 负责最终的分类和边界框回归任务,对 RPN 提出的候选框进行精确定位和分类。
- 组成:
- 共享卷积层(Shared Conv. Layers):同样用于提取特征图,但与 RPN 共享计算结果,以避免重复计算。
- ROI Pooling:将候选框映射到固定大小的特征图块中,以适应全连接层的输入要求。
ROI Pooling 的全称是 Region of Interest Pooling ,即 感兴趣区域池化 。
在目标检测任务中,经过 RPN(Region Proposal Network,区域建议网络)生成的候选框(RoI)大小和形状各不相同,但后续的全连接层需要固定大小的输入,因此需要一种方法将这些不同大小的 RoI 转换为固定大小的特征表示,ROI Pooling 就是为了解决这个问题而提出的- 全连接层(Fully-Connected Layers):用于进一步的特征提取。
- 分类和回归分支(Classification & Regression):
- 分类分支:预测候选框所属的类别(包括背景)。
- 回归分支:调整候选框的边界框位置,以获得更精确的目标定位。
卷积层
Faster RCNN首先将整张图片输进CNN,提取图片的feature map,再将其输入到到RPN,得到候选框的特征信息。
这里我们采用VGG16完成feature map的提取。卷积层是被RPN和Fast R-CNN两部分共享的。
RPN
相比于Fast RCNN,Faster R-CNN引入RPN(Region Proposal Network)完成候选框的提取,使得算法效率得到进一步提升。
RPN将任意尺寸大小的图片作为输入,输出若干个矩形候选框。为了生成区域候选框,在卷积层最后一层feature map上滑动一个(nn)的网络(通常是 3×3 或 5×5),将卷积生成的feature map与(nn)的窗口进行卷积运算。每一个滑动窗口都映射为一个更低维的特征。得到的特征送入两个分支中,一个用于框分类,另一个用于框回归。此网络执行滑动窗口形式,所有空间位置都共享全连接层。如下图所示:
滑动窗口其实是一个小的卷积核,它在特征图上逐像素滑动,每个位置都会生成一个局部的特征表示。这个过程有点像卷积操作,只不过滑动窗口的大小是固定的,比如 3×3 或者 5×5。每个滑动窗口都会对应一个候选框,这个候选框的位置和大小是由窗口的位置和锚点(anchor)的尺寸决定的。
滑动窗口的中心在图像上对应一片区域,计算出该区域的中心位置后以该位置为中心,按3种scale、每种scale各有3种长宽比取9个矩形区域。这些区域就是提取到的anchors boxes。可见,feature maps中的一个位置,共有9个anchors,3种scale可以根据具体情况更改的,更改时最好能使最大的scale能基本将input image覆盖。 在确定好k个anchor box之后,就能确定相应的位置信息,通过2次bounding-box regression对位置进行修正。 首先判断anchors是否为前景,使用classifier对anchors进行二分类,输出两个概率值,即图中左侧对应的2k score。其次,计算对于anchors的bounding box regression偏移量(x,y,w,h),以修正边框位置,即图中右侧4k coordinates。 最后将两者结合生成region proposals,同时剔除太小和超出边界的proposals,最后将提取到的proposals提交给后面的Roi Pooling层。
补充说明:
Anchor boxes的生成
- 滑动窗口与anchor boxes生成
- 在卷积层的feature map上滑动一个窗口(如3×3),这个窗口的中心在原图上对应一片区域。当计算出该区域的中心位置后,以该中心位置为中心,按照预设的3种scale(尺度)以及每种scale对应的3种长宽比,生成9个不同的矩形区域,这些矩形区域即为anchor boxes。
- 例如,假设3种scale分别为128²、256²、512²,每种scale对应3种长宽比(如1:1、1:2、2:1),那么对于每个滑动窗口位置,会生成9个anchor boxes。这些anchor boxes覆盖了不同的目标尺寸和形状,从而能够适应多种目标检测场景。
- anchor boxes的数量和尺寸可以根据具体任务需求和图像尺寸进行调整。一般建议最大的scale能够基本覆盖输入图像的尺寸,以确保能够检测到较大尺寸的目标。
Bounding-box regression与region proposals生成
前景背景分类
- 生成的anchor boxes需要通过分类器(classifier)进行二分类,判断其是否为前景(包含目标)。分类器输出两个概率值,分别表示anchor box是前景和背景的概率,这对应于描述中的 “2k score”。
- 例如,对于k个anchor boxes,分类器会输出2k个概率值,每个anchor box对应2个概率值,用于表示它是前景或背景的可能性。
边框回归(Bounding-box regression)
- 对于每个anchor box,计算其相对于真实目标边框的偏移量,即通过回归任务来修正anchor box的位置。这个回归任务输出4k个坐标值,每个anchor box对应4个坐标值,表示其在x、y方向上的偏移量以及宽度和高度的调整量。
- 例如,对于k个anchor boxes,边框回归任务会输出4k个坐标值,用于修正每个anchor box的位置。
region proposals生成
- 将分类和回归的结果结合,生成候选区域(region proposals)。具体来说,对于每个anchor box,如果其被分类为前景的概率较高,并且边框回归的结果较优,则将其作为一个候选区域。
- 生成的region proposals需要经过进一步的处理,如剔除尺寸过小和超出图像边界的候选区域,以确保后续处理的有效性和准确性。
- 最终,将筛选后的region proposals提交给后续的RoI Pooling层,进行目标分类和边框精调。
通过上述过程,RPN能够有效地生成高质量的候选区域,为后续的目标检测任务提供基础。
Roi Pooling
Fast R-CNN改进了R-CNN,应用了Roi Pooling。 由于在全连接层,需要输入固定大小的特征向量,R-CNN网络经过warp操作统一成固定的大小再送入后续网络,导致图像的变形和扭曲。而且每一个proposal均需要单独进行特征提取,重复计算量大。Poipooling通过卷积计算将图像统一成固定大小的特征向量。Roi Pooling的输入是卷积层得到的feature map和RNP得到的anchor,将其分割成7 * 7大小的子窗口,对每个子窗口进行max-pooling操作,输出ROI(region of interest)的feature map。输入后续的全连接层判断目标。
Classifier
在这一步,分类器完成对候选区域的检测。利用RoI feature maps计算ROI类别,同时再次bounding box regression获得目标最终的位置。
后记
从原始的CNN增加候选框的提取过程形成RCNN。接下来,RCNN加入Roi pooling形成Fast RCNN。然后,Faster RNN引入了RPN完成候选框的提取,并与FRCNN共享卷积层。模型不断的改善,弥补之前的不足,使得目标检测任务更准确和迅速。
原文地址:
Faster RCNN模型简介
本文添加了注释和修改了一些语句错误。
- 点赞
- 收藏
- 关注作者
评论(0)