R-cnn家族论文

《Rich feature hierarchies for accurate object detection and semantic segmentation》阅读笔记

0.基础知识

卷积feature计算
W:表示当前层Feature map的大小。
K:表示kernel的大小。
S:表示Stride的大小。
下一层Feature map的大小 =(W−K)/S+1

1.introduction

R-CNN(region with CNN features),即region proposals(候选区域) + CNN,解决两个问题:
1.网络定位物体难,解决方法:通过操作”recognition using regions”,解决了CNN的定位问题。测试时,对这每张图片,产生了接近2000个与类别无关的region proposal,对每个CNN抽取了一个固定长度的特征向量,然后借助专门针对特定类别数据的线性SVM对每个区域进行分类。
2.标签数据太少,解决方法:第二个核心贡献是在辅助数据集(ILSVRC)上进行有监督预训练,再在小数据集上针对特定问题进行调优
R-cnn家族论文_第1张图片
如上图所示,R-CNN这个物体检查系统可以大致分为四步进行:
1.获取输入图像
2.提取约2000个候选区域
3.将候选区域分别输入CNN网络(这里需要将候选图片进行缩放)
4.将CNN的输出输入SVM中进行类别的判定

2.三个模块

第一个,产生类别无关的region proposal。这些推荐定义了一个候选检测区域的集合;
第二个是一个大型卷积神经网络,用于从每个区域抽取特定大小的特征向量;
第三个是一个指定类别的线性SVM。

2.1候选区域的提取

这部分有很多传统的方法objectness(物体性),selective search(选择性搜索),category-independent object proposals(类别无关物体推荐),constrained parametric min-cuts(受限参最小剪切, CPMC),multi-scal combinatorial grouping(多尺度联合分组)可以选择,rcnn为了和之前的物体检测算法进行对比,选择了selective search方法

输入:一张图片
输出:候选的目标位置集合

算法:
利用切分方法得到候选的区域集合R = {r1,r2,…,rn}
初始化相似集合S = ϕ
foreach 遍历邻居区域对 (ri,rj) do
    计算相似度s(ri,rj)
    S = S  ∪ s(ri,rj)
while S not=ϕ do
    从s中得到最大的相似度s(ri,rj)=max(S)
    合并对应的区域rt = ri ∪ rj
    移除ri对应的所有相似度:S = S\s(ri,r*)
    移除rj对应的所有相似度:S = S\s(r*,rj)
    计算rt对应的相似度集合St
    S = S ∪ St
    R = R ∪ rt
L = R中所有区域对应的边框

首先通过基于图的图像分割方法初始化原始区域,就是将图像分割成很多很多的小块,使用贪心策略,计算每两个相邻区域的相似度,然后每次合并最相似的两块,直至最终只剩下一块完整的图片。这其中每次产生的图像块包括合并的图像块我们都保存下来,这样就得到图像的分成表示.
选择性搜索采用三种多样性策略:
多种颜色空间,考虑RGB、灰度、HSV及其变种
多种相似度度量标准,既考虑颜色相似度,又考虑纹理、大小、重叠情况等
通过改变阈值初始化原始区域,阈值越大,分割的区域越少
1、颜色空间转换
通过色彩空间转换,将原始色彩空间转换到多达八种色彩空间。也是为了考虑场景以及光照条件等,主要应用于图像分割算法中原始区域的生成(两个像素点的相似度计算时,计算不同颜色空间下的两点距离)。主要使用的颜色空间有:(1)RGB,(2)灰度I,(3)Lab,(4)rgI(归一化的rg通道加上灰度),(5)HSV,(6)rgb(归一化的RGB),(7)C,(8)H(HSV通道的H)

2、区域相似度计算
我们在计算多种相似度的时候,都是把单一相似度的值归一化到[0, 1]之间,1表示两个区域之间相似度最大

颜色相似度
纹理相似度
有限合并小的区域
区域的合适度距离
合并上面四种相似度
R-cnn家族论文_第2张图片

2.2 特征提取

2.2.1缩放处理

们通过上述的生成候选区域算法得到了2000个左右的候选框,然后我们想要通过CNN获取其中的特征,架构中的CNN只能接受固定大小:227*227,而我们获取的图片大小却不是固定的,这就需要我们对图片进行缩放处理。
1.各项异性缩放
R-cnn家族论文_第3张图片
2.各项同性缩放
因为图片扭曲后,估计会对后续CNN的训练精度有影响,于是作者也测试了“各向同性缩放”方案,这也分两种:
A. 先扩充后后裁剪:在原图上将bounding box扩充到所需要的尺寸,然后在输入到CNN中
R-cnn家族论文_第4张图片
B.先裁剪后扩充:先把bounding box图片裁剪处理,然后再使用bounding box中的颜色均值进行填充
R-cnn家族论文_第5张图片

2.2.2CNN提取特征

使用的是Alexnet提取,网络总共的层数为8层,5层卷积,3层全连接层。而通过 Selective Search 产生的候选区域大小不一,为了与 Alexnet 兼容,R-CNN 采用了在候选框周围加上16的padding,再进行各向异性缩放,统一变换到 227*227 的尺寸。通过五个卷积层和两个全连接层进行前向传播,最终得到一个4096维度的特征向量。其中最后一层是softmax层,为1000个类别的输出,现在自己训练数据,修改了原来的1000为类别输出,改为21维(20类+背景)输出,而且用svm去替换softmax,因此CNN提取出的图片具体特征含在了倒数第二层里,也就是全连接层fc1。
R-cnn家族论文_第6张图片

3.用svm来类别判断

20种分类,SVM是二分类器,则有20个SVM,只分是该类和不是该类,获得2000×20维矩阵表示每个建议框是某个物体类别的得分,分别对上述2000×20维矩阵中每一列即每一类,通过计算 IoU 指标,进行非极大值抑制剔除重叠建议框,剔除掉那些重叠位置的区域,得到该列即该类中得分最高的一些建议框。
具体操作:
1.对于2000*20的矩阵,对每一列按从大到小排序,每一列有2000个数,每个数代表对这个候选区域对这一类别的打分数。
2.从第一列最大的得分类别开始,与这它后面的得分的建议框(也就是第一行)进行IOU计算,如果IOU>0.5保留,并剔除第一个候选框中的得分小的建议框。
3.再从第二行开始,也就是第二个候选框,开始按照步骤2进行操作。
直到遍历完所有的候选框。

4.训练

R-CNN 采取迁移学习,提取在 ILSVRC 2012 的模型和权重,然后在 VOC 上进行 fine-tune。这里只训练和分类有关的参数,因为ILSVRC数据只有分类,没有位置标注,所以这里在 ImageNet 上训练的是模型识别物体类型的能力,而不是预测 bbox 位置的能力。ImageNet 的训练当中需要预测 1000 个类别,而 R-CNN 在 VOC 上进行迁移学习时,神经网络只需要识别 21 个类别。R-CNN 将候选区域与 GroundTrue(真实值) 中的 box 标签相比较,如果 IoU > 0.5,说明两个对象重叠的位置比较多,于是就可以认为这个候选区域是 正样本,否则就是负样本。对于重叠的区域(这个框里既有背景也有识别物),则使用IoU重叠阈值来解决这个问题,低于这个阈值的就是负例。这个阈值我们选择了0.3,同上。
一个样本就会产生2000左右个预测框,但是产生的正样本会很少,所以又会使用坤但负样本挖掘hard negative mining method(ssd上说过,就是在训练时,尽量多挖掘些难负例(hard negative)加入负样本集,这样会比easy negative组成的负样本集效果更好。也是用的交并比)。

采用 SGD 训练,初始学习率为 0.001,batch 大小为 128.

5.实验结果

R-cnn家族论文_第7张图片

R-cnn家族论文_第8张图片
那yolov1的图来看,因为那时候比较的都是传统目标识别算法,也不比较速度。(DPM=HOG+SVM),rcnn与传统算法来说map提高了50%以上,但由于在产生bbox和svm的时候特别占用资源,在fps上不占优势。
参考文献:
大话目标检测经典模型(RCNN、Fast RCNN、Faster RCNN)
R-CNN论文详解(论文翻译)
rcnn详解
[深度学习]RCNNs系列(2)RCNN介绍

Fast R-CNN阅读笔记

1.提出rcnn的弊端

1.rcnn是多步策略:rcnn先用卷积网络和逻辑损失做目标检测,然后用卷积特征去训练支持向量机,通过微调来用支持向量机来代替softmax做分类器,在第三个训练阶段来学习检测回归。
2.训练的时间和空间消耗很大,对于svm和检测框的回归会由于磁盘读写时空复杂度很高,尤其是vgg16
3.目标检测很慢,由于rcnn前向传播的时候没有共享计算。
4.spp的缺陷,他的特征提取方法和rcnn一样,但是没有办法进行fine-tuning,因此其限制了深层网络的精度。
因此作者提出了把rcnn和sppnet结合的网络fast rcnn有着如下的优点:
1.map高于R-CNN, SPPnet
2.训练是使用多任务损失的单阶段训练
3.训练的时候可以更换所有层
4.不需要磁盘来缓存特征信息

2.fast rcnn结构

先把所有的图片的整个的投入用卷积和全连接,以产生卷积特征图,之后对于每个roi中的,提取固定长度的特征向量,每个特征向量也会被投入到一系列的的全连接层,最终进入到两个统计输出层:一个通过softmax来输出k个物体类别和1个背景类别,另一个层会输出针对所有k个类各自输出四个分数,这四个数值的含义是每个类的检测框位置的修正。
R-cnn家族论文_第9张图片

2.1roi 池化模块

roi池化层使用最大池化去把所有特征转换成具有的固定感受野的小特征图,roi的属性是左上角坐标+长宽。
之后根据roi的位置和大小来框定feature map,再将它划分为2x2的网格,惊醒pooling
R-cnn家族论文_第10张图片
R-cnn家族论文_第11张图片
R-cnn家族论文_第12张图片

重构预训练网络

预训练的ImageNet网络,每个网络有五个最大池化层和五到十三个卷积层
1.首先最后的最大池化层,被rop池化层代替、
2.最后的全连接层和softmax层被之前那两个同级网络替换
3.网络需要两个类数据的输入:图像的列表和图像中roi的列表
R-cnn家族论文_第13张图片

2.3SPPnet无法更新低于空间金字塔池化层的权重原因

再spp方向传播的时候由于roi的区域过大(通常是把整个图片都反向传播进去了)导致了其十分低效。fast rcnn使用了在训练期间进行特征共享,用sgd小批次分层采样。先通过采样N个图像,然后通过从每个图像采样R/N个 RoIs,来自同一图像的RoI在向前和向后传播中共享计算和存储器。
N = 2和R = 128时,得到的训练方案比从128幅不同的图采样一个RoI快64倍。这样虽然带来了收敛过慢的影响,所以使用更少的sgd。用精细化来化解要整个图相反向传播的缺点
fastrcnn还在微调阶段使用级联分类器和bbox回归,而不是之前的softmax、svm+回归

2.4多任务损失

fastrcnn有两层级联输出网:输出k+1个类的类别概率,通常是靠softmax来算的;第二个网络输出bbox回归,四类xyhw。
每个用来训练的roi都有真实的bbox和类标签信息,fastrcnn使用多任务损失,去联合回归,分两个部分:一个是类的损失,另一个是位置的损失

p : Anchor[i]的预测分类概率;
Anchor[i]是正样本时,p=1 ;Anchor[i]是负样本时,p=0 ;
满足以下条件的Anchor是负样本:
与Gound Truth Box的IOU的重叠区域 <0.3;否则是正样本
R-cnn家族论文_第14张图片
R-cnn家族论文_第15张图片
Smooth L1完美地避开了 L1 和 L2 损失的缺陷,在 x 较小时,对 x 的梯度也会变小; 而在 x 很大时,对 x 的梯度的绝对值达到上限1,不会因预测值的梯度十分大导致训练不稳定。因为比较平滑,所以可以避免梯度爆炸。
λ: 权重平衡参数,在论文中作者设置λ=10,但实际实验显示,结果对的λ变化不敏感,如下表所示:
R-cnn家族论文_第16张图片

2.5小批次采样

在微调阶段一个批次有128个roi,这128所有的sgd的小批量采样都是均匀随机从两个图中来的,只从候选框中找25%为正样本,而且要求iou至少是0.5以上。[0.1, 0.5)的作为负样本,类别标签u=0;[0.5, 1]的作为正样本,u>=1,其余的不要。128个roi中,正样本是32个,负样本是96个。使用水平翻转的方法来进行数据增益
#2.6通过roi池化来反向传播
普通的池化只针对该感受野内的像素进行前向和反向传播,fastrcnn中的用roi池化来代替,由于roi可能会有重叠区块,所以同一个位置会进行多次反向传播。
R-cnn家族论文_第17张图片
R-cnn家族论文_第18张图片

2.7sdg的超参数

用于分类和bbox回归的全连接层是满足均值为零且各标准差为0.01和0.001的,偏置初始化为0。前三万次训练的学习率是0.001,后一万次为0.0001.sds的动量设置为0.9,权重衰减设置为0.0005。
####2.8什么叫微调
使用fine tuning原因:由于数据集不够大,用预训练的网络(例如在ImageNet上训练的分类1000类的网络)来重新fine-tuning,或者当做特征提取器。
两类常见的迁移训练场景
1 卷积网络当做特征提取器。使用在ImageNet上预训练的网络,去掉最后的全连接层,剩余部分当做特征提取器(例如AlexNet在最后分类器前,是4096维的特征向量)。这样提取的特征叫做CNN codes。得到这样的特征后,可以使用线性分类器(Liner SVM、Softmax等)来分类图像。

2 Fine-tuning卷积网络。替换掉网络的输入层(数据),使用新的数据继续训练。Fine-tune时可以选择fine-tune全部层或部分层。通常,前面的层提取的是图像的通用特征(例如边缘检测,色彩检测),这些特征对许多任务都有用。后面的层提取的是与特定类别有关的特征,因此fine-tune时常常只需要Fine-tuning后面的层。
####2.9奇异值分解来减少检测时间
什么叫奇异值分解:简单来说就是把一个矩阵转换成两个方阵和一个矩阵成绩的形式
左奇异矩阵可以用于行数的压缩。

**作用:**右奇异矩阵可以用于列数即特征维度的压缩,也就是我们的PCA降维。



奇异值分解有两种表达形式,一个是之前说的的矩阵乘积一个是,向量乘积的和,σ就是奇异值,奇异值的大的组他代表的信息就多,相反小的所含的信息就少,还可以用删除奇异值小的组的数据来降噪。

分别表示列向量

而在 目标检测任务中,要处理的RoI数量比较多,几乎有一半的前向计算时间被用于全连接层,RoI池化层后的全连接层需要进行约2k次。
物体分类和bbox回归都是通过全连接层实现的,假设全连接层输入数据为X,输出数据为Y,全连接层权值矩阵为W,尺寸为 u × v ,那么该层全连接计算为:Y = W × X
若将W进行SVD分解(奇异值分解),并用前t个特征值近似代替,即:

svd可以节约大量的时间,而仅仅牺牲0.3个map,而且不需要使用微调
R-cnn家族论文_第19张图片

3.实验结果

R-cnn家族论文_第20张图片
接着使用yolo中的比较图,可以发现fast rcnn采用selective search算法提取候选区域,而目标检测大多数时间都消耗在这里。Faster R-CNN框架就解决了这一问题,其可以使用CNN直接产生候选区域并对其分类。
R-cnn家族论文_第21张图片
参考文献:
Fast R-CNN
Fast R-CNN论文详解
奇异值分解(SVD)
奇异值的物理意义是什么?
RCNN学习笔记(2):Fast R-CNN
Fast R-CNN论文解读

0.前沿知识补充

1.end-to-end(端到端):一端输入我的原始图像,一端输出我想得到的结果。只关心输入和输出,中间的步骤全部都不管。yolo这种一步法的
2.非end-to-end:先在图像中提取可能含有目标的候选框(region proposal), 然后将这些候选框输入到CNN模型,让CNN判断候选框中是否真的有目标,以及目标的类别是什么。两步法的:一是目标所在位置及大小,二是目标的类别,类似rcnn

end-to-end 的本质是你要解决的问题是多阶段的或多步的(跟所谓的raw feature没啥关系)。如果分阶段学习的话,第一阶段的最优解不能保证第二阶段的问题达到最优。end-to-end把他们堆在一起来优化,确保最后阶段的解达到最优。

因为之前的rcnn都是比较慢的,何凯明他们就准备使用yolo那种策略来提高fps

1.之前工作的缺陷:

之前的非端到端的模型都是之在卷积提取特征值的时候使用了gpu训练,而在提取bbox。

2. FATSER R-CNN

使用了rp,OverFeat ,fcn(fully convolutional network)

2.1.1使用锚点

faster受用了anchor作为多尺度和纵横比的参考。而不应是pyramids。它避免了枚举多尺度或纵横比的图像或滤波器。该模型在使用单尺度图像进行训练和测试时表现良好,因此有利于运行速度。
R-cnn家族论文_第22张图片
方法是在最后一个共享卷积输出后加一个滑窗,送给reg去做回归,再送给cls去做分类,本文中选择的滑窗的3*3大小。在滑动窗口的每个位置,会预测多个推荐区域,数量记为K(文中为9,文中采用了三种尺度和三种长宽比,因此K为9),之前yolov2说的带有先验框卷积就是借鉴于faster rcnn。她就是基于锚点这个位置上画9个框,这九个框就是proposal region。
reg layer 有 4k 个输出用于表示 k 个矩形框的坐标位置及尺寸大小信息。 cls layer 输出 2k 个概率用于表示每个矩形框包含/不包含物体的概率信息。

R-cnn家族论文_第23张图片

2.1.2Anchors的变换不变性

无视翻转和平移,主要是k=3*3,中的三种纵横比
如果一个物体被翻转了,那么我们的proposal也应该能够翻转并且使用相同的函数可以预测它,这样翻转不变性在我们的anchor中可以得到保障对比之下MultiBox方法使用k均值算法来产生800,并不具备翻转不变性,也就是说在一个objection在翻转后我们的方法在相同的参数下都能准确的预测到它的proposal,这就是那4k的 layer的作用了.

2.1.3多尺度Anchors 作为回归

说的就是faster rcnn无视尺度变化,主要是k=3*3,中的三种尺度
在计算机视觉中的一个挑战就是平移不变性:比如人脸识别任务中,小的人脸(24*24的分辨率)和大的人脸(1080*720)如何在同一个训练好权值的网络中都能正确识别. 传统有两种主流的解决方式:
第一:对图像或feature map层进行尺度\宽高的采样;
第二,对滤波器进行尺度\宽高的采样(或可以认为是滑动窗口).
但作者的解决该问题的具体实现是:通过卷积核中心(用来生成推荐窗口的Anchor)进行尺度、宽高比的采样。如上图右边,文中使用了3 scales and 3 aspect ratios (1:1,1:2,2:1), 就产生了 k = 9 anchors at each sliding position.

2.2尝试使用新的region proposal方法和检测模块

和yolov3一样faster也喜欢各种实验模块:对象提议方法包括基于分组超像素的方法选择性搜索,CPMC,MCG )和基于滑动窗口的方法(窗口中的对象,EdgeBoxes )。采用对象提议方法作为独立于检测器的外部模块(选择性搜索对象检测器,R-CNN 和 Fast R-CNN )。
R-cnn家族论文_第24张图片

2.3RPN

rpn可以将任意大小的图片输入,并获得一系列的Region Proposal,每个预测区域也有相应的分数。由上图所示,需要在卷积之后将feature map给rpn。
以通过反向传播和随机梯度下降(SGD)进行端到端训练。对 60k 小批量使用0.001 的学习率,而对 PASCAL VOC 数据集的下一个 20k小批量使用 0.0001 的学习率。跟fast rcnn差不多
R-cnn家族论文_第25张图片

2.4FCN

FCN将传统CNN中的全连接层转化成一个个的卷积层。所有的层都是卷积层,故称为全卷积网络。
通常cnn网络在卷积之后会接上若干个全连接层,将卷积层产生的特征图(feature map)映射成为一个固定长度的特征向量,最后得到输入图像的分类的概率。
FCN可以接受任意尺寸的输入图像,采用反卷积层对最后一个卷基层的特征图(feature map)进行上采样,使它恢复到输入图像相同的尺寸,从而可以对每一个像素都产生一个预测,同时保留了原始输入图像中的空间信息,最后奇偶在上采样的特征图进行像素的分类。全卷积网络(FCN)是从抽象的特征中恢复出每个像素所属的类别。即从图像级别的分类进一步延伸到像素级别的分类。

2.5 RPN 和 Fast R-CNN 共享卷积

检测网络,照旧采用 Fast R-CNN,因为要端到端,所以要和rpn来共享卷积,而不是学习两个单独的网络。因此提出三种解决方案:

2.5.1交替训练

在此解决方案中,我们首先训练 RPN,并
使用提案来训练 Fast R-CNN。然后,使用由 Fast R-CNN
调谐的网络来初始化 RPN,并且迭代该过程。这是本文所有
实验中使用的解决方案。

2.5.2近似联合训练

在训练期间RPN和Faster rcnn被何在一个网络中训练来自 RPN 损失和 FastR-CNN 损失的反向传播信号被组合到一起,缺点是产生的是近似结果,但是训练世界会大大减少,与交替训练相比,训练时间缩短了约 25-50%。

2.5.3非近似联合训练

要忽略反向传播中,两个模块联合的影响,作者没想明白,没继续讨论

2.5.4四部交替训练

第一步,训练RPN,用预训练的ImageNet模型初始化,端到端微调区域推荐任务。第二步,通过Fast R-CNN训练一个单独的检测网络,从第一步的模型中产生推荐框。这个网络也用ImageNet模型初始化。这时候两个网络不共享卷积层。第三步,使用检测网络初始化RPN训练,固定了共享卷积层,只微调独属于RPN的层。现在两个网络共享卷积层。第四步,使卷积层固定,微调独属于Fast R-CNN的层。这样,两个网络共享了卷基层,形成了一个统一网络
第一步:imagenet初始化,训RPN,得到proposal
第二步:imagenet初始化,用RPN的proposal训Fast-RCNN
第三步:Fast-RCNN初始化共有卷积,训RPN(fix共有卷积)
第四步:fix共有卷积和RPN,训Fast-RCNN
跟个循环似的,但就循环了两次
###2.6实现细节
重新缩放图像,提高了准确率,但是慢下来了,在大stride的情况下也可以获得较高的准确度
正负anchor的比例为1:1。如果正样本数少于128,则用负样本填充。
在锚点,我们使用 3 个尺度,框区域为128、256、512和像素,3 个宽高比为 1:1,1:2 和 2:1。
训练时,会将与边界有交叉的anchors删除,否则会难以收敛。测试时,仅仅将与边界交叉的anchors切到边界即可。
####2.6.1RPN 的消融实验
他测试了没有rnp后是不是也高效,我在 4 步训练过程的第二步后停止,使用单独的网络将结果
略微降低至 58.7%
R-cnn家族论文_第26张图片

2.6.2对超参数的敏感性

如果在每个位置仅使用一个锚点,则 mAP 下降 3-4%。如果使用 3个刻度(具有 1 个纵横比或 3 个纵横比(具有 1 个度),则 mAP 更高,证明使用多个尺寸的锚作为回归参考是有效的解决方案。

2.7损失函数

和fast rcnn差不多,也是分两个部分
训练时,会将与边界有交叉的anchors删除,否则会难以收敛。测试时,仅仅将与边界交叉的anchors切到边界即可。

p : Anchor[i]的预测分类概率;Anchor[i]是正样本时,p*=1 ;Anchor[i]是负样本时,p*=0 ;
满足以下条件的Anchor是正样本:
与Ground Truth Box的IOU(Intersection-Over-Union) 的重叠区域最大的Anchor;与Gound Truth Box的IOU的重叠区域>0.7;
满足以下条件的Anchor是负样本:
与Gound Truth Box的IOU的重叠区域 <0.3;
既不属于正样本又不属于负样本的Anchor不参与训练。

R-cnn家族论文_第27张图片

t: Anchor[i]预测的Bounding Box的参数化坐标(parameterized coordinates);
t* : Anchor[i]的Ground Truth的Bounding Box的参数化坐标;
用的还是Smooth L1 Loss

3.实验结果

R-cnn家族论文_第28张图片

你可能感兴趣的:(论文学习,计算机视觉,机器学习,深度学习)