R-CNN论文详解

来源:互联网 发布:淘宝店铺产品分类设置 编辑:程序博客网 时间:2024/05/08 23:58

这几天在看《Rich feature hierarchies for accurate object detection and semantic segmentation 》,觉得作者的科研素养非常棒,考虑问题很全面而且很有逻辑性;

不过暂时有的地方看的也不是太懂,这里转载了一篇博客中的介绍,博主写的不错;

博客链接:http://blog.csdn.net/wopawn/article/details/52133338

paper链接:链接: https://pan.baidu.com/s/1qYO4vY8 密码: 62fd

paper中相关名词解释:链接: https://pan.baidu.com/s/1nuAhidz 密码: pnsh

再推荐一个博客:http://blog.csdn.net/hjimce/article/details/50187029

&创新点

  1. 采用CNN网络提取图像特征,从经验驱动的人造特征范式HOG、SIFT到数据驱动的表示学习范式,提高特征对样本的表示能力;

  2. 采用大样本下有监督预训练+小样本微调的方式解决小样本难以训练甚至过拟合等问题。



&问题是什么

  1. 近10年以来,以人工经验特征为主导的物体检测任务mAP【物体类别和位置的平均精度】提升缓慢;

  2. 随着ReLu激励函数、dropout正则化手段和大规模图像样本集ILSVRC的出现,在2012年ImageNet大规模视觉识别挑战赛中,Hinton及他的学生采用CNN特征获得了最高的图像识别精确度;

  3. 上述比赛后,引发了一股“是否可以采用CNN特征来提高当前一直停滞不前的物体检测准确率“的热潮。


【写给小白:一图理解图像分类,图像定位,目标检测和实例分割】 

这里写图片描述



&如何解决问题

。测试过程

  1. 输入一张多目标图像,采用selective search算法提取约2000个建议框;

  2. 先在每个建议框周围加上16个像素值为建议框像素平均值的边框,再直接变形为227×227的大小;

  3. 先将所有建议框像素减去该建议框像素平均值后【预处理操作】,再依次将每个227×227的建议框输入AlexNet CNN网络获取4096维的特征【比以前的人工经验特征低两个数量级】,2000个建议框的CNN特征组合成2000×4096维矩阵;

  4. 将2000×4096维特征与20个SVM组成的权值矩阵4096×20相乘【20种分类,SVM是二分类器,则有20个SVM】,获得2000×20维矩阵表示每个建议框是某个物体类别的得分;

  5. 分别对上述2000×20维矩阵中每一列即每一类进行非极大值抑制剔除重叠建议框,得到该列即该类中得分最高的一些建议框;

  6. 分别用20个回归器对上述20个类别中剩余的建议框进行回归操作,最终得到每个类别的修正后的得分最高的bounding box。


。解释分析

  1. selective search 
    采取过分割手段,将图像分割成小区域,再通过颜色直方图,梯度直方图相近等规则进行合并,最后生成约2000个建议框的操作,具体见博客。

  2. 为什么要将建议框变形为227×227?怎么做? 
    本文采用AlexNet CNN网络进行CNN特征提取,为了适应AlexNet网络的输入图像大小:227×227,故将所有建议框变形为227×227。 
    那么问题来了,如何进行变形操作呢?作者在补充材料中给出了四种变形方式:

    ① 考虑context【图像中context指RoI周边像素】的各向同性变形,建议框像周围像素扩充到227×227,若遇到图像边界则用建议框像素均值填充,下图第二列; 
    ② 不考虑context的各向同性变形,直接用建议框像素均值填充至227×227,下图第三列; 
    ③ 各向异性变形,简单粗暴对图像就行缩放至227×227,下图第四列; 
    ④ 变形前先进行边界像素填充【padding】处理,即向外扩展建议框边界,以上三种方法中分别采用padding=0下图第一行,padding=16下图第二行进行处理;

    经过作者一系列实验表明采用padding=16的各向异性变形即下图第二行第三列效果最好,能使mAP提升3-5%。 

    这里写图片描述 

  3. 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的Region Proposal集合,计算每种6×6特征即“物体检测器”的激活量,之后进行非极大值抑制【下面解释】,最后展示出每种6×6特征即“物体检测器”前几个得分最高的Region Proposal,从而给出了这种6×6的特征图表示了什么纹理、结构,很有意思。

  4. 为什么要进行非极大值抑制?非极大值抑制又如何操作? 
    先解释什么叫IoU。如下图所示IoU即表示(A∩B)/(A∪B) 

    这里写图片描述 

    在测试过程完成到第4步之后,获得2000×20维矩阵表示每个建议框是某个物体类别的得分情况,此时会遇到下图所示情况,同一个车辆目标会被多个建议框包围,这时需要非极大值抑制操作去除得分较低的候选框以减少重叠框。 

    这里写图片描述 

    具体怎么做呢? 
    ① 对2000×20维矩阵中每列按从大到小进行排序; 
    ② 从每列最大的得分建议框开始,分别与该列后面的得分建议框进行IoU计算,若IoU>阈值,则剔除得分较小的建议框,否则认为图像中存在多个同一类物体; 
    ③ 从每列次大的得分建议框开始,重复步骤②; 
    ④ 重复步骤③直到遍历完该列所有建议框; 
    ⑤ 遍历完2000×20维矩阵所有列,即所有物体种类都做一遍非极大值抑制; 
    ⑥ 最后剔除各个类别中剩余建议框得分少于该类别阈值的建议框。【文中没有讲,博主觉得有必要做

  5. 为什么要采用回归器?回归器是什么有什么用?如何进行操作? 
    首先要明确目标检测不仅是要对目标进行识别,还要完成定位任务,所以最终获得的bounding-box也决定了目标检测的精度。 
    这里先解释一下什么叫定位精度:定位精度可以用算法得出的物体检测框与实际标注的物体边界框的IoU值来近似表示。

    如下图所示,绿色框为实际标准的卡宴车辆框,即Ground Truth;黄色框为selective search算法得出的建议框,即Region Proposal。即使黄色框中物体被分类器识别为卡宴车辆,但是由于绿色框和黄色框IoU值并不大,所以最后的目标检测精度并不高。采用回归器是为了对建议框进行校正,使得校正后的Region Proposal与selective search更接近, 以提高最终的检测精度。论文中采用bounding-box回归使mAP提高了3~4%。 

    这里写图片描述 

    那么问题来了,回归器如何设计呢? 

    这里写图片描述 

    如上图,黄色框口P表示建议框Region Proposal,绿色窗口G表示实际框Ground Truth,红色窗口G^表示Region Proposal进行回归后的预测窗口,现在的目标是找到P到G^的线性变换【当Region Proposal与Ground Truth的IoU>0.6时可以认为是线性变换】,使得G^与G越相近,这就相当于一个简单的可以用最小二乘法解决的线性回归问题,具体往下看。 
    让我们先来定义P窗口的数学表达式:Pi=(PixPiyPiwPih),其中(PixPiy)表示第一个i窗口的中心点坐标,PiwPih分别为第i个窗口的宽和高;G窗口的数学表达式为:Gi=(GixGiyGiwGih)G^窗口的数学表达式为:G^i=(G^ixG^iyG^iwG^ih)以下省去i上标。 
    这里定义了四种变换函数,dx(P)dy(P)dw(P)dh(P)dx(P)dy(P)通过平移对x和y进行变化,dw(P)dh(P)通过缩放对w和h进行变化,即下面四个式子所示: 

    G^x=Pwdx(P)+Px(1)
    G^y=Phdy(P)+Py(2)
    G^w=Pwexp(dw(P))(3)
    G^h=Phexp(dh(P))(4)

     

    每一个d(P)【*表示x,y,w,h】都是一个AlexNet CNN网络Pool5层特征ϕ5(P)的线性函数,即d(P)=wTϕ5(P) ,这里wT就是所需要学习的回归参数。损失函数即为:

    Loss=argmini=0N(tiw^Tϕ5(Pi))2+λ||w^||2(5)

     

    损失函数中加入正则项λ||w^||2   是为了避免归回参数wT过大。其中,回归目标t由训练输入对(PG)按下式计算得来:

    tx=(GxPx)/Pw(6)
    ty=(GyPy)/Ph(7)
    tw=log(Gw/Pw)(8)
    th=log(Gh/Ph)(9)

     

    ①构造样本对。为了提高每类样本框回归的有效性,对每类样本都仅仅采集与Ground Truth相交IoU最大的Region Proposal,并且IoU>0.6的Region Proposal作为样本对(PiGi),一共产生20对样本对【20个类别】; 
    ②每种类型的回归器单独训练,输入该类型样本对N个:{(Pi,Gi)}i=1N以及Pii=1N所对应的AlexNet CNN网络Pool5层特征ϕ5(Pi)i=1N; 
    ③利用(6)-(9)式和输入样本对{(Pi,Gi)}i=1N计算tii=1N; 
    ④利用ϕ5(Pi)i=1Ntii=1N,根据损失函数(5)进行回归,得到使损失函数最小的参数wT


。训练过程

  1. 有监督预训练

    样本来源正样本ILSVRC2012负样本ILSVRC2012


    ILSVRC样本集上仅有图像类别标签,没有图像物体位置标注; 
    采用AlexNet CNN网络进行有监督预训练,学习率=0.01; 
    该网络输入为227×227的ILSVRC训练集图像,输出最后一层为4096维特征->1000类的映射,训练的是网络参数。

  2. 特定样本下的微调

    样本来源正样本Ground Truth+与Ground Truth相交IoU>0.5的建议框【由于Ground Truth太少了】负样本与Ground Truth相交IoU≤0.5的建议框


    PASCAL VOC 2007样本集上既有图像中物体类别标签,也有图像中物体位置标签; 
    采用训练好的AlexNet CNN网络进行PASCAL VOC 2007样本集下的微调,学习率=0.001【0.01/10为了在学习新东西时不至于忘记之前的记忆】; 
    mini-batch为32个正样本和96个负样本【由于正样本太少】; 
    该网络输入为建议框【由selective search而来变形后的227×227的图像,修改了原来的1000为类别输出,改为21维【20类+背景】输出,训练的是网络参数。

  3. SVM训练

    样本来源正样本Ground Truth负样本与Ground Truth相交IoU<0.3的建议框


    由于SVM是二分类器,需要为每个类别训练单独的SVM; 
    SVM训练时输入正负样本在AlexNet CNN网络计算下的4096维特征,输出为该类的得分,训练的是SVM权重向量; 
    由于负样本太多,采用hard negative mining的方法在负样本中选取有代表性的负样本,该方法具体见。

  4. Bounding-box regression训练

    样本来源正样本与Ground Truth相交IoU最大的Region Proposal,并且IoU>0.6的Region Proposal


    输入数据为某类型样本对N个:{(Pi,Gi)}i=1N以及Pii=1N所对应的AlexNet CNN网络Pool5层特征ϕ5(Pi)i=1N,输出回归后的建议框Bounding-box,训练的是dx(P)dy(P)dw(P)dh(P)四种变换操作的权重向量。具体见前面分析。


。解释分析

  1. 什么叫有监督预训练?为什么要进行有监督预训练?

    有监督预训练也称之为迁移学习,举例说明:若有大量标注信息的人脸年龄分类的正负样本图片,利用样本训练了CNN网络用于人脸年龄识别;现在要通过人脸进行性别识别,那么就可以去掉已经训练好的人脸年龄识别网络CNN的最后一层或几层,换成所需要的分类层,前面层的网络参数直接使用为初始化参数,修改层的网络参数随机初始化,再利用人脸性别分类的正负样本图片进行训练,得到人脸性别识别网络,这种方法就叫做有监督预训练。这种方式可以很好地解决小样本数据无法训练深层CNN网络的问题,我们都知道小样本数据训练很容易造成网络过拟合,但是在大样本训练后利用其参数初始化网络可以很好地训练小样本,这解决了小样本训练的难题。 
    这篇文章最大的亮点就是采用了这种思想,ILSVRC样本集上用于图片分类的含标注类别的训练集有1millon之多,总共含有1000类;而PASCAL VOC 2007样本集上用于物体检测的含标注类别和位置信息的训练集只有10k,总共含有20类,直接用这部分数据训练容易造成过拟合,因此文中利用ILSVRC2012的训练集先进行有监督预训练。

  2. ILSVRC 2012与PASCAL VOC 2007数据集有冗余吗?

    即使图像分类与目标检测任务本质上是不同的,理论上应该不会出现数据集冗余问题,但是作者还是通过两种方式测试了PASCAL 2007测试集和ILSVRC 2012训练集、验证集的重合度:第一种方式是检查网络相册IDs,4952个PASCAL 2007测试集一共出现了31张重复图片,0.63%重复率;第二种方式是用GIST描述器匹配的方法,4952个PASCAL 2007测试集一共出现了38张重复图片【包含前面31张图片】,0.77%重复率,这说明PASCAL 2007测试集和ILSVRC 2012训练集、验证集基本上不重合,没有数据冗余问题存在。

  3. 可以不进行特定样本下的微调吗?可以直接采用AlexNet CNN网络的特征进行SVM训练吗?

    文中设计了没有进行微调的对比实验,分别就AlexNet CNN网络的pool5、fc6、fc7层进行特征提取,输入SVM进行训练,这相当于把AlexNet CNN网络当做万精油使用,类似HOG、SIFT等做特征提取一样,不针对特征任务。实验结果发现f6层提取的特征比f7层的mAP还高,pool5层提取的特征与f6、f7层相比mAP差不多; 
    在PASCAL VOC 2007数据集上采取了微调后fc6、fc7层特征较pool5层特征用于SVM训练提升mAP十分明显; 
    由此作者得出结论:不针对特定任务进行微调,而将CNN当成特征提取器,pool5层得到的特征是基础特征,类似于HOG、SIFT,类似于只学习到了人脸共性特征;从fc6和fc7等全连接层中所学习到的特征是针对特征任务特定样本的特征,类似于学习到了分类性别分类年龄的个性特征。

  4. 为什么微调时和训练SVM时所采用的正负样本阈值【0.5和0.3】不一致?

    微调阶段是由于CNN对小样本容易过拟合,需要大量训练数据,故对IoU限制宽松:Ground Truth+与Ground Truth相交IoU>0.5的建议框为正样本,否则为负样本; 
    SVM这种机制是由于其适用于小样本训练,故对样本IoU限制严格:Ground Truth为正样本,与Ground Truth相交IoU<0.3的建议框为负样本。

  5. 为什么不直接采用微调后的AlexNet CNN网络最后一层SoftMax进行21分类【20类+背景】?

    因为微调时和训练SVM时所采用的正负样本阈值不同,微调阶段正样本定义并不强调精准的位置,而SVM正样本只有Ground Truth;并且微调阶段的负样本是随机抽样的,而SVM的负样本是经过hard negative mining方法筛选的;导致在采用SoftMax会使PSACAL VOC 2007测试集上mAP从54.2%降低到50.9%。



&结果怎么样

  1. PASCAL VOC 2010测试集上实现了53.7%的mAP;

  2. PASCAL VOC 2012测试集上实现了53.3%的mAP;

  3. 计算Region Proposals和features平均所花时间:13s/image on a GPU;53s/image on a CPU。



&还存在什么问题

    1. 很明显,最大的缺点是对一张图片的处理速度慢,这是由于一张图片中由selective search算法得出的约2k个建议框都需要经过变形处理后由CNN前向网络计算一次特征,这其中涵盖了对一张图片中多个重复区域的重复计算,很累赘;

    2. 知乎上有人说R-CNN网络需要两次CNN前向计算,第一次得到建议框特征给SVM分类识别,第二次对非极大值抑制后的建议框再次进行CNN前向计算获得Pool5特征,以便对建议框进行回归得到更精确的bounding-box,这里文中并没有说是怎么做的,博主认为也可能在计算2k个建议框的CNN特征时,在硬盘上保留了2k个建议框的Pool5特征,虽然这样做只需要一次CNN前向网络运算,但是耗费大量磁盘空间;

    3. 训练时间长,虽然文中没有明确指出具体训练时间,但由于采用RoI-centric sampling【从所有图片的所有建议框中均匀取样】进行训练,那么每次都需要计算不同图片中不同建议框CNN特征,无法共享同一张图的CNN特征,训练速度很慢;

    4. 整个测试过程很复杂,要先提取建议框,之后提取每个建议框CNN特征,再用SVM分类,做非极大值抑制,最后做bounding-box回归才能得到图片中物体的种类以及位置信息;同样训练过程也很复杂,ILSVRC 2012上预训练CNN,PASCAL VOC 2007上微调CNN,做20类SVM分类器的训练和20类bounding-box回归器的训练;这些不连续过程必然涉及到特征存储、浪费磁盘空间等问题。

    5. 再补充自己几点总结(1)数据总共有三个训练用途:CNN fine-tune、SVM training、bounding-box regression training;(2)文中作者还分析了几种可能会对实验结果产生影响的因素,建议看一看,对以后自己想问题很有帮助:三种训练集数量、数据集选择、BB、RP这几种影响因素;(3)文中作者还考虑了R-CNN和Overfeat算法的关系,并留下了如何提速R-CNN这一悬念;(4)用R-CNN来做语义分割,计算features的两种策略:fg和full以及它们如何选择;(5)附录中对于resized操作、Bounding-box regression、数据冗余等有详细介绍,可以看一看;
阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 美好英文 美好的 为美好 所有的美好 身边的美好 美好的事情 媳妇的美好时代 美食生活更美好作文 美好集团股吧 美好集团怎么样 美好集团股票行情 000667美好集团 美好集团股票 美好集团公司简介 美好的普通人 000667股票 000667 美状 美装 中国美妆进化史 美妆蛋怎么用 人体美妆艺术 密室逃脱美妆学院攻略 美妆博主 超级美妆秀之万圣狂欢 密室逃脱美妆攻略 美妆蛋使用方法 密室逃脱美妆学院 美妆蛋使用前需要打湿吗 密室逃脱美妆 美妆蛋多久洗一次 妆美24k黄金精华套装怎么样 美妆蛋多久换一次 赤木刚宪美妆博主 美妆蛋多久换 清洗美妆蛋 妆美24k黄金精华套装 美妆品牌 美妆博主推荐 美妆蛋推荐 美妆图片