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

40 篇文章 2 订阅
7 篇文章 2 订阅

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 正负样本选择

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

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进我的收藏吃灰吧~~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值