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。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIwczLcVmds92czlGZvwVP9EUTDZ0aRJkSwk0LcxGbpZ2LcBDM08CXlpXazRnbvZ2LcRlMMVDT2EWNvwFdu9mZvwVP9EVZv50MYVDdyMmZWdFZzpkMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2LcRHelR3LcJzLctmch1mclRXY39jN5gzM0YzM5EDNxYDM4EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
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和之后的层。
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)得到每张候选框的特征 --> 分类+回归
Faster RCNN:
详讲解见点击打开链接
1.增加了一个提取Region Proposals的网络 -- RPN:
原图经过conv后的feature map每一窗口对应原图中的9种区域(即9种anchors),实现了Region Proposals的提取。
一张完整的照片 --> CNN (得到特征)-->( 在feature map上滑动窗口 --> 建立一个神经网络用于物体分类+位置回归 --> 滑动窗口的位置提供了物体的大体位置信息,位置回归提供了框的精确位置。)RPN层得到region proposals的特征信息 --> 分类+回归
anchors:
结构图:
参考链接:点击打开链接