目标检测算法总结(2)——Fast RCNN
- 前言
- 算法步骤
- 计算候选框特征
- ROI Pooling
- 分类器与回归器
- 分类器
- 回归器
- 损失计算
- 总结
- 参考
前言
R-CNN诞生后,深度学习在目标检测上的优势开始显示,于是各类应用深度学习的目标检测算法开始如雨后春笋般冒了出来,R-CNN的作者Ross Girshick不满足于已经取得的成就,在2015年发布了R-CNN算法的改进版——“Fast RCNN”,顾名思意比原来的“RCNN”快的多,根据作者的测试比较,在上Pascal
Voc数据集,训练速度提升9倍,测试速度提升213倍。准确率也有从62%到66%。那么Fast RCNN到底在RCNN上改进了什么呢?
算法步骤
首先回顾一下RCNN的步骤:
——在图像上使用Selective Search生成1k~2k个候选区域。
——对每个候选区域,使用深度网络提取特征。
——特征送入每一类的分类器,判别类别。
——使用回归器精细修正候选框位置。
对比下,Fast RCNN的步骤如下:
——在图像上使用Selective Search生成1k~2k个候选区域。
——将图像输入网络得到相应的特征图,将SS算法生成的候选框投影到特征图上获得相应的特征矩阵。
——将每个特征矩阵通过ROI pooling层缩放到7*7大小的特征图,接着将特征图展平通过一系列全连接层得到预测结果。
对比来看,第二步开始,算法步骤完全不同,RCNN是在候选区域上提取特征,而Fast R-CNN则是在整张图像上提取特征,此外rcnn中专门训练了SVM与回归器,而在Fast R-CNN中,这些被整合到一个网络中。
计算候选框特征
R-CNN中会把候选区域进行缩放,然后输入到卷积神经网络中得到特征。为此我们需要先从一张·图片上计算2千多个候选区域,毫无疑问这些区域会产生大量重合,造成计算的冗余。在Fast RCNN中直接把图片输入到网络中,生成特征图,在特征图上通过映射关系提取候选区域,避免了大量重复计算。
得到候选区域后,我们要进行采样,只挑选一部分候选框用作训练。而采样要确保正负样本的比例,也就是有目标的和没有目标的候选框的数量差不多一致,这样才能提升模型的鲁棒性,能更好分辨目标。Fast RCNN判定的方法之一是比较候选框与目标真实边框(ground truth)的重合度评价标准——IoU,IoU大于规定的阈值(如0.7)视作正样本,小于规定的阈值(如0.3)为负样本。iou计算如下:
ROI Pooling
得到了特征矩阵后,我们用ROI Pooling层将特征矩阵缩放到7*7大小。ROI是在原图中的感兴趣区域,可以理解为目标检测的候选框(region of proposals),它的主要原理为把输入到ROI Pooling的特征矩阵按输出的格式划分成相应的区域(如:分为7*7个区域),对每个区域进行最大池化,便将候选的矩阵变为相同的格式。
分类器与回归器
目标检测需要识别出物体并标记出位置,即是一个分类问题也是一个回归问题,所以我们需要同时准备分类器与回归器。
分类器
分类器采用的是全连接+softmax,假设有N个目标类别的话,最终的输出为N+1(N目标+背景)个类别的概率。
回归器
回归器输出的回归参数为(),所以输出为4*(N+1)个节点。回归的四个参数分别表示分类框的中心点x,中心点y,框宽与框高。
回归器的计算方程如下:
表示候选框的中心点的x、y坐标和宽高。
代表最终预测的边界框中心点的x、y坐标和宽高。
损失计算
分类损失的方程为: = -
p是分类器预测的softmax概率分布,u对应真实类别标签,这个公式本质就是交叉熵损失。
回归的损失为:
从右到左依次看
对应边界框预测的对应类别u的回归参数。
对应真实的边界框回归参数
=
其中
而是艾佛森括号,表示当这个下标时,也就是代表需要检测的某一类目标时,其值=1,否则=0。也就是u时,此时表示这一项是背景,所以不需要计算。当u代表了需要检测的目标时,这样需要计算。
为平衡系数,用于平衡两类损失
那么总的损失函数为两损失函数相加:
= +
表示整个算法的损失函数。
总结
Fast RCNN改进了RCNN重复计算候选框的问题,并把RCNN分别训练的SVM与回归器都整合到一个CNN中,统一了损失函数,大大加快了训练与检测速度,可以发现,Fast RCNN与RCNN相比,特点便是把更多步骤整合到CNN中,而在这之后的Faster RCNN则把剩下的第一步——生成候选框也整合到网络中。
参考