目标检测目前有 one-stage 和 two-stage 两种,two-stage 指的是检测算法需要分两步完成,首先需要获取候选区域,然后进行分类,比如R-CNN系列;与之相对的是 one-stage 检测,可以理解为一步到位,不需要单独寻找候选区域,典型的有SSD/YOLO。
一、two-stage 检测
实际上是基于滑动窗口的目标检测。属于暴力方法,从上到下、从左到右,使用滑动窗口,并对窗口内图像进行特征提取,并使用SVM对窗口内物体进行分类,使用回归器预测边界框。
1.R-CNN
实际上,更实用的方法是候选区域(Region Proposals) 方法来获取感兴趣的区域(ROI)。选择性搜索(Selective Search) 就是一种典型的候选区域方法。
具体方法:
- 给定一张输入图片,使用Selective Search方法从图片中提取 2000 个类别独立的候选区域(ROI),并将不同的ROI通过图像伸缩变换为固定大小的图像。
- 对于每个区域利用 CNN 抽取一个固定长度的特征向量。
- 再对每个区域利用 SVM 进行目标分类。
2.Fast R-CNN
动机:R-CNN中提取的ROI大多数是重复的,其次不同的ROI独立地丢进CNN中提取特征,增加时间成本。因此是否可以先对整个图像进行特征提取,在特征图上提取ROI。
Fast R-CNN 使用CNN网络先提取整个图像的特征,而不是对每个图像块提取多次。然后,我们可以将创建候选区域的方法(Selective Search)直接应用到提取到的特征图上。例如,Fast R-CNN 选择了 VGG16 中的卷积层 conv5 来生成 ROI区域在对应的特征图上的映射特征图块,并用于目标检测任务中。
R-CNN直接将ROI区域的图像进行伸缩变换为统一大小的图像,而在特征图上则无法直接这么做,Fast R-CNN则使用 ROI 池化,将特征图块转换为固定的大小,并送到全连接层进行分类和定位。因为 Fast-RCNN 不会重复提取特征,所以它能显著地减少处理时间。
3.Faster R-CNN
Fast R-CNN 依赖于外部候选区域方法,如选择性搜索。但这些算法在 CPU 上运行且速度很慢。在测试中,Fast R-CNN 需要 2.3 秒来进行预测,其中 2 秒用于生成 2000 个 ROI。因此区域生成的计算成为整个检测网络的瓶颈。
与其使用固定的算法得到候选区域,不如让网络自己学习自己的候选区域应该是什么。因此,Faster R-CNN 采用与 Fast R-CNN 相同的设计,只是它用 区域生成网络(Region Proposal Network,RPN) 代替了候选区域方法。新的候选区域网络(RPN)在生成 ROI 时效率更高,并且以每幅图像 10 毫秒的速度运行。
二、one-stage 检测
1.YOLO
YOLO直接在输出层回归bounding box的位置和bounding box所属的类别(整张图作为网络的输入,把 Object Detection 的问题转化成一个 Regression 问题)。直接通过整张图片的所有像素得到bounding box的坐标、box中包含物体的置信度和class probabilities。通过YOLO,每张图像只需要看一眼就能得出图像中都有哪些物体和这些物体的位置。
基本流程:
输入图像,并转换为448 × 448格式;
使用主体网络(CNN)进行卷积核池化;
回归得到bounding box坐标、bounding box置信度以及分类;
2.SSD
- SSD提取了不同尺度的特征图来做检测,大尺度特征图可以用来检测小物体,而小特征图用来检测大物体;
- SSD采用了不同尺度和长宽比的先验框,在faster r-cnn和yolo中称为Anchors。