文章目录
- 目标探测介绍
- 任务
- 思路
- DPM
- RCNN
- 1)候选区域选择
- 2)CNN特征提取
- 3)分类与边界回归
- R-CNN总结
- 优点
- 缺陷
- FAST-RCNN
- FASTER-RCNN
- YOLO
目标探测介绍
任务
分类+获取坐标
目标探测
图片分割
思路
回归问题:利用神经网络进行目标识别,同样目标变为坐标值
该思路问题:在位置尝试识别,能够完成识别的地方就是目标位置
如何找到侯选位置?
假如你想构建一个汽车检测算法,步骤是,首先创建一个标签训练集,也就是x和y表示适当剪切的汽车图片样本,这张图片(编号1)x是一个正样本,因为它是一辆汽车图片,这几张图片(编号2、3)也有汽车,但这两张(编号4、5)没有汽车。出于我们对这个训练集的期望,你一开始可以使用适当剪切的图片,就是整张图片x几乎都被汽车占据,你可以照张照片,然后剪切,剪掉汽车以外的部分,使汽车居于中间位置,并基本占据整张图片。有了这个标签训练集,你就可以开始训练卷积网络了,输入这些适当剪切过的图片(编号6),卷积网络输出y,0或1表示图片中有汽车或没有汽车。训练完这个卷积网络,就可以用它来实现滑动窗口目标检测,具体步骤如下。
假设这是一张测试图片,首先选定一个特定大小的窗口,比如图片下方这个窗口,将这个红色小方块输入卷积神经网络,卷积网络开始进行预测,即判断红色方框内有没有汽车。
滑动窗口目标检测算法接下来会继续处理第二个图像,即红色方框稍向右滑动之后的区域,并输入给卷积网络,因此输入给卷积网络的只有红色方框内的区域,再次运行卷积网络,然后处理第三个图像,依次重复操作,直到这个窗口滑过图像的每一个角落。
为了滑动得更快,我这里选用的步幅比较大,思路是以固定步幅移动窗口,遍历图像的每个区域,把这些剪切后的小图像输入卷积网络,对每个位置按0或1进行分类,这就是所谓的图像滑动窗口操作。
重复上述操作,不过这次我们选择一个更大的窗口,截取更大的区域,并输入给卷积神经网络处理,你可以根据卷积网络对输入大小调整这个区域,然后输入给卷积网络,输出0或1。
再以某个固定步幅滑动窗口,重复以上操作,遍历整个图像,输出结果。
然后第三次重复操作,这次选用更大的窗口。
如果你这样做,不论汽车在图片的什么位置,总有一个窗口可以检测到它。
比如,将这个窗口(编号1)输入卷积网络,希望卷积网络对该输入区域的输出结果为1,说明网络检测到图上有辆车。
这种算法叫作滑动窗口目标检测,因为我们以某个步幅滑动这些方框窗口遍历整张图片,对这些方形区域进行分类,判断里面有没有汽车。
DPM
基本思想: 提取图像特征,制作出激励模版,在原
始图像滑动计算,得到激励效果图,根据激励分布确定
目标位置
- 产生多个模版,整体模版以及不同局部模版
- 不同模版同输入图片“卷积”产生特征图
- 特征图组合形成融合特征
- 对融合特征进行传统分类,回归,得到目标位置
- 优点:
- 方法直观简单
- 运算速度快
- 适应运动物体变形
缺点: - 性能一般
- 激励特征人为设计,工作量大
- 大幅度旋转无法适应,稳定性差
RCNN
神经网络分类思想: 对多个位置,不同尺寸,用卷积神经网络判断区域内图片是不是某物
候选位置(proposal)提出方法:EdgeBox
RCNN(Regions with CNN features)是将CNN方法应用到目标检测问题上的一个里程碑,由年轻有为的RBG大神提出,借助CNN良好的特征提取和分类性能,通过RegionProposal方法实现目标检测问题的转化。
算法可以分为四步:
1)候选区域选择
Region Proposal是一类传统的区域提取方法,可以看作不同宽高的滑动窗口,通过窗口滑动获得潜在的目标图像,关于Proposal大家可以看下SelectiveSearch,一般Candidate选项为2k个即可,这里不再详述;根据Proposal提取的目标图像进行归一化,作为CNN的标准输入。
2)CNN特征提取
标准CNN过程,根据输入进行卷积/池化等操作,得到固定维度的输出;
3)分类与边界回归
实际包含两个子步骤,一是对上一步的输出向量进行分类(需要根据特征训练分类器);二是通过边界回归(bounding-box regression) 得到精确的目标区域,由于实际目标会产生多个子区域,旨在对完成分类的前景目标进行精确的定位与合并,避免多个检出。
R-CNN总结
优点
- CNN用于目标探测,利用了CNN高效识别能力,大大提高性能
- 摆脱人为设计物品模版,方法具有通用性
- 分类+回归,有了找到精确位置的可能
缺陷
- 为了检测一个目标,所有候选区域计算,大量卷积运算,非常慢
- SVM训练与CNN断裂,有效信息不能用于优化模型,not end-to-end。
- 每一类单独训练,异常繁琐
FAST-RCNN