Fast RCNN 的主要创新点:将最后一个卷积层的SSP Layer改成ROI Pooling Layer;另外提出了多任务损失函数(Multi-task Loss),将边框回归直接加入到CNN网络中训练,同时包含了候选区域分类损失和位置回归损失。
算法流程
一、 SS:一张图片生成1K~2K个候选区域(使用Selective Search方法)。
二、 提取特征:将图像输入网络得到相应的特征图,将SS算法生成的候选框投影到特征图上获得相应的特征矩阵。
图2-1 候选框投影得到特征矩阵
划分正负样本:在训练Fast R-CNN时,如果数据中全部都是正样本,那么即使这个框明明框住的是背景,但网络仍会认为这个被框住的背景是有用的,是一个前景,这时网络肯定会出问题。所以数据要分为正样本和负样本。
在原论文中,对于每一张图片,从2000个候选框中采集64个候选框。这64个候选框,一部分框的是正样本,一部分框的是负样本。那么正样本是如何定义的呢?
只要候选框与真实框(GT)的IoU大于0.5,则认定为正样本,反之认定为负样本
三、区域归一化:将每个特征矩阵通过ROI Pooling层缩放7×7大小的特征图。
图2-3 RoI Pooling层下采样缩放特征矩阵尺寸
ROI Pooling的实现过程:
将特征矩阵不用care尺寸然后划分7×7等份,通过RoI Pooling层,每一块下采样,最终得到7×7大小的特征图。
图2-4其实是一个经过特征提取的特征图,本身可视化出来也是很抽象的,这里只是为了方便理解,使用了RGB图像。
图2-3 RoI Pooling层下采样缩放特征矩阵尺寸
四、分类和回归:经过两个维度都为4096的全连接层,再经过维度为21维的全连接层(分类)和84维的全连接层(回归),这两个层看图是并联的。最后接上两个损失层(分类是softmax,回归是smoothL1)。
SVD:由于一张图像约产生2000个ROI,将近一半多的时间用在全连接层计算,可以用SVD对全连接层进行变换来提高运算速度。
分类器: 这21个概率是经过softmax输出的,因此和为1。
图2-4 分类器输出N+1个类别概率
边界框回归器:某个物体对应的预测的每个类别都有边界框以及边界框参数。
图2-5 边界框回归器的(N+1)×4个回归参数
那么边界框回归参数该如何使用呢?
图2-6 边界框回归器回归参数的矫正公式
损失函数
图2-7 Fast RCNN损失函数
- 分类损失参数:
- 分类损失:
对于真实标签,和softmax运算出来的最高概率进行多分类交叉熵损失计算。
- 边界框回归损失参数:分类中预测最高概率的对应类别,它的回归参数。真实目标的边界框回归参数,这个是通过图1-5反推P得到的。
- 边界框回归损失:
下标为的和相应的分别相减,再经smooth函数,最后相加。
- 是平衡两项损失的系数。
- [>1]是艾弗森括号,满足则1,不满足则0.