Yolo vs SSD

  • 一、使用卷积操作的目标检测主要分为两个类型
    • 1.two-stage方法
    • 2.one-stage方法
  • 二、SSD相比于YOLO的不同
    • 1. SSD采用CNN来直接进行检测,而YOLO在全连接之后做检测。
    • 2. SSD提取了不同尺度的特征图来做检测。
    • 3. SSD采用了不同尺度和长宽比的先验框(Prior boxes, Default boxes, 在Faster-RCNN中叫做锚, Anchors)。
      • 训练过程中的先验框匹配原则
  • 三、SSD具体训练过程
    • 1. 损失函数
    • 2. 预测过程

参考https://zhuanlan.zhihu.com/p/33544892

一、使用卷积操作的目标检测主要分为两个类型

1.two-stage方法

R-CNN等一系列算法。主要思路是首先通过启发式方法(selective search)或者CNN网络(RPN)产生一系列稀疏的候选框,然后对这些候选框进行分类与回归。特点是准确度高。

2.one-stage方法

如YOLO和SSD。主要思路是均匀地在图片的不同位置进行密集抽样,抽样时可以采用不同尺度和长宽比,之后利用CNN提取特征后进行分类与回归。特点是速度快,但是均匀地密集采样的一个缺陷在于正样本(分类目标)和负样本(背景)不均衡,导致模型准确率低(参见Kaiming的Focal Loss)。

二、SSD相比于YOLO的不同

  SSD的全称为Single Shot MultiBox Detector,和YOLO相比主要的不同点如下:

1. SSD采用CNN来直接进行检测,而YOLO在全连接之后做检测。

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

2. SSD提取了不同尺度的特征图来做检测。

  所谓多尺度即同时采用大小不同的特征图进行检测。CNN网络一般前面的特征图比较大,后面会逐渐采用stride=2或者pool来降低特征图的大小。大尺度特征图(较靠前的特征图)用来检测小物体,而小尺度特征图(较靠后的特征图)用来检测大物体。这里可以理解为网络靠前位置的大尺度特征图中每个单元的感受野较小,靠后位置的小尺度特征图中每个单元的感受野较大。下图中4×4的特征图大小是8×8特征图大小的1/4,但是相同大小的先验框,后者比前者融合了更多的信息,更有利于检测大物体。

3. SSD采用了不同尺度和长宽比的先验框(Prior boxes, Default boxes, 在Faster-RCNN中叫做锚, Anchors)。

在YOLO中,每个单元相对于本身(正方形)预测多个边界框,但是真实目标的形状是多变的,YOLO需要在训练过程中自适应目标的形状。而SSD借鉴了Faster R-CNN中anchor的理念,每个单元设置尺度或者长宽比不同的先验框,最终预测得到的边界框(bounding boxes)以这些先验框作为基准,在一定程度上减少了训练的难度。

训练过程中的先验框匹配原则

  在训练过程中,首先要确定训练图片中的ground truth(真实目标)与哪个先验框来进行匹配,与之匹配的先验框所对应的边界框将负责预测它。在Yolo中,ground truth的中心落在哪个单元格,该单元格中与其IOU最大的边界框负责预测它。但是在SSD中却完全不一样,SSD的先验框与ground truth的匹配原则主要有两点。首先,对于图片中每个ground truth,找到与其IOU最大的先验框,该先验框与其匹配,这样,可以保证每个ground truth一定与某个先验框匹配。通常称与ground truth匹配的先验框为正样本(其实应该是先验框对应的预测box,不过由于是一一对应的就这样称呼了),反之,若一个先验框没有与任何ground truth进行匹配,那么该先验框只能与背景匹配,就是负样本。一个图片中ground truth是非常少的, 而先验框却很多,如果仅按第一个原则匹配,很多先验框会是负样本,正负样本极其不平衡,所以需要第二个原则。第二个原则是:对于剩余的未匹配先验框,若某个ground truth的 [公式] 大于某个阈值(一般是0.5),那么该先验框也与这个ground truth进行匹配。这意味着某个ground truth可能与多个先验框匹配,这是可以的。但是反过来却不可以,因为一个先验框只能匹配一个ground truth,如果多个ground truth与某个先验框 [公式] 大于阈值,那么先验框只与IOU最大的那个ground truth进行匹配。第二个原则一定在第一个原则之后进行,仔细考虑一下这种情况,如果某个ground truth所对应最大 [公式] 小于阈值,并且所匹配的先验框却与另外一个ground truth的 [公式] 大于阈值,那么该先验框应该匹配谁,答案应该是前者,首先要确保某个ground truth一定有一个先验框与之匹配。但是,这种情况我觉得基本上是不存在的。由于先验框很多,某个ground truth的最大 [公式] 肯定大于阈值,所以可能只实施第二个原则既可以了,这里的TensorFlow版本就是只实施了第二个原则,但是这里的Pytorch两个原则都实施了。图8为一个匹配示意图,其中绿色的GT是ground truth,红色为先验框,FP表示负样本,TP表示正样本。

尽管一个ground truth可以与多个先验框匹配,但是ground truth相对先验框还是太少了,所以负样本相对正样本会很多。为了保证正负样本尽量平衡,SSD采用了hard negative mining,就是对负样本进行抽样,抽样时按照置信度误差(预测背景的置信度越小,误差越大)进行降序排列,选取误差的较大的top-k作为训练的负样本,以保证正负样本比例接近1:3。

三、SSD具体训练过程

1. 损失函数

  训练样本确定了,然后就是损失函数了。损失函数定义为位置误差(locatization loss, loc)与置信度误差(confidence loss, conf)的加权和:
L(x,c,l,g)=1N(Lconf(x,c)+αLloc(x,l,g))L(x,c,l,g)=\frac{1}{N}(L_{conf}(x,c)+\alpha L_{loc}(x,l,g))L(x,c,l,g)=N1​(Lconf​(x,c)+αLloc​(x,l,g))
对于置信度误差,采用softmax loss:

2. 预测过程

  2.1 对于每个预测框,首先根据类别置信度确定其类别(置信度最大者)与置信度值,并过滤掉属于背景的预测框。
  2.2 根据置信度阈值(如0.5)过滤掉阈值较低的预测框。对于留下的预测框进行解码,根据先验框得到其真实的位置参数(解码后一般还需要做clip,防止预测框位置超出图片)。
  2.3 解码之后,一般需要根据置信度进行降序排列,然后仅保留top-k(如400)个预测框。
  2.4 最后就是进行NMS算法,过滤掉那些重叠度较大的预测框。最后剩余的预测框就是检测结果了。

YOLO vs SSD相关推荐

  1. YOLO、SSD、FPN、Mask-RCNN检测模型对比

    YOLO.SSD.FPN.Mask-RCNN检测模型对比 一.YOLO(you only look once) YOLO 属于回归系列的目标检测方法,与滑窗和后续区域划分的检测方法不同,他把检测任务当 ...

  2. 基于CNN目标检测方法(RCNN,Fast-RCNN,Faster-RCNN,Mask-RCNN,YOLO,SSD)行人检测,目标追踪,卷积神经网络

    一.研究意义 卷积神经网络(CNN)由于其强大的特征提取能力,近年来被广泛用于计算机视觉领域.1998年Yann LeCun等提出的LeNet-5网络结构,该结构使得卷积神经网络可以端到端的训练,并应 ...

  3. 教程 | 单级式目标检测方法概述:YOLO与SSD

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 目标检测是计算机视觉领域的基本研究问题之一,当前最常用的技术是卷积 ...

  4. 带你深入AI(4)- 目标检测领域:R-CNN,faster R-CNN,yolo,SSD, yoloV2

    带你深入AI(4)- 目标检测领域:R-CNN,faster R-CNN,yolo,SSD, yoloV2 2018年04月15日 11:09:29 阅读数:103 1 引言 深度学习目前已经应用到了 ...

  5. yolo 负样本_目标检测介绍之YOLO与SSD

    当前,目标检测的方法主要有两类,一类被称为两阶段方法,一类被称为一阶段方法.两阶段方法和一阶段方法都是基于目标应位于某个矩形框内这样一个假设,区别在于两阶段方法多了一个框的筛选阶段(Region Pr ...

  6. 基于深度学习的目标检测算法对比分析(RCNN、SPP、YOLO、SSD、FPN、RetinaNet)

    目录 (1) RCNN与SPP的比较 (2) RCNN → Fast RCNN → Faster RCNN (3) YOLO与RCNN类方法比较 (4) YOLO与SSD的比较 (5) YOLO v1 ...

  7. 如何使用CNN进行物体识别和分类_基于CNN目标检测方法(RCNN系列,YOLO,SSD)

    转载自:基于CNN目标检测方法(RCNN,Fast-RCNN,Faster-RCNN,Mask-RCNN,YOLO,SSD)行人检测 一.研究意义 卷积神经网络(CNN)由于其强大的特征提取能力,近年 ...

  8. 目标检测总结:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD

    目标检测总结:R-CNN.Fast R-CNN.Faster R-CNN.YOLO.SSD 转自:七月在线实验室 一.目标检测常见算法 object detection,就是在给定的图片中精确找到物体 ...

  9. 目标检测Yolo与SSD算法比较

    目标检测近年来已经取得了很重要的进展,主流的算法主要分为两个类型(参考RefineDet):(1)two-stage方法,如R-CNN系算法,其主要思路是先通过启发式方法(selective sear ...

最新文章

  1. 【算法系列】一道面试算法题
  2. 桶排序python实现
  3. SQL SERVER视图
  4. jupyter notebook python插件_Jupyter notebook一款非常好用的python IDE
  5. Java Agent的隔离实现以及卸载时一些坑
  6. linux 线程带参数,Linux中多线程编程并传递多个参数的简单例子
  7. *多叉树的树形背包常见建模方法
  8. mysql判断是否为null_MySQL如何判断字段是否为null
  9. 【Level 08】U06 Good Feeling L2 Blow the competition away
  10. 苹果 SwiftUI 踢馆谷歌 Flutter!
  11. Akka的类库和模块《six》译
  12. 论文笔记_S2D.50_Kimera 具有结构规律的增量视觉-惯性三维网格生成
  13. zookeeper + kafka 集群安装部署教程(linux环境下)
  14. linux下高可用性群集和负载均衡群集的实现
  15. 视频播放设计测试用例
  16. CSS选择符(选择器)基础认识
  17. 《Conditional BERT Contextual Augmentation》论文笔记
  18. python+tkinter实现绘图板
  19. 【聚沙成塔系列】之《UML九种图
  20. tj大神的 co库.优雅的解决 nodejs callback无限嵌套(回调地狱)问题

热门文章

  1. FCFS和SJF进程调度算法的实现
  2. 五个实体店营销方案,彻底打开你的思维,再也不用担心顾客不进店
  3. 强化学习——百度飞桨paddlepaddle parl
  4. ofbiz学习——分类
  5. AnyChart交互式数据可视化领域的全球领导者
  6. #include<algorithm>
  7. 展讯平台lcm旋转180°
  8. 11.6 使用拦截器插件扩展代理功能
  9. 2041. 【2016.5.21普及组模拟】魔方工厂
  10. 【虹科案例】虹科脉冲发生器在半导体行业中的应用