转载请注明出处
作为计算机视觉三大任务(图像分类、目标检测、图像分割)之一,目标检测任务在于从图像中定位并分类感兴趣的物体。传统视觉方案涉及霍夫变换、滑窗、特征提取、边界检测、模板匹配、哈尔特征、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(The Single Shot Detector)
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)获得最终的结果。
这里为了方便大家的理解,举例说明一下上图的预测输出:
图中网络用于检测的特征图有个,大小依次为
,
,
,
,
,
;这些特征图每个单元所对应的预置先验框分别有
,
,
,
,
,
个,所以网络共预测了
个边界框,(进行极大值抑制前)输出的维度为
。
未完待续
YOLO v1
YOLO v2
YOLO v3
Faster R-CNN
参考:
chenxp2311的CSDN博客:论文阅读:SSD: Single Shot MultiBox Detector
小小将的知乎专栏:目标检测|SSD原理与实现
littleYii的CSDN博客:目标检测论文阅读:YOLOv1-YOLOv3(一)
作者的其他相关文章:
图像分割:全卷积神经网络(FCN)详解
PointNet:基于深度学习的3D点云分类和分割模型 详解
基于视觉的机器人室内定位