Faster-RCNN详解
1. 向前传播过程
1.1 CNN提取特征
就是将图片输入到预训练好的CNN网络中获取特征图feature map。
以含有四层maxpool的vgg网络为例,输入图片大小为(w,h,3),则输出特征图的大小为(w/16, h/16, 512)
1.2 RPN网络
Faster-RCNN一个重要的变化就是抛弃了前代RCNN使用SS(Selective Search)方法生成检测框,而是使用RPN网络。
1.2.1 生成anchor base
anchor base就是由两个参数scale=[8,16,32]
和ratio=[0.5,1,2]
两个参数生成的生成的,scale
指anchor的长,ratio
指anchor的长宽比,有这两个参数进行组合就能得到9个anchor base,anchor base用四个坐标(x,y,w,h)
保存(分别表示中心点的坐标和长宽)。如下图所示
1.2.2 获得所有anchor box
然后让anchor base在特征图feature map(w/16, h/16, 512)的每一个像素点上移动,由此就能得到$k = 9\cfrac{w}{16}\cfrac{h}{16}$个anchor。就是下图画圈部分的操作。
(注意anchor的坐标是相对与原图上的坐标,而不是特征图上的,所以在特征图上移动时需要将坐标映射会原图,在这里直接x,y坐标乘以16即可,因为特征图相对于原图缩小了16倍)
1.2.3 边框回归获得ROIs
- 先使用
Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
对特征图进行处理,得到图中的中间层(intermediate layer) - 使用
Conv2d(512, 9*2, kernel_size=(1, 1), stride=(1, 1), padding=(1, 1))
对中间层进行处理得到anchor box的分类参数(用于判断anchor box中的是否含有检测目标,即前景和背景) - 使用
Conv2d(512, 9*4, kernel_size=(1, 1), stride=(1, 1), padding=(1, 1))
对中间层进行处理得到anchor box的位置修正参数,然后将参数带入坐标回归公式就能得到ROIs
的坐标。
坐标回归公式如下( $d(P)$为该卷积网络输出的参数, $P$为anchor的坐标,$\hat{G}$为回归后的预测坐标 ):
1.2.4 筛选去掉一部分ROIs
上一步对anchor box使用边框回归获得了所有的ROIs
,但是数量太多了,直接进行后续计算会增大计算量,所需需要筛选去掉一些。
- 将上述边框回归过程中得到的分类参数(用于判断前景和后景)输入到softmax,在其中选择得分大于给定得分阈值的那部分
ROIs
。 - 在上述基础上再进行
nms
(非最大抑制),进一步筛选掉一部分ROIs
。 - 最后再剩余的
ROIs
随机抽取R个(训练时抽取2000个,测试时抽取300个)
通过以上步骤就完成了ROIs
的筛选。
1.3 ROIPooling
ROIPooling起始就是简化版的金字塔池化(SSPNet),这里参考了这篇文章
- 假设下图就是我们的特征图
- 然后我们需要将
ROIs
(是原图上的坐标)映射到特征图上,如下图所示:
- 由于不同的
ROI
的大小和形状都不相同,但是我们却希望得到相同的输出怎么办呢? 这就是ROIPooling的核心部分,假设我们想得到一个2*2
的输出,那么我们就能将上述ROI
对应的特征图划分为如下图所示的2*2
的矩阵,然后再每个小矩阵上分别使用maxpool即可。
划分~
分别使用maxpool
1.4 获得最后的预测结果
- 将上述ROIPooling后得到所有
ROIs
相同大小的输出特征输入到全连接层中,假设最后获得一个4096
的一个输出向量。 - 将上述
4096
向量输入到用于边框回归的全连接网络,再使用上述的边框回归计算公式得到最终的边框。 - 将上述
4096
向量输入到种类回归(共n_class +1 种,n_class种物体,还有一种表示背景)的全连接网络,得到各个边框的物体种类和相应的置信概率。
2. 反向传播过程
2.1 RPN网络的训练
RPN网络需要训练的部分就是位置修正参数和种类参数(前景和背景)的卷积网络。
对于位置修正参数,我们只需要根据人工标定的bounding box,然后结合生成的anchor box就能获得推得位置修正参数的ground truth(其实就是由anchor box和和位置修正参数推到ROI的逆过程),然后计算Smooth L1 Loss(探测边框回归)
对于种类参数,计算Softmax Loss(探测分类概率)
得到上述的两个损失值,然后根据下列的损失函数就能得到最终的损失函数:
2.2 最后预测网络的训练
和RPN网络的训练十分类似,就是一个位置修正参数和种类参数(n_class+1种)的全连接网络的回归。
对于位置修正参数,根据人工标注的bounding box结合输入的ROIs就能得到位置修正参数,然后计算Smooth L1 Loss(探测边框回归)
对于种类参数,计算Softmax Loss(探测分类概率)
同上计算最后的损失值