【问题标题】:Mobilenet architecture移动网络架构
【发布时间】:2021-09-11 12:56:01
【问题描述】:

上图包含 mobilenet 架构,在第一行中,输入大小为 224x224x3,过滤器形状为 3x3x3x32,步长为 2。如果我们应用公式 out_size = ((input_size - filter_size + 2* padding)/stride)+1,(padding = 0) 我们得到 out_size 为 (224-3+2(0))/2 + 1 = 111.5 ,但在第二行中,输入大小被称为 112x112x32。我是这些概念的新手,谁能解释我哪里出错了?

【问题讨论】:

  • 我投票结束这个问题,因为它与 help center 中定义的编程无关,而是关于 ML 理论和/或方法 - 请参阅 deep-learning @ 中的介绍和注意事项987654323@.

标签: tensorflow deep-learning computer-vision conv-neural-network mobilenet


【解决方案1】:

你没有看错,不填充第一个 2D 卷积层的输出形状是不够的。

要实现它,您必须在左右维度的一侧设置内边距,在上下维度的一侧设置内边距。这样,您将获得 225x225x3 的输入形状,这将在步长 2 和内核 3x3 的 2D 卷积之后产生正确的输出形状。

使用 PyTorch,您可以简单地将 padding=1 设置为

torch.nn.Conv2d(in_channels=3, out_channels=32, kernel_size=(3,3), stride=2, padding=1)

它会理解不可能在每个维度的两侧进行填充,并返回形状为 (112, 112, 32) 的输出。

【讨论】:

  • “在顶部和底部维度的一侧填充。这样你将有一个 225x225x3 的输入形状”,此时会令人困惑,如果我在左侧添加一个填充 -右和上下边距,像素数将变为 226x226x3 对吗?
  • 如果你通过PyTorch source code,你会发现“padding=1”将两个轴上的零连接成226x226x3的形状。但是,一旦达到最后一个非填充值,从左到右和从上到下的卷积将在每个轴上停止。也就是说,在 MobileNet 示例中,最后一行和最后一列零没有使用:因此卷积对 225x225x3 图像进行操作。见图2.7 here
猜你喜欢
  • 1970-01-01
  • 2017-05-10
  • 1970-01-01
  • 2010-10-10
  • 2021-02-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多