R-CNN
算法流程:
- 输入图像
- 每张图像生成1k - 2k个候选区域。
- 对每个候选区域,使用深度网络CNN提取特征。(AlexNet、vgg、resnet等CNN)
- 4-1.将特征送入每一类的SVM分类器,判别是非属于该类。
4-2.使用回归器精细修正候选框位置。
生成候选区域
使用selective search(选择性搜索)方法对每一张图生成1k - 2k的区域。
5. 分割区域 使用一种过分割手段,将图像分割成小区域。
6. 合并区域 将小区域合并可能性最高的两个区域,重复直到整张图合并成一个区域位置。
7. 优先合并区域:
- 颜色相近的(颜色直方图)
- 纹理相近的(梯度直方图)
- 合并后总面积小的
- 合并后总面积在其BBox中所占比例大的
8. 输出所有曾经存在过的区域,及候选区域
特征提取
提取特征之前,首先把候选区域归一化成同一尺寸。(与全连接层相关)
使用CNN模型进行训练,提取特征。(AlexNet、Vgg、resnet)等。
类别判别
对每一个目标,各自使用一个线性SVM二分类器进行判别。
输入为CNN输出的4096维特征,输出是否属于此类。
位置精修
通过NMS,去除多余候选框。
对每一个类,训练一个线性回归模型去优化候选框位置。
RCNN: 生成候选框(2k)--》 CNN --> 得到每个候选框区域特征 --》 分类+回归
Fast R-CNN
相比R-CNN,解决了以下问题:
- 训练,测试时速度慢。 优化:候选区域优化
- 训练所需空间大 。 优化:R-cnn中分类器和回归器是独立的,需要大量特征进行训练。fast rcnn将分类器和回归器用深度网络实现。
特征提取阶段 *生成候选区域,仍然使用selective search(选择性搜索)
CNN中输入的尺寸大小不固定,会无法直接接到全连接层进行分类。
在Fast RCNN中,通过ROI pooling层(原型SPPnet-空间金字塔池化网络),将不同大小的输入映射到一个固定的尺寸的特征向量。
ROI pooling层将每个候选区域均匀分布成M*N块,对每块进行maxpooling。对每个region(区域)都提取一个固定维度的特征表示,就可以通过正常的softmax进行类别分类。
分类回归阶段
在Fast RCNN中,将bbox regression(bbox 回归)也放进神经网络内部,与区域分类合并成为一个multi-task模型(共享卷积特征)。
Fast RCNN:生成候选区域 --》 一张完整图像 --》CNN --》 得到feature map,通过映射,得到每个候选框的region feature map --》 分类 + 回归
Faster R-CNN
区域生成网络RPN + Fast RCNN
用区域生成网络(RPN)来替代Fast RCNN中的selective search(选择性搜索)方法。 起到了加速作用。
RPN工作步骤 -RPN是全卷积神经网络
- 在feature map上滑动窗口,一个特征点生成9个anchar(3尺寸 * 3比例)
- 建立一个神经网络用于物体分类和proposal 回归
- 滑动窗口的位置通过了物体的大体位置信息(感受野)
- 框的回归提供了框更精确的位置
- 将RPN放到CNN最后一个卷积层的后面,RPN自己训练,得到候选区域。
RPN操作流程:
对整张图输入CNN,得到feature map,使用小型网络在最后的卷积特征图上执行滑动窗口扫描,得到候选框的特征信息,然后映射到低维质量,发送到两个全连接层(bbox分类层-cls 和 bbox回归层-reg)。
reg的作用预测proposal的anchar 对应的proposal的(x,y,w,h)。
cls的作用判断proposal是前景还是背景。
Mask R-CNN
在之前的RCNN中实现了目标的识别和定位,为了更精确的识别目标,提出了在Faster RCNN的基础上添加了一个分支,添加了一个输出物体掩膜(object mask)。
Mask RCNN在Faster RCNN中添加了一个全卷积网络,用于输出二进制mask,以说明给定像素是否是目标的一部分。
为了能在特征图中,选择原图中相对应的像素,将原来的ROI pooling改为ROI Align(双线性插值法),避免错误问题。
对于每个类生成独立的mask。对于每个ROI区域,如果检测到属于哪个分类,就只使用该类的交叉熵误差进行计算。