梦里风林
  • Introduction
  • Android
    • activity
      • Activity四种启动模式
      • Intent Flag
      • 多task的应用
      • Task和回退栈
    • sqlite
      • 【源码】CursorWindow读DB
      • Sqlite在Android上的一个Bug
    • Chromium
    • ListView读取DB数据最佳实践
    • Android Project结构
    • 一个由Proguard与FastJson引起的血案
    • 琐碎的一些tips
  • Computer Vision
    • 特征提取
    • 三维视觉
    • 计算机视觉常用工具
    • 浅谈深度学习数据集设计
    • 随笔
  • Machine Learning
    • 技巧
      • FaceBook: 1 hour training ImageNet
      • L2 Norm与L2 normalize
    • 实践
      • Pytorch实验代码的亿些小细节
    • 工具
      • Tensorflow学习笔记
      • MXNet踩坑手记
      • PyTorch踩坑手记
      • PyTorch模型剪枝
      • Keras踩坑手记
      • mscnn
      • Matlab
        • Matlab Remote IPC自动化数据处理
    • Papers
      • Classification
      • Re-identification
        • CVPR2018:TFusion完全解读
        • ECCV2018:TAUDL
        • CVPR2018:Graph+reid
        • Person Re-identification
        • CVPR2016 Re-id
        • Camera topology and Person Re-id
        • Deep transfer learning Person Re-id
        • Evaluate
      • Object Detection
        • 读论文系列·干货满满的RCNN
        • 读论文系列·SPP-net
        • 读论文系列·Fast RCNN
        • 读论文系列·Faster RCNN
        • 读论文系列·YOLO
        • 读论文系列·SSD
        • 读论文系列·YOLOv2 & YOLOv3
        • 读论文系列·detection其他文章推荐
      • Depth
      • 3D vision
        • 数据集相关
        • 光流相关
      • Hashing
        • CVPR2018: SSAH
      • 大杂烩
        • CNCC2017 琐记
        • ECCV 2016 Hydra CCNN
        • CNCC2017深度学习与跨媒体智能
        • MLA2016笔记
    • 《机器学习》(周志华)读书笔记
      • 西瓜书概念整理
        • 绪论
        • 模型评估与选择
        • 线性模型
        • 决策树
        • 神经网络
        • 支持向量机
        • 贝叶斯分类器
        • 集成学习
        • 聚类
        • 降维与度量学习
        • 特征选择与稀疏学习
        • 计算学习理论
        • 半监督学习
        • 概率图模型
        • 规则学习
        • 强化学习
        • 附录
  • Java
    • java web
      • Servlet部署
      • 琐碎的tips
    • JNI
    • Note
    • Effective Java笔记
  • 后端开发
    • 架构设计
    • 数据库
    • java web
      • Servlet部署
      • 琐碎的tips
    • Spring boot
    • django
    • 分布式
  • Linux && Hardware
    • Ubuntu安装与初始配置
    • 树莓派相关
      • 树莓派3B+无线网卡监听模式
      • TP-LINK TL-WR703N v1.7 openwrt flashing
  • Python
    • django
    • 原生模块
    • 设计模式
    • 可视化
    • 常用库踩坑指南
  • web前端
    • header div固定,content div填充父容器
    • json接口资源
  • UI
  • kit
    • vim
    • git/github
      • 刷爆github小绿点
    • Markdown/gitbook
      • 琐碎知识点
      • gitbook添加disqus作为评论
      • 导出chrome书签为Markdown
      • Markdown here && 微信公众号
    • LaTex
      • LaTex琐记
    • 科学上网
    • 虚拟机
  • thinking-in-program
    • 怎样打日志
  • 我的收藏
  • 琐记
    • 论文心得
    • 深圳买房攻略
  • 赞赏支持
由 GitBook 提供支持
在本页
  • Introduction
  • Model
  • Training
  • 样本
  • Loss
  • Detail
  • Result
  • Summary

这有帮助吗?

  1. Machine Learning
  2. Papers
  3. Object Detection

读论文系列·SSD

上一页读论文系列·YOLO下一页读论文系列·YOLOv2 & YOLOv3

最后更新于3年前

这有帮助吗?

转载请注明作者:

Single Shot MultiBox Detector

Introduction

一句话概括:SSD就是关于类别的多尺度RPN网络

基本思路:

  • 基础网络后接多层feature map

  • 多层feature map分别对应不同尺度的固定anchor

  • 回归所有anchor对应的class和bounding box

Model

  • 输入:300x300

  • 经过VGG-16(只到conv4_3这一层)

  • 经过几层卷积,得到多层尺寸逐渐减小的feature map

  • 每层feature map分别做3x3卷积,每个feature map cell(又称slide window)对应k个类别和4个bounding box offset,同时对应原图中6(或4)个anchor(又称default box)

    • 38x38, 最后3x3, 1x1三个feature map的每个feature map cell只对应4个anchor,分别为宽高比: 1:1两种,1:2, 2:1两种,因此总共有 38 x 38 x 4 + 19 x 19 x 6 + 10 x 10 x 6 + 5 x 5 x 6 + 3 x 3 x 4 + 1 x 1 x 4 = 8732 个anchor

    • 其他feature map的feature map cell对应6个anchor,分别为宽高比: 1:1两种,1:2, 2:1两种,1:3, 3:1两种

    • 每层的feature map cell对应的anchor计算方法如下

      • 位置:假设当前feature map cell是位于第i行,第j列,则anchor的中心为 i+0.5∣fk∣,j+0.5∣fk∣\frac{i+0.5}{|f_{k}|},\frac{j+0.5}{|f_{k}|}∣fk​∣i+0.5​,∣fk​∣j+0.5​, fkf_{k}fk​是第k层feature map的size(比如38)

      • 缩放因子:

      其中smins_{min}smin​为0.2,smaxs_{max}smax​为0.9,m为添加的feature map的层数,缩放因子就是为不同feature map选择不同的大小的anchor,要求小的feature map对应的anchor尽量大,因为越小的feature map,其feature map cell的感受野就越大

    • anchor宽高:

      其中,ar∈{1,2,3,1/2,1/3}a_{r}∈\{1,2,3,1/2,1/3\}ar​∈{1,2,3,1/2,1/3},可以理解为在缩放因子选择好anchor尺寸后,用ara_{r}ar​来控制anchor形状,从而得到多尺度的各种anchor,当ar=1a_{r}=1ar​=1时,增加一种sk=sqrt(sk−1sk+1)s_{k}=sqrt(s_{k-1}s_{k+1})sk​=sqrt(sk−1​sk+1​),于是每个feature map cell通常对应6种anchor。

  • 网络的训练目标就是,回归各个anchor对应的类别和位置

Training

样本

  • 正样本 选择与bounding box jaccard overlap(两张图的交集/并集)大于0.5的anchor作为正样本

  • 样本比例 Hard negative mining:由于负样本很多,需要去掉一部分负样本,先整图经过网络,根据每个anchor的最高类置信度进行排序,选择置信度靠前的样本,这样筛选出来的负样本也会更难识别,并且最终正负样本比例大概是1:3

Loss

还是一如既往的location loss + classification loss,并为location loss添加了系数α(然而实际上α=1)进行平衡,并在batch维度进行平均

  • xxx是xijpx_{ij}^{p}xijp​的集合xijp=1,0x_{ij}^{p}={1,0}xijp​=1,0,用于判断第i个anchor是否是第j个bounding box上的p类样本

  • ccc是cipc_{i}^{p}cip​的集合,cipc_{i}^{p}cip​是第i个anchor预测为第p类的概率

  • l是预测的bounding box集合

  • g是ground true bounding box集合

其中定位loss与faster rcnn相同

分类loss就是很常用的softmax交叉熵了

核心的内容到这里就讲完了,其实跟YOLO和faster rcnn也很像,是一个用anchor box充当固定的proposal的rpn,并且用多尺度的anchor来适应多种尺度和形状的目标对象。

Detail

在训练中还用到了data augmentation(数据增强/扩充),每张图片多是由下列三种方法之一随机采样而来

  • 使用整图

  • crop图片上的一部分,crop出来的min面积为0.1,0.3,0.5,0.7,0.9

  • 完全随机地crop

然后这些图片会被resize到固定的大小,随机水平翻转,加入一些图像上的噪声,详情可以参考另一篇论文:

Some improvements on deep convolutional neural network based image classification

从切除实验中,可以看到data augmentaion是很重要的(从65.6到71.6)

从这个表中也可以看出多种形状的anchor可以提升准确率

Result

输入尺寸为300x300,batch size为8的SSD300可以做到实时(59FPS)且准确(74.3% mAP)的测试

Summary

SSD算是一个改进性的东西,站在Faster RCNN的肩膀上达到了实时且准确的检测

这个式子里的k不是很明确,其实想表达不算背景0类的意思,且前景类只为match的类算location loss

这个表中还提到了atrous,其实是指空洞卷积,是图像分割(deeplab)领域首先提出的一个卷积层改进,主要是能让测试速度更快。具体可以参考

梦里茶
ICLR2015 Deeplab
Scale
height
width