RCNN
算法流程
rcnn算法流程大概分为4个步骤
1.一张图生成1k-2k个候选区域(使用后selective search方法)
2.对每个候选区域使用深度网络提取特征
3.特征送入每一类SVM分类器,判别是否属于该类
4.使用回归器精细修正候选框位置
一、候选区域的生成
利用ss算法通过图像分割的方法得到一些原始区域,然后使用 一些合并策略将这些区域合并,得到一个层次化的区域结构,而这些结构就包含着可能需要的物体
二、对每个候选区域,使用深度网络提取特征
将2000个候选区域缩放到227x227,接着将候选区域输入事先训练好的alexnet,获得4096维的特征得到2000x4096维的矩阵
注意:这里将alexnet最后一层全链接层去掉了,所以得到2000x4096维的矩阵
三、特征送入每一类的svm分类器,判定类别
将2000x4096维特征与20个svm组成的权值矩阵4096x20相乘,获得2000x20维矩阵表示每个建议框是某个目标类别的得分。分别对上述2000x20维矩阵中每一列即每一类进行nms剔除重叠建议框,得到该列即该类中得分最高的一些建议框
此处第一个2000x4096矩阵的每一行为一个候选框通过cnn得到的特征向量,一共有2000个候选框,所以有2000行;
中间的4096x20的矩阵为svm的权值矩阵,每一列对应一个类别的权值向量,一共有20个类所以有20列;
最后的2000x20的矩阵的第一行的第一个元素为第一个候选框对应的第一个类别的概率,第一列为所有第一个类别对应的2000个候选框的概率;
结束之后对每一列的候选框进行nms非极大值抑制
非极大值抑制
非极大值抑制主要分为三个部分
四、使用回归器精细修正候选框位置
队nms处理后剩余的建议框进行进一步筛选,接着分别用20个回归器对上述20个类别中剩余的建议框进行回归操作,最终得到每个类别的修正之后的bbox。
如图,黄色框口p表示建议框region proposal,绿色窗口G表示实际框gt,红色窗口G^表示Rrgion proposal进行回归后的预测窗口,可以用最小二乘法解决的回归问题
回归器的具体训练方法将在后边的faster rcnn中进行讲解
rcnn存在的问题
1、测试速度慢
测试一张图片约为53秒(cpu),用ss算法提取候选框用时约2秒,一张图像内候选框之间存在大量重叠,提取特征操作冗余
2、训练速度慢
过程及其繁琐,不仅要训练图像分类网络,还要训练svm分类器。还要训练回归器,这几个模块都是相对独立的,所以训练非常慢
3、训练所需空间大
对svm和bbox回归训练,需要从每个图像中的每个目标候选框提取特征,并写入磁盘。对于非常深的网络,如vgg16,从voc2017训练集上的5k图像上的提取的特征需要数百gb的存储空间。