SSD 用于实时物体检测

卷积神经网络(CNN)在物体识别中由于其他的神经网络架构,所以研究人员很快对 CNN 进行了改进以使得它们能更好的对物体进行定位和检测,这种神经网络架构就被称为 R-CNN(Region-CNN)。R-CNN 的输出是具有矩形框的图像,以下是 R-CNN 如何工作的步骤:

  1. 使用称为可能性搜索的算法扫描整个输入图像,用来查询可能的对象,并生成大约 2000 个区域提议;
  2. 在每个区域提案上运行 CNN;
  3. 获取每个 CNN 的输出并将其输入:

    • SVM 对区域进行分类;
    • 如果存在这样的对象,则利用线性回归其收紧对象的边界框;

这里写图片描述

虽然 R-CNN 比传统的 CNN 在对象对位,检测和分类方面取得了很大进步,但是在实时性上面还是存在一点问题,主要是:

  1. 训练数据很难处理,而且需要很长时间;
  2. 训练分为两步进行(区域划分和分类);
  3. 在测试的时候,网络的计算非常慢;

为了改进 R-CNN,研究人员想出了很多的算法,比如 Fast-RCNN,Faster-RCNN。后来的几个算法在对象检测上面能得到更准确的结果。但是他们对于实时监测来说,还是有点慢。SSD 就能同时解决这两个问题,它在准确性和计算速度方面具有良好的平衡。

SSD(Single Shot MultiBox Detector)

SIngle Shot:对象定位和分类在同一个前向网络中完成;

MultiBox:边界框回归的技术

Detector:对检测到的对象进行分类;

具体架构如下:

这里写图片描述

SSD 的架构基于 VGG-16 架构开发。但是对 VGG-16 进行了一些调整,我们使用 Conv6 层以上的辅助卷积层而不是完全连接层。使用 VGG-16 作为基础网络层的原因是其高质量的图像分类和迁移学习的能力,可以用来改善结果。使用辅助卷积层,我们可以提取多个尺度的特征,并逐步减小每个后续层的尺寸。在下面介绍的工作原理图中,你可以看到 VGG-16 架构处理的图像。

这里写图片描述

工作机制

为了训练我们的算法,我们需要一个包含带有对象的图像训练集,这些对象必须在他们上面有边界框。通过这种方式学习,算法可以学会如何将举行放置子啊何处。我们最小化边界框和实际的框的误差,以优化我们的模型可以正确的检测到对象。与 CNN 不同的是,我们不仅预测图像中是否存在该物体,而且还需要预测物体在图像中的位置。在训练期间,算法学习调整对象中矩阵框的高度和宽度。

这里写图片描述

上图是我们用于物体检测的训练数据集的示例。这些数据集必须包含在图像中标记其类的对象。更多默认框导致更准确的检测。

如果你是一个初学者,可以先使用 Pascal VOC 和 COCO 来进行学习。

处理规模问题

这里写图片描述

这里写图片描述

上面的图,我们的马匹有很少的图像。我们将输入图像划分为网格集。然后我们围绕这些网格制作几个不同宽高比的巨星。然后我们子啊这些矿中应用卷积来查找这些网络中是否存在对象。这里的一匹黑马在图像中更靠近相机。因此,我们绘制的矩形无法识别是否是马,因为矩形没有任何识别马匹的特征。

如果我们看到 SSD 的上述架构,我们可以在 Conv6 层之后的每个步骤中看到图像的大小显著减小。然后,我们讨论的关于制作网格和在这些网格上查找对象的每个操作都适用于从网络的后面到前面的卷积的每个步骤。分类器在每个步骤中应用于检测对象。因此,由于物体在每个步骤中不断变小,索引很容易被识别出来。

SSD 算法还知道如何从一个卷积操作返回到另一个卷积操作。它不仅学会前进而且学会如何后腿。例如,如果他在 Conv4 层中看到马,那么它可以返回到 Conv6 并且算法将在马周围进行绘制矩形。

猜你喜欢

转载自blog.csdn.net/CoderPai/article/details/81070350