SSD算法,其英文全名是Single Shot MultiBox Detector。

SSD的网络结构流程如下图所示
SSD总共11个block,相比较于之前的VGG16,改变了第5个block的第4层,第6、7、8卷积层全部去掉,分别增加了红框、黑框、黄框、蓝框。

其tensorflow代码如下:

  1. with tf.variable_scope(scope, 'ssd_300_vgg', [inputs], reuse=reuse):
  2. # Original VGG-16 blocks.
  3. net = slim.repeat(inputs, 2, slim.conv2d, 64, [3, 3], scope='conv1')
  4. end_points['block1'] = net
  5. net = slim.max_pool2d(net, [2, 2], scope='pool1')
  6. # Block 2.
  7. net = slim.repeat(net, 2, slim.conv2d, 128, [3, 3], scope='conv2')
  8. end_points['block2'] = net
  9. net = slim.max_pool2d(net, [2, 2], scope='pool2')
  10. # Block 3.
  11. net = slim.repeat(net, 3, slim.conv2d, 256, [3, 3], scope='conv3')
  12. end_points['block3'] = net
  13. net = slim.max_pool2d(net, [2, 2], scope='pool3')
  14. # Block 4.
  15. net = slim.repeat(net, 3, slim.conv2d, 512, [3, 3], scope='conv4')
  16. end_points['block4'] = net
  17. net = slim.max_pool2d(net, [2, 2], scope='pool4')
  18. # Block 5.
  19. net = slim.repeat(net, 3, slim.conv2d, 512, [3, 3], scope='conv5')
  20. end_points['block5'] = net
  21. #注意处
  22. net = slim.max_pool2d(net, [3, 3], stride=1, scope='pool5')
  23.  
  24. # Additional SSD blocks.
  25. # Block 6: let's dilate the hell out of it!
  26. #注意处
  27. net = slim.conv2d(net, 1024, [3, 3], rate=6, scope='conv6')
  28. end_points['block6'] = net
  29. net = tf.layers.dropout(net, rate=dropout_keep_prob, training=is_training)
  30. # Block 7: 1x1 conv. Because the fuck.
  31. #注意处
  32. net = slim.conv2d(net, 1024, [1, 1], scope='conv7')
  33. end_points['block7'] = net
  34. net = tf.layers.dropout(net, rate=dropout_keep_prob, training=is_training)
  35.  
  36. # Block 8/9/10/11: 1x1 and 3x3 convolutions stride 2 (except lasts).
  37. end_point = 'block8'
  38. with tf.variable_scope(end_point):
  39. net = slim.conv2d(net, 256, [1, 1], scope='conv1x1')
  40. #注意点:实际上相当于下面的卷积操作进行padding了
  41. net = custom_layers.pad2d(net, pad=(1, 1))
  42. net = slim.conv2d(net, 512, [3, 3], stride=2, scope='conv3x3', padding='VALID')
  43. end_points[end_point] = net
  44. end_point = 'block9'
  45. with tf.variable_scope(end_point):
  46. net = slim.conv2d(net, 128, [1, 1], scope='conv1x1')
  47. #注意点:实际上相当于下面的卷积操作进行padding了
  48. net = custom_layers.pad2d(net, pad=(1, 1))
  49. net = slim.conv2d(net, 256, [3, 3], stride=2, scope='conv3x3', padding='VALID')
  50. end_points[end_point] = net
  51. end_point = 'block10'
  52. with tf.variable_scope(end_point):
  53. net = slim.conv2d(net, 128, [1, 1], scope='conv1x1')
  54. net = slim.conv2d(net, 256, [3, 3], scope='conv3x3', padding='VALID')
  55. end_points[end_point] = net
  56. end_point = 'block11'
  57. with tf.variable_scope(end_point):
  58. net = slim.conv2d(net, 128, [1, 1], scope='conv1x1')
  59. net = slim.conv2d(net, 256, [3, 3], scope='conv3x3', padding='VALID')
  60. end_points[end_point] = net

设计理念

参考博客:

目标检测算法之SSD

彻底搞懂SSD网络结构

SSD网络结构的更多相关文章

  1. SSD(single shot multibox detector)

    SSD,全称Single Shot MultiBox Detector,是Wei Liu在ECCV 2016上提出的一种目标检测算法,截至目前是主要的检测框架之一,相比Faster RCNN有明显的速 ...

  2. AI佳作解读系列(二)——目标检测AI算法集杂谈:R-CNN,faster R-CNN,yolo,SSD,yoloV2,yoloV3

    1 引言 深度学习目前已经应用到了各个领域,应用场景大体分为三类:物体识别,目标检测,自然语言处理.本文着重与分析目标检测领域的深度学习方法,对其中的经典模型框架进行深入分析. 目标检测可以理解为是物 ...

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

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

  4. [目标检测]SSD原理

    1 SSD基础原理 1.1 SSD网络结构 SSD使用VGG-16-Atrous作为基础网络,其中黄色部分为在VGG-16基础网络上填加的特征提取层.SSD与yolo不同之处是除了在最终特征图上做目标 ...

  5. 转:SSD详解

    原文:http://blog.csdn.net/a8039974/article/details/77592395, http://blog.csdn.net/jesse_mx/article/det ...

  6. ssd原理及代码实现详解

    通过https://github.com/amdegroot/ssd.pytorch,结合论文https://arxiv.org/abs/1512.02325来理解ssd. ssd由三部分组成: ba ...

  7. 【目标检测】SSD:

    slides 讲得是相当清楚了: http://www.cs.unc.edu/~wliu/papers/ssd_eccv2016_slide.pdf 配合中文翻译来看: https://www.cnb ...

  8. 检测算法简介及其原理——fast R-CNN,faster R-CNN,YOLO,SSD,YOLOv2,YOLOv3

    1 引言 深度学习目前已经应用到了各个领域,应用场景大体分为三类:物体识别,目标检测,自然语言处理.本文着重与分析目标检测领域的深度学习方法,对其中的经典模型框架进行深入分析. 目标检测可以理解为是物 ...

  9. 五、SSD原理(Single Shot MultiBox Detector)

    主流的算法主要分为两个类型: (1)tow-stage R-CNN系列算法,其主要思路是先通过启发式方法(selective search)或者CNN网络(RPN)产生一些列稀疏的候选框,然后对这些候 ...

随机推荐

  1. centos7下的Firewalld

    一.介绍 防火墙守护 firewalld 服务引入了一个信任级别的概念来管理与之相关联的连接与接口.它支持 ipv4 与 ipv6,并支持网桥,采用 firewall-cmd (command) 或 ...

  2. leetcode-166周赛-5280-用户分组

    题目描述: 自己的提交: class Solution: def groupThePeople(self, groupSizes: List[int]) -> List[List[int]]: ...

  3. Halo(三)

    接口中可以定义方法 1. 定义静态方法(直接调用) public interface Test { public static void method() { /** * 1.定义一个静态的带有方法体 ...

  4. Vue.js(七)

    ES6 默认导出(只能一次)与默认导入 默认导出: // 当前文件模块为 test.js // 定义私有成员 a 和 c let a = 10 let c = 20 // 外界访问不到变量 d ,因为 ...

  5. boost scope exit

    Boost.ScopeExit provides the macro BOOST_SCOPE_EXIT, which can be used to define something that look ...

  6. 有关于css的四种布局

    四种布局 (1).左右两侧,左侧固定宽度200px, 右侧自适应占满. (2).左中右三列,左右个200px固定,中间自适应占满. (3).上中下三行,头部200px高,底部200px高,中间自适应占 ...

  7. API参考文档

    Android 中文版:http://www.apiref.com/android-zh/index.html Bootstrap3 教程:http://www.apiref.com/bootstra ...

  8. python 100day notes (1)

    x1 + x2 +x3 + x4 = 8 多少正整数解 上面的问题等同于将8个苹果分成四组每组至少一个苹果有多少种方案 即用三个隔板插7个空位. 答案C(7,3) =35 # __name__是Pyt ...

  9. Anaconda详细安装及使用教程(带图文)

    https://blog.csdn.net/ITLearnHall/article/details/81708148

  10. (转)spring ioc原理(看完后大家可以自己写一个spring)

    原文地址:https://blog.csdn.net/it_man/article/details/4402245 最近,买了本Spring入门书:spring In Action .大致浏览了下感觉 ...