天天看点

RCNN-SPP Net-Fast rcnn-Faster rcnn

RCNN:

1.训练或者下载一个预训练好的模型(Vgg16)

2.对此模型进行fine-turning,即将分类数目改为20(自己需要分类的类别数目)+去掉全连接层。

vgg-16网络结构:点击打开链接

3.特征提取,用selective search方法从原图中得到不同大小不同位置的2000个region proposals,将这些region proposals缩放到固定大小(227*227),即对每一个区域,修正区域大小以合适CNN的输入,做一次前向运算,将第五个池化层的输出(就是对region proposals提取到的特征)存到硬盘。

4.训练一个SVM分类器(二分类)来判断这个region proposal里物体的类别(每个类别对应一个SVM,判断是不是属于这个类别,如果是则为positive,否则为negative。

5.使用bounding box对窗口位置进行精修,对每一个类,训练一个线性回归模型去判断这个框是否框的完美。

6.更新参数,使用SGD方法进行backpropagation。

RCNN-SPP Net-Fast rcnn-Faster rcnn

SPP Net:(RCNN的改进参考了SPP Net)

SPP:spatial pyramid pooling(空间金字塔池化)

特点:

1.结合空间金字塔方法实现CNNs对尺度的输入:

一般CNN后后全连接层或者分类器都需要固定的出入尺寸,因此不得不对输入的数据进行crop或者warp,这些处理会造成数据的丢失或者几何失真,对模型的效果产生一定的影响。SPP net在卷积层和全连接层之间加入了SPP layer,在SPP layer中每一个pooling的filter会根据输入调整大小,而SPP的输出尺幅始终是固定的。实现了数据的多尺度输入。

2.只对原图提取一次卷积特征:

在RCNN中,每个proposal先resize到统一大小,然后分别作为CNN的输入,这样是很低效。所以SPP net根据这个缺点做了优化:只对原图进行一次卷积得到整张图的feature map,然后找到每个region proposal在feature map上的映射patch,将此pathc作为每个region proposal的卷积特征输入到SPP layer和之后的层。

RCNN-SPP Net-Fast rcnn-Faster rcnn

Fast R-CNN:

 · 在RCNN的基础上采用了SPP Net的核心思想。

 · RCNN:使用selective search方法提取2000个Region Proposals --> 每一个Region Proposal都进行缩放使其统一尺度 -- > 每一个Region Proposal都经过CNN提取特征。 --> 分类+回归(缺点:对所有region proposals进行特征提取有重复计算+缩放使得细节信息损失,导致精度下降)

 · Fast-RCNN:

1.使用了单层的sppnet,叫做ROI Pooling,可以把不同大小的输入映射到一个固定尺度的特征向量(conv,pooling,relu等操作都不需要固定size的输入,而fc层需要固定size的输入)

2.共享卷积层,输入一张完整的图片,在第5个卷积层再得到每个region proposals的feature map。

一张完整的图片+2000个Region Proposals位置 --> CNN --> (经过SPP Net)得到每张候选框的特征 --> 分类+回归

RCNN-SPP Net-Fast rcnn-Faster rcnn

Faster RCNN:

详讲解见点击打开链接

1.增加了一个提取Region Proposals的网络 -- RPN:

 原图经过conv后的feature map每一窗口对应原图中的9种区域(即9种anchors),实现了Region Proposals的提取。

一张完整的照片 --> CNN (得到特征)-->( 在feature map上滑动窗口 --> 建立一个神经网络用于物体分类+位置回归 --> 滑动窗口的位置提供了物体的大体位置信息,位置回归提供了框的精确位置。)RPN层得到region proposals的特征信息 --> 分类+回归

anchors:

RCNN-SPP Net-Fast rcnn-Faster rcnn

结构图:

RCNN-SPP Net-Fast rcnn-Faster rcnn

参考链接:点击打开链接

继续阅读