SSD:Single Shot MultiBox Detector

Intro

SSD是一套one-stage算法实现目标检测的框架,速度很快,在当时速度超过了yolo,精度也可以达到two-stage的精度,可以与faster rcnn媲美,这套算法里用到了与faster rcnn的anchor相似的概念-default box,也解决了多尺度问题对one-stage的影响-对不同大小的feature map进行滑窗分类,使得不同尺度的feature map的分类器对原图目标尺度更加敏感。

one-stage和two-stage的算法区别主要在于,two-stage算法在区域提取的时候做分类是前景和背景,只有两个分类,然后再拿去给第二个专门用来分类的网络去学习分类具体类别;而one-stage算法直接在区域提取的时候给分类结果(这其中其实还设计到训练的时候default boxes 的label与ground truth label匹配的问题),我认为这是最大的不同。

Model

模型的结果其实很容易理解,就是在vgg16后面开始一边对每个feature map直接做分类,一边继续压缩feature map的size,然后继续做分类,以此类推。最后把所有的detection结果做nms。

文章先介绍了SSD作为多尺度检测器是通过对feature map的不同尺度进行的,而怎么做这个检测呢?利用类似于anchor的方法,在不同尺度的feature map上用3*3卷积核滑窗,这样每个卷积核作用得到一个结果,而对每个feature map cell,作者又安排了一组对应的default boxes,这些default boxes在size上有所不同,比例是预先设计好的。每个cell安排(c+4)*k个卷积核,c表示类别,4表示offset,k表示default boxes种类,这样,对每个default box而言,有不同的卷积核负责算类别概率、与bounding box的偏移值。因此,对于一个m*n的feature map而言,输出的结果有m*n*k*(c+4)个。作者也说了,他们设计的default boxes其实是类似于anchor boxes的,这点毋庸置疑。

Training

之前说过,训练很重要的一点是label的对应,因此作者在这里首先讲了匹配的策略。先从每个default box开始,把每个default box匹配一个与之重叠度最高的ground truth,这里重叠度用的jaccard算法,其实跟iou是一样的,交集比上并集,然后还没完,又从ground truth出发,让每个ground truth能够对应与之jaccard重叠度大于0.5的default boxes,然后把小于0.5的去除。这样减少了训练的数量,大大简化了训练。举个例子,一套简单题,一个同学在班上分数最高,他肯定就是这个班最强的人了,但是他只有五十分,你说选他还是不选他,菜鸡!当然不选了。

上面建立了从default box到ground truth box在空间上的映射,然后提出loss:

这里又通过p将空间映射在类别上细分。我们知道每个default box的预测有(c+4)个值,所以对于l,只需要说明是第几个参与训练的default box和第m个位置预测,m当然是在那4个中选,至于你安排哪几个预测位置,完全看你自己。两者经过smooth L1函数运算完,再看看类别对应上没有,显然对应上了这个值就应该是1,以此来最小化loss。分类的loss是所有正例分类概率的-log乘上匹配值,显然匹配上了是1,如果每匹配上,就是所有正例概率-log之和,加上负样本预测背景的概率-log,就是全预测0就是背景,即对0的预测概率,显然概率越高loss越小。

然后是hard negative mining,在经过matching之后,其实大多数default box是负样本,这就导致了正负样本极度不均衡,然后就把一些负样本变正呗,把iou高的变正,保证正负样本比例位1:3.

最后是数据增强,增强选项包括:

  1. 直接用原图
  2. sample a patch(实在不知道咋翻译但是会意就好了)使得iou是0.1 0.3 0.5 0.7 或者0.9
  3. 随机sample a patch(不用保证是上面的0.1 0.3 0.5 0.7 0.9)

实验部分到后面统一做,直接把看过的都用mxnet写一遍吧。希望有一天买得起GPU,不用天天看书而无法正儿八经跑项目和比赛。真心想参加比赛!!

[论文理解]SSD:Single Shot MultiBox Detector的更多相关文章

  1. 论文笔记 SSD: Single Shot MultiBox Detector

    转载自:https://zhuanlan.zhihu.com/p/33544892 前言 目标检测近年来已经取得了很重要的进展,主流的算法主要分为两个类型(参考RefineDet):(1)two-st ...

  2. 深度学习论文翻译解析(十四):SSD: Single Shot MultiBox Detector

    论文标题:SSD: Single Shot MultiBox Detector 论文作者:Wei Liu, Dragomir Anguelov, Dumitru Erhan, Christian Sz ...

  3. SSD(Single Shot MultiBox Detector)的安装配置和运行

    下文图文介绍转自watersink的博文SSD(Single Shot MultiBox Detector)不得不说的那些事. 该方法出自2016年的一篇ECCV的oral paper,SSD: Si ...

  4. SSD: Single Shot MultiBox Detector

    By Wei Liu, Dragomir Anguelov, Dumitru Erhan, Christian Szegedy, Scott Reed, Cheng-Yang Fu, Alexande ...

  5. 机器视觉:SSD Single Shot MultiBox Detector

    今天介绍目标检测中非常著名的一个框架 SSD,与之前的 R-CNN 系列的不同,而且速度比 YOLO 更快. SSD 的核心思想是将不同尺度的 feature map 分成很多固定大小的 box,然后 ...

  6. 目标检测--SSD: Single Shot MultiBox Detector(2015)

    SSD: Single Shot MultiBox Detector 作者: Wei Liu, Dragomir Anguelov, Dumitru Erhan, Christian Szegedy, ...

  7. 【计算机视觉】目标检测之ECCV2016 - SSD Single Shot MultiBox Detector

    本文转载自: http://www.cnblogs.com/lillylin/p/6207292.html SSD论文阅读(Wei Liu--[ECCV2016]SSD Single Shot Mul ...

  8. SSD: Single Shot MultiBox Detector 编译方法总结

    SSD是一个基于单网络的目标检测框架,它是基于caffe实现的,所以下面的教程是基于已经编译好的caffe进行编译的. caffe的编译可以参考官网 caffe Installation Instal ...

  9. SSD: Single Shot MultiBox Detector论文阅读摘要

    论文链接: https://arxiv.org/pdf/1512.02325.pdf 代码下载: https://github.com/weiliu89/caffe/tree/ssd Abstract ...

随机推荐

  1. c# sleep 例子-线程挂起

    using System; using System.Threading; public class arr { public static void Main() { //int[] arr; // ...

  2. HDU - 6341 多校4 Let Sudoku Rotate(状压dfs)

    Problem J. Let Sudoku Rotate Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K ...

  3. 洛谷P1349 广义斐波那契数列(矩阵快速幂)

    P1349 广义斐波那契数列 https://www.luogu.org/problemnew/show/P1349 题目描述 广义的斐波那契数列是指形如an=p*an-1+q*an-2的数列.今给定 ...

  4. SQL中的limit

    SELECT * FROM employees ORDER BY hire_date DESC LIMIT 2,1; LIMIT m,n : 表示从第m+1条开始,取n条数据: LIMIT n : 表 ...

  5. 51nod 1086【背包·DP】

    思路: 如果体积乘以数量>=W,那么直接用完全背包模型.如果不到的话,用二进制优化就好了. 基础题,感觉这样写很优雅?回去睡觉. #include <bits/stdc++.h> u ...

  6. Keras实现CIFAR-10分类

      仅仅为了学习Keras的使用,使用一个四层的全连接网络对MNIST数据集进行分类,网络模型各层结点数为:3072: : 1024 : 512:10:   使用50000张图片进行训练,10000张 ...

  7. 自动化测试 Cucumber

    Cucumber是一个能够理解用普通语言描述的测试用例的支持行为驱动开发(BDD)的自动化测试工具,用Ruby编写,支持Java和.Net等多种开发语言. Cucumber 三大组成: Feature ...

  8. [Android]四大组件的运行状态

    Activity的主要作用是展示一个界面并和用户交互,它扮演的是一种前台界面的角色. Service是一种计算型组件,用于在后台执行一系列计算任务.Service有两种状态:启动状态和绑定状态.启动状 ...

  9. 安装redis服务器

    安装redis服务器 Windows环境下安装: 第一步:下载压缩包(地址:https://github.com/MicrosoftArchive/redis/releases) 第二步:解压并打开 ...

  10. HttpEnum

    package com.yd.ifm.client.caller.util.http; public class HttpEnum { public enum DefContentTypeEnum i ...