一、前期知识
1.SPPNet
1.1 为什么要提出SPP-Net?
RCNN中,图片输入的尺寸是固定的,这是因为CNN中全连接层的参数是固定的,所以对于包含不同形状目标的图片,要进行裁剪和变形,但是,裁剪会造成信息丢失,变形会造成信息扭曲(变化),所以这两种方式都会影响最终的分类精度
以任意大小的原图作为输入,能最大程度的保留信息和提取特征,但是,卷积层输出的feature map要和全连层固定的维度对应,所以,只要解决了卷积层输出和全连接输入维度对应的问题,那么问题解决了,而SPP-Net就是用来解决这一问题
1.2 SPP-Net核心
空间金字塔池化层:
-
仅对原图提取一次卷积特征
-
针对于不同尺寸feature map的输出,保证得到同样大小的fc层的输入
-
输入:一张任意大小的feature map,假设为(w, h, c)
-
输出:固定为21*c
如上图所示,用三种不同大小的尺度,对卷积层输出的feature map进行划分,得到不同大小的块,然后再对这些块每个都提取一个特征值,因为每个块有c个通道,所以得到的每个块对应的1*c的特征向量,如图中有21个块,所以最后输出为21*256(图中c=256)
结论:通过空间金字塔池化就能够完成对于不同大小候选框的输入,来得到一个固定的输出,用于后面fc层的计算
1.3 SPP-Net的网络结构
2.Fast RCNN
2.1 Fast RCNN的作用:
- 结合SPPNet改进RCNN——引入ROI Pooling(单层的SPPNet)
- 多任务网络同时解决分类和回归——不再用SVM和线性回归,用神经网络来完成分类和回归
- 共享卷积特征——节省卷积运算的时间,去掉重复的计算
2.2 Fast RCNN的网络结构:
- 首先将整副图作为输入传进CNN,通过一些卷积和最大池化层产生feature map
- 然后通过selective search 得到候选框
- Roi pooling 层将这些候选框对应于feature map上的区域,提取出固定长度的特征向量
- 接着将得到特征向量传入全连接层
- 全连接层最终形成两个分支输出层
- 一个是softmax输出层,输出关于K个目标和1个背景类别的概率
- 另一个是bounding box regression层,对于K个目标,对应输出4个表示其位置的值
2.3 ROI Pooling
- pooling层的一种,是简化版的、单层的金字塔池化
- 将proposal抠出来,然后resize到统一的大小
空间金字塔池化是以不同的尺度的窗口对feature map进行划分,得到不同的维度的块,然后再相应的进行池化,得到固定长度的特征向量
而RoI池化,相当是单层的金字塔,因为它只有一种尺度,它只用一种尺度大小的窗口对RoI对应于feature map上的区域进行划分,然后再进行池化,得到固定长度的特征向量
具体操作如下:
- 根据输入的image,将RoI映射到feature map对应的位置
- 将映射后的区域划分为相同大小(可能不同)的sections (sections数量和输出的维度相同)
- 对每个section进行max pooling操作,得到固定长度的特征向量
举例:
如上图所示,假设固定输出为4维向量,先根据Roi从原图映射到feature map上对应的区域,即图中粗黑线区域,然后将该区域分成四个部分,在对这四个部分取最大值,则得到最终的4维输出向量
说明:
如果是输入区域长宽相同,则划分的是大小相同的4个区域,这里输入是5*7,5/2=2,7/2=3(整除),所以这里宽划分为高划分为2和3,宽划分为3和4,就得到图中所示4个区域
2.4 Fast R-CNN的训练过程
- 预训练一个用于分类的CNN
- 使用Selective Search选中2000个候选区域
- 修改预训练的CNN,将CNN的最后一个flatten层及后面的层删掉,换为Rol Pooling层
- 在Rol Pooling层后面加上几个全连接层,然后加上两个分支:
- 一个分支是SoftMax层,用于K+1个类别的分类
- 另一个分支是bounding-box regression模型,用于预测K个类别的目标相对 Selective Search的定位的偏差
相对于SPPNet主要改进点:
- 提出ROI Pooling层——单层的SPPNet,同样满足FC层固定输入的要求
- 多任务网络的使用——FC层的输出直接通过softmax做分类
2.5 Fast RCNN网络缺陷
存在瓶颈:
- region proposal依然采用Selective search,找出所有的候选框十分耗时
- 整个网络的过程不是端到端的过程
二、Faster R-CNN
1.Faster R-CNN提出的原因
在之前的目标检测算法中,无论是传统的目标检测算法,还是后面的R-CNN、SPPNet、Fast R-CNN这些深度学习目标检测算法,候选区域的筛选和提取,一直是一个非常耗时和繁琐的过程,并且也是导致整个网络结构不是一个端到端的过程的原因。
而Faster R-CNN针对这一问题提出了RPN网络,RPN网络主要就是为了代替先前的那些算法中的候选框提取筛选的步骤,同时通过RPN网络,算法的性能和准确度也得到了进一步的加强。
2.RPN网络:
2.1 Anchor机制
Anchor——以每一个滑动窗口的中心点,按照规定的尺寸和长宽比得到的框
- 三种面积尺寸(128,256,512)
- 在每个面积尺寸下,取三种不同的长宽比(1:1, 1:2, 2:1)
2.2 RPN的作用
- 提出候选区域
- 前景背景分类+框位置的回归
- 粗分类——仅仅对候选区域是背景还是前景进行二分类,后续网络中进一步判定具体类别
- 粗定位——在RPN中对框的位置进行一步粗略的回归,后续网络中进一步对位置进行精修
RPN主要过程:
- 输入:feature map,anchor box
- 输出:anchor box的分类和位置向量,以及最终候选区域
假设前面特征提取部分得到的feature map大小为n*n*256,然后根据上述anchor box机制,在feature map上的每个点上生成k个anchor box,那么总共有n*n*k个anchor box,然后对这些anchor box进行粗分类和位置回归,feature map上的每一个点就得到了2k个分类得分向量和4k个位置回归向量,注意这里的位置回归的信息,是原图上的位置。
得到了每个anchor box分类得分,对其进行排序,然后再进行筛选,得到2000个候选区域
图中的256-d,其实是输入的通道,同时也是每个anchor box进行卷积时的通道,假设某个点上的anchor box为2*2,那么卷积时,实际上就拿feature map上以这个点为中心,长宽为2*2,厚度为256的三维向量的特征信息进行卷积
3.Faster R-CNN网络的大体结构
Faster R-CNN网络:
- 提出了Region Proposal Network(RPN)
- 实现了端到端的检测
首先 ,在卷积层采用了共享卷积的操作,然后采用了RPN网络来完成proposal提取的过程,最终候选区域的类别和框的位置,都采用神经网络来完成
也就是说,输入一张图片,通过Faster R-CNN网络,直接得出分类和定位结果,即实现了端到端的检测
4.Faster R-CNN的网络结构
- 主干网络: 13con+13relu+4pooling
- RPN: 3x3+背景前景区分+初步定位
- ROIPooling
- 分类+位置精确定位
5.Faster R-CNN的损失函数
L ( { p i } , { t i } ) = 1 N c l s ∑ i L c l s ( p i , p i ∗ ) + λ 1 N r e g p i ∗ L r e g ( t i , t i ∗ ) L