目标检测算法总结(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中,这些被整合到一个网络中。

目标检测算法在coco上对比 目标检测算法总结_深度学习

计算候选框特征

R-CNN中会把候选区域进行缩放,然后输入到卷积神经网络中得到特征。为此我们需要先从一张·图片上计算2千多个候选区域,毫无疑问这些区域会产生大量重合,造成计算的冗余。在Fast RCNN中直接把图片输入到网络中,生成特征图,在特征图上通过映射关系提取候选区域,避免了大量重复计算。

目标检测算法在coco上对比 目标检测算法总结_深度学习_02


得到候选区域后,我们要进行采样,只挑选一部分候选框用作训练。而采样要确保正负样本的比例,也就是有目标的和没有目标的候选框的数量差不多一致,这样才能提升模型的鲁棒性,能更好分辨目标。Fast RCNN判定的方法之一是比较候选框目标真实边框(ground truth)的重合度评价标准——IoU,IoU大于规定的阈值(如0.7)视作正样本,小于规定的阈值(如0.3)为负样本。iou计算如下:

目标检测算法在coco上对比 目标检测算法总结_算法_03

ROI Pooling

得到了特征矩阵后,我们用ROI Pooling层将特征矩阵缩放到7*7大小。ROI是在原图中的感兴趣区域,可以理解为目标检测的候选框(region of proposals),它的主要原理为把输入到ROI Pooling的特征矩阵按输出的格式划分成相应的区域(如:分为7*7个区域),对每个区域进行最大池化,便将候选的矩阵变为相同的格式。

分类器与回归器

目标检测需要识别出物体并标记出位置,即是一个分类问题也是一个回归问题,所以我们需要同时准备分类器回归器

分类器

分类器采用的是全连接+softmax,假设有N个目标类别的话,最终的输出为N+1(N目标+背景)个类别的概率。

目标检测算法在coco上对比 目标检测算法总结_目标检测算法在coco上对比_04

回归器

回归器输出的回归参数为(目标检测算法在coco上对比 目标检测算法总结_目标检测算法在coco上对比_05),所以输出为4*(N+1)个节点。回归的四个参数分别表示分类框的中心点x,中心点y,框宽与框高。

目标检测算法在coco上对比 目标检测算法总结_缩放_06


回归器的计算方程如下:

目标检测算法在coco上对比 目标检测算法总结_目标检测_07
目标检测算法在coco上对比 目标检测算法总结_算法_08
目标检测算法在coco上对比 目标检测算法总结_缩放_09
目标检测算法在coco上对比 目标检测算法总结_目标检测算法在coco上对比_10

目标检测算法在coco上对比 目标检测算法总结_算法_11表示候选框的中心点的x、y坐标和宽高。
目标检测算法在coco上对比 目标检测算法总结_深度学习_12代表最终预测的边界框中心点的x、y坐标和宽高。

目标检测算法在coco上对比 目标检测算法总结_深度学习_13

损失计算

分类损失的方程为:目标检测算法在coco上对比 目标检测算法总结_算法_14 = -目标检测算法在coco上对比 目标检测算法总结_算法_15
p是分类器预测的softmax概率分布,u对应真实类别标签,这个公式本质就是交叉熵损失

回归的损失为:目标检测算法在coco上对比 目标检测算法总结_缩放_16
从右到左依次看
目标检测算法在coco上对比 目标检测算法总结_目标检测_17对应边界框预测的对应类别u的回归参数目标检测算法在coco上对比 目标检测算法总结_缩放_18
目标检测算法在coco上对比 目标检测算法总结_算法_19对应真实的边界框回归参数目标检测算法在coco上对比 目标检测算法总结_目标检测_20

目标检测算法在coco上对比 目标检测算法总结_目标检测_21=目标检测算法在coco上对比 目标检测算法总结_深度学习_22

其中目标检测算法在coco上对比 目标检测算法总结_缩放_23
目标检测算法在coco上对比 目标检测算法总结_深度学习_24艾佛森括号,表示当目标检测算法在coco上对比 目标检测算法总结_算法_25这个下标目标检测算法在coco上对比 目标检测算法总结_深度学习_26时,也就是代表需要检测的某一类目标时,其值=1,否则=0。也就是u目标检测算法在coco上对比 目标检测算法总结_深度学习_27时,此时表示这一项是背景,所以不需要计算。当u目标检测算法在coco上对比 目标检测算法总结_深度学习_26代表了需要检测的目标时,这样需要计算。
目标检测算法在coco上对比 目标检测算法总结_目标检测算法在coco上对比_29为平衡系数,用于平衡两类损失

那么总的损失函数为两损失函数相加:
目标检测算法在coco上对比 目标检测算法总结_目标检测算法在coco上对比_30=目标检测算法在coco上对比 目标检测算法总结_算法_14 + 目标检测算法在coco上对比 目标检测算法总结_缩放_16
表示整个算法的损失函数。

总结

Fast RCNN改进了RCNN重复计算候选框的问题,并把RCNN分别训练的SVM与回归器都整合到一个CNN中,统一了损失函数,大大加快了训练与检测速度,可以发现,Fast RCNN与RCNN相比,特点便是把更多步骤整合到CNN中,而在这之后的Faster RCNN则把剩下的第一步——生成候选框也整合到网络中。

参考