FasterRCNN学习笔记

FasterRCNN网络结构:

Faster RCNN可以分为4个主要内容

1、Conv layers。
特征提取网络Backbone。Faster RCNN首先使用一组基础conv+relu+pooling层提取image的feature maps。该feature maps被共享用于后续RPN层和全连接层。
2、Region Proposal Networks。
RPN网络用于生成proposals(建议框)。该层通过softmax判断anchors(先验框)属于foreground或者background,利用bounding box regression修正anchors获得精确的proposals。
3、RoI Pooling。
该层收集输入的feature maps和proposals,综合这些信息后提取proposal feature maps,送入后续RCNN全连接层判定目标类别。
4、Classification。
利用proposal feature maps计算proposal的类别,同时再次bounding box regression获得检测框最终的精确位置。

1、Conv layers

在这里插入图片描述
对于一副任意大小PxQ的图像,首先缩放至固定大小MxN,然后将MxN图像送入网络;Conv layers中包含了13个conv层+13个relu层+4个pooling层;且:

  1. 所有的conv层都是:kernel_size=3,pad=1
  2. 所有的pooling层都是:kernel_size=2,stride=2

在整个Conv layers中,conv和relu层不改变输入输出大小,只有pooling层使输出长宽都变为输入的1/2。一个MxN大小的矩阵经过Conv layers固定变为(M/16)x(N/16)。这样Conv layers生成的featuure map中都可以和原图对应起来。以VGG16为例,假设输入图像的维度为3X600X800,由于VGG16下采样率为16,因此输出的feature map的维度为512X38X 50。

2、RPN模块

在这里插入图片描述在这里插入图片描述RPN 采用卷积特征图并在图像上生成建议。

RPN网络: 生成较好的建议框proposal,这里用到了强先验的Anchor。
输入: feature map、 物体标签,即训练集中所有物体的类别与边框位置。
输出: Proposal、 分类Loss、 回归Loss, 其中,Proposal作为生成的区域,供后续模块分类与回归。两部分损失用作优化网络。

1、Anchor生成
RPN对feaure map上的每一个点都对应了9个Anchors,这9个Anchors大小宽高不同,对应到原图基本可以覆盖所有可能出现的物体。这样做获得检测框很不准确,不用担心,后面还有2次bounding box regression可以修正检测框位置。有了数量庞大的Anchos,RPN接下来的工作就是从中筛选,并调整出更好的位置,得到Proposal。
在这里插入图片描述
feature map中每个点上有k个anchor(默认k=9),而每个anhcor要分foreground和background,所以每个点由256d feature转化为cls=2k scores;而每个anchor都有[x, y, w, h]对应4个偏移量,所以reg=4k 坐标

全部anchors拿去训练太多了,训练时会选取256个合适的anchors进行训练(128个postive anchors+128个negative anchors)

anchors 是基于卷积特征图定义的,但最终的 anchos 是相对于原始图片的。最终图片的锚点会相隔 r 个像素,在 VGG 中,r=16。
在这里插入图片描述
上图是特征图映射到原始图片上的 Anchor 的中心坐标点
在这里插入图片描述
左:特征图上单点的Anchors;中:特征图空间单一锚点映射到原图的 Anchors;右:映射到原图全部的Anchors
原图一共38 x 50 x 9 = 17100 个Anchor。

2、RPN卷积网络

利用1X1卷积在feature map上预测每一个Anchor的类别作为预测边框的类别:前景/背景预测得分,预测真实的边框相对于Anchor的偏移量

扫描二维码关注公众号,回复: 12381887 查看本文章

2.1 softmax预测每一个Anchor的前景/背景得分
在这里插入图片描述每一个anchor类别的预测值
经过1x1卷积降维的feature map为W×H×18。这刚好对应了feature maps每一个点有9个anchors,每个anchors可能foreground和background,这些信息都保存在W×Hx(9x2)大小的矩阵。后面的softmax分类函数获得foreground anchors,具体就是每一个Anchor是前景和背景概率得分,是一个二分类问题,即目标可能出现在foreground anchors中。

reshape layer作用是为了便于softmax分类,对应至上面的保存bg/fg anchors的矩阵[1, 2x9, H, W]。而在softmax分类时需要进行fg/bg二分类,所以reshape layer会将其变为[1, 2, 9xH, W]大小,即 单独“腾空”出来一个维度以便softmax二分类,之后再reshape回原状。

每一个anchor类别的真值
RPN网络通过计算anchors与标签的IoU来判断anchor属于前景还是背景,利用anchors和softmax初步提取出foreground anchors作为候选区域。

2.2 预测anchor的4个位置坐标的偏移量
在这里插入图片描述
每一个anchor的偏移真值
Anchor的中心坐标xa与ya,宽高分别为wa与ha,标签M的中心坐标为x与y,宽高分别为w与h。位置偏移tx与ty利用宽与高进行了归一化,而宽高偏移tw与th进行了对数处理,这样的好处是进一步限制了偏移量的范围,便于预测。
在这里插入图片描述
每一个anchor的偏移预测值
经过1x1卷积降维输出feature map为WxHx36,9个anchors,每个anchors又都有4个回归的[dx(A),dy(A),dw(A),dh(A)]变换量,真实物体标签相对于Anchor的4个预测偏移量。在得到预测偏移量后,可以反向使用上面的公式将预测偏移量作用到对应的Anchor上,得到预测框的实际位置x’、y’、w’和h’。

RPN网络结构总结:
生成anchors -> softmax分类器提取fg anchors -> bbox reg回归fg anchors -> 生成proposals

实际上,Anchor是我们想要预测属性的先验参考值,并不局限于矩形框。如果需要,我们也可以增加其他类型的先验,如多边形框、角度和速度等。

2.3 计算RPN loss:

这一步只在训练中,将所有的Anchors与标签GT进行匹配,通过计算anchors与标签的IoU来判断anchor属于正样本还是负样本,得到分类与偏移的真值,与第二步中的预测得分与预测偏移值进行loss的计算。

由于Anchor的总数量接近于2万,并且大部分Anchor的标签都是背景,如果都计算损失的话则正、负样本失去了均衡,不利于网络的收敛。在此,RPN默认选择256个Anchors进行损失的计算,其中最多不超过128个的正样本。如果数量超过了限定值,则进行随机选取。当然,这里的256与128都可以根据实际情况进行调整,而不是固定死的。

损失函数设计

有了网络预测值与真值,接下来就可以计算损失了。RPN的损失函数包含分类与回归两部分,具体公式所示。
在这里插入图片描述第一部分代表了256个筛选出的Anchors的分类损失,Pi为每一个Anchor的类别真值,Pi为每一个Anchor的预测类别。由于RPN的作用是选择出Proposal,并不要求细分出是哪一类前景,因此在这一阶段是二分类,使用的是交叉熵损失。
第二部分代表了回归损失,其中Pi
进行筛选的作用,只需要对正样本进行回归,系数是用来平衡两部分损失的作用。回归损失使用了smooth L1函数。
在这里插入图片描述
2.4、NMS和筛选Proposal得到Rol:

由于锚点经常重叠,因此Proposal最终也会在同一个目标上重叠。为了解决重复Proposal的问题,我们使用一个简单的算法,称为非极大抑制(NMS)。应用 NMS 后,我们保留评分最高的 N 个Proposal。论文中N=2000。

在训练时,上一 步生成的Proposal数量为2000个,其中仍然有很多背景框,真正包含物体的仍占少数,因此完全可以针对Proposal 进行再一步筛选,过程与RPN中筛选Anchor的过程类似,利用标签与Proposal 构建loU矩阵,通过与标签的重合程度选出256个Rol,每一个RoI都赋予了正样本或负样本标签。在测试阶段,则不需要此模块,Proposal 可以直接作为RoI(大概300个左右) 。

3、RoI pooling

在这里插入图片描述
这部分承上启下,接受卷积网络提取的feature map和RPN的RoI,输出送到RCNN网络中。由于RCNN模块使用了全连接网络,要求特征的维度固定,而每一个RoI对应的特征大小各不相同,无法送入到全连接网络,因此RoI Pooling将Rol的特征池化到固定的维度,方便送到全连接网络中。
在这里插入图片描述RoIPooling

4、RCNN

在这里插入图片描述R-CNN 架构

R-CNN 对每个建议采用特征图,将它平坦化并使用两个大小为 4096 的有 ReLU 激活函数的全连接层。
然后,它对每个不同的目标使用两种不同的全连接层:

  • FC 21 用来分类,预测RoIs属于哪个类别(20个类+背景)
  • FC 84 用来回归位置(21个类,每个类都有4个位置参数)

将RoI pooling得到的特征送入全连接网络,预测每一个 RoI的分类,并预测偏移量以精修边框位置,并计算损失。主要包含3部分:

1、RCNN全连接网络:将得到的固定维度的RoI特征接到全连接网络中,输出为RCNN部分的预测得分与预测回归偏移量。
2、计算RCNN的真值:对于筛选出的RoI, 需要确定是正样本还是负样本,同时计算与对应真实物体的偏移量。
3、RCNN loss:这一步只在训练中,通过RCNN的预测值与RoI部分的真值。对于分类问题,直接利用交叉熵损失,而对于位置的回归损失,一样采用Smooth_L1 Loss,只不过只对正样本计算损失,而且是只对正样本中的这个类别4个参数计算损失

从整个过程可以看出,Faster RCNN是一个两阶的算法,即RPN与RCNN,这两步都需要计算损失,只不过前者还要为后者提供较好的感兴趣区域。

训练损失有:

1、RPN 分类损失:anchor是否为前景(二分类)
2、RPN位置回归损失:anchor位置微调
3、RoI 分类损失:RoI所属类别(21分类,多了一个类作为背景)
4、RoI位置回归损失:继续对RoI位置微调

四个损失相加作为最后的损失,反向传播,更新参数。

参考(感谢)

一文读懂Faster RCNN
物体检测系列之faster-rcnn原理介绍
等...

猜你喜欢

转载自blog.csdn.net/W1995S/article/details/112062411