发布时间:2022-12-19 19:00
本文主要参考B站up霹雳吧啦Wz的视频结合原论文整理笔记所得1.1Faster RCNN理论合集_哔哩哔哩_bilibili本视频合集用于讲解Faster R-CNN原理部分,从R-CNN -> Fast R-CNN -> Faster R-CNNhttps://www.bilibili.com/video/BV1af4y1m7iL?spm_id_from=333.999.0.0
R-CNN((Region with CNN feature 基于区域的卷积神经网络))是利用深度学习进行目标检测的开山之作,其作者Ross GIRshick多次在PASCAL VOC的目标检测竞赛中获得冠军
原论文:Rich feature hierarchies for accurate object detection and semantic segmentation(2014) http://fcv2011.ulsan.ac.kr/files/announcement/513/r-cnn-cvpr.pdf
R-CNN:selective search(SS)+ CNN + L-SVM的检测器
算法基本流程:
1.一张图像生成1k-2k个候选区域(SS算法)
2.对每个候选区域,使用深度网络提取特征
3.特征送入每一类的SVM分类器,判别是否属于该类
4.使用回归器精细修正候选框位置
利用SS进行图像分割得到原始区域,使用合并策略合并成层次化的区域结构(其中包含着可能需要的物体)
selective search:首先通过区域划分算法,将图片划分成很多小区域,再通过相似度和区域大小不断的聚合相邻小区域,并删除与合并后的区域相似度高的区域,不断迭代,最终生成1k-2k个候选区域
将2k个候选区域从图片上裁剪下来,将候选区域统一缩放至227X227,将其传入AlexNet网络,使用深度网络提取特征,得到4096维特征向量,并保存下来。
将所有特征传进SVM分类器进行分类训练,得到每个候选框的是某个类别的得分。最后对候选框使用非极大值抑制(nms)去除重叠候选框
nms:
1.寻找得分最高的目标
2.计算其他目标与该目标的iou值
3. 删除所有iou值大于给定阈值的目标
4.重复上述过程,直到所有预测要么被选中,要么被删除
处理后的候选框进一步筛选(保留与真实框iou大于阈值的候选框)
使用最小二乘法进行线性回归拟合,拟合出进行回归后的预测窗口
如果直接回归绝对坐标,由于不同真实框之间坐标差距可能过大,会导致模型训练不稳定,并且对于小框而言,轻微的坐标数值上的偏移,导致视觉上极大的预测偏差,因此直接预测真实坐标所产生的loss并不能真正反映预测框的好坏。因此需要对真实坐标做一个类似归一化的操作,使其获得分布更均匀且易于拟合的偏移量,起到一种正则的效果
: 与预测位置相关的 4 维向量(对应于[x, y, w, h])
: 与ground truth位置相关的 4 维向量
R-CNN对图像选取若干候选区域,使用卷积神经网络对每个候选区域执行前向传播以抽取其特征,然后再用这些特征来预测候选区域的类别和边界框
R-CNN缺点:
测试速度慢:检测一张图片需53s(CPU)。用SS算法提取候选框需2s,且候选框存在大量重叠、提取特征冗余。
训练过程极其繁琐、训练速度慢
训练所需空间大:如利用VGG16从VOC2007训练集上的5k图像上提取特征再保存到磁盘,以供后续的SVM和bbox回归训练就需要数百GB的存储空间
作者Ross Girshick对R-CNN的改进工作,与R-CNN使用相同的backbone(VGG-16)的前提下,训练速度快9倍,推理速度快213倍,准确率从62%提升到66%(VOC数据集)
原论文:Fast-RCNNhttps://arxiv.org/pdf/1504.08083.pdf
算法流程:
一张图像生成1k~2k个候选区域(使用SS算法)
将图像输入网络得到相同的特征图,将SS算法生成的候选框投影到特征图上获得相应的特征矩阵
将每个特征矩阵通过ROI pooling层缩放为7x7大小的特征图,接着通过一系列全连接层得到预测结果
与R-CNN分别提取特征不同不同,Fast-RCNN是将候选框映射到整张图片经过backbone后的feature map上,提取相应的候选区域特征(ROI),避免了重复的冗余计算。
同时,Fast-RCNN并不使用SS算法计算出的所有候选框,对于1k~2k个候选区域,只随机采样64个候选区域,并将与真实框IOU大于0.5的候选区域作为正样本,小于0.5的作为负样本
简单来说,就是将候选框映射到feature map上的ROI划分成7x7=49个子区域,然后对每个子区域进行max pooling,这样feature map就变成了7x7
由于引入了负样本,所以需要新增一个背景类
训练时使用多任务损失联合训练:
相比与R-CNN,Fast-RCNN仅在整张图象上执行卷积神经网络的前向传播分类,大大减少了冗余计算,还引入了ROI pooling,从而为具有不同形状的兴趣区域抽取相同形状的特征;并且分类、回归预测都整合到了CNN中,后半部分实现了端对端的训练与预测。
此时耗时瓶颈主要在SS算法提取候选框上。
Faster-RCNN是作者Ross Girshick对Fast RCNN的改进,同样使用Vgg16作为backbone,推理速度可达5fps(在当时的gpu上),准确率也进一步提升,获得了2015 ILSVRC竞赛、COCO竞赛的目标检测冠军。
原论文:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks(https://arxiv.org/pdf/1506.01497.pdf)
为了较精确地检测目标结果,Fast R-CNN模型通常需要在选择性搜索中生成大量的提议区域。 Faster R-CNN 提出将选择性搜索(SS算法)替换为区域建议网络(region proposal network),从而减少候选区域的生成数量,并保证目标检测的精度。
Faster RCNN = RPN+ Fast R-CNN
算法流程:
将图像输入网络得到相应的特征图
使用RPN生成候选框,将RPN生成的候选框投影到特征图上得到相应的特征矩阵
将每个特征矩阵通过ROI pooling层,统一缩放到7x7的特征图
最后通过一系列全连接层得到预测结果
RPN计算步骤:
使用padding为1的3×3的卷积层变换卷积神经网络的输出,并将输出通道数记为c(256-d)。这样,卷积神经网络为图像抽取的特征图中的每个单元均得到一个维度为c的新特征。
以特征图的每个像素为中心,计算出中心点对应原始图像上的点,以该点为中心,生成k个不同大小和宽高比的锚框。
使用锚框中心单元维度为c的特征,分别预测该锚框的二元类别(含目标还是背景)和边界框。
使用非极大值抑制,从预测类别为目标的预测边界框中移除相似的结果。最终输出的预测边界框即是ROI pooling层所需的候选区域。
Faster R-CNN将Fast R-CNN中使用的选择性搜索替换为参与训练的RPN,这样后者可以在减少提议区域数量的情况下仍保证目标检测的精度
RPN作为Faster R-CNN模型的一部分,是和整个模型一起训练得到的。 也就是说,Faster R-CNN的目标函数不仅包括目标检测中的类别和边界框预测,还包括RPN中锚框的二元类别和边界框预测。 作为端到端训练的结果,RPN能够学习到如何生成高质量的候选区域,从而在减少了从数据中学习的候选区域的数量的情况下,仍保持目标检测的精度
综上,可以看到R-CNN到Fast-RCNN再到Faster-RCNN,就是把一个个不属于CNN的部分改进到CNN中,从而使得计算上更加高效,形式上更加简洁。最终使得所有的计算过程都在同一个语义空间内,实现了整体上端对端的训练。