文章目录
1.前言
- R-CNN论文
- R-CNN(Region with CNN feature)
- R-CNN可以说是利用深度学习进行目标检测的开山之作,作者Ross Girshick多次在PASCAL VOC的目标检测竞赛中折桂,曾在2010年带领团队获得终身成就奖
- 在R-CNN提出来之前,传统的目标检测准确率大概在30%左右,而R-CNN准确率达50%
2.R-CNN算法流程
- 一张图像生成1K~2K个候选区域(使用Selective Search算法)
- 对每个候选区域,使用深度网络提取特征
- 特征送入每一类的SVM分类器,判别是否属于该类
- 使用回归器精细修正候选框的位置
2.1候选区域的生成
- 利用Selective Search算法通过图像分割的方法得到一些原始区域,然后使用一些合并策略将这些区域合并,得到一个层次化的区域结构,而这些结构就包含着可能需要的物体
- 通过Selective Search算法就可以对一张图片,获得一些矩形框,这些矩形框里面就可能包含我们需要检测的目标
- 通过Selective Search算法获得2K个候选区域
2.2提取特征
-
将2K个候选区域统一缩放到227×227像素(pixel),接着将候选区域输入事先训练好的AlexNet CNN网络
-
之前都是先将特征图进行展平处理,然后将展平处理后的向量输入至全连接层,而在R-CNN中将后面的全连接层去掉了,直接得到特征向量,这里每个向量都是4096维的(特征矩阵64×64,展平之后就是4096)
-
因为是2000个候选区域,所以得到了2000×4096的特征矩阵
-
特征矩阵的每一行就对应着一个候选区域的特征向量,一共2000行
2.3判定类别
- SVM分类器是一个二分类的分类器,针对每一个类别都有一个专门的分类器
- 我们以一个20个类别的数据集为例,所以就有20个SVM分类器
- 将每一个分类器又组成了一个4096×20的权值矩阵
- 将每一个特征向量分别输入到每一类SVM分类器,去判定类别,也就是将特征矩阵(2000×4096)与20个SVM组成的权值矩阵(4096×20)相乘
- 就得到2000×20的评分矩阵,表示每个建议框归属于每个类别的概率
- 评分矩阵的第一行第一列代表第一个特征向量为第一类的概率,同理第 i i i行的第 j j j列,代表第 i i i个特征向量为第 j j j类的概率,一共有2000个特征向量,20个类别,所以评分矩阵就是2000×20
- 接着再对每一列即每一类进行非极大值抑制剔除重叠建议框,得到该列即该类中得分最高的一些建议框
2.3.1非极大值抑制剔除重叠建议框
- IoU(Intersection over Union)表示 ( A ∩ B ) / ( A ∪ B ) (A\cap B)/(A\cup B) (A∩B)/(A∪B)
- 对于每一个类别首先去寻找得分最高的目标,计算其他目标与该目标的IoU值,然后对每一个边界框与最高得分的边界框IoU值进行判断,如果该IoU值大于给定的阈值,那么就删除该边界框,再将最高得分的目标存起来,在剩下的边界框当中再去寻找得分最高的目标,再按照上述流程进行计算,直到将所有的边界框遍历结束
- 比如上图的向日葵,通过Selective Search算法得到一系列的边界框
- 在这些边界框中评分最高的(如图A),然后通过SVM之后,得到的概率是0.98,另外一个图B所对应的概率是0.86
- 通过计算图A和图B的IoU,如果图A和图B计算出来的IoU大于给定的阈值,那么我们就认为图A和图B是同一个目标,这样我们就将概率低(图B)给删掉,保留图A
- 剩下的边界框重复上述操作,最后我们所得到的应该就是一个最完美的边界框,而不是上图所示的那么多边界框,因为里面本来就一个目标
2.4使用回归器
-
使用回归器精细修正边界框位置
-
保留与真实标注的目标边界框有相交,并且IoU大于阈值的边界框,不满足条件的边界框就进行删除
-
再分别使用20个回归器对上述20个类别中的剩余边界框进行回归操作,最终得到每个类别的修正后的得分最高的边界框
-
接下来利用每一个边界框所得到的4096维的特征向量来预测
-
橙色框 P P P表示通过Selective Search算法得到的目标边界框Region Proposal
-
绿色框 G G G表示真实准确的目标边界框Ground Truth,真实框是标注的数据集中自带的,真实框手工标注的
-
红色框 G ^ \hat{G} G^表示Region Proposal进行回归后的预测窗口,通过回归分类器会得到四个参数,分别对应边界框中心点的 x x x偏移量, y y y偏移量,以及边界框高度和宽度的缩放因子,通过四个值对橙色框进行调整,从而得到红色的边界框
3.R-CNN框架
- R-CNN是由四个部分组成的
- 第一个部分:通过Selective Search算法得到一系列候选框Region proposal
- 第二个部分:通过卷积神经网络(CNN),将候选框得到一系列特征向量
- 第三个部分:将一系列特征向量通过SVM进行目标分类,得到概率值,再通过IoU筛选候选框,最终每一类得到一个候选框
- 第四个部分:最后通过回归器,将候选框与人工标注的真实边界框进行操作,从而调整候选框的坐标
4.R-CNN存在的问题
4.1测试速度慢
- 测试一张图片约53s(CPU),用Selective Search算法提取候选框用时约2s,一张图像内候选框之间存在大量重叠,提取特征操作冗余
- 因为会得到很多候选框,而每一个候选框都需要计算特征向量,又因为候选框是有重叠的,所以会有很多冗余
4.2训练速度慢
- 训练过程及其繁琐,不仅要训练图像分类网络,还要训练SVM分类器和回归器,并且这三个训练之间都是相互独立的
4.3训练所需空间大
- 对于SVM和边界框回归器训练,需要从每个图像中的每个目标候选框提取特征,并写入磁盘
- 当我们把图像分类器训练好之后,需要将每一个候选框的每一个特征信息都提取出来,并保存到电脑的硬盘中
- 然后再利用这些信息去单独训练SVM,以及边界框回归器
- 对于非常深的网络,如VGG16,从VOC07训练集上的5k个图像上提取的特征需要数百GB的存储空间