阅读时间将近四分钟
卷积神经网络在检测图像中的目标时优于其他神经网络架构。不久,研究人员们就改进了CNN以进行目标定位和检测,并称这种架构为R-CNN (Region-CNN)。R-CNN的输出是带有矩形框的图像,其围绕图像中的目标以及该目标的对应类。
以下是R-CNN的实现步骤:
-
使用选择性搜索算法扫描输入图像以查找可能的目标并生成大约2000个候选区域。
-
在每个候选区域上运行CNN。
- 获取每个CNN的输出并将其输入到:
(1) SVM模型中对区域进行分类
(2) 如果存在这样的目标,则使用线性回归器收紧目标的边界框
R-CNN用于目标检测
虽然R-CNN比传统的CNN在目标定位、检测和分类方面取得了很大进步,但实时实现这一点仍然存在问题。一些问题是:
-
训练数据很难处理,而且耗时很长
-
训练分两个阶段进行(eg.训练候选区域和分类)
- 网络模型在使用时耗时较长(处理非训练数据时)
为了改进R-CNN,后续出现Fast-RCNN,Faster-RCNN,Mask-RCNN等一系列改接算法。他们都取得了更高的准确率,但是在速度方面还是有所欠缺。那么,SSD就恰巧解决了这一点,SSD基本可以达到实时检测的速度要求,并且在准确性和计算速度方面具有良好的平衡。
SSD(单步多框检测器)含义
Single Shot(单步):目标定位和分类在网络的单个前向传递中完成
MultiBox:边界框回归技术
Detector(检测器):对检测到的对象进行分类
网络结构
SSD架构
SSD的架构基于VGG-16架构构建。但是这里对VGG-16进行了一些调整,我们使用Conv6层以上的辅助卷积层而不是全连接层。使用VGG-16作为基础网络的原因是其高质量的图像分类和迁移学习以改善结果。使用辅助卷积层,我们可以提取多个尺度的特征,并逐步减小每个后续层的尺寸。我已在下一节讨论了它的工作原理。在下图可以看到VGG-16架构。它包含完全连接的层。
VGG-16架构
工作机制
为了训练我们的算法,我们需要一个已经框出目标的图像训练集。通过这种训练方式,算法去学习如何在目标上放置矩形以及放置在何处。我们最小化推断的边界框和真实标注边界框之间的误差,以优化我们的模型达到正确地检测目标的效果。与CNN不同,我们不仅预测图像中是否存在物体,还需要预测物体在图像中的位置。在训练期间,算法学习调整目标中矩形边界框的高度和宽度。
上图是我们用于目标检测的训练数据集的示例。这些数据集必须包含在图像中标记其类别的相应目标。虽然更多默认框会产生更准确的检测结果,但会增加速度开销。
Pascal VOC和COCO数据集对初学者来说是一个不错的选择。
处理尺度问题
上图展示了一个包含有多匹马的图像。将输入图像划分为网格集,然后围绕这些网格制作几个不同宽高比的矩形。接着在这些标注框中应用卷积来查找这些网格中是否存在马匹目标。由于图中的那匹黑马在图像中更靠近相机。因此,框出的矩形区域并不能被识别出是否是马,因为矩形框区域没有任何可以被识别成马匹的特征。
如果大家理解了前文中提到的SSD架构,可以看出在conv6层之后的每个步骤中看到图像的大小是显着减小的。接着,刚才讨论的关于制作网格和在这些网格上查找目标的每个操作步骤都适用于从网络的后面到前面的卷积的每个步骤。分类器在每个步骤中应用这些步骤去检测目标是否存在。综上,由于目标在每个步骤中变得更小,因此很容易识别。
SSD算法还知道如何从一个卷积操作返回到另一个卷积操作。它不仅学会前进而且学会了回退。例如,如果它在conv4中识别到马,那么它可以返回到conv6并且算法将在马的周围绘制矩形。(编译自:Medium)