R-CNN(regionswith CNN features)论文
主要做了什么:
提出了一个简单并且可扩展的算法。这种算法主要有两个关键思想(1)通过用CNN来提取regionproposals(用于目标定位和分割)(2)当标签训练数据不足的时候,用supervised pre-training来预训练网络(迁移学习的思想),然后再进行fine-tuning(微调)。
创新点:
(1)采用CNN网络提取图像特征,从经验驱动的人造特征范式HOG、SIFT到数据驱动的表示学习范式,提高特征对样本的表示能力。
(2)采用大样本下有监督预训练+小样本微调的方式解决小样本难以训练甚至过拟合等问题。
参考:https://blog.youkuaiyun.com/wopawn/article/details/52133338
取得的成就:
object detection performance主要是由PASCAL VOC的数据来衡量。主要的衡量指标是meanaverage precision(mAP),而本文的RCNN的mAP达到了53.3%(VOC12)。反正就是在那时候的最高水平。
框架:
(1)输入图片
(2)用selectivesearch的方法提取region proposals(2000左右)
(3)将提取出来的regionproposals调整尺寸(统一是227x227)后输入到CNN(Alexnet),提取feature。
(4)对regionproposals提取到的特征向量进行分类(SVM)。
(5)boundingbox回归,用bounding box回归值来校正原来的region proposals,生成预测proposals的坐标。
详细过程:
· 输入一张多目标图像,采用selective search算法提取约2000个建议框;
· 先在每个建议框周围加上16个像素值为建议框像素平均值的边框,再直接变形为227×227的大小;
· 先将所有建议框像素减去该建议框像素平均值后【预处理操作】,再依次将每个227×227的建议框输入AlexNetCNN网络获取4096维的特征【比以前的人工经验特征低两个数量级】,2000个建议框的CNN特征组合成2000×4096维矩阵;
· 将2000×4096维特征与20个SVM组成的权值矩阵4096×20相乘【20种分类,SVM是二分类器,则有20个SVM】,获得2000×20维矩阵表示每个建议框是某个物体类别的得分;
· 分别对上述2000×20维矩阵中每一列即每一类进行非极大值抑制剔除重叠建议框,得到该列即该类中得分最高的一些建议框;
· 分别用20个回归器对上述20个类别中剩余的建议框进行回归操作,最终得到每个类别的修正后的得分最高的boundingbox。
分析:
(1)预训练(pre-training)和微调(fine-tuning)
用ILSVRC2012 classification的数据集来预训练CNN网络,而微调是将CNN最后一层1000维的分类变成(N+1)维的分类(N代表类别,1代表背景)。
预训练的正负样本都是用ILSVRC2012classification的数据集,ILSVRC样本集上仅有图像类别标签,没有图像物体位置标注; 采用AlexNet CNN网络进行有监督预训练,学习率=0.01;该网络输入为227×227的ILSVRC训练集图像,输出最后一层为4096维特征->1000类的映射,训练的是网络参数。
特定样本下的微调用iou大于0.5的作为正样本(和真实框重叠超过0.5的),其他都是负样本。PASCALVOC 2007样本集上既有图像中物体类别标签,也有图像中物体位置标签; 采用训练好的AlexNet CNN网络进行PASCAL VOC 2007样本集下的微调,学习率=0.001【0.01/10为了在学习新东西时不至于忘记之前的记忆】; mini-batch为32个正样本和96个负样本【由于正样本太少】; 该网络输入为建议框【由selectivesearch而来】变形后的227×227的图像,修改了原来的1000为类别输出,改为21维【20类+背景】输出,训练的是网络参数。
针对微调是否有用的问题,文中得出的结论是:不针对特定任务进行微调,而将CNN当成特征提取器,pool5层得到的特征是基础特征,类似于HOG、SIFT,类似于只学习到了人脸共性特征;从fc6和fc7等全连接层中所学习到的特征是针对特征任务特定样本的特征,类似于学习到了分类性别分类年龄的个性特征。
(2)CNN特征可视化
文中采用了巧妙的方式将AlexNet CNN网络中Pool5层特征进行了可视化。该层的size是6×6×256,即有256种表示不同的特征,这相当于原始227×227图片中有256种195×195的感受视野【相当于对227×227的输入图像,卷积核大小为195×195,padding=4,step=8,输出大小(227-195+2×4)/8+1=6×6】; 文中将这些特征视为”物体检测器”,输入10million的RegionProposal集合,计算每种6×6特征即“物体检测器”的激活量,之后进行非极大值抑制,最后展示出每种6×6特征即“物体检测器”前几个得分最高的RegionProposal,从而给出了这种6×6的特征图表示了什么纹理、结构。
(3)boundingbox 回归方法
bounding box回归的方法是用于校正目标定位的表现。
具体方法:
训练算法的输入是{(Pi , G i )} i=1,...,N ,P i = (P x i , P y i , P w i , P h i ),前两项代表RegionProposal的中心坐标,后两项是代表长宽。用G = (G x , G y , G w , G h )来表示ground truth值。
Ĝhat=(Ĝ x,Ĝ y,Ĝ w,Ĝ h)来表示预测值。
这里定义了四种变换函数,dx(P),dy(P),dw(P),dh(P)。dx(P)和dy(P)通过平移对x和y进行变化,dw(P)和dh(P)
通过缩放对w和h进行变化,即下面四个式子所示(见图):
(4)non-maximum suppression(非极值抑制)
先解释什么叫IoU。如下图所示IoU即表示(A∩B)/(A∪B)
在测试过程完成到第4步之后,获得2000×20维矩阵表示每个建议框是某个物体类别的得分情况,此时会遇到下图所示情况,同一个车辆目标会被多个建议框包围,这时需要非极大值抑制操作去除得分较低的候选框以减少重叠框。
具体怎么做呢?
① 对2000×20维矩阵中每列按从大到小进行排序;
② 从每列最大的得分建议框开始,分别与该列后面的得分建议框进行IoU计算,若IoU>阈值,则剔除得分较小的建议框,否则认为图像中存在多个同一类物体;
③ 从每列次大的得分建议框开始,重复步骤②;
④ 重复步骤③直到遍历完该列所有建议框;
⑤ 遍历完2000×20维矩阵所有列,即所有物体种类都做一遍非极大值抑制;
(5)微调时和训练SVM时所采用的正负样本阈值【0.5和0.3】不一致
微调阶段是由于CNN对小样本容易过拟合,需要大量训练数据,故对IoU限制宽松:Ground Truth+与GroundTruth相交IoU>0.5的建议框为正样本,否则为负样本;
SVM这种机制是由于其适用于小样本训练,故对样本IoU限制严格:Ground Truth为正样本,与Ground Truth相交IoU<0.3的建议框为负样本
(6)为什么不直接采用微调后的AlexNetCNN网络最后一层SoftMax进行21分类【20类+背景】?
因为微调时和训练SVM时所采用的正负样本阈值不同,微调阶段正样本定义并不强调精准的位置,而SVM正样本只有GroundTruth;并且微调阶段的负样本是随机抽样的,而SVM的负样本是经过hard negative mining方法筛选的;导致在采用SoftMax会使PSACALVOC 2007测试集上mAP从54.2%降低到50.9%。