栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

ssd笔记2

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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,宽高都是一 一对应关系

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/739960.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号