ssd笔记2

接上一篇 ssd笔记_人工智能-CSDN博客

我这笔记就是流水账,主要写的好的太多,写的差的还是空白,我要填补这个空白

这里面就是稍微说一下对应关系,一个是loc的计算结果,也就是head[0],当然conf的结果size跟loc的size有一种绝对的比例关系,所以就算是一起算出来的

loc的网络结构如下:

(0, Conv2d(512, 16, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)))
(1, Conv2d(1024, 24, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)))
(2, Conv2d(512, 24, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)))
(3, Conv2d(256, 24, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)))
(4, Conv2d(256, 16, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)))
(5, Conv2d(256, 16, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)))

loc的输入是 sources ,尺寸是

torch.Size([1, 512, 38, 38])
torch.Size([1, 1024, 19, 19])
torch.Size([1, 512, 10, 10])
torch.Size([1, 256, 5, 5])
torch.Size([1, 256, 3, 3])
torch.Size([1, 256, 1, 1])

而这个各个size是输入为300时,多次下采样得出的size,上篇也提到了

计算到VGG的第22层,前面22层共下采样三次(300/8 = 38)
x (1, 512, 38, 38)
L2Norm之后,s (1, 512, 38, 38)
把s加入到 sources 中
x继续执行完VGG,从23层到最后,又下采样了一次
x(1, 1024, 19, 19)

这也就是VGG计算到最后的尺寸
又添加到 sources 中,这时,sources有两个元素

x执行 extras,extras共8个卷积,每隔一次添加到 sources 中,共添加了四个元素
extras 有两次下采样,又有两次不加 pad  的 3*3卷积的骚操作(每次尺寸变换都会添加到 sources 中),
总之, x的最后size为 (1, 256, 1, 1)
sources 里的尺寸为 

torch.Size([1, 512, 38, 38])
torch.Size([1, 1024, 19, 19])
torch.Size([1, 512, 10, 10])
torch.Size([1, 256, 5, 5])
torch.Size([1, 256, 3, 3])
torch.Size([1, 256, 1, 1])

所以sources的前两项是从VGG的22层和最后一层获取到添加进去的,而后面四项是extras计算出来的

而extras用到的参数为

extras = [256, 'S', 512, 128, 'S', 256, 128, 256, 128, 256]

上面的S就是要用步长为2的卷积进行下采样了,而不是S的,就可能是用3*3的卷积,但不加pad进行下采样

sources的结果再经过loc的卷积得出返回值

loc的结果尺寸为

torch.Size([1, 38, 38, 16])
torch.Size([1, 19, 19, 24])
torch.Size([1, 10, 10, 24])
torch.Size([1, 5, 5, 24])
torch.Size([1, 3, 3, 16])
torch.Size([1, 1, 1, 16])

训练时上面第一列的值可能是16,那只是训练时的batchsize,可以不必关注,毕竟test的时候,该值就是1了

——————————————————————————————

anchor的个数是38 * 38 * 4 + 19 * 19 * 6 + 10 * 10 * 6 + 5 * 5 * 6 + 3 * 3 * 4 + 1 * 1 * 4

也就是8372个

上面的数值是来源于config.py文件里的两个配置项,

'feature_maps': [38, 19, 10, 5, 3, 1],
'aspect_ratios': [[2], [2, 3], [2, 3], [2, 3], [2], [2]],

这是PriorBox类里创建anchor用到的

所以,原来如此,feature_map里的值,是从VGG的神经网络的下采样尺寸和extras再次下采样中计算得到的,然后又写为了超参数,而aspect_ratios的内容是anchor比例,而从该参数又得出了参数

mbox = [4, 6, 6, 6, 4, 4]  # number of boxes per feature map location

所以这些没有写在一起的参数之间是相互完全制约的,才能严丝合缝的匹配

从anchor的角度来看,自然38*38的格子最多,尺寸最小,而从网络深度来看,自然sources的第一个元素的网络最浅,也就是对应loc的第一个元素的网络最浅,所以也就是事实上的,浅层网络预测小目标,深层网络预测大目标

38*38,宽高都是一 一对应关系

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值