精华内容
下载资源
问答
  • RCNN,FastRCNN和FasterRCNN论文原文,介绍了经典的双阶段目标检测算法RCNN及其改进,属于深度学习必读论文
  • 原文链接:http://www.chenjianqu.com/show-75.html ...论文:Ross Girshick.Fast R-CNN 素质三连 1.论文贡献 提出用于目标检测的Fast Region-based Convolutional Network method(Fast R-CNN) Fast ...

     个人博客:http://www.chenjianqu.com/

    原文链接:http://www.chenjianqu.com/show-75.html

     

    论文:Ross Girshick.Fast R-CNN

    素质三连

    1.论文贡献

    提出用于目标检测的Fast Region-based Convolutional Network method(Fast R-CNN)

    Fast RCNN基于RCNN和SPP-net,使用VGG16作为特征提取器

    运行速度比RCNN快213倍,比SPP-net快10倍,但是精度比两者都更高,达到SOTA

    将特征提取器,回归器,分类器都合并在一个网络里,训练的速度提高而且更加方便

    将SPP-net中的SPP替换RoI层,可以fine-turn整个网络

    使用SVD分解FC计算,加快预测速度

    通过实验验证了某些决策,包括:multi-task的作用,尺度不变性的方法,数据集大小的影响,SVM对比softmax,候选区域数量的影响等。

    2.实验结果

        在VOC2007+VOC2012数据集上训练,在VOC2007上测试,最终得到mAP=70.0,达到SOTA。

    3.存在的问题

        未实现端对端网络。

     

    模型提出

        在这之前的目标检测算法都是多阶段的,比如RCNNSPP-net中,首先需要用SS生成候选框,然后使用CNNs抽取特征,使用SVM分类器对候选框打分,用回归器精确定位,再使用NMS才得到最终结果。

        RCNN的缺点:1.训练过程是一个multi-stage的pipeline。2.训练需要昂贵的时间和空间。3.模型检测速度太慢了。

        SPP-net在一定程度上解决了RCNN速度的问题,但是它仍然使用SVM作为分类器,因此需要多阶段训练。而且由于SPP的存在,无法对预训练的卷积层fine-turning。

        本文提出的Fast RCNN改进了RCNNSPP-net,提高了目标检测的速度和精度,Fast R-CNN有如下优势:1.比RCNNSPP-net有更高的检测精度(mAP)   2.单阶段训练,使用multi-task loss   3.训练可以更新所有的网络层   4.不需要再把抽取的特征放到硬盘上了。

        

    架构和训练

        Fast RCNN架构如下:

    图片1.jpg

        Fast RCNN的输入是图片和一组候选框。首先通过卷积神经网络提取特征得到特征图,然后对候选框映射到特征图上,并通过region of interest(RoI) 池化得固定长度的特征向量。特征向量被喂入FC层,最后从FC层连接两个输出分支:一个产生softmax概率用于评估该候选框属于K+1(K个分类加一个背景)的置信度,另一个分支是产生每个分类的偏置系数(也就是四个实数)。    

    1.RoI池化层

        ROI池化是使用最大池化将候选区域对应的特征图(hxw)转换为固定分辨率(HxW)的特征图的方法,其中H和W是超参数。每个ROI被定义为四元组(r,c,h,w),其中(r,c)是候选框左上角的位置,(h,w)是候选框的高和宽。ROI池化是SPP的特例,是单级SPP,池化滑动窗口大小近似h/H x w/W。

    2.预训练

        在ImageNet上预训练3个网络,预训练的网络用来初始化Fast R-CNN需要如下变换:1.最后一个池化层使用RoI Pooling Layer代替;2.网络的最后全连接层用两个输出分支代替:分类器和边框回归器。3.模型的输入是整张图片和对应的RoI。

    3.Fine-tuning

        SPPNet不能反向传播的原因是:The root cause is that back-propagation through the SPP layer is highly inefficient when each training sample (i.e. RoI) comes from a different image, which is exactly how R-CNN and SPPnet networks are trained. The inefficiency stems from the fact that each RoI may have a very large receptive field, often spanning the entire input image. Since the forward pass must process the entire receptive field, the training inputs are large (often the entire image).

        大佬的解释[https://www.zhihu.com/question/66283535/answer/275678219]:SPP-Net中fine-tuning的样本是来自所有图像的所有RoI打散后均匀采样的,即RoI-centric sampling,这就导致SGD的每个batch的样本来自不同的图像,需要同时计算和存储这些图像的Feature Map,过程变得expensive.  Fast R-CNN采用分层采样思想,先采样出N张图像(image-centric sampling),在这N张图像中再采样出R个RoI,具体到实际中,N=2,R=128,同一图像的RoI共享计算和内存,也就是只用计算和存储2张图像,消耗就大大减少了。

        而在Fast RCNN的训练过程中,SGD的mini-batch是分层采样的。首先从数据集中采样N张图片,然后每张图片采样R/N个RoI,R训练的RoI数量。每批次RoI来源于相同的图片在前向和反向传播中共享计算和内存。N足够小的时候能减小计算量。比如N=2,R=128,要比RoI来自128张不同图片快64倍。

    4.Multi-task loss

        Fast RCNN有两个输出,第一个分支输出每个ROI的离散概率分布,p=(p0,......,pk),即k个类加上一个背景。第二个分支输出bounding-box的回归偏置,tk=(tk_x,tk_y,tk_x,tk_h),每个类对应一个bounding box。训练的标签是ground-truth类别one-hot类别向量u和ground-truth bounding-box的v。这里使用多任务损失L把两个输出分支的损失合并起来:

    图片2.jpg

        其中Lcls(p,u)是第一个分支的损失,使用交叉熵损失。Lloc是第二个分支的损失,u=0表示背景类别,[u>=1]表示当u>=1时lambda=1,否则lambda=0。Lloc的计算如下:

    图片3.jpg

        这是一个L1损失,相对于RCNN和SPPNet的L2损失,它对边界更加不敏感。When the regression targets are unbounded, training with L2 loss can require careful tuning of learning rates in order to prevent exploding gradients。公式1中的超参数lambda控制两个损失的平衡。这里将所有的ground-truth的vi归一化,减去数据集均值,除以方差,使用lambda=1。

    5.Mini-batch 采样

        在数据集中随机选择(实际上是迭代选择)N=2张图片,mini-batch的size=128,即每张图片采样64个RoI。这些RoI中有25%是与ground-truth的IoU大于0.5的,这些是正样本,另外的RoI就是背景负样本。在训练时,图像被水平翻转的概率是0.5,没有使用另外的数据增强。

    6.通过RoI pooling layers反向传播

        RoI池化层的反向传播如下:

    图片a.jpg

    7.SGD超参数

        两个输出分支的初始化:分别使用零均值,标准差为0.01和0.001的高斯分布,偏置初始化为0。学习率为0.001。当在VOC 2007或VOC 2012上运行时,用sgd训练30k,接着学习率降低到0.0001再训练10k。当在更大的数据集训练时,sgd要跑更多的次。使用0.9的动量和0.0005的参数衰减。

    8.尺度不变性

        作者探索了两种实现尺度不变的目标检测方法:(1)通过”brute force”学习,(2)使用图像金字塔。在brute force学习中,其实就是单尺度,训练和测试时每个图像被处理成预定义大小,模型从训练数据中直接学习尺度不变性。而图像金字塔,就是多尺度方法,即通过图像金字塔近似尺度不变。测试时,图像金字塔用于对候选区域近似尺度归一化。在多尺度训练时,每个采样的图片随机采样一个金字塔尺度,这和SPP一样。

     

    Fast RCNN目标检测

        Fast RCNN的输入是图像(或图像金字塔,图像的列表)和一组候选区域R。R的大小一般设置为2000,后面的实验中也有R=45k的情况。当使用图像金字塔的时,分配每个尺度中的RoI接近224^2。测试时,对于每个RoI r,前向传播后输出类别概率分布p和一组相对于r的bounding box偏置,每个类对应一个bounding box偏置。每个r中类k的置信度为Pr(class=k|r)=pk。最后对每个类再执行NMS就得到最终的结果了。

    SVD分解

        在图像分类模型中,FC层的时间花费小于CNNs层,但是在目标检测中,由于RoI的数量很多,因此FC层的计算时间花费超过整个前向传播的一半。如下图:

    图片6.jpg

        FC层的计算可以通过SVD分解来加速。uxv的参数矩阵W可以分解如下:W≈USV_t。其中U是uxt的矩阵,包含W的t个左奇异向量;S是txt对角矩阵,包含W的前t个奇异值,V_t是V的转置矩阵,V是vxt矩阵,包含W的t个右奇异向量。

        SVD分解参数计算由uv减少到t(u+v),当t<min(u,v)时,计算量显著减少。SVD分解在实现上,一个单层的FC被分解为两个FC层,中间无非线性层。第一层的参数矩阵是SV_t,第二层的参数矩阵是U。

     

    实验和结果

    1.实验对比

        使用三个在ImageNet上预训练的模型。CaffeNet(基于R-CNN中的AlexNet),称为S,即small;VGG_CNN_M_2014(Return of the devil in the details: Delving deep into convolutional nets),称为M。M跟S的深度一样,但是更宽。VGG16,称为L。这里所有实验使用单尺度训练和测试。

        下面是FRCN(即Fast R-CNN)与其它先进的目标检测方法的比较,其中NUS_NIN_c2000和BabyLearning是NIN的变体,SegDeepM通过使用马尔可夫随机场加速RCNN:

    图片7.jpg

        由上表可知,Fast RCNN牛逼。

    2.训练和测试时间

    图片8.jpg

        可以看到,基于VGG16的话 Fast RCNN的测试运行速度比RCNN快146倍和213倍。而且可以发现,使用SVD在只降低一点点mAP的情况下,大幅加快网络运行速度。

    3.Fine-tune卷积层

        在SPPNet中,只微调了FC层的参数。这里验证了fine-turn卷积层的重要性,下面是结果:

    图片9.jpg

        但是并不是所有的卷积层都值得微调,第一层就无所谓,微调与否都不影响mAP。对于VGG16来说,只有微调conv3_1(即第9层)后的卷积层才有用。

     

    设计评估

        通过在VOC 2007上的实验评估设计决策。

    1.multi-task训练有用吗?

        Fast RCNN使用了两个损失,即多任务训练。为了测试multi-task training是否提高了目标检测的精度,作者仅用分类损失训练了baseline networks。baseline结果如下图的每组的第一列,第二列是使用了multi-task loss。

    图片10.jpg

        结果显示multi-task training 提高了mAP。

    2.尺度不变:brute force还是finesse?

        实现尺度不变有两种方式:通过brute-force(single scale),图像金字塔(multi-scale)。这两种方式都预定义图像的短边为s。单尺度情况下使用s=600,而且令长边不大于1000。而Pascal图像的平均大小是384x473,因此RoI池化层的stride大概等于10。多尺度中使用的s=[480,576,688,864,1200],截断最长的长边为2000。

        下表显示结果:

    图片11.jpg

        结果显示CNNs擅长直接学习尺度不变,multi-scale方法仅仅有轻微的提高,但是其计算花费要大得多,因此完全可以使用单尺度方法。

    3.训练数据越多越好吗

        一个好的目标检测模型应该随着训练数据的增多而提高精度,但是Zhu et al.发现DPM很容易饱和。Fast RCNN仅使用VOC 2007训练的时候,mAP是66.9%;当使用VOC2007+VOC2012训练的时候,mAP是70.0%,如表格1的最后一行。因此数据越多越好。

    4.SVM比softmax更好吗

        RCNN和SPPNet使用线性SVM,但是这里确使用softmax,对比如下:

    图片12.jpg

        Table 8 shows softmax slightly outperforming SVM for all three networks, by +0.1 to +0.8 mAP points. This effect is small, but it demonstrates that “one-shot” fine-tuning is sufficient compared to previous multi-stage training approaches. We note that softmax, unlike one-vs-rest SVMs,introduces competition between classes when scoring a RoI.

    5.候选区域越多越好吗

        有两种目标检测器,使用稀疏的候选区域(SS算法)和使用稠密的候选区域(DPM算法)。使用SS算法的quality mode,作者设置候选区域数量从1k到10k,每次从新训练和从新测试模型M,结果如下:

    图片13.jpg

     

     

     

     

    总结:Fast RCNN牛逼,RGB牛逼。

    展开全文
  • Fast-Rcnn论文翻译

    2020-01-14 16:33:37
    译文仅供参考! 原文是pdf,想下载的话可以戳:http://www.gwylab.com/pdf/fast-rcnn_chs.pdf...

    译文仅供参考!
    原文是pdf,想下载的话可以戳:http://www.gwylab.com/pdf/fast-rcnn_chs.pdf
    在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

                                    </div>
    
    展开全文
  • Fast-RCNN论文翻译

    2017-11-07 17:32:00
    本文实现了Fast-RCNN主要部分的翻译工作,在SPPnet出来之后,同在微软的R-CNN的作者Ross迅速怼了回去,抛出了更快更好的Fast-RCNN,思路为之一新的是,将之前的多阶段训练合并成了单阶段训练,这次的工作简洁漂亮,...

    http://www.dengfanxin.cn/?p=423

    原文地址

    本文实现了Fast-RCNN主要部分的翻译工作,在SPPnet出来之后,同在微软的R-CNN的作者Ross迅速怼了回去,抛出了更快更好的Fast-RCNN,思路为之一新的是,将之前的多阶段训练合并成了单阶段训练,这次的工作简洁漂亮,相比之前的RCNN,怀疑作者是在挤牙膏。另外,面对灵活尺寸问题,Ross借鉴了空间金字塔的思路,使用了一层空间金字塔。

    Fast R-CNN

    Ross Girshick

    Microsoft Research
    rbg@microsoft.com

    摘要

    本文提出了一个快速的基于区域推荐的卷积网络方法(Fast R-CNN)用于对象检测。Fast R-CNN在前人工作的基础上使用深度卷积网络,可以更有效地分类物体推荐。相比之前的工作,Fast R-CNN进行了多项创新,在提高了检测精度的同时,也提高了训练和测试速度。Fast R-CNN训练了一个超深VGG16网络,训练时间比R-CNN快9倍,测试时间快213倍,在PASCAL VOC2012上达到了更高的mAP。相比SPPnet,Fast R-CNN训练快3倍,测试快10倍,并且更加准确。Fast R-CNN用Python和C++(使用Caffe)实现,以MIT协议开放在:https://github.com/rbgirshick/fast-rcnn
     

    转载于:https://www.cnblogs.com/dengfanxin/p/7800005.html

    展开全文
  • Fast-RCNN论文总结整理

    2019-09-24 12:14:42
    此篇博客写作思路是一边翻译英文原文一边总结博主在阅读过程中遇到的问题及一些思考,因为博主本人阅读英文论文水平不高,所以还请大家在看此篇博客的过程中带着批判的眼神阅读!小墨镜带好,有什么不对的地方请在...

    此篇博客写作思路是一边翻译英文原文一边总结博主在阅读过程中遇到的问题及一些思考,因为博主本人阅读英文论文水平不高,所以还请大家在看此篇博客的过程中带着批判的眼神阅读!小墨镜带好,有什么不对的地方请在留言指出,大家一起讨论,快乐的搞事情!

     

    Fast R-CNN

    Ross Girshick

    Microsoft Research

     

     

    摘要:

    本文提出了一种可用于目标检测的基于区域的快速卷积神经网络方法,Fast-RCNN 是对以前使用深度卷积网络进行目标检测工作的一种有效增强!Fast-RCNN有几处牛逼的创新点,可以在大大减少训练和测试时间的同时增加训练精确度,Fast-RCNN训练非常深VGG16的网络,速度比RCNN快9倍,测试速度更是达到了惊人的213倍,在PASCAL VOC2012上实现了比较高的准确度!和SPPnet做比较,我们的Fast-RCNN训练速度达3倍,测试速度达10倍!简直是伟大的突破!

     

    1 介绍

    最近,深度卷积神经网络在图像分类任务和目标检测任务上的精确度有了重大提高,相比于图像分类任务,目标检测是一个更具有挑战性的任务!更复杂也更难做,因为复杂的原因,当前多级级联的方法十分慢而且不够机智。

    目标检测的复杂性来源于需要精确的确定目标的位置,这就产生了两个极具挑战性的工作,首先,大量的待检测目标需要被处理(后文中统称proposal),其次,待检测目标的位置必须被精确的确定出来,这两个问题的解决常常伴随着速度,精确度或者简化的问题!

    本文,我们精简了当前目标检测所用的卷积神经网络!我们提出了单级训练算法将分类和重新确定位置这两个任务级联了起来。

    总而言之,我们训练了非常深的目标检测网络(VGG16)它比RCNN快9倍,比SPPnet快3倍,在运行时,检测网络处理图像仅仅需要0.3秒你敢信??哦,其实是不算图片生成待检测proposal目标的时间的啊!

    最终我们取得了可喜可贺的成果,在PASCAL VOC2012上大了66%的精确度!比小弟RCNN的62%还精准还快你就说你怕不怕!

     

    1.1R-CNN和SPPnet(常规套路先总结先人不足)

    RCNN利用深度卷积网络实现了激动人心的准确率,当然了,它必须存在一些不足:

    1 训练是一个多级级联过程

    RCNN 微调了ConvNet 在目标检测上使用了log对数损失,然后它使用SVM来分类ConvNet的特征,这样SVM取代了softmax分类器而扮演着目标检测的角色,然后第三级,学习目标所在位置的框框!

    2训练在空间和时间上的花费都是昂贵的

    对SVM和边界框的训练来说,每一个图片的每一个待检测目标框框都需要提取特征并且写入到硬盘里吗,对于非常深得硬盘来说,这波操作是致命的!

    3目标检测太慢了

    就像上面说的,每个图片的每个proposal都要被提取特征,这就是RCNN最为致命的地方!所以其实Fast-RCNN的改进主要就是在这个地方借鉴了SPPnet,然后大大节省了时间

     

    综上,目标检测之所以慢,就是因为卷积网络的前向运算对于每个proposal都会计算一次(一张图片可能会产生1k个proposal你想下多逆天!),没有共享计算啊亲,所以SPPnet(空间金字塔池化网络)提出了一个利用共享计算加速RCNN的方法。它只在整张图上利用卷积神经网络进行特征提取,得到关于整张图的特征图!然后利用proposal在图片的区域,进行一次映射,映射到特征图上然后进行proposal特征向量的生成,再送入后续网络,这样的方法省略了大量的重复提取特征的时间,你说能不节省吗!

    可能会有同学质疑这种映射操作的可行性!我上图证明一下,(图来自其他博主):

    特征图以一种密集的方式表征空间特征!也就是说原图image和特征图确实是相互对应的,用映射的方式来从特征图中选取proposal是可行的!

    原文中说SPPNet在测试阶段加速RCNN从10到100X的提升,在训练阶段叶至少提升了3倍之多

    不过当然了,SPPNet必然也有它的缺点,(不然作者干嘛要写Fast—RCNN呢) ,比如说,它仍然是一个多级训练过程,包括提取特征,用log的损失函数微调,以及训练SVM分类器和bounding-box的回归问题,就是独立训练这几部分,然后组成一个大的网络,而且它的特征也是存储在硬盘上的,大量浪费空间了,和RCNN不同的是,这种空间金字塔池化层因为加入了池化的关系,它不能够很好的更新池化层之前的卷积神经网络的参数了,这样前面的网络得不到生长,准确性必然会受影响!

     1.2贡献部分:

    所以总结一下,Fast-RCNN提出了一种新的训练算法有效的修补了RCNN和SPPnet的不足之处,在速度和准确性上面都有所提高,我们之所以称之为Fast-RCNN是因为它相比较而言不论是训练还是测试都更快速,Fast-

    RCNN有以下几个优点:

    1更高的检测准确率(mAP)

    2训练是单级的或者说单通道的,并且使用了多级任务损失

    3训练可以更新到整个网络!

    4 没有硬盘存储大量特征的需求

     

    接下来的文章自然是主要强调以上四个优点啦!

    2 Fast-RCNN的结构以及训练方法

     

    上图介绍了Fast-RCNN的网络结构,它接收整副图像和一系列的proposal作为输入,网络首先做的就是用一些卷积神经网络以及最大值池化层等对图片进行特征提取,然后对每一个proposal,利用感兴趣区域池化层从特征图

    中提取出一个特征向量,每一个特征向量会被送进后续的全连接层,这个全连接层在末尾会产生两个分支,一个产生softmax来估计K个类别以及背景的概率(K+1个类别的softmax概率),另外一个层对每一个类别输出四个

    实值数据,这四个值会重新确定边界框的位置K,其实这里的四个点就是(x,y,w,h)参考点的位置以及长和宽,这四个参数足够确定一个边界框了!

     

    2.1 The ROI pooling layer

    ROI pooling layer 使用最大值池化转换任意的感兴趣区域的特征图到某个固定的大小HxW(比如说7x7),这里的H和W就是传说中的超参数,其实超参数是很容易理解的,在训练之前你就得固定好它,你选取超参数的方法

    可能就是你不断的在验证集上做实验,挑表现最好的固定下来,再开始训练优化,本文中,ROI是一个矩形窗口,而且每一个Roi都是由上文中所说的四个参数决定的(x,y,w,h),其中(x,y)是定义在左上角的参照点而这个(h,w)是

    对应的矩形框长度和宽度。

    Roi max pooling层之所以能够将任意的proposal转化乘固定的HxW区域,其原理是这样的,比如说proposal是h×w这样的,然后你可以按照h/H的高度,w/W的宽度进行切割,那么得到的自然是固定的H×W的参数结果啦~

    2.2预训练网络的初始化


    本文的作者使用了三个预训练的ImageNet进行实验,每一个都有五个最大池化层和五到十三个的卷积层组成,当这些预训练的网络转化成ImageNet的时候,通常都经历一下三方面的转化:

     1首先,最后一层的池化层被Roi池化层取代,而且Roi池化的参数固定为H×W,目的就是为了和后续的全连接层进行匹配

     2 网络最后的全连接层和softmax层(原网络训练的是1000类的分类)被替代为两个不同的全连接网络,一个是能够对K+1个种类进行分类的softmax的全连接层,另外是种类对应的边界框(bounding-box)的回归网络

     3最后,网络被修改为接收两个输入,分别是整副图像和图像对应的全部的proposal

    2.3网络微调

    对于Fast-RCNN来说,对整个网络的权重参数进行反向传播训练是Fast-RCNN网络独有的能力!SPPnet网络就不能够更新金字塔池化层前面的卷积网络的参数哦!

    为啥呢?为啥SPPnet金字塔池化层之前的网络参数就不能够有效的更新?原文中说了因为反向传播走到金字塔池化层的时候层的效率非常的低当proposal来自于不同的图片的时候,PS:好像在我的感觉里池化这种操作

    确实不是很容易能够用函数式进行表示,就算表示出来了,那也肯定不是连续函数吧,也会很难求导,但这都不是主要的,主要原因是来自于不同的图片的proposal就会让反向求导操作的效率十分低下!

    因为每一个Roi都有可能从图像的不同地方获取,这样它就对应着一个十分大的接收场(我把它理解为定义域),甚至有可能是来自于整副图像,所以前向传输计算过程中,必须要处理整副图像,这个训练输入是十分大的!

          那作者是怎么解决这个问题的呢? 作者充分利用训练过程中的特征图共享的有点,在Fast-RCNN的训练过程中,SGD的mini-batch是分层次的采样,假设一共寻要R个proposal,那么我们首先采样N张图片,然后再

    每张图片采样R/N个proposal,然后让来自于同一张图片的的proposal共享计算和内存在前向和后向传播过程中!作者举了个例子,当使用N=2,R=128的时候,利用这种方法训练速度是采样来自128张不同图片的Roi的速度

    的128倍!,真的是快的一逼啊!

       但是这样也可能会有一些小问题,比如说,来自于同一张图片的Roi可能具有很大的相关性,会严重托慢训练速度,但是这个问题在作者的训练过程中没有造成什么严重的后果,然后作者使用更少的SGD迭代次数也

    得到了比RCNN更好的训练结果。

      除了分层采样之外,作者还有一个小trick,那就是将网络全连接层后面的两个网络进行了联合优化,也就是将sotfmax分类器和边界框回归网络进行联合优化,而不是分开来softmax Classficaiton ,SVM,边界框回归器

    一个个的挨个优化!

    多任务损失

    一个Fast-RCNN的网络有两个不同的输出层,一个输出离散概率分布,Ρ=(p0,......pk),overK+1个类别,和其他的网络类似,也是通过softmax来计算k+1个输出种类的概率,第二个输出的是边界框的回归偏置Tk=(tx,ty,tw,th),对

    k个种类中的每一个类别都是如此,而且tk指定了空间尺度不变性的转换和对数空间的宽高的平移,对每一个proposal都是如此

      每一个用于训练的Roi都有一个真实的类标记u和一个确切可靠的边界回归框v,我们使用多任务损失L来对分类和边界框进行联合优化训练:

        

     

    在这个公式中 :代表的是真实类别的对数损失,很可靠,如果pu越小,那么logpu就会越趋向于负无穷,添加负号之后,就对应的越大!概率越小,惩罚越大,是损失函数的常规套路,

    至于回归任务的损失函数就比较麻烦,介绍之前先说一个超参数λ,这个是训练之前指定的,表明分类和回归的重要性程度,本文中都是设置为1,损失函数肯定是有目标target和预测它们分别是:

     边界框通过神经网络算出的参数:

    人为标定的真实边界框的参数:  

    这样,边界框的的损失函数可以定义为:

    而这个smoothL1函数的定义如下:  

    这样这个多级任务损失函数就定义完了,我知道你们肯定想看图像,我用wolframAlpha画出来了,好像其实和2次函数的图像没什么区别嘛,大家可以仔细考虑一下作者这样定义的意图。

    作者说这样是一个稳健的L1损失,相对于L2损失而言它对离群的值并不敏感在RCNN和SPPnet中,因为回归训练是没有边界的,所以你必须要小心的设置学习率避免梯度爆炸,哈哈哈哈

     

    Mini-batch sampling

    在微调过程中,作者将mini-batch中N的大小设置为2,也就是一个小批量数据采样选择两幅图像,选择均匀随机分布,然后设置mini-batch自身的大小是128,每幅图像采样64个Roi。然后作者从那些和真实边界框标记重叠

    至少0.5的Roi中选择了25%,然后给这些Roi一个前景标记,也就是训练过程中的正例,此时u肯定是大于等于1的,剩下那些和真实边界框重叠率在[0.1,0.5)的,我们将它的标记设置为背景,此时u=0(因为不需要进行标定)

    在训练过程中图像被反转的概率是0.5,没有其他的数据进行填充(这一段标记了正例反例,而且加入了图像反转增加网络的鲁棒性,是在训练网络对目标的辨识程度,这个地方和前面的损失函数部分好像让人不知所云??)

     

    Back-propagation through Roi pooling layers

    在Roi池化层的反向传播的计算,在解释说明反向传播的过程中,作者仅仅将N设置为1,也就是只取一个图片,但是作者说这样仅仅是方便说明,而且实际上N为几对这个解释都没影响,因为都很直觉。

    在说明过程中,用Xi表示Roi池化层第i个激活输入,然后让Yrj表示第r个Roi区域的第j个输出,,然后Roi的池化层的计算公式是:y_{rj}=x_{i*(r,j)}​​​​​​​,然后这个 i*(r,j)=\arg max_{{i}'\in R(r,j)}​​​​​​​,R(r,j)其实就是输入划分的子窗口

    好像这样说明读者读了肯定是一头雾水??拜托你这都写了些什么呢,我用我自己的理解给大家解释下

     

    xi可能就是输入到Roi池化层的输入,这个没问题,没什么疑问,然后这个后面的一大串其实就是在解释最后输出的yi,一定是对应本子区域里面的最大的一个!举个例子:

    就是这个池化过程的公式表示!看完大家应该可以对应起来,介绍完了公式部分,说一下如何在这个Roi池化层进行求导:

    这个公式其实我也思索了良久,大家可以这么考虑,反向传播嘛,大家都知道从后往前,也就是说左边对x的偏导是越过了这个池化层的结果,那肯定要往前找对y的偏导和池化层的偏导数,而最难懂的就是这个池化层

    的导数部分,按照公式的直观理解,拿上面的图举例子就是池化后的四个结果3,3,3,2和它对应的来自后面一层的导数加权求和,再对所有的Roi图像求和,就是最终我们要求得的结果!作者这里为什么要说这个Roi池化

    层的求导部分,是因为作者说了这个网络结构是一个单级联的,反向求导可以贯穿整个网络,所以必须在这个地方定义出它的导数求导规则才行!

    SGD hyper-parameters

    随机梯度下降相关的超参数,用于softmax分类和边界回归的参数作者是用零均值,标准差是0.01到0.001的高斯分布进行初始化,偏置初始化为0,每一层的初始权值学习率为1,偏置学习率为2,然后全局的学习率设置为0.01

    ,而且学习率在前30k为0.01,后10k为0.001,,当遇到大的训练数据集的时候,SGD可能会迭代更多次,动量设置为0.9然后衰减参数设置为0.005

    2.4尺度不变性

    作者研究了两个实现尺度不变性的办法:

    1 暴力法强制实现尺度不变性

    2 通过使用图像金字塔实现尺度不变性

    在暴力法实现中,不论是训练还是测试阶段,每一个图像被直接处理成预定义的的像素大小,网络必须从训练数据中直接学习尺度不变性的目标检测,而在多尺度方法中,它通过图像金字塔近似的为网络实现了尺度不变性,

    在测试阶段,图像金字塔用来对每个proposal近似实现缩放标准化,而在多尺度训练阶段,作者随机的从缩放金字塔中采样一幅图像进行训练,这也可以算是一种数据扩充形式,作者本人只在小规模网络下实现了多尺度

    金字塔放缩训练,因为GPU的显存限制。

    3Fast-RCNN的网络检测

    一旦Fast-RCNN网络微调完成,那么检测就会比前向计算耗时少很多了,网络接收一张图像或者图像金字塔(图像金字塔会把一系列的图片进行编码)和R个感兴趣的proposal作为输入,从而进行打分,对每一个用于测试的ROi

    前向传输会输出该类别的先验概率分布和边界框的回归参数,而且作者通过估计概率给每一个类别k设置了检测置信率!

    3.1 Truncated SVD for faster detection(截断奇异值分解)
     可能Truncated翻译成截断有点奇怪,但是考虑下作者这个SVD分解的思想好像确实有那么点截断的意思

    对于整副图像的分类,用在计算全连接层的时间和卷积层相比是很小的,但是,如果对于ROi的数量检测和处理来说,全连接层几乎又占据了整个前向传播接近一半的时间,所以,作者针对比较大的全连接层的网络设计了

    一种加速的办法,那就是截断奇异值分解!

      如果不是很了解奇异值分解的建议阅读奇异值分解的相关资料,这里只介绍作者加速的思想,其实一开始我也弄不懂这个加速到底是怎么做到的,作者说了,利用下述公式:,可以将计算的复杂度

    从从u×v变成t(u+v),可能会有读者和我有一样的疑问,如果将u×v的矩阵分解成u×t,t×t和t×v,那最后乘起来不还是u×v吗?你这样有什么用呢,直到我后来自己动手画了一下:

     

      

    可以看到网络的参数确实是发生了变化,如果此时t的值会远远小于min(u,v)的最小值的话,那么这时候用这种奇异值分解的办法便可以特别好的简化计算过程,节省很多的前向计算的时间!

     

    写到这里作者的主要思想基本上已经都翻译完了,Fast-RCNN的进步之处在于:

    1 取消了每一个proposal都要计算一遍的繁琐过程,直接只计算一次特征图,然后利用映射关系直接在特征图里找proposal的特征向量,这样在避免重复计算的同时,节省了大量的硬盘存储

    特征的时间,是一个从SPPnet得到的灵感的关于RCNN的改进,很棒!

    2作者针对SPPnet的多级联多个网络模块分开训练的方法提出了改进,将这个网络组成一个单级联的网络,利用反向传播可以直接优化到整个网络,所以它在提出最大值proposal池化层的同时,

    给出了网络反向传播经过池化层时候导数的计算方法!

    3作者还借鉴SPPnet的空间金字塔池化模型,这样就不会限定网络的输入结构,不管特征图的大小如何,进入到空间金字塔池化层一样给你弄成固定大小的值,这种方法保证了和后续全连接层的无缝衔接!

    4作者最后在全连接层继续提出优化,使用了SVD奇异值分解的办法,降低了全连接层需要学习的参数的数目,当全连接层网络结构很大的时候,可以大大降低参数数目,节省计算时间!

     

     

    这就是我阅读Fast-RCNN的心得体会,如果有什么不对的地方,希望留言指出来我及时改正!下面我将继续向Faster-RCNN进发啦!谢谢~

     

     

     

     

    转载于:https://www.cnblogs.com/kerwins-AC/p/9651352.html

    展开全文
  • Fast RCNN

    2018-04-17 21:01:02
    论文原文地址为: Fast R-CNN 1. RoI Pooling详解 RoI Pooling其实是SPP pooling的一种特殊情况。SPP pooling可以采用多个金字塔层,RoI只采用一种。具体做法为: 对于映射到feature map上的RoI(Region Proposal通过...
  • 文章目录原文地址论文阅读方法初识(Abstract & Introduction & Conclusion)相知(Body)2. Fast R-CNN architecture and training2.1 The RoI pooling layer2.2 Initializing from pre-trained networks...
  • 论文译文】FastRCNN

    千次阅读 2019-01-24 14:50:56
    译文仅供参考! 原文是pdf,想下载的话可以戳:www.gwylab.com/download.html
  • Fast rcnn和fasterrcnn

    2019-11-24 16:58:55
    此篇博客写作思路是一边翻译英文原文一边总结博主在阅读过程中遇到的问题及一些思考,因为博主本人阅读英文论文水平不高,所以还请大家在看此篇博客的过程中带着批判的眼神阅读!小墨镜带好,有什么不对的地方请在...
  • rcnn/fast_rcnn/faster_rcnn/mask_rcnn深度学习笔记1R_CNNfast_rcnnfaster_rcnnmask...原文链接 fast_rcnn 原文链接 FPN opencv 4.0 代码-mask_rcnn 深度学习笔记1 R_CNN 说明 Ross Girshick 2014年提出的,...
  • Faster RCNN论文笔记

    2019-07-05 21:15:36
    论文原文:https://arxiv.org/abs/1506.01497 参考:https://blog.csdn.net/shenxiaolu1984/article/details/51152614 Abstract 最先进的目标检测网络依靠 region proposal algorithms来假设目标的位置。SPPnet[1...
  • 原文:...rbg大神的深度神经网络检测算法系列RCNNFast-RCNN、Faster-RCNN可谓是理论与实践的经典范例,论文创新点足够,在github上开源的代码更是造福广大码农,本文以当前最新Fast
  • 内部包含R-CNN、FastRCNN、FasterRCNN、SPP、SSD、SegNet、YOLOv1~v3、FCN共十篇目标检测的论文原文
  • Mask RCNN详解

    千次阅读 2018-06-22 00:19:56
    论文原文:Mask R-CNN 1. RoI Align方法 1.1 RoI Pooling局限性分析 在常见的两级检测框架(比如Fast-RCNN,Faster-RCNN,RFCN)中,ROI Pooling 的作用是根据预选框的位置坐标在特征图中将相应区域池化为固定...
  • 原文地址:http://blog.csdn.net/shenxiaolu1984/article/details/51066975 R-CNN: GitHub:...Fast R-CNN: 论文:https://arxiv.org/abs/1504.08083 GitHub:https://github.com/rbgi
  • 原文:http://zhangliliang.com/2015/05/17/paper-note-fast-rcnn/】 论文出处见:http://arxiv.org/abs/1504.08083 项目见:https://github.com/rbgirshick/fast-rcnn R-CNN的进化版,0.3s一张图片,VOC...
  • 经过R-CNN和Fast RCNN的积淀,Ross B. Girshick在2016年提出了新的Faster RCNN,在结构上,Faster RCNN已经将特征抽取feature extraction、 proposal,bounding box regression(rect refine)和classificati...
  • 该文是目标检测领域的里程碑论文,是fast-rcnn、faster-rcnn等系列的基础。它首次用深度学习CNN的方式进行目标检测的尝试。取得了性能、准确度均大幅高于传统提取特征方式的结果。 一.算法模块 1.Region Proposals...
  • 目标检测论文整理

    2019-04-12 14:35:00
    原文:https://www.cnblogs.com/yhyue/p/9247962.html,...RCNNOverfeatMR-CNNSPPNetFast RCNNA Fast RCNNFaster RCNNFPNR-FCNMask RCNNYOLOYOLO 9000YOLO v3SSDDSSDR-SSDRetinaNet(focal loss)DSODCascade R-CNN...
  • 原文:...今天连看了Fast RCNN和这一篇,一开始以为这篇会是Fast RCNN的加强版。看了之后发现不是,这篇提出的框架更像是SPP-Net的加强版,因为这篇并没有实现joint
  • 原文:http://zhangliliang.com/2015/05/17/paper-note-fast-rcnn/】 论文出处见:http://arxiv.org/abs/1504.08083 项目见:https://github.com/rbgirshick/fast-rcnn R-CNN的进化版,0.3s一张图片,VOC07有...
  • 原文:http://zhangliliang.com/2015/05/17/paper-note-fast-rcnn/】 论文出处见:http://arxiv.org/abs/1504.08083 项目见:https://github.com/rbgirshick/fast-rcnn R-CNN的进化版,0.3s一张图片,VOC07有...
  • arxiv上的一篇新论文,出自MSRA,目前还没有发表,今天刚读完,文章的缺点还要想一想,有空...同时通过本篇论文,很好的将RCNNfast rcnn进行了一个general的总结。本文目前是Pascal voc上面速度和performance结...
  • arxiv上的一篇新论文,出自MSRA,目前还没有发表,今天刚读完,文章的缺点还要想一想,有空更新。...同时通过本篇论文,很好的将RCNNfast rcnn进行了一个general的总结。本文目前是Pascal voc上面速度和perfor
  • arxiv上的一篇新论文,出自MSRA,目前还没有发表,今天刚读完,文章的缺点还要想一想,有空更新。...同时通过本篇论文,很好的将RCNNfast rcnn进行了一个general的总结。本文目前是Pascal voc上面速度和pe
  • 原文地址 我对深度学习应用于物体检测的开山之作R-CNN的论文进行了主要部分的翻译工作,R-CNN通过...未来我将继续翻译SPPNet、fast-RCNN、faster-RCNN、mask-RCNN等一系列物体定位和语义分割领域的重要论文,主要...
  • 原文地址:https://zhuanlan.zhihu.com/p/27467369前几天tensorflow开源了诸多目标检测模型,包括Faster RCNN、SSD等,恰巧自己的论文用的也是目标检测网络,是时间把以前刷过的检测网络祭出来了。自己看过的主要...
  • 选择性搜索(SS)算法

    千次阅读 2020-01-14 17:01:53
    原文链接:...Selective Search(选择性搜索)基于Graph-Based图像分割,是RCNNFast RCNN的区域推荐算法。SS算法由IJCV 2012的论文<Selective Search for Object Recognit...

空空如也

空空如也

1 2
收藏数 35
精华内容 14
关键字:

fastrcnn论文原文