本文根据原论文对R-CNN、Fast RCNN和Faster RCNN网络进行了详细讲解。
R-CNN可以说是利用深度学习进行目标检测的开山之作。作者Ross Girshick多次在PASCAL VOC的目标检测竞赛中折桂,曾在2010年带领团队获得终身成就奖。
R-CNN算法流程可以分为4步:
利用Selective Search算法通过图像分割的方法得到一些原始区域,然后使用一些合并策略将这些区域合并,得到一个层次化的区域结构,而这些结构就包含着可能需要的物体。
如下图所示,通过SS算法可以可以获得一系类的矩形框,在矩形框中可能包含我们所要检测的目标。
通过SS算法可以再一张图片中生成大概2000个候选区域,将候选区域送到CNN网络之前先进行resize处理,将2000候选区域缩放到227x227pixel,接着将候选区域输入事先训练好的AlexNet CNN网络获取4096维的特征得到2000×4096维矩阵。
将2000×4096维特征与20个SVM组成的权值矩阵4096×20相乘,获得2000×20维矩阵表示每个建议框是某个目标类别的得分。分别对上述2000×20维矩阵中每一列即每一类进行非极大值抑制剔除重叠建议框,得到该列即该类中得分最高的一些建议框。
如图所示,最前面是2000×4096维特征向量,其中每一行表示一个候选框通过CNN网络得到的向量,因为有2000个候选区域,所以有2000行。中间是SVM权值矩阵,每一列对应一个类别的权值向量,因为有20个类别,所以有20列,最后相乘后得到2000×20的概率矩阵。
对NMS处理后剩余的建议框进一步筛选。接着分别用20个回归器对上述20个类别中剩余的建议框进行回归操作,最终得到每个类别的修正后的得分最高的bounding boX。
如图,黄色框口P表示建议框Region Proposal,绿色窗口G表示实际框Ground Truth,红色窗口G表示Region Proposal进行回归后的预测窗口,可以用最小二乘法解决的线性回归问题。
测试一张图片约53s (CPU)。用Selective Search算法提取候选框用时约2秒,一张图像内候选框之间存在大量重叠,提取特征操作冗余。
过程极其复杂
对于SVM和bbox回归训练,需要从每个图像中的每个目标候选框提取特征,并写入磁盘。对于非常深的网络,如VGG16,从VOCO7训练集上的5k图像上提取的特征需要数百GB的存储空间。
Fast R-CNN是作者Ross Girshick继R-CNN后的又一力作。同样使用vGG16作为网络的backbone,与R-CNN相比训练时间快9倍,测试推理时间快213倍,准确率从62%提升至66%(再Pascal voc数据集上)。
Fast R-CNN算法流程可分为3个步骤
如图为R-CNN生成候选框的过程,首先对每一个候选区域进行缩放,然后在输入到网络中获得特征,所以通过SS算法获得2000个候选框,那么就要进行2000正向传播,这就造成了冗余,因为候选区域存在大量重叠的部分。
下图为Fast R-CNN生成候选框的过程,它时是直接将整张图像输入到CNN中得到特征图,然后根据候选区域和特征图对应的映射关系,直接在特征图中获取特征矩阵,这样可以避免重复区域部分的计算。
ROI Pooling层将后将候选框统一缩放到统一尺寸
假设下图中的左边图为一个候选区域对应的一个特征矩阵,将特征矩阵划分为7X7 的49等份,然后对分一个区域进行最大池化下采样操作,得到如图右所示的7X7特征矩阵。
在Fast R-CNN的最后并联了两个全连接层,第一个全连接层用于目标概率的预测,第二个全连接层用于边界框回归参数的预测
对目标概率预测分类器的说明
目标概率预测分类器输出N+1个类别概率,其中N为检测目标的种类,1
为背景,以PASCAL VOC为例,它有20个类别,则会输出21个概率类别,第一个概率为候选框为背景的概率,全连接中有21个节点。
对边界框回归器的说明
边界框回归器会输出N+1个类别候选边界框回归参数(d_x,d_y,d_w,d_h),因为每个类别对应四个候选边界框回归参数,所以全连接层有(N+1)x4个节点。
根据如下公式根据回归参数计算得到边界框的横纵坐标和宽度和高度,就可以将黄色框调整到红色框的位置,红色框就是我们最后的预测边界框。
Fast R-CNN损失计算
因为Fast R-CNN进行了目标概率的预测和回归参数的预测,所以Fast R-CNN损失包括分类损失和边界框回归损失
其中分类损失为交叉熵损失:
Faster R-CNN是作者Ross Girshick继Fast R-CNN后的又一力作。同样使用vGG16作为网络的backbone,推理速度在GPU上达到5fps(包括候选区域的生成),准确率也有进一步的提升。在2015年的ILSVRC以及cOCo竞赛中获得多个项目的第一名。
Faster R-CNN算法流程可分为3个步骤
其实Faster R-CNN就是在FastR-CNN中加入了RPN,如图
所以,这里我们主要说明RPN。
在特征图上使用滑动窗口在特征涂上进行滑动,每滑动到一个位置就生成一个向量,在向量的基础上通过两个全连接层输出2k个目标概率值和4k个边界框回归参数
在2k个scores中两两一组,其中第一个值为背景的概率,第二个值为不是背景的概率,只判断目前anchor中是背景还是前景。
将4k个coordinates4各参数为一组,其中前两个为anchor的中心坐标偏移量,后两个为anchor的相对宽度和高度
Faster R-CNN中共使用三种尺度和三种比例的anchor,每个位置在原图上都对应3x3=9个anchor:
对于一张1000x600x3的图像,大约有60x40x9(20k)个anchor,忽略跨越边界的anchor以后,剩下约6k个anchor。对于RPN生成的候选框之间存在大量重叠,基于候选框的cls得分,采用非极大值抑制,IoU设为0.7,这样每张图片只剩2k个候选框。
RPN损失同样包含分类损失和边界框回归损失
其中分类损失如下:
边界框回归损失如下:
RPN边界框损失和Fast R-CNN边界框损失相同
原论文中采用分别训练RPN以及Fast R-CNN的方法:
本文参考:https://blog.csdn.net/qq_37541097?type=blog
如果本文对您有帮助的话请点赞支持哦!
您的支持是对我最大的鼓励!!!