目标检测近年来已经取得了很重要的进展,主流的算法主要分为两个类型(参考RefineDet):(1)two-stage方法,如R-CNN系算法,其主要思路是先通过启发式方法(selective search)或者CNN网络(RPN)产生一系列稀疏的候选框,然后对这些候选框进行分类与回归,two-stage方法的优势是准确度高;(2)one-stage方法,如Yolo和SSD,其主要思路是均匀地在图片的不同位置进行密集抽样,抽样时可以采用不同尺度和长宽比,然后利用CNN提取特征后直接进行分类与回归,整个过程只需要一步,所以其优势是速度快,但是均匀的密集采样的一个重要缺点是训练比较困难,这主要是因为正样本与负样本(背景)极其不均衡(参见Focal Loss),导致模型准确度稍低。不同算法的性能如图1所示,可以看到两类方法在准确度和速度上的差异。

图1 不同检测算法的性能对比

本文讲解的是SSD算法,其英文全名是Single Shot MultiBox Detector,名字取得不错,Single shot指明了SSD算法属于one-stage方法,MultiBox指明了SSD是多框预测。在上一篇文章中我们已经讲了Yolo算法,从图1也可以看到,SSD算法在准确度和速度(除了SSD512)上都比Yolo要好很多。图2给出了不同算法的基本框架图,对于Faster R-CNN,其先通过CNN得到候选框,然后再进行分类与回归,而Yolo与SSD可以一步到位完成检测。相比Yolo,SSD采用CNN来直接进行检测,而不是像Yolo那样在全连接层之后做检测。其实采用卷积直接做检测只是SSD相比Yolo的其中一个不同点,另外还有两个重要的改变,一是SSD提取了不同尺度的特征图来做检测,大尺度特征图(较靠前的特征图)可以用来检测小物体,而小尺度特征图(较靠后的特征图)用来检测大物体;二是SSD采用了不同尺度和长宽比的先验框(Prior boxes, Default boxes,在Faster R-CNN中叫做锚,Anchors)。Yolo算法缺点是难以检测小目标,而且定位不准,但是这几点重要改进使得SSD在一定程度上克服这些缺点。下面我们详细讲解SDD算法的原理,并最后给出如何用TensorFlow实现SSD算法。

图2 不同算法的基本框架图

设计理念

SSD和Yolo一样都是采用一个CNN网络来进行检测,但是却采用了多尺度的特征图,其基本架构如图3所示。下面将SSD核心设计理念总结为以下三点:

图3 SSD基本框架

(1)采用多尺度特征图用于检测

所谓多尺度采用大小不同的特征图,CNN网络一般前面的特征图比较大,后面会逐渐采用stride=2的卷积或者pool来降低特征图大小,这正如图3所示,一个比较大的特征图和一个比较小的特征图,它们都用来做检测。这样做的好处是比较大的特征图来用来检测相对较小的目标,而小的特征图负责检测大目标,如图4所示,8x8的特征图可以划分更多的单元,但是其每个单元的先验框尺度比较小。

图4 不同尺度的特征图

(2)采用卷积进行检测

与Yolo最后采用全连接层不同,SSD直接采用卷积对不同的特征图来进行提取检测结果。对于形状为 m×n×p 的特征图,只需要采用 3×3×p 这样比较小的卷积核得到检测值。

(3)设置先验框

在Yolo中,每个单元预测多个边界框,但是其都是相对这个单元本身(正方块),但是真实目标的形状是多变的,Yolo需要在训练过程中自适应目标的形状。而SSD借鉴了Faster R-CNN中anchor的理念,每个单元设置尺度或者长宽比不同的先验框,预测的边界框(bounding boxes)是以这些先验框为基准的,在一定程度上减少训练难度。一般情况下,每个单元会设置多个先验框,其尺度和长宽比存在差异,如图5所示,可以看到每个单元使用了4个不同的先验框,图片中猫和狗分别采用最适合它们形状的先验框来进行训练,后面会详细讲解训练过程中的先验框匹配原则。

图5 SSD的先验框

SSD的检测值也与Yolo不太一样。对于每个单元的每个先验框,其都输出一套独立的检测值,对应一个边界框,主要分为两个部分。第一部分是各个类别的置信度或者评分,值得注意的是SSD将背景也当做了一个特殊的类别,如果检测目标共有 c 个类别,SSD其实需要预测 c+1 个置信度值,其中第一个置信度指的是不含目标或者属于背景的评分。后面当我们说 c 个类别置信度时,请记住里面包含背景那个特殊的类别,即真实的检测类别只有 c−1 个。在预测过程中,置信度最高的那个类别就是边界框所属的类别,特别地,当第一个置信度值最高时,表示边界框中并不包含目标。第二部分就是边界框的location,包含4个值 (cx,cy,w,h) ,分别表示边界框的中心坐标以及宽高。但是真实预测值其实只是边界框相对于先验框的转换值(paper里面说是offset,但是觉得transformation更合适,参见R-CNN)。先验框位置用 d=(dcx,dcy,dw,dh) 表示,其对应边界框用 b=(bcx,bcy,bw,bh) 表示,那么边界框的预测值 l 其实是 b 相对于 d 的转换值:

目标检测|SSD原理与实现 - 知乎

目标检测Yolo与SSD算法比较相关推荐

  1. CVPR目标检测与实例分割算法解析:FCOS(2019),Mask R-CNN(2019),PolarMask(2020)

    CVPR目标检测与实例分割算法解析:FCOS(2019),Mask R-CNN(2019),PolarMask(2020) 目标检测:FCOS(CVPR 2019) 目标检测算法FCOS(FCOS: ...

  2. yolov3网络结构图_目标检测——YOLO V3简介及代码注释(附github代码——已跑通)...

    GitHub: liuyuemaicha/PyTorch-YOLOv3​github.com 注:该代码fork自eriklindernoren/PyTorch-YOLOv3,该代码相比master分 ...

  3. 目标检测系列:SSD系列SSD、FSSD、DSSD、DSOD

    SSD DSSD FSSD DSOD SSD 动机 目前目标检测的一些算法包括基于深度学习的,都是先假定一些候选框,接着对候选框内容进行特征提取再分类,然后再对边框的位置进行修正这一系列的计算,最典型 ...

  4. matlab corner 舍弃,CornerNet为什么有别于其他目标检测领域的主流算法?

    原标题:CornerNet为什么有别于其他目标检测领域的主流算法? 这篇文章为大家解读由密歇根大学 Hei Law 团队在 ECCV 2018发布的论文,一种新的目标检测算法. 目标检测算法在诸如自动 ...

  5. 用于目标检测的Faster R-CNN算法的实际实现

    Introduction 您使用哪种算法进行对象检测任务? 为了在最短的时间内构建最精确的模型,我尝试了其中的一些. 这个跨越多个黑客马拉松和现实世界数据集的旅程通常总是让我进入R-CNN系列算法. ...

  6. 目标检测YOLO系列------YOLO简介

    目标检测YOLO系列------YOLO简介 1.为什么会出现YOLO算法 2.YOLO算法会逐渐成为目标检测的主流吗     YOLO以及各种变体已经广泛应用于目标检测算法所涉及到的方方面面,为了梳 ...

  7. 手把手教你训练自己的目标检测模型(SSD篇)

    目标检测是AI的一项重要应用,通过目标检测模型能在图像中把人.动物.汽车.飞机等目标物体检测出来,甚至还能将物体的轮廓描绘出来,就像下面这张图,是不是很酷炫呢,嘿嘿 在动手训练自己的目标检测模型之前, ...

  8. 论文推荐 | 目标检测中不平衡问题算法综述

    (图片付费下载于视觉中国) 作者 | CV君 来源 | 我爱计算机视觉(ID:aicvml) 今天跟大家推荐一篇前几天新出的投向TPAMI的论文:Imbalance Problems in Objec ...

  9. 【小白目标检测】手把手教你做视频中的实时目标检测(基于Pelee算法)

    手把手教你做视频中的实时目标检测(基于Pelee算法) 0. 先看效果: 1. 算法详解: 2. 下载源码: 3. 运行检测: 有需求的大佬欢迎加入我的接单群,需求详情请群里戳群主 获取源码或数据集: ...

最新文章

  1. 自然语言(NLP)发展史及相关体系
  2. linux shell case语句
  3. REGULAR NOMINATION AGGRESSIVE NOMINATION
  4. 阴差阳错2019-12-13
  5. 【转】程序debug正常release错误
  6. 强化学习算法Policy Gradient
  7. SQL Tuning Advisor使用实例
  8. 直播预告丨云时代的数据库客户端——CloudQuery最佳实践
  9. KVC的使用(对一个对象的成员变量进行操作(赋值/取值))
  10. check whether edge in face indices.
  11. kswapd进程与swap、swappiness之间的关系及原理
  12. 《Android权威编程指南(The Big Nerd Ranch Guide)(第二版)》12.4挑战练习
  13. 电脑输入法变成繁体中文如何改回来
  14. 基于auto.js的安卓抢购软件---淘宝抢购小助手(不完善,仅供参考)
  15. html 给word插入页眉和页脚,Word文档如何在任意页插入页眉和页脚
  16. Python3爬取拉钩网职位,并分析
  17. 02-Web前端知识 day03-javaScript
  18. 2021云计算技能竞赛真题卷(附标准答案)
  19. 基于PHP的学生成绩管理系统
  20. 公民身份证号码的编排规则

热门文章

  1. Unity中的Animator动画详解
  2. iOS9 定位服务启用
  3. MFC 程序崩溃自动重启 和 未捕获到的异常写退出栈
  4. java调用php接口_java 如何调用接口
  5. 2017架构年度参考,“优秀”架构背后的反思与探索
  6. 看完就能找到工作!面试官6个灵魂拷问,灵魂拷问
  7. 黎曼猜想被证明了?“他的证明甚至不能算是个错误”!阿蒂亚爵士的证明受到同行质疑...
  8. 互联网行业中,哪些岗位更有戏
  9. 明码标价:谈待遇的要领和禁忌
  10. 服务器销售心得,《我的世界》服务器卖东西心得讲解