作为计算机视觉三大任务(图像分类、目标检测、图像分割)之一,目标检测任务在于从图像中定位并分类感兴趣的物体。传统视觉方案涉及霍夫变换、滑窗、特征提取、边界检测、模板匹配、哈尔特征、DPM、BoW、传统机器学习(如随机森林、AdaBoost)等技巧或方法。在卷积神经网络的加持下,目标检测任务在近些年里有了长足的发展。其应用十分广泛,比如在自动驾驶领域,目标检测用于无人车检测其他车辆、行人或者交通标志牌等物体。
目标检测的常用框架可以分为两类,一类是 two-stage/two-shot 的方法,其特点是将兴趣区域检测和分类分开进行,比较有代表性的是R-CNN,Fast R-CNN,Faster R-CNN;另一类是 one-stage/one-shot 的方法,用一个网络同时进行兴趣区域检测和分类,以YOLO(v1,v2,v3)和SSD为代表。
Two-stage的方式面世比较早,由于需要将兴趣区域检测和分类分开进行,虽然精度比较高,但实时性比较差,不适合自动驾驶无人车辆感知等应用场景。因而此次我们主要介绍一下SSD和YOLO系列框架。
SSD与2016年由W. Liu et al.在 SSD: Single Shot MultiBox Detector 一文中提出。虽然比同年提出的YOLO(v1)稍晚,但是运行速度更快,同时更加精确。
SSD的框架在一个基础CNN网络(作者使用VGG-16,但是也可以换成其他网络)之上,添加了一些额外的结构,从而使网络具有以下特性:
用多尺度特征图进行检测 作者在VGG-16后面添加了一些特征层,这些层的尺寸逐渐减小,允许我们在不同的尺度下进行预测。越是深层小的特征图,用来预测越大的物体。
用卷积网络进行预测 不同于YOLO的全连接层,对每个用于预测的 通道特征图,SSD的分类器全都使用了 卷积进行预测,其中 是每个单元放置的先验框的数量, 是预测的类别数。
设置先验框 对于每一个特征图上的单元格,我们都放置一系列先验框。随后对每一个特征图上的单元格对应的每一个先验框,我们预测先验框的 维偏移量和每一类的置信度。例如,对于一个 的特征图,若每一个特征图对应 个先验框,同时需要预测的类别有 类,那输出的大小为 。(具体体现在训练过程中) 其中,若用 表示先验框的中心位置和宽高, 表示预测框的中心位置和宽高,则实际预测的 维偏移量 是 分别是:
下图是SSD的一个框架,首先是一个VGG-16卷积前5层,随后级联了一系列卷积层,其中有6层分别通过了 卷积(或者最后一层的平均池化)用于预测,得到了一个 的输出,随后通过极大值抑制(NMS)获得最终的结果。
图中网络用于检测的特征图有 个,大小依次为 , , , , , ;这些特征图每个单元所对应的预置先验框分别有 , , , , , 个,所以网络共预测了 个边界框,(进行极大值抑制前)输出的维度为 。
未完待续
参考: chenxp2311的CSDN博客:论文阅读:SSD: Single Shot MultiBox Detector 小小将的知乎专栏:目标检测|SSD原理与实现 littleYii的CSDN博客:目标检测论文阅读:YOLOv1-YOLOv3(一)
作者的其他相关文章: 图像分割:全卷积神经网络(FCN)详解 PointNet:基于深度学习的3D点云分类和分割模型 详解 基于视觉的机器人室内定位