阅读时间将近四分钟算法
卷积神经网络在检测图像中的目标时优于其余神经网络架构。不久,研究人员们就改进了CNN以进行目标定位和检测,并称这种架构为R-CNN (Region-CNN)。R-CNN的输出是带有矩形框的图像,其围绕图像中的目标以及该目标的对应类。网络
如下是R-CNN的实现步骤:架构
使用选择性搜索算法扫描输入图像以查找可能的目标并生成大约2000个候选区域。ide
在每一个候选区域上运行CNN。学习
(1) SVM模型中对区域进行分类优化
(2) 若是存在这样的目标,则使用线性回归器收紧目标的边界框对象
R-CNN用于目标检测blog
虽然R-CNN比传统的CNN在目标定位、检测和分类方面取得了很大进步,但实时实现这一点仍然存在问题。一些问题是:it
训练数据很难处理,并且耗时很长io
训练分两个阶段进行(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)