雷锋网(公众号:雷锋网) AI 研习社按:本文为雷锋网字幕组编译的技术博客,原标题 SSD(Single Shot Multi-Box Detection) for real time object detection,作者 Rabin Poudyal。
翻译 | 陶玉龙 校对 | 佟金广 整理 | 孔令双
卷积神经网络在检测图像中的物体时优于其他神经网络结构。很快,研究人员改进了 CNN 来进行对象定位与检测,并称这种结构为 R-CNN(Region-CNN)。R-CNN 的输出是具有矩形框和分类的图像,矩形框围绕着图像中的对象。以下是 R-CNN 的工作步骤:
使用我们称为选择性搜索的算法扫描输入图像,进而查找可能的对象,生成大约 2000 个候选区域,
在每个候选区域上运行 CNN,
获取每个 CNN 的输出并将其输入:
SVM 来区域进行分类
线性回归器来收紧对象的边界框,如果对象存在
![TB1ihnrGv1TBuNjy0FjXXajyXXa.jpg](http://gw.alicdn.com/tfscom/tuitui/TB1ihnrGv1TBuNjy0FjXXajyXXa.jpg?x-oss-process=image/resize,w_1400/format,webp)
R-CNN 运用于目标检测
虽然与传统的 CNN 相比,R-CNN 在目标定位,检测和分类方面都取得了很大进步,但在实现目标实时检测方面依旧存在问题。以下是其中的一些问题:
1、训练数据很难处理,而且耗时很长
2、训练分为两个阶段进行(即:候选区域的选择和分类)
3、网络在推理阶段很慢(处理非训练数据时)
为了改进 R-CNN,研究人员们相继提出了其他算法,如 Fast-RCNN,Faster-RCNN 等。 这些算法为目标检测提供了更准确的结果。 但它们对于实时检测来说显得有点慢。SSD 就在这个时候应运而生,它在准确性和计算速度方面具有良好的平衡。
SSD(单发多边框检测器)的含义
单发:目标定位和分类在网络的单个前向传递中完成 :
多框:边界框回归的技术
检测器:对检测到的对象进行分类
结构
![TB15b6Qx4uTBuNkHFNRXXc9qpXa.jpg](http://gw.alicdn.com/tfscom/tuitui/TB15b6Qx4uTBuNkHFNRXXc9qpXa.jpg?x-oss-process=image/resize,w_1400/format,webp)
SSD 结构
SSD 的结构建立在 VGG-16 的基础上。但在这里对 VGG-16 进行了一些微小调整,从 Conv6 层开始,我们用一系列辅助卷积层来代替原先全连接层。因为 VGG-16 可以提供高质量的图像分类和迁移学习来改善结果, 我们将其作为 SSD 的基础网络。通过使用辅助卷积层,我们可以提取图像多个尺度的特征,并逐步减小每个卷积层的尺寸。我已在下一节讨论了它的工作原理。您可以看到 VGG-16 架构的以下图像, 它包含全连接层。
![TB1oPjrXjfguuRjSszcXXbb7FXa.jpg](http://gw.alicdn.com/tfscom/tuitui/TB1oPjrXjfguuRjSszcXXbb7FXa.jpg?x-oss-process=image/resize,w_1400/format,webp)
VGG-16 结构
工作机制
![TB1ds9tGuySBuNjy1zdXXXPxFXa.jpg](http://gw.alicdn.com/tfscom/tuitui/TB1ds9tGuySBuNjy1zdXXXPxFXa.jpg?x-oss-process=image/resize,w_1400/format,webp)
为了训练我们的算法,我们需要一个包含带有对象的图像的训练集,这些对象必须在它们上面有边界框。 通过这种方式学习,算法学习如何在对象上放置矩形框以及放置在何处。 我们通过调参使预测出的边界框和实际的边界框之间的误差最小,从而优化我们的模型以正确地检测对象。与 CNN 不同,我们不仅预测图像中是否存在物体,还需要预测物体在图像中的位置。在训练期间,算法也要学习调整对象边界框中的高度和宽度。
![TB10qYsXjbguuRkHFrdXXb.LFXa.jpg](http://gw.alicdn.com/tfscom/tuitui/TB10qYsXjbguuRkHFrdXXb.LFXa.jpg?x-oss-process=image/resize,w_1400/format,webp)
上图是我们用于目标检测的训练数据集的示例。 这些数据集必须包含在图像中标记类别的对象。 更多默认框会有更准确的检测,但会以速度牺牲作为代价。
Pascal VOC 和 COCO 数据集对初学者而言是一个很好的入门。
处理尺度问题
![TB1m6nrXjfguuRjSszcXXbb7FXa.jpg](http://gw.alicdn.com/tfscom/tuitui/TB1m6nrXjfguuRjSszcXXbb7FXa.jpg?x-oss-process=image/resize,w_1400/format,webp)
在左边是一张有几匹马的图像。我们将输入图像划分为网格集。 然后我们围绕这些网格制作几个不同宽高比的矩形框。 我们在这些框中应用卷积来研究这些网格中是否存在对象。这里的一匹黑马在图像中更靠近摄像头。因此,我们绘制的边界框无法识别是否是马,因为边界框没有任何可以识别马匹的特征。
![TB1shU6x8mWBuNkSndVXXcsApXa.jpg](http://gw.alicdn.com/tfscom/tuitui/TB1shU6x8mWBuNkSndVXXcsApXa.jpg?x-oss-process=image/resize,w_1400/format,webp)
如果我们看上述 SSD 的架构,我们可以看到在 conv6 层之后的每个步骤中图像的大小在显著减小。 我们讨论的关于划分网格和在这些网格上查找对象的每个操作都适用于从网络的后面到前面的卷积的每个步骤。 分类器也应用在每个步骤中来检测对象。 因此,由于物体在每个步骤中变得更小,它很容易识别。
SSD 算法还知道如何从一个卷积操作返回到另一个卷积操作。 它不仅会前向运算而且会后向运算。 例如,如果它在 conv4 中看到马,那么它可以返回到 conv6 并且将在马周围绘制矩形框。
原文链接:
https://medium.com/@rabinpoudyal1995/ssd-single-shot-multi-box-detection-for-real-time-object-detection-5f2a06e33a4a
雷锋网 AI 研习社编译。
号外号外~
一个专注于
AI技术发展和AI工程师成长的求知求职社区
诞生啦!
欢迎大家访问以下链接或者扫码体验
https://club.leiphone.com/page/home
![TB1HslvGqmWBuNjy1XaXXXCbXXa.jpg](http://gw.alicdn.com/tfscom/tuitui/TB1HslvGqmWBuNjy1XaXXXCbXXa.jpg?x-oss-process=image/resize,w_1400/format,webp)
![TB1hGbsXjrguuRjy0FeXXXcbFXa.jpg](http://gw.alicdn.com/tfscom/tuitui/TB1hGbsXjrguuRjy0FeXXXcbFXa.jpg?x-oss-process=image/resize,w_1400/format,webp)