我读SSD

背景

论文地址:SSD: Single Shot MultiBox Detector
代码地址:GitHub
视频:Video
这篇文章发表于 ECCV 2016,在 YOLO 的 grid cell 之上做了一些工作,结合 Faster R-CNN 的 anchor,使用卷积方式对每幅图只计算一次就能够得到最终检测结果。速度比 YOLO 快,且精度高于 Faster R-CNN。

现状

  • 在 R-CNN 提出之前的一堆通过滑动窗口+特征方式做目标检测,以 DPM 为代表
  • 在 YOLO 之前一堆通过定位+分类方式,对每个 proposal 进行分类,R-CNN 系列为代表
  • R-FCN 也提取 proposal,但是对所有的 proposal 统一做一次 pooling 计算,去除了上面对每个 proposal 有子网络速度慢的缺点
  • YOLO 提出来对图片画格子方法,对每个格子进行检测

贡献

  • 速度提升:300x300 的输入尺寸,速度可以达到 58 fps
  • 精度提升:500x500 的输入尺寸,精读可达 75.1%
  • 输入可调:输入图片的尺寸可以自定义,尺寸大的话精度高但速度慢,尺寸小速度快精度低

方法

一句话概括就是去除了 YOLO 网络中的全连接层,改为卷积层,加入金字塔模型,与此同时修改了每个 cell 贡献的 bounding-box 个数(anchor)。下面分别介绍这几个优化的操作方法。
这里写图片描述

金字塔模型

YOLO 和本文都使用了一个 feature map 的概念,feature map 是指基础网络(如 VGG-16)的最后一个卷积层输出。YOLO 只对一个 feature map 获取信息,而本文中对基础网络产生的 feature map 后接继续卷积层,产生另外一个 feature map,后面再加卷积层又有一个 feature map,这样每个 feature map 都可以产生预测值,由此加入了多尺度的概念。

卷积检测(主要贡献点)

YOLO 中对 feature map 产生预测使用的是全连接层,参数较多,本文改为使用卷积产生预测,卷积核一般是 3×3×p ,其中

  • 3 是经验值
  • p=k×(#Classes+4) ,k 就是 anchor 的个数

再看一眼 YOLO 的格式是 k×5+#Classes ,与 YOLO 的不同之处在于每个 bounding box 可以有不同的分类,并且舍弃了是否是 object 这一项的预测。

网格对应的默认边框以及长宽比例

文中的 Default Boxes 困扰了我很久,其实作用就是为了获取网格对应的训练真值。可能是因为人工标注的真值没办法与上面的 k 个 bbox 对应,所以作者新建 k 个 default box 作为训练时的真值。每个 default box 的长宽比例保持固定。

训练方法

默认边框与标注真值的匹配方法

YOLO 中使用物体中心点落入网格当中进行匹配,SSD 改为计算 IoU 的方式。

  1. 每个 ground truth 的边框与最大 IoU 的 default box 边框匹配
  2. 每个 default box 边框随机挑选一个的 IoU 大于 0.5 的 ground truth 匹配

损失函数

L(x,c,l,g)=1N(Lconf(x,c)+αLloc(x,l,g))

等号右面的第一项为 softmax 的损失函数,第二项和 Faster R-CNN 一样

默认边框长啥样

在金字塔模型中,每个 feature map 有不同的尺寸,假设有 m 层金字塔。Default box 与输入图片比例为 sk

sk=smin+smaxsminm1(k1),k[1,m]

其中 smin=0.2,smax=0.95 表示 default box 的边长最小占整幅图片的 20%,最大占 95%。Default box 边长的长款比例为 ar{1,2,3,12,13} ,并且对长宽比是 1 的增加一个 sk=sksk+1 。所以每个网格对应 6 个 default boxes。于是我们有

  • 边框中心为 (i+0.5|fk|,j+0.5|fk|) |fk| 为第 k 层 feature map 的尺寸, i,j[0,|fk|]
  • 边框边长为 (wak=skar,hak=skar)

这里写图片描述
上图 a)是手动标注的真值边框,b)c)为不同的 feature map,网格对应固定个数的 default boxes 作为训练时的真值,因为 IoU 阈值,所以只有个别的 default box 被认为是包括物体。

负样例挑选

上面会产生过多的负样本,影响网络的分布。所以对负样本的可信度(how)排序,挑选 top N,使得正负样本接近 1:3。

训练数据集扩展

全部原始图像 + 随机采样 + 采样

实验

  • 使用 VGG16 作为基础模型,fc6 & fc7 转为卷积层,也是用洞洞算法
  • learning rate = 0.001
  • momentum = 0.9
  • weight decay = 0.0005
  • batch size = 32
    这里写图片描述
    这里写图片描述
    这里写图片描述
    这里写图片描述
    这里写图片描述

结论

  • 训练数据 augmentation 很有必要,表 2 中显示能提升 6.7% mAP
  • 金字塔模型很 OK
  • default box 的长宽比例越多越好
  • atrous 算法又快又好
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值