Tensorflow2.0—SSD网络原理及代码解析(一)

在目标检测领域中,一般我们分为单阶段和双阶段。其中,双阶段最著名的就是Faster RCNN,单阶段有之前讲过的YOLO系列,还有一个比较经典的就是今天要讲的SSD目标检测网络算法。废话不多说,直接上干货~

一、主体思路


主干网络是VGG16,但是与VGG16还是有一点区别:
1、将VGG16的FC6和FC7层转化为卷积层。
2、去掉所有的Dropout层和FC8层;
3、新增了Conv6、Conv7、Conv8、Conv9。
目的:因为原始的VGG16只有16个卷积层,特征提取程度不够高,在后面再加三层卷积层,能够进一步地进行特征提取,有利于模型对大目标的检测。

二、细节研究

2.1 锚点框

在上面,我们可以知道,在训练网络中,会在特定的卷积层中提取相应的feature map,一共会提取6个卷积层,而每个卷积层又会生成相应的anchor box(数量:feature map_w * feature map_h * (4 or 6))。但是每层的anchor box的尺寸是怎么选择的呢?在YOLO V3或V4中,我们都知道三个有效特征层的anchor box的尺寸是通过人为Kmeans聚类得到的,但是在SSD中是如何得到的呢?

我来解释一下上面的公式的含义:
首先,要知道:随着feature map越小,那么anchor box的尺度就要越大(因为层级越高,那么feature map就会越小,同时anchor就会越少,anchor box的shape就要越大)。
其次,在上述公式中未知参数就只有一个:k。而m是固定值为5,k越大,表示层级数越高,s_k的值就会越大。
其中,第一层有效feature map的尺度为0.1,不参与上述公式计算。
现在,我们来计算下conv9_2的尺度:
k = 3 , s_k = 0.2 + 0.175 * 2 = 0.55,那么映射到原图中anchor box的尺度就是300 x 0.55 = 165,以此类推。。。。。。

我们得到了6个有效feature map的尺度大小,那么我们要根据这个尺度结合长宽比进行anchor box的设置。

我们还是以conv9_2为例:
我们在上面已经计算得到该层的scale为165,同时该层中每个anchor会生成6个anchor box,则:
w_1 = 165 * 1 = 165, h_1 = 165 * 1 = 165
w_2 = 165 * 1.414 = 233,31,h_2 = 165 / 1.414 = 116.69
w_3 = 165 * 1.73 = 285.45, h_3 = 165 / 1.73 = 95.38
w_4 = 165 * 0.707 = 116.655, h_4 = 165 / 0.707 = 233.38
w_5 = 165 * 0.577 = 95.205,h_5 = 165 / 0.577 = 285.96
以此类推。。。。。。
细心的小伙伴一定发现了,上面只有5个anchor box,但是在论文中该层是有6个anchor box,还有一个anchor box去哪了?


我们就是利用s_k和s_k+1进行根号计算得到新的尺度,这里为189。所以,
w_6 = 189,h_6 = 189。

2.2 正负样本选择

过年了~等回来再补吧(#.#)

Tensorflow2.0---SSD网络原理及代码解析(一)相关推荐

  1. Tensorflow2.0---SSD网络原理及代码解析(二)-锚点框的生成

    Tensorflow2.0-SSD网络原理及代码解析(二)-锚点框的生成 分析完SSD网络的原理之后,一起来看看代码吧~ 代码转载于:https://github.com/bubbliiiing/ss ...

  2. DBNet++(TPAMI) 原理与代码解析

    paper:Real-Time Scene Text Detection with Differentiable Binarization and Adaptive Scale Fusion code ...

  3. G-GhostNet(IJCV 2022)原理与代码解析

    paper:GhostNets on Heterogeneous Devices via Cheap Operations code:https://github.com/huawei-noah/Ef ...

  4. YOLOv3原理及代码解析

    博主完整翻译了YOLOV1和YOLOV3的论文:请移步查看: YOLOV1:https://blog.csdn.net/taifengzikai/article/details/81988891 YO ...

  5. ICCV2017跟踪算法BACF原理及代码解析

    文章和代码下载地址: Galoogahi H K, Fagg A, Lucey S. Learning Background-Aware Correlation Filters for Visual ...

  6. TPAMI2015跟踪算法KCF原理及代码解析

    文章和代码下载地址: http://www.robots.ox.ac.uk/~joao/circulant/ 一.基础公式的由来 相关滤波跟踪器可以表示为最小化的岭回归问题: 表示期望相应,表示正则系 ...

  7. 视觉SLAM开源算法ORB-SLAM3 原理与代码解析

    来源:深蓝学院,文稿整理者:何常鑫,审核&修改:刘国庆 本文总结于上交感知与导航研究所科研助理--刘国庆关于[视觉SLAM开源算法ORB-SLAM3 原理与代码解析]的公开课. ORB-SLA ...

  8. 【资源】CenterNet原理与代码解析

    <CenterNet原理与代码解析>是首发于GiantPandaCV公众号的电子书教程,由pprp总结并整理CenterNet相关解析,这本电子书是基于非官方的CenterNet实现,ht ...

  9. 对抗思想与强化学习的碰撞-SeqGAN模型原理和代码解析

    GAN作为生成模型的一种新型训练方法,通过discriminative model来指导generative model的训练,并在真实数据中取得了很好的效果.尽管如此,当目标是一个待生成的非连续性序 ...

  10. SSD算法原理与代码(三)

    说明:这几篇文章是讲解SSD,从算法原理.代码到部署到rk3588芯片上的过程.环境均是TF2.2,具体的安装过程请参考网上其他的文章. 一.SSD简介 SSD算法是一个优秀的one-stage目标检 ...

最新文章

  1. 16进制魔术数字 0xdeadbeef Leet英文转写形式 简介
  2. linux有三个查看文件的命令:more、cat、less
  3. 为什么 Linux的开发者要转到Windows 10 平台!
  4. Java NIO框架Mina
  5. ffmpeg 源码学习之seek play
  6. NH3.X与2.X使用上的一些区别
  7. java erlang_Java开发人员的Erlang
  8. 「澳洋主数据项目」主数据促企业变革
  9. DB2操作指南及命令大全word版
  10. python不能安装在中文_无法在Python上安装表
  11. java导出数据库的结构 表结构 字段信息 主键
  12. 浅谈分布式和微服务架构
  13. php 标签页切换,vue.js实现标签页切换效果
  14. Understanding Linux CPU Load - when should you be worried?
  15. 【揭秘】我几乎面了所有知名公司的算法岗位
  16. 分布式配置中心-Disconf入门指南
  17. 斐波那契数列java代码实现
  18. Tomcat8安装及配置详解
  19. 因为文件格式或文件扩展名无效。请确定文件未损坏,并且文件扩展名与文件的格式匹配
  20. 算法的时间复杂度取决于:

热门文章

  1. 5G无线技术基础自学系列 | 5G NR和LTE信道结构比较
  2. 基于SSH框架的人力资源管理系统设计与实现
  3. python自制一款职位分析器,一键生成岗位分析报告
  4. 键盘表和ASCII码表
  5. Ubuntu - Firefox 视频无法播放问题解决方法
  6. 【网站模板】第01期—15套免费网站后台管理模板
  7. 史上最全java项目开发编程规范
  8. pdffactory 打印字体_pdfFactory Pro
  9. Ubuntu18.04的截图问题
  10. sipp使用过程中报错