从RCNN到faster-RCNN的理解

RCNN
1. 非极大抑制 :为了使得分最大的选框更加凸显,需要把它附近的(因为很可能框起来的是一个东西),但分数没它高的框去掉!对于那些分数没有达到要求得分的选框去除。

2.正负样本的选择和作用:选择是根据iou指标,如大于0.5则视为正样本,反正负样本作用呢,是为了增加被打上label(背景,车子,草地什么的)的选框,而不仅仅是人工标准选框,又因为CNN相比SVM需要大量数据集去学习参数,所以相比下,iou指标放的很宽。对于同一个选框iou都大于0.5,则都是该类的正样本,没有一个类对应的大于0.5则是负样本

3.bbox回归:将通过非极大抑制的bbox再优化,为了得到更精确的bbox区域

key:网络通过两部分去训练,先训练CNN,在训练SVM,并不是一起训练!!!!
1.训练CNN:拿一个预训练好的alexnet进行fine-tuning,fine-tuning是先训练带有softmax分类(论文中是21类)的CNN,通过IOU选择正负样本,训练好之后将softmax前的feature map(4096维*2000个)存在硬盘中。
2.训练SVM:将保存在硬盘中的feature map(4096维*2000个)取出,进行2000个点的训练,但是IOU的标准不一样,之前训练CNN的正的可能变成负样本了,实际网络中,应将softmax去除,softmax就是为了训练CNN存在的。

SPP-net(金字塔池化)
1.通过对不同尺寸的feature map采用不同的自适应(通过n的不同可以调节很多种尺寸的卷积)的pool方式,来达到得到相同尺寸的全连接层的规格!!!厉害设计窗口大小为(w1,w2分别为窗口的宽和高) 
w1=⌈a/n⌉

w2=⌈b/n⌉
则对应的stride(t1,t2分别水平stride和竖直stride) 

t1=⌊a/n⌋

t2=⌊b/n⌋
2.为什么可以不像RCNN一样要进行2000+次的选框的卷积?充分利用了SPP的性质,使得对整张图片CNN部分卷积完后,再通过对卷积出来的部分,把其中的目标窗口(2000+)拿出来Pooling,得到的结果用作全连接层的输入。 即实现了原功能(进行2000+次的选框的卷积)。因为省去了大部分卷积操作
3.其他操作和RCNN一致


fast-RCNN
1.将bbox regression和分类统一再深度神经网络上,而不需要SVM,从而少了大量的硬盘存储空间,速度自然也上去了。
2.fast-RCNN中的ROI-pooling实际就是单层(即只有一种尺寸)的SPP layer,以得到相同的维数供FC使用;同时定位选框到feature map的映射
3.两层FC之后,分别接一层FC,第一层为softmax分类,第二层为bbox regressor,分别采用SoftMax Loss和Smooth L1 Loss对分类概率和边框回归联合训练(两个loss加权)。

attention:很多个选框的信息还是作为输入进入网络,但不是分别进行卷积,目的是成为之后的bbox回归的数据集
训练:SGD mini_batch分层取样的方法:首先随机取样N张图片,然后每张图片取样R/N个RoIs    如:N=2 and R=128 除了分层取样


faster-RCNN(RPN+fast-RCNN)

  • anchor:实际就是被卷积后的feature map与原图片的多种映射(不同面积不同宽高比)

RPN的作用是代替seletive proposal,更为高效的选区候选框。

1.RPN在前面网络的卷积层之后,接3*3*256*256(论文中的数据)的卷积,实际上每次卷积每stride一次,都对应一个siding window的对应操作,这样每个siding window经过卷积对应一个像素了。实际上接3*3*256*256(论文中的数据)的卷积,相当于一次性把所有的siding window都选出来了,再对每一个像素进行anchor操作(得到不止一张proposal),后续再接1*1*256*18和1*1*256*36(因为论文anchor的值取9),又相当于一次性把所有的anchor全连接给做了,每一个siding window共享3*3卷积,每一个proposal共享1*1卷积参数。

RPN中的3*3的卷积又可以理解为特征的提取,也可以理解为siding window操作!!

训练

  • 正样本选取:和ground truth的IoU值最高的anchor被当作正样本。如果一个anchor和任何一个ground truth的IoU超过0.7,则也当成正样本。
  • 负样本选取:如果一个anchor和所有ground truth的IoU低于0.3,则认为是负样本。

对于既不是正样本,也不是负样本的anchor则直接丢弃。超出边界的anchor也丢弃

loss函数

从RCNN到faster-RCNN的理解_第1张图片

RPN网络和fast-rcnn训练时分开的,RPN训练时分类器只是二分类,fast-rcnn时多分类。

1.用预训练的ImageNet模型,fine-tuning  RPN网络

2.又RPN得到的proposal,fine-tuning  fast-rcnn网络,前面和RPN公共部分任然采用ImageNet模型

3.采用第二步得到的detection network的权重来初始化RPN的共享部分,并保持共享部分的权重不变,在第一步得到的RPN的ROI Pooling Layer及其后的层的权重的基础上fine-tuning RPN

4.采用第三步得到的RPN来负责proposal generation,保持共享部分的权重不变,在第二步detection network的FC层权重的基础上fine-tuning detection network。

(训练这部分需结合详细的网络结构理解)

你可能感兴趣的:(从RCNN到faster-RCNN的理解)