【问题标题】:multi-level feature fusion in tensorflow张量流中的多级特征融合
【发布时间】:2018-03-25 20:36:35
【问题描述】:

我想知道如何在 Tensorflow组合具有不同空间空间的两个层。

例如::

batch_size = 3

input1 = tf.ones([batch_size, 32, 32, 3], tf.float32)
input2 = tf.ones([batch_size, 16, 16, 3], tf.float32)

filt1 = tf.constant(0.1, shape = [3,3,3,64])
filt1_1 = tf.constant(0.1, shape = [1,1,64,64])

filt2 = tf.constant(0.1, shape = [3,3,3,128])
filt2_2 = tf.constant(0.1, shape = [1,1,128,128])

#first layer
conv1 = tf.nn.conv2d(input1, filt1, [1,2,2,1], "SAME")
pool1 = tf.nn.max_pool(conv1, [1,2,2,1],[1,2,2,1], "SAME")

conv1_1 = tf.nn.conv2d(pool1,  filt1_1, [1,2,2,1], "SAME")
deconv1 = tf.nn.conv2d_transpose(conv1_1, filt1_1, pool1.get_shape().as_list(), [1,2,2,1], "SAME")

#seconda Layer
conv2 = tf.nn.conv2d(input2, filt2, [1,2,2,1], "SAME")
pool2 = tf.nn.max_pool(conv2, [1,2,2,1],[1,2,2,1], "SAME")

conv2_2 = tf.nn.conv2d(pool2,  filt2_2, [1,2,2,1], "SAME")
deconv2 = tf.nn.conv2d_transpose(conv2_2, filt2_2, pool2.get_shape().as_list(), [1,2,2,1], "SAME")

deconv1 形状 为 [3, 8, 8, 64],deconv2 形状 为 [3, 4, 4, 128]。这里我不能使用 tf.concat 来组合 deconv1deconv2。那我该怎么做???

编辑

这是我尝试实现的架构的图像:: 它与本文相关::

七。 He, W., Zhang, X. Y., Yin, F., & Liu, C. L. (2017)。深度直通 多向场景文本检测的回归。 arXiv 预印本 arXiv:1703.08289

【问题讨论】:

  • 我脑海中浮现的第一个答案,基于Tensorflow API,你不能做这个串联操作。由于 concat 可以在一个轴上完成(即 tf.concat([t3, t4], 1) 在第一个轴上),另一个轴应该具有相同的形状。让我知道你为什么要这样做,你的目的是什么?
  • 我尝试进行对象检测。该方法使用了一些卷积层,然后是池层(每个卷积层直接跟在池层之后)。然后我使用了反卷积层(UpSample),每个反卷积层采用不同的池层,例如 deconv1 将 pool1 作为输入,依此类推。我的问题在下一步:如何组合(融合)这些反卷积层???
  • 你不能这样做,你不能连接两个不同形状的矩阵,这些矩阵是由不同的池化层产生的。编辑您的问题并发布您要使用的架构,我会写给您最终的答案并指出如何使用瓶颈管道架构,例如:arxiv.org/pdf/1701.03056.pdf
  • 是的,我知道我不能使用 tf.concat,因为我问了这个问题。我想知道如何解决这个问题。我正在编辑我的问题,希望对您有用。并感谢您尝试帮助我。

标签: python-3.x tensorflow neural-network deep-learning conv-neural-network


【解决方案1】:

我检查了你指的那张纸,考虑到这个网络的输入图像大小为H x W(高度和宽度),我在每一层的侧面写了输出图像的大小。现在看最底层,我将输入箭头圈到该层,让我们检查一下。该层有两个输入,第一个来自前一层,形状为H/2 x W/2,第二个来自第一个池化层,大小也为H/2 x W/2。这两个输入合并在一起(不是串联,而是根据论文相加)并进入最后一个Upsample层,输出大小为H x W的图像。

其他Upsample 层也有相同的输入。如您所见,所有合并操作都具有匹配形状。另外,所有合并层的过滤器数量为128,与其他层一致。

您也可以使用concat 代替合并,但这会导致过滤器数量更大,请注意这一点。即合并两个形状为H/2 x W/2 x 128 的矩阵得到相同的形状H/2 x W/2 x 128,但在最后一个轴上连接两个矩阵,形状为H/2 x W/2 x 128 的结果为H/2 x W/2 x 256

我尽力为您提供指导,希望对您有用。

【讨论】:

  • 非常感谢阿里,解释清楚,很有用
猜你喜欢
  • 2017-07-16
  • 1970-01-01
  • 2013-07-23
  • 2018-09-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多