R-CNN
R-CNN的结构图:
R-CNN的基本步骤:
-
输入图像,使用Selective Search提取大约2000个候选区域。
-
将候选区域调整成固定大小分。
-
将固定大小的候选区域输入神经网络。
-
将CNN的输出输入SVM中进行类别判定和边框回归。
详细步骤:
- 预训练模型。选择一个预训练神经网络(如AlexNet、VGG)。
- 重新训练全连接层。使用需要检测的目标重新训练最后全连接层。
- 提取proposals并计算CNN 特征。利用选择性搜索(Selective Search)算法提取所有proposals(大约2000幅images),调整(resize/warp)它们成固定大小,以满足CNN输入要求(因为全连接层的限制),然后将feature map 保存到本地磁盘。
- 训练SVM。利用feature map 训练SVM来对目标和背景进行分类(每个类一个二进制SVM)。
- 边界框回归(Bounding boxes Regression)。训练将输出一些校正因子的线性回归分类器。
R-CNN的缺点:
- 训练步骤繁琐(微调神经网络+训练SVM+训练bbox)。
- 计算量大,对每个区域都要计算feather。
- 训练、测试均速度慢。
- 训练占空间。
Fast R-CNN
Fast R-CNN的创新点:
- 只对整幅图像进行一次特征提取,避免R-CNN中的冗余特征提取。
- 用RoI pooling层替换最后一层的max pooling层,同时引入建议框数据,提取相应建议框特征。
- Fast R-CNN网络末尾采用并行的不同的全连接层,可同时输出分类结果和窗口回归结果,实现了end-to-end的多任务训练【建议框提取除外】,也不需要额外的特征存储空间【R-CNN中的特征需要保持到本地,来供SVM和Bounding-box regression进行训练】。
- 用SVD对Fast R-CNN网络末尾并行的全连接层进行分解,减少计算复杂度,加快检测速度。
Fast R-CNN的结构图:
Fast R-CNN的系统流程图:
Fast R-CNN基本步骤:
- 首先将图片输入到Deep ConvNet(卷积)获得Conv fecture map(特征图),同时在原图中使用selective search生成RoI/region proposals(提取的候选框)
- 根据原图中候选框到特征图映射关系,在特征图中找到每个建议框对应的特征框(深度和特征图一致),使用RoI池化层将不同大小的RoI转换为固定大小。
- 固定大小的特征框经过全连接层得到固定大小的特征向量。
- 所得特征向量经由各自的全连接层(由SVD分解实现),分别得到两个输出向量:一个是softmax的分类得分,一个是Bounding-box窗口回归。
Fast R-CNN的一个重要特点是,整个网络(特征提取器、分类器和边界盒回归器)可以在多任务损失(分类损失和定位损失)的情况下进行端到端的训练。这提高了准确性。
SPP
SPP:Spatial Pyramid Pooling(空间金字塔池化)
空间金字塔池化可以将任意尺度的图像卷积特征转化为相同维度,这不仅可以让CNN处理任意尺度的图像,还能避免cropping和warping操作,导致一些信息的丢失。一般的卷积神经网络都需要固定输入图像大小,这是因为全连接层的输入需要固定输入维度,但在卷积操作时并没有对图像大小有限制,所以作者提出了空间金字塔池化方法,先让图像进行卷积操作,然后使用SPP方法转化成维度相同的特征,最后输入到全连接层。
RoI Pooling
RoI就是使用Select Search获取到的候选框,RoI Pooling参考了SPP的想法。
因为Fast R-CNN 使用了全连接层,最后输入的特征图大小必须固定,RoI Pooling的作用就是将尺寸不同的特征图变成尺寸固定的。
具体操作:
- 根据输入image,将ROI映射到feature map对应位置
注:映射规则比较简单,就是把各个坐标除以“输入图片与feature map的大小的比值”,得到了feature map上的box坐标 - 将映射后的区域划分为相同大小的sections(sections数量与输出的维度相同)
- 对每个sections进行max pooling操作
Fast R-CNN的缺点:
- FastR-CNN依赖于外部区域的建议方法,如选择性搜索。
- 使用RoI Pooling出现The Misalignment Problem 精度丢失问题。