【问题标题】:Group Conv in TensorFlow 2TensorFlow 2 中的 Group Conv
【发布时间】:2021-06-25 16:17:11
【问题描述】:

TensorFlow2.x 是否支持组卷积?
看到很多帖子/博客/教程说TensorFlow不支持,也看到一些帖子说tf.keras.layers.DepthwiseConv2D相当于组卷积。但是,我注意到tf.keras.layers.Conv2d中有一个组参数,这是很多论文(例如ResNeXt论文)中描述的组卷积吗?还是我理解错了?
任何帮助和解释都会很棒!

edit:group conv(第三个)和等效的 parrellel conv(前两个)的示例。 ResNeXt 论文中的示例

pytorch中深度为4的32组的group conv,表示总输出通道为128:
torch.nn.Conv2d(in_channels=128, out_channels=128, kernel_size=(3,3), groups=32)

更具体地说,输入通道为 i 的 n 个组和深度为 d 的组卷积会将 i 个输入通道分成大小相等的 n 个组,每个组将是具有相同内核大小的普通卷积,步幅为 i/ n 个通道作为输入,d 个通道作为输出。所有组的输出将连接到 n*d 个通道中,并作为输入传递给下一层。

【问题讨论】:

  • 你能更详细地描述一下什么是组卷积吗?也许使用一个玩具输入示例及其预期输出。虽然我相信你的问题有答案,但由于它含糊不清,我没有信心回答。
  • @ibarrond 抱歉,我想不出一个具体的例子,但我刚刚更新了我的问题,显示了它的图像和 Pytorch 中的相应代码。它基本上是有几个并行的卷积层。

标签: tensorflow keras conv-neural-network tensorflow2


【解决方案1】:

是的,tensorflow 确实通过 groups 参数直接支持 Group Conv。来自 TF2 官方文档中的Conv2D arguments

groups:一个正整数,指定输入沿通道轴拆分的组数。每个组分别与过滤器/组过滤器进行卷积。输出是沿通道轴的所有组结果的串联。输入通道和过滤器都必须能被组整除。

【讨论】:

  • 非常感谢!我一开始也是这么想的,但是由于几乎每篇文章/教程都说TensorFlow不支持它,而且其中很多都是过去6个月写的,这让我很担心。我猜他们只是从过时的文章中复制了他们的教程。
【解决方案2】:

Tensorflow 2 绝对不支持分组卷积!

虽然文档声称它受 tf.keras.layers.Conv2D 支持,但作为“组”参数,当您尝试它时,您会收到经常报告的错误:

“UnimplementedError: Fused conv implementation 目前不支持分组卷积。”

此错误自 2019 年以来反复报告。

在 tf.keras.layers.DepthwiseConv2D 中单独支持深度卷积的特殊情况,即组数等于通道数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-26
    • 1970-01-01
    • 2019-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多