RCNN系列

目标检测方法演进过程

最初的传统方法

最初的方法中基本的流程如下:

  1. 输入一张图片

  2. 人工选择特征区域,得到特征向量

  3. 通过传统的机器学习分类器对特征向量进行分类(如神经网络、SVM、随机森林、决策树等)


    传统目标检测.jpg

发展至今的深度学习方法

整体的发展可以看出,节省了人工筛选特征的过程,现在的思路是直接输入一张图片,通过CNN得到目标的类别与位置。

深度学习目标检测.jpg

深度学习目标检测方法发展史

RCNN(2014)

论文地址:https://arxiv.org/abs/1311.2524

算法流程:

  1. 输入一张图片

  2. 通过selective search的方法提取出候选区域region proposal,大约2K张子图

  3. 依次将每张候选区域的子图缩放到统一的尺寸,再送入CNN中进行特征提取,得到特征向量

  4. 通过SVM对特征向量进行分类 + NMS + bbox回归的方式得到最终结果

RCNN.jpg

说明:

  1. selective search的方法原理:根据图像直方图分布相似的相邻区域进行合并,得到一个候选区域,依次统计出整张图所有区域,得到最终的所有候选区域,约2K

  2. 这里的bbox回归的目标是(dx, dy, dw, dh),且坐标需要进行归一化

存在的问题:

  1. 需要对所有的候选区域进行CNN的特征提取,效率非常慢

  2. SVM和回归器属于后处理,也就是说CNN阶段和后面的SVM和回归器是独立的

  3. 训练过程分多阶段,训练复杂

Fast R-CNN(2015)

论文地址:https://arxiv.org/pdf/1504.08083.pdf

算法流程:

  1. 输入一整张图片进入模型

  2. 通过CNN对整张图片进行特征提取,得到特征图feature map

  3. 根据ROI projection提取出各个候选区域的特征图

  4. 将特征图通过ROI pooling统一到固定的尺寸(7*7)

  5. 通过全连接层+softmax和regressor分别进行分类和边框回归

Fast R-CNN.jpg

说明:

  1. 这里是通过整张图作为模型输入的,不裁剪子图,而是通过selective search的方法得到ROI(感兴趣区域,即候选区域),将其位置信息记录下来

  2. CNN的特征提取使用了VGG的前4个阶段,尺寸会缩小为原图的1/16(完整的VGG有5个阶段的降采样)

  3. ROI pooling的方法是:首先将原图中各个ROI的位置坐标缩小16倍,取整后得到在特征图上的映射区域,将该区域作为该ROI的特征图,然后将特征图分为7*7的小区域(第二次取整操作),每个小区域通过max pooling 的方式,最终所有的特征图都变为了7X7的尺寸,即可进入后面的FC。

  4. 多任务结合的损失函数: 多分类的CE损失+基于offset的位置回归损失(smooth L1)

问题:

  1. ROI中包括两步的取整操作,会带来较大的位置偏差,导致定位不准

相比于RCNN的改进:

  1. 使用整张图片作为模型的输入进行特征提取

  2. 通过ROIprojection的方式得到各个ROI的特征图

  3. ROI pooling的方式对特征图进行尺寸的统一

  4. 全部使用CNN来解决分类和边框回归的问题,不再使用SVM和线性回归器

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。