目标检测论文阅读 Fast R-CNN

 目标检测论文阅读笔记

目标检测论文阅读 RCNN Rich feature hierarchies for accurate object detection and semantic segmentation-CSDN博客

目标检测论文阅读 SPPNet Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition-CSDN博客

目标检测论文阅读 Fast R-CNN-CSDN博客

目标检测论文阅读 Faster RCNN-CSDN博客

目标检测论文阅读 Cascade R-CNN: Delving into High Quality Object Detection-CSDN博客

目标检测论文阅读 Mask R-CNN-CSDN博客

目标检测论文阅读 YOLO You Only Look Once:Unified, Real-Time Object Detection-CSDN博客


Fast R-CNN

对于RCNN存在的问题:

训练是一个多阶段的的流程:通过日志记录的损失训练区域建议模块、调整SVM使之适合CNN特性、学习边界框回归因子

      时间空间消耗大:对于SVM和边框回归,每张图像的每个区域建议的特征都要写入磁盘。对于很深的网络如VGG16,训练的时间空间消耗巨大

      检测速度慢:测试时,需要从每张图像的每个区域建议提取特征

SPPnet改进:

RCNN之所以慢,是因为他对每个区域建议进行卷积计算,没有用到共享计算。SPPnet提出的空间金字塔池化网络先对整张输入图像计算卷积特征,然后再用从共享特征图(即整张图像卷积计算得到的特征)中映射得到每个区域建议的特征向量。  区域建议之间一定有很多重复部分,全都直接丢进CNN会有大量重复计算,改成从共享特征图中提取特征避免了重复计算。

但SPPnet仍有缺陷:训练仍然是多阶段的,包括提取特征、用日志损失微调网络、训练支持向量机,最后拟合边界框回归函数。特性也被写入磁盘。但与R-CNN不同,模型微调不能更新空间金字塔池化之前的卷积层,这必会影响深层网络的准确性。

Fast RCNN改进:

训练是单阶段的,使用多任务损失函数

训练可以更新所有网络层

特征缓存不需要磁盘存储

网络结构:

Fast R-CNN网络以整个图像和一组感兴趣区域(ROI)作为输入(图示为一个ROI)。

该网络首先对整个图像进行多层卷积和最大池化处理,生成卷积特征图。

然后,将所有ROI都池化成固定大小的特征映射,然后通过全连接层映射到一个特征向量。

每个特征向量被送入一个全连接(fc)层序列,最终分支为两个兄弟输出层:一个在K个对象类(加背景类)上产生最大概率估计,另一个层为(对于K个类,每个类输出)输出4个实值数,对边界框位置进行编码。该体系结构是端到端的多任务损失训练。

2. Fast R-CNN architecture and training

ROI池化层:ROI(x,y,h,w)通过特征映射转化成特征矩阵后,通过该层最大池化成H × W(超参数可调整,论文中是7*7)的特征矩阵。  不同的ROI有不同的尺寸,但最后需要的都是H*W的输出,因此每个ROI都对应不同的池化。ROI层只是SPPnets中使用的空间金字塔池化层的特殊情况,只有一个金字塔层,该层有7*7个块。

将前面卷积层得到的特征图分为7*7个大小相等或近似的块,每块中取最大或者平均值,这样得到7*7的一个新特征图,这个过程很像池化(只不过每个池化区域大小不固定)因此称为ROI池化层

检测前微调:

      首先解释SPPnet为什么不能更新池化层前的权值:当每个ROI来自不同图像时,SPPnet反向传播的效率很低,因为每个ROI可能有非常大的感受野(通常是整个图像),由于前向传播必须处理整个感受野,因此训练输入很大。反向传播需要用到正向传播过程中的数据,则导致需要存储的数据量巨大,效率很低

      于是fast RCNN采用分层采样的思想,利用训练过程中的特征共享,SGD小批量分层采样,首先对N幅图像进行采样,然后对每幅图像进行R/N个roi采样。

(来自同一图像的roi在向前和向后传递中共享计算和内存。使N变小可以减少小批量计算。例如,当使用N = 2和R = 128时,所提出的训练方案大约比从128个不同的图像中采样一个RoI(即R- cnn和SPPnet采用的策略策略)快64倍。

由于来自同一图像的roi是相关的,它可能会导致训练收敛缓慢。但这似乎不是问题,因为我们使用比R- cnn更少的SGD迭代,获得了良好的结果。)

      此外,论文联合优化softmax分类器和边界盒回归器,而不是单独训练他们

多任务损失函数

Fast rcnn有两个输出层,一个输出K+1类的概率 p = (p0,…, pK),另一个输出边界框回归偏移量。每个训练RoI被标记为一个基础真类u和一个基础真边界框回归目标v

损失函数:

艾弗森括号指示函数[u≥1]当u≥1时为1,否则为0。

λ是用来平衡两个损失的参数,论文中使用λ=1

L1 loss相比于L2 loss的优点在于对较大的x不敏感,可以有效避免训练时梯度爆炸的问题

小批次抽样/分组采样反向传播:

      采取N=2,R=128。即两张图像,一张图像取64个ROI,一共128个感兴趣区域作为一组输入。由于一共只有两张图像,所需保存的参数量尚可承受,反向传播效率还行。

3. Fast R-CNN detection

网络输入图像和R个ROI,R通常为2000左右,ROI经过图像金字塔放缩后,大小接近224*224

      图像分类任务中,用于卷积层计算的时间比用于全连接层计算的时间多,而在目标检测任务中,selective search算法提取的建议框比较多(约2k),几乎有一半的前向计算时间被花费于全连接层,就Fast R-CNN而言,RoI池化层后的全连接层需要进行约2k次(每个建议框都要计算),因此在Fast R-CNN中可以采用SVD分解(一种矩阵分解方式,有时可以提高矩阵计算速度)加速全连接层计算

4. Other

Fast rcnn除了区域推荐之外,其他流程是端到端的,因此磁盘空间消耗少

哪些网络层需要微调?   消融实验:SPPnet论文说明对于浅层神经网络,仅调整全连接层就可以有很好的效果。本论文中测试冻结全部卷积层,只调整全连接层,导致准确率大幅降低,说明通过ROI池化层的训练对于深层网络十分重要。

多任务训练效果:相比于单独训练,改善+0.8到+1.1 mAP点

尺度不变性的实现:尺度金字塔增加大量时间消耗尽换得微小提升,故采用暴力算法(单尺度处理)

SVM是否优于softmax?    Softmax略优于SVM,这表明,与以前的多阶段训练方法相比,“一次性”微调是足够的。原因可能在于Fast R-CNN使用在微调过程中学习到的softmax分类器,而不是像在R-CNN和SPPnet中那样,事后单独训练线性支持向量机。也正因此,使用softmax更加省时。

区域提议越多结果就越好?   并不

尺度不变性

要匹配两张图像是否是同一个图像,比较好的方法就是找出图像中特征显著的内容然后来进行比较,如果这些特征都一致,那么就有很高的概率称他们为同一个图像。所以首先第一步就是找出图像中特征性强的内容。想要比较特征,就要先描述特征。

所谓的旋转不变性和尺度不变性的原理,就是我们在描述一个特征之前,将两张图像都变换到同一个方向和同一个尺度上,然后再在这个统一标准上来描述这个特征。

同样的,如果在描述一个特征之前,将图像变换到同一个仿射尺度或者投影尺度上,那么就可以实现仿射不变性和投影不变性。

特征匹配的方法是先找出特征显著的特征点(Feature Detect),然后再分别描述两个特征点(Feature Descriptor),最后比较两个描述的的相似程度来判断是否为同一个特征(Feature Match)。而在特征描述之前如果能够做到确定特征的方向,则可以实现旋转不变性(Rotation invarient),如果能确定尺度,则可以实现尺度不变性(Scale invarient)。

图像金字塔

尺度空间中,不同尺度下观测窗口的像素尺寸是不同,还有另外一种情况,保持观测窗口大小不变,让图像尺寸发生变化。以人脸检测为例,通常训练结束后,方法中用到的滤波器、卷积核的参数和尺寸就固定了,因此提取到的特征只适用于检测像素大小在某个范围内的人脸.超出这个范围的人脸就检测不出来了。但是,在没有先验知识的情况下,输入图像中人脸的像素大小是未知的,不同输入图像中人脸的像素尺寸也可能不同,怎么办?这是就要用到图像金字塔。

图像金字塔化的一般步骤:首先,图像经过一个低通滤波器进行平滑(这个步骤会使图像变模糊,好像模仿人的视觉中远处的物体没有近处的清晰的原理),然后,对这个平滑后的图像进行抽样/下采样(一般抽样比例在水平和竖直方向上都为1/2),从而得到一系列的缩小的图像。然后分别对得到的图像进行特征提取

图像金字塔是一系列以金字塔形状排列的、自底向上分辨率逐渐降低的图像集合。

端到端(end to end)

端到端指的是输入是原始数据,输出是最后的结果。如fast rcnn输入ROI,输出类别概率、边界框等结果信息。  而RCNN中:CNN接收ROI,输出特征向量;然后SVM接收特征向量,输出各类概率,就不是端到端。RCNN中由于SVM接受的是上一步产生的特征信息,因此这些特征数据需要存储在磁盘中。占用大量磁盘空间。

也就是说,端到端的算法十分节省外存空间。

多任务学习(multi-task learning)的目标是同时学习多个不同但相关的任务

MTL的优点是:

1)多任务模型中的参数数量少于建立多个模型的参数数量

2)训练有素的模型可以同时完成许多任务,应该能够协同工作以揭示通用的基础结构,从而以更少的每任务数据量实现更好的单任务性能(STL)

作者将MTL分类为两个子类别:同质MTL与异质MTL。

在同构MTL中,每个负责人执行相同类型的任务,即分类任务或回归任务

在异构MTL中,每个负责人可以同时或按顺序执行不同类型的任务

多任务损失函数的思考:

多任务损失函数的设计要考虑:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值