一、R-CNN
1.1 架构图
1.2 流程
- 图片输入,通过Selective Search算法获取region proposal(生成约2000-3000个候选区域)。
- 由于全连接层的原因,把region proposal调整成固定大小。
- 然后把这些区域分别输入到CNN中,得到区域的feature。
- 再在feature上加上分类器,判断feature对应的区域是属于具体某类object还是背景。
1.3 不足
- 存在着重复计算的问题:proposal的region有几千个,多数都是互相重叠,重叠部分会被多次重复提取feature,是导致时间效率不高的最重要的原因。
- 过程复杂:multi-stage pipeline,训练分为多个阶段;步骤繁琐,region proposal、CNN特征提取、SVM分类、边框回归。
- 训练耗时,占用磁盘空间大:卷积出来的特征数据还需要单独保存。
二、SPP-Net
2.1 引言
R-CNN在当时取得了很大的成果,但是他还是有一些问题,最突出的就是效率问题,SPP-Net主要就是解决R-CNN的几个问题:
- 对于每张图片的每个proposal跑一边CNN,SVM分类器,做了很多冗余的操作。
- proposal在送进网络之前都要进行拉伸(warp),这样会影响图片的质量以及内容,同时也比较费时费力。
2.2 架构
2.3 流程
- 首先通过Selective Search算法搜索,对待检测的图片进行搜索出2000个候选窗口(这一步和R-CNN一样)。
- 特征提取阶段。区别!! 这一步骤的具体操作如下:把整张待检测的图片,输入CNN中,进行一次性特征提取,得到特征图,然后在特征图中找到各个候选框的区域,再对各个候选框采用空间金字塔池化,提取出固定长度的特征向量。而R-CNN输入的是每个候选框,然后在进入CNN,因为SPP-Net只需要一次对整张图片进行特征提取,速度会大大提升。
- 最后一步,采用SVM算法进行特征向量分类识别。
2.4 不足
- 虽然解决了R-CNN许多大量冗余计算的问题,但是还是沿用了R-CNN的训练结构,也训练了SVM分类器, 单独进行BBox regression。总体过程任然复杂。
- SPP-Net 很难通过fine-tuning对SPP-layer之前的网络进行参数微调,效率会很低,原因具体是(Fast-RCNN中的解释): SPP做fine-tuning时输入是多个不同的图片,这样对于每一个图片都要重新产出新的feature map,效率很低,而Fast-RCNN对其进行了改进。
三、Fast R-CNN
3.1 概述
Fast-RCNN在RCNN的基础上又做了一些改进:
- 与SPP类似,它只对整幅图像做一次CNN特征提取,在后面加了一个类似于SPP的ROI pooling layer(可以看做单层sppnet的网络层),其实就是下采样。不过因为不是固定尺寸输入,因此每次的pooling网格大小需要动态调整,从而实现区域归一化。
- 用softmax替代SVM分类,同时利用Multi-task Loss(多任务损失函数)将边框回归和分类一起进行。
3.2 总体框架
3.3 重要流程
- 特征提取:以整张图片为输入利用CNN得到图片的特征层;
- region proposal:通过Selective Search等方法从原始图片提取区域候选框,并把这些候选框一一投影到最后的特征层;
- 区域归一化:针对特征层上的每个区域候选框进行RoI Pooling操作,得到固定大小的特征表示; ROI pooling可以 speed up both train and test time
- 分类与回归:然后再通过两个全连接层,分别用softmax做多目标分类,用回归模型进行边框位置与大小微调。
四、Faster R-CNN
4.1 概述
Fast R-CNN存在的问题:
- 存在瓶颈:使用Selective Search,找出候选框,这个非常耗时。
4.2 总体框架
4.3 流程
- 特征提取:同Fast R-CNN;
- region proposal:在最终的卷积特征层上利用k个不同的矩形框(Anchor Box)进行region proposal;即对每个Anchor Box对应的区域进行object/non-object二分类,并用k个回归模型(各自对应不同的Anchor Box)微调候选框位置与大小 ;
- 区域归一化:同fast R-CNN;RoI pooling层;
- 分类与回归:进行目标分类,并做边框回归。