Conv4_x、Conv8_x在SSD中代表什么

问题描述 投票:0回答:1

paper中提出的SSD模型中,据说基础网络被认为是VGG16,并在其末尾添加了额外的特征层,允许以不同的尺度生成特征图,长宽比。

我的问题是SSD论文中图2(如下所示)所示的架构中,卷积层的符号如

Conv5_3
Conv4_3
,对于基础网络
Conv8_2
 Conv9_2
Conv10_2
用于添加的特征层。

这个 _2, _3 符号在卷积层表示中意味着什么?

我在SSD模型描述页面中看到了相同的符号,其中基础网络VGG16更改为ResNET50,并使用了Conv5_x、Conv4_x等符号。

这个 _x 对于卷积层表示法意味着什么? enter image description here

pytorch object-detection torchvision single-shot-detector
1个回答
0
投票

仅这篇论文对于描述您感兴趣的符号可能没有多大帮助;但是,相应的代码存储库添加了更多信息:

例如,如果我们查看

ssd_pascal.py
,我们可以看到在何处创建具有此类名称的图层,例如(从第 23 行开始):

    out_layer = "conv6_1"
    ConvBNLayer(net, from_layer, out_layer, use_batchnorm, use_relu, 256, 1, 0, 1,
        lr_mult=lr_mult)

    from_layer = out_layer
    out_layer = "conv6_2"
    ConvBNLayer(net, from_layer, out_layer, use_batchnorm, use_relu, 512, 3, 1, 2,
        lr_mult=lr_mult)

现在,我们还应该看一下

ConvBNLayer
model_libs.py
的定义(从第30行开始):

def ConvBNLayer(net, from_layer, out_layer, use_bn, use_relu, num_output,
    kernel_size, pad, stride, dilation=1, use_scale=True, lr_mult=1,
    conv_prefix='', conv_postfix='', bn_prefix='', bn_postfix='_bn',
    scale_prefix='', scale_postfix='_scale', bias_prefix='', bias_postfix='_bias',
    **bn_params):

然后我们可以将这些信息拼凑在一起并添加一些猜测:

  • 从技术上讲

    conv#_1
    conv#_2
    始终是两个卷积网络层;即,
    ConvBNLayer
    的实例,在网络架构中紧接着一个接着一个。它们有时在输出通道数(例如上面的 256 与 512)、内核大小(例如上面的 1 与 3)、填充量(例如上面的 0 与 1)以及步幅(例如上面的 1 与 1)上有所不同。上面 2)。

  • 逻辑上,对于作者来说,这两层似乎被视为同一网络层的子层,因此有

    _1
    _2
    后缀。看图就清楚了,例如“Conv8_2”的插图,下面写的是:

    • 插图是作者认为其网络第 8 层的输出:输入图像的 10x10x512 特征空间表示。
    • “Conv: 1x1x256”意味着,我们首先有一个内核大小为 1 和 256 个输出通道的子层,然后是……
    • “Conv: 3x3x512-s2”,即内核大小为 3、512 个输出通道、步幅为 2 的子层。

请注意,图中层的名称和数量与

ssd_pascal.py
的名称和数量不匹配(后者在“conv9_2”之后结束,其步长与图中不同),但方案应该是同样,假设作者的工作具有一定的一致性。

至于你的最后一个问题:在SSD描述页面中,他们写的是例如

  • 从原始分类模型中删除了 conv5_x、avgpool、fc 和 softmax 层。
  • conv4_x 中的所有步幅均设置为 1x1。

我假设“x”只是作为后缀

_1
_2
的占位符,因此应解读如下:conv5_1和conv5_2被删除,conv4_1和conv4_2中的所有步幅都设置为1x1。

© www.soinside.com 2019 - 2024. All rights reserved.