目标检测方法演进过程
最初的传统方法
最初的方法中基本的流程如下:
输入一张图片
人工选择特征区域,得到特征向量
-
通过传统的机器学习分类器对特征向量进行分类(如神经网络、SVM、随机森林、决策树等)
发展至今的深度学习方法
整体的发展可以看出,节省了人工筛选特征的过程,现在的思路是直接输入一张图片,通过CNN得到目标的类别与位置。
深度学习目标检测方法发展史
RCNN(2014)
论文地址:https://arxiv.org/abs/1311.2524
算法流程:
输入一张图片
通过selective search的方法提取出候选区域region proposal,大约2K张子图
依次将每张候选区域的子图缩放到统一的尺寸,再送入CNN中进行特征提取,得到特征向量
通过SVM对特征向量进行分类 + NMS + bbox回归的方式得到最终结果
说明:
selective search的方法原理:根据图像直方图分布相似的相邻区域进行合并,得到一个候选区域,依次统计出整张图所有区域,得到最终的所有候选区域,约2K
这里的bbox回归的目标是(dx, dy, dw, dh),且坐标需要进行归一化
存在的问题:
需要对所有的候选区域进行CNN的特征提取,效率非常慢
SVM和回归器属于后处理,也就是说CNN阶段和后面的SVM和回归器是独立的
训练过程分多阶段,训练复杂
Fast R-CNN(2015)
论文地址:https://arxiv.org/pdf/1504.08083.pdf
算法流程:
输入一整张图片进入模型
通过CNN对整张图片进行特征提取,得到特征图feature map
根据ROI projection提取出各个候选区域的特征图
将特征图通过ROI pooling统一到固定的尺寸(7*7)
通过全连接层+softmax和regressor分别进行分类和边框回归
说明:
这里是通过整张图作为模型输入的,不裁剪子图,而是通过selective search的方法得到ROI(感兴趣区域,即候选区域),将其位置信息记录下来
CNN的特征提取使用了VGG的前4个阶段,尺寸会缩小为原图的1/16(完整的VGG有5个阶段的降采样)
ROI pooling的方法是:首先将原图中各个ROI的位置坐标缩小16倍,取整后得到在特征图上的映射区域,将该区域作为该ROI的特征图,然后将特征图分为7*7的小区域(第二次取整操作),每个小区域通过max pooling 的方式,最终所有的特征图都变为了7X7的尺寸,即可进入后面的FC。
多任务结合的损失函数: 多分类的CE损失+基于offset的位置回归损失(smooth L1)
问题:
- ROI中包括两步的取整操作,会带来较大的位置偏差,导致定位不准
相比于RCNN的改进:
使用整张图片作为模型的输入进行特征提取
通过ROIprojection的方式得到各个ROI的特征图
ROI pooling的方式对特征图进行尺寸的统一
全部使用CNN来解决分类和边框回归的问题,不再使用SVM和线性回归器