SSD目标检测算法

SSD: Single Shot MultiBox Detector
作者: Wei Liu, Dragomir Anguelov, Dumitru Erhan, Christian Szegedy, Scott Reed, Cheng-Yang Fu, Alexander C. Berg
单位:University of Washington, Allen Institute for AI , Facebook AI Research
发表会议及时间:ECCV 2016

一 SSD的历史

  • 从YOLO中继承了将detection转化为regression的思路,一次完成目标定位与分类
  • 基于Faster RCNN中的Anchor,提出了相似的Priorbox
  • 加入基于特征金字塔的检测方式,即在不同大小的feature map上预测目标
    请添加图片描述

二 关于论文

2.1 论文的摘要核心

  • 作者提出了一种仅需要单个深度神经网络的目标检测方法 — SSD
  • SSD网络在不同分辨率的特征图进行预测,可以处理不同大小的物体
  • SSD比需要物体候选框的方法简单,因为它完全地去除了proposal生成和随后的特征再筛选的过程
  • 在Nvidia Titan X 上300X300的输入图像,SSD在VOC2017测试上的mAP是74.3%,速度是59FPS,对于512的输入,SSD的mAP是76.9%

2.2 网络结构

请添加图片描述
请添加图片描述

三 设计理念

  • 采用多尺度特征图
  • 采用卷积进行检测
  • 设置先验框
    请添加图片描述

3.1 多尺度特征图

  • 用大特征图来检测小目标
    • 因为特征图越大,所提取到的特征轮廓越明显,但是感受野比较小,所以适合检测小目标。
  • 用小的特征图来检测大目标

3.2 卷积检测

  • SSD直接采用卷积对不同的特征图来进行提取检测结果
  • 直接使用卷积输出作为 边框的回归和类别的预测

假设某个用于检测的特征图是 5X5X256 anchor box = 3 ,则一共生成 5X5X3=75个锚框
那么用于定位的卷积层输出是5X5X12(4X3=12,每4个通道表示一个锚框的坐标(x,y,w,h))
用于分类的卷积层输出是 5X5X63(21X3,每21个通道表示一个锚框的类别,voc分类有21个类别)

请添加图片描述


3.3 先验框以及设置

  • 每个特征图设置的4个锚框由格点中心(cx,cy)和4组不同的宽高构成
  • 这4组不同的宽高可以由min_size,max_size和不同的aspect ratio给出。图中一共可以给出8X8X4个锚框用于回归物体的坐标。
    请添加图片描述
    在特征图的每个位置预测K个BB,对于每个BB,预测C个类别的得分,以及相对于Default box的4个偏移量,这样总共需要(C+4)*K个预测器,则在mXn的特征图三将会产生(C+4)XkXmXn个预测值

3.4 模型细节

  1. VGG16是在ILSVRC CLS-LOC数据集预训练
  2. VGG16全链接层fc6和fc7转换成3X3卷积层Conv6和1X1卷积层Conv7
  3. 池化池由stride=2的2X2变成stride=1的3X3
  4. 移除dropout和fc8,新增一系列卷积层

3.5 特征图

其用到的特征图大小分别是38,19,10,5,3,1

3.6 先验框匹配

  • 正样本:通常称与GT的IOU大于某一阈值的先验框
  • 负样本:若一个先验框没有与任何GT进行匹配,只能与背景匹配
    为了保证正负样本尽量平衡,SSD采用了hard negative mining,就是对负样本进行抽样,抽样时就按照置信度误差(预测背景的置信度越小,误差越大)进行降序排列,选区误差加大的top-k作为训练的负样本,以保证正负样本比例接近1:3

3.7 损失函数

定位误差与分类误差的加权和
请添加图片描述

定位损失

位置误差采用Smooth L1函数定义
请添加图片描述

3.8 预测过程

  • 对于每个预测框,首选根据类别置信度确定其类别(置信度最大者)与置信度值,并过滤掉属于背景的预测框
  • 然后根据置信度阈值过滤掉阈值较低的预测框。对于留下的预测框进行解码,根据先验框得到其真实的位置参数(解码后一般还需要做clip,防止预测框位置超出图片)
  • 解码后,一般需要根据置信度进行降序排列,然后仅保留top-k个预测框
  • 最后就是进行NMS算法,过滤掉那些重叠度较大的预测框

比较其他网络

请添加图片描述
为何比Faster RCNN和YOLO快?
原因1:首先SSD是一个单阶段网络,只需要一个阶段就可以输出结果,而FasterRCNN是一个双阶段网络
原因2:FasterRCNN不光需要训练RPN,而且需要训练Fast RCNN,而SSD其实相当于一个优化了RPN网络,不需要进行后面的检测,仅仅向前推力就会花费很多时间
原因3:YOLO网络虽然比SSD网络看起来简单,但是YOLO网络中含有大量的全链接,和FC层相比,Conv层具有更少的参数,同时YOLO获得候选框的操作比较费时
原因4:SSD算法中,调整了VGG网络的架构,将其中的FC层替换为Conv层,这一点会大大的提升速度,因为VGG中的FC层都需要大量的运算,有大量的参数,需要向前推理
原因5:使用了atrous算法,论文中明确提出该算法能够提速20%

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值