Faster RCNN论文详解

Faster RCNN

建议先阅读之前的RCNN和Fast RCNN后再来阅读此文

Faster RCNN PyTorch实现:https://github.com/codecat0/CV/tree/main/Object_Detection/Faster_RCNN

Faster RCNN提出了Region Proposal Network解决了Fast RCNNselective search算法提取候选框速度太慢的问题。

1. Faster RCNN初识

Faster RCNN论文详解_第1张图片

  • conv layers:通过 C N N CNN CNN提取image的feature maps。此feature maps被共享用于后续的层
  • Region Proposal Networl用于生成region proposals。该层通过softmax判断anchors属于foreground还是background,再利用bounding box regression修正anchors以获得精确的proposals
  • RoI pooling:该层收集输入的feature mapsproposals,综合这些信息后提取proposal feature maps,送入后续层进行检测
  • classifier:利用proposal feature maps计算proposal的类别,同时再次通过bounding box regression获取检测框最终的精确位置

通过上述Faster RCNN的流程介绍,我们可以知道Faster RCNN与Fast RCNN之间的区别在于提取候选区域的不同,一个是通过训练一个Region Proposal Network来生成,而另一个则是通过Selective Search算法来生成。

接下来,我会重点介绍Region Proposal Network以及其anchor

2. Faster RCNN详细网络结构

Faster RCNN论文详解_第2张图片

流程: 将一副任意大小 P × Q P \times Q P×Q的图像缩放至固定大小 M × N M \times N M×N,然后将 M × N M \times N M×N大小的图像输入网络;其中conv layers包含了13个conv层+13个relu层+4个pooling层RPN网络首先经过3x3卷积,再分别生成foreground anchorsbounding box regression偏移量,然后计算出proposals;而Roi Pooling层则利用proposals以及feature maps,提取proposal feature送入后续全连接和softmax网络作classification

2.1 conv layers

Faster RCNN论文详解_第3张图片

conv layers部分共有13个conv层,13个relu层,4个pooling层(VGG网络中最后一个max pooling前的层)

  • 所有的conv层都是: kernel_size=3 , padding=1 ,stride=1,因此conv层不改变原图大小
  • 所有的pooling层都是: kernel_size=2 ,padding=0 , stride=2pooling 层将原图缩小为原来的一半
  • 经过conv layer后,一个MxN大小的矩阵将变为(M/16)x(N/16)

2.2 Region Proposal Network

Faster RCNN论文详解_第4张图片

RPN网络分为2条线,上面一条通过softmax分类anchors获得foregroundbackground(检测目标是foreground),下面一条用于计算anchorsbounding box regression偏移量,以获得精确的proposal。最后的Proposal层则负责综合foreground anchorsbounding box regression偏移量获取proposals

2.2.1 anchors

anchor为由一个中心点,周围生成了9个矩形,其矩形的有3种不同的尺寸,每个尺寸有3种不同的比例,分别为1:1, 1:2, 2:1,这样共9个不同的矩形,如下图左上角所示。

RPN遍历conv layers生成的feature mapsfeature map上的每一个点都配备这9种anchor作为初始的检测框,效果如下图右所示。这样做获得检测框很不准确,之后将会在RPN层,以及最后进行2次的bounding box regression修正检测框位置
Faster RCNN论文详解_第5张图片

如下图,对于每一个点的 k k kanchor来说,从feature maps提取出得特征具有256维,对于每一个anchor,需要分foregroundbackground,因此共有 2 k 2k 2kscore,对于每一个anchor共有 ( x 1 , y 1 , x 2 , y 2 ) (x_1,y_1,x_2,y_2) (x1,y1,x2,y2)四个坐标值。因此共有 4 k 4k 4kcoordinates
Faster RCNN论文详解_第6张图片

2.2.2 softmax判定foreground与background

确定候选区域标签的规则

  • 与某个ground truth(GT)的IoU最大的区域的分配正标签
  • 与任意GT的IoU大于0.7的区域分配正标签
  • 与所有GT的IoU都小于0.3的区域分配负标签

2.2.3 bounding box regression原理

见RCNN论文详解中的第6部分

2.2.4 RPN流程

  1. 生成anchors
  2. 按照输入的foreground softmax scores由大到小排序anchors,提取前pre_nms_topNanchors
  3. 限定超出图像边界的foreground anchors为图像边界
  4. 剔除非常小(面积和scores)的foreground anchors
  5. 进行NMS,按照nms后的foreground softmax scores由大到小排序foreground anchors,提取前post_nms_topNanchors

2.2.5 RPN 训练

整个网络的Loss如下:
L ( p i , t i ) = 1 N c l s ∑ i L c l s ( p i , p i ∗ ) + λ 1 N r e g ∑ i p i ∗ L r e g ( t i , t i ∗ ) L(p_i,t_i)=\frac {1} {N_{cls}}\sum_{i}L_{cls}(p_i,p_i^*)+\lambda \frac {1}{N_{reg}}\sum_{i}p_i^*L_{reg}(t_i,t_i^*) L(pi,ti)=Ncls1iLcls(pi,pi)+λNreg1ipiLreg(ti,ti)

其中:

  • i i i表示anchors index

  • p i p_i pi表示foreground softmax probability

  • p i ∗ p_i^* pi代表对应的GT predict概率(如果anchorGT间IOU>0.7,为1;反之IOU<0.3,为0;至于0.3

  • t t t代表predict bounding box

  • t ∗ t^* t代表对应foreground anchor对应的GT box

  • cls loss,即softmax loss

  • reg loss,即soomth L1 loss。注意在该loss中乘了 p i ∗ p_i^* pi相当于只关心foreground anchors的回归

3. RoI Pooling layer

见FAST RCNN论文详解中的第3部分

你可能感兴趣的:(目标检测,计算机视觉,深度学习,人工智能,faster,rcnn,目标检测)