【问题标题】:What do the dimensions mean while using images in CNNs?在 CNN 中使用图像时,尺寸意味着什么?
【发布时间】:2020-10-14 17:29:06
【问题描述】:

请浏览下面的代码。图像尺寸为 (32, 256, 256, 6)。我认为没有必要知道 net 是什么以及它的作用。我的问题纯粹是分析性的。

      net = slim.conv2d(input_images, 64, [5, 5], stride=1, scope='conv1') 
      net = slim.max_pool2d(net, [2, 2], scope='pool1') # image size is (batch_size, 256 , 256 , 6)

      net = slim.conv2d(net, 128, [5, 5], stride=1, scope='conv2')
      net = slim.max_pool2d(net, [2, 2], scope='pool2')

      net = slim.conv2d(net, 256, [3, 3], stride=1, scope='conv3')
      net = slim.max_pool2d(net, [2, 2], scope='pool3')

      net = tf.image.resize_bilinear(net, [64,64])
      net = slim.conv2d(net, 256, [3, 3], stride=1, scope='conv4')
      
      net = tf.image.resize_bilinear(net, [128,128])
      net = slim.conv2d(net, 128, [3, 3], stride=1, scope='conv5')

      net = tf.image.resize_bilinear(net, [256,256]) #(32 , 256 , 256 , 3)

      
      net = slim.conv2d(net, 64, [5, 5], stride=1, scope='conv6')

net = slim.conv2d(net, 3, [5, 5], stride=1, activation_fn=tf.tanh,
normalizer_fn=None, scope='conv7') #  32*248*248*3

据我说,net 的维度是 (32, 248, 248, 3)。但显然根据论文应该是 (32, 256, 256, 3)。

问题1) 我哪里出错了?

Ques2) 在 slim.conv2d 中,64 和 [5,5] 到底是什么?我认为它们是过滤器的数量,而 5*5 是内核的维度。但是由于我得到错误的尺寸,我在这里也错了吗?

问题3) 你说的(32,256,256,3)是不是说有32个样本,256*256是像素强度,3是通道数?

问题4)我知道这可能很难回答,但有人可以告诉我首先减小尺寸然后再次增加尺寸的需要是什么?非常感谢该概念的链接。

【问题讨论】:

    标签: tensorflow image-processing conv-neural-network


    【解决方案1】:
    1. 我认为您使用 [32, 248, 248, 3] 而不是您想要的 [32, 256, 256, 3] 的原因是因为填充。简而言之,当您进行卷积时,卷积窗口(又名内核)不一定与图像完美匹配,因此图像在外部填充了零以使其适合。根据您的代码,未指定填充,因此请尝试将 padding='same' 添加到您的 conv2d 图层中。

    2. 关于 64 和 [5, 5] 的含义,您在这里是正确的。过滤器的数量在这里没有影响。如果我在 (1) 中的回答是正确的,那么内核与您所遇到的维度差距有关,但不是原因。但是,理想情况下,您应该能够将其设置为 3、5 或其他任何值,而不会出现问题。参考(1)。

    3. 32 对应于样本,如您所说。换句话说,它是批量大小。图像大小本身为 256 x 256 像素(高度和宽度)。 3 个通道对应于每个像素的红色、蓝色和绿色强度。如果图像是灰度图像,则只有 1 个通道。在 Tensorflow 中,约定是 (N,H,W,C),表示样本数、高度、宽度、通道数。请注意,输入和输出的通道通常为 3,但它会根据您使用的过滤器数量在隐藏层中发生变化。

    4. 减少然后增加图像的高度和宽度对于某些任务(例如图像分割)有好处,在这些任务中,您可以减少图像中的信息。我们称网络的前半部分为编码阶段,后半部分为解码阶段。我认为它通过缩小图像尺寸来消除前半部分不必要的信息,然后在后半部分将其恢复为原始大小。这只是我的解释。执行此操作的著名模型称为 U-net。 https://arxiv.org/abs/1505.04597

    【讨论】:

      猜你喜欢
      • 2019-05-12
      • 2020-06-06
      • 1970-01-01
      • 2021-03-31
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多