本宝宝最近心情不会,反正这篇也是搬用别人博客的了:(SSD就是YOLO+anchor(不同feature map 作为input))

引言

这篇文章是在YOLO[1]之后的一篇文章,这篇文章目前是一篇the-art-of-state的方法。这篇文章可以看到很多前人的影子,我所感受到这篇文章主要借鉴前人的有DeepNultiBox[2]、Faster R-CNN[3]、YOLO[1]、VGG16[4]等。

发表位置

问题引入

对于object detection,之前的方法都没有特别快,虽然YOLO很快,但是在准确性上下降了较多。作者就提出了一个速度很好,准确性还好的方法——SSD。

SSD核心思想

整个图片做输入,之后在输出层回归出box的位置和object的类别。与YOLO不同的是,SSD在输出层只用conv layer,而不是全链接层。

模型


这个模型,是以VGG16进行修改的,把VGG16的fc层换成conv层,中间还夹杂了maxpooling层。每个额外添加的conv层都输出一个Feature map,并以此作为预测一个输入,换句话说,这些不同scale的Feature map都作为预测的输入,以此来达到不同scale。作者举了一个例子,如果一个Feature map是m×n×p(width×height×channel)的,那么用3×3×p的kernel去产生value,产生了m×n个value。

为了方便读者理解这个网络结构,我把VGG[4]论文中的图粘贴过来了,作者用的是D这个模型进行修改的。

训练

default boxes

作者在这里提到的default boxes与faster R-CNN中的Anchor很类似,这里是按照YOLO中的想法,把每个Feature map(不同scale的)分成m×n个cell,每个cell有默认出k个default boxes,最后的predict box与default box有4个offset,并为每个predict box计算c个类的值。最后产生了(c+4)kmn个值。这里与faster R-CNN Anchor最大的不同就是,faster R-CNN是通过改变Anchor的大小来实现scalable的,SSD是改变Feature map大小来实现的。

训练目标

损失函数:这个与Faster R-CNN中的RPN是一样的,不过RPN是预测box里面有object或者没有,所以,没有分类,SSD直接用的softmax分类。location的损失,还是一样,都是用predict box和default box/Anchor的差 与 ground truth box和default box/Anchor的差 进行对比,求损失。 

以下,是我根据我的理解画的一张简单示意图。这个default box存在求损失,就是尽可能把X与Y的数值做到差值最小。

为default box选择尺度(scale)和长宽比

如果我们用m个Feature maps进行预测,那么尺度最大的是smax,最小的是smin,那么第k个Feature map的default boxes的尺度sk:
使用不同的长宽比,ar∈{1,2,3,1/2,1/3},长度(wr = sk × squr(ar)),高度(hr = sk / squr(ar))。除此之外,对于ar=1,还有一个情况sk‘= squr(sk × sk+1)。

negative数据处理

这种方法会产生很多个negative的数据,使positive与negative失去平衡,作者把negative:positive控制在3:1。

数据扩大

实验结果

PASCAL VOC2007

PASCAL VOC2012

COCO

模型分析

数据扩大很重要

多个default box 尺度更好

atrous 更快

目前,我还没有明白atrous是什么。

多个Feature map用于预测更好

SSD定位错误少

因为他把定位和分类放在一步里解决。

小目标效果不好

因为在top layer中,获得小目标的信息不多,扩大图片大小输入,会有改善。通过数据扩大也会有改善。

速度

使用 Titan X 、 cuDNN v4 、 Intel Xeon E5-2667v3@3.20GHz。

结论

  • SSD的各种特定和优点。
  • SSD将会获得更为广泛的应用。

个人想法

这篇文章在很早之前就想拜读,但是,到今天才扣完。之前读的object Detection文章基本都是在为了这篇做基础。这篇文章看完了,想法有很多,现在简单叙述一下把。

巨人肩膀

  • DeepMultiBox:这篇文章主要讲的多个scale的问题,利用图片放缩的方法进行不同scale多个框预测。文章在最后提到把定位分类放到one-shot的网络里面,我觉得作者可能受到这个的启发。
  • YOLO:YOLO这篇文章就是把定位和分类放在一个网络里面,同时彻底摆脱了之前位置推荐的方式。SSD中的default box的生成借鉴了YOLO中cell的想法。SSD在很多方面都是在于YOLO做对比。毕竟YOLO是发表在CVPR2016上的成果。
  • Faster R-CNN:这篇文章主要借鉴了Faster R-CNN中anchor的想法。正如作者在提到“similar to Faster R-CNN”,SSD里面提到的“default bounding box”直接按照anchor理解的话,便容易理解多了,SSD与Faster R-CNN中关于Anchor的使用区别主要在Scalable上。
  • VGG16:这个主要说的是个网络结构,SSD主要就是根据VGG16改的,VGG16中抛弃了之前用的5×5、7×7、11×11等大的卷积核,而是全用3×3的卷积核(VGG文章中提到了具体原因,大主要有1.更多个non-linear rectification layers.)。

作者提到的改进空间

    • “How to design the optimal tiling is an open question as well”,这是作者在提到default box的尺度问题时候说的。
    • 针对small object的问题,这个跟YOLO是一致的,我觉得这很可能是这样划分cell的问题。

SSD回归类物体检测的更多相关文章

  1. 物体检测算法 SSD 的训练和测试

    物体检测算法 SSD 的训练和测试 GitHub:https://github.com/stoneyang/caffe_ssd Paper: https://arxiv.org/abs/1512.02 ...

  2. ssd物体检测模型训练和测试总结

    参考网址:github:https://github.com/naisy/realtime_object_detection 2018.10.16ssd物体检测总结:切记粗略地看一遍备注就开始训练模型 ...

  3. 『计算机视觉』物体检测之RefineDet系列

    Two Stage 的精度优势 二阶段的分类:二步法的第一步在分类时,正负样本是极不平衡的,导致分类器训练比较困难,这也是一步法效果不如二步法的原因之一,也是focal loss的motivation ...

  4. [PyImageSearch] Ubuntu16.04 使用深度学习和OpenCV实现物体检测

    上一篇博文中讲到如何用OpenCV实现物体分类,但是接下来这篇博文将会告诉你图片中物体的位置具体在哪里. 我们将会知道如何使用OpenCV‘s的dnn模块去加载一个预训练的物体检测网络,它能使得我们将 ...

  5. 物体检测之FPN及Mask R-CNN

    对比目前科研届普遍喜欢把问题搞复杂,通过复杂的算法尽量把审稿人搞蒙从而提高论文的接受率的思想,无论是著名的残差网络还是这篇Mask R-CNN,大神的论文尽量遵循著名的奥卡姆剃刀原理:即在所有能解决问 ...

  6. Tensorflow物体检测(Object Detection)API的使用

    Tensorflow在更新1.2版本之后多了很多新功能,其中放出了很多用tf框架写的深度网络结构(看这里),大大降低了吾等调包侠的开发难度,无论是fine-tuning还是该网络结构都方便了不少.这里 ...

  7. yolo回归型的物体检测

    本弱又搬了另外一个博客的讲解: 缩进YOLO全称You Only Look Once: Unified, Real-Time Object Detection,是在CVPR2016提出的一种目标检测算 ...

  8. 物体检测丨Faster R-CNN详解

    这篇文章把Faster R-CNN的原理和实现阐述得非常清楚,于是我在读的时候顺便把他翻译成了中文,如果有错误的地方请大家指出. 原文:http://www.telesens.co/2018/03/1 ...

  9. cs231n---语义分割 物体定位 物体检测 物体分割

    1 语义分割 语义分割是对图像中每个像素作分类,不区分物体,只关心像素.如下: (1)完全的卷积网络架构 处理语义分割问题可以使用下面的模型: 其中我们经过多个卷积层处理,最终输出体的维度是C*H*W ...

随机推荐

  1. (转)Ubuntu 17.04_64上搭建巡风扫描系统(资产信息漏洞扫描内网神器)

    巡风简介 巡风是一款适用于企业内网的漏洞快速应急.巡航扫描系统,通过搜索功能可清晰的了解内部网络资产分布情况,并且可指定漏洞插件对搜索结果进行快速漏洞检测并输出结果报表.其主体分为两部分:网络资产识别 ...

  2. 最近公共祖先(LCA)(题目)

    Time Limit: 2000 ms Memory Limit: 256 MB Description Input Output Sample Input 15 5 1 2 3 4 5 6 7 8 ...

  3. 【莫队】【P3901】 数列找不同

    Description 现在有一个长度为\(~n~\)的数列\(~A_1~,~A_2~\dots~A_n~\),\(~Q~\)个询问\(~[l_i~,~r_i]~\),每次询问区间内是否有元素相同 I ...

  4. 【状压DP】【CF8C】 Looking for Order

    传送门 Description 给你n个点,每次可以从起点到最多两个点然后回到起点.求经过每个点最少一次的最短欧氏距离和是多少 Input 第一行是起点的坐标 第二行是点的个数\(n\) 下面\(n\ ...

  5. oracle中的substr()函数

    SUBSTR(cExpression,nStartPosition [,nCharactersReturned])其中,cExpression指定要从其中返回字符串的字符表达式或备注字段:nStart ...

  6. 关于EMGU CV的那些事——1.环境搭建(win8 vs2012 emgucv3.0)

    http://blog.csdn.net/aptx704610875/article/details/46045689 楼主读研阶段研究图像处理,想用C#实现PTAM/PTAMM算法并用UNITY创建 ...

  7. C# 利用mysql.data 在mysql中创建数据库及数据表

    C# 利用mysql.data 在mysql中创建数据库及数据表 using System; using System.Collections.Generic; using System.Linq; ...

  8. windows环境下封装条件wait和signal

    linux 环境有提供好的pthread_cond_wait() 和 phread_signal().pthread_broadcast() windows需要自己封装,利用semophore控制线程 ...

  9. Linux常用网络工具:hping高级主机扫描

    之前介绍了主机扫描工具fping,可以参考我写的<Linux常用网络工具:fping主机扫描>. hping是一款更高级的主机扫描工具,它支持TCP/IP数据包构造.分析,在某些防火墙配置 ...

  10. IDEA调试服务器上部署的程序

    提出问题: 一个程序,部署在自己的电脑上,debug调试,相信大家都会,但是,如果我想debug调试非本地部署的程序怎么办呢.比如测试服务器上部署的程序. 其实这样的需求也是经常有的,比如一个大型的项 ...