关于“1x3 和 3x1 conv 等同于 3x3 conv”的问题

数据挖掘 深度学习 神经网络 卷积神经网络 核心
2022-02-17 00:00:02

我看到很多网站都说我们可以用 1x3 conv + 3x1 conv 代替 3x3 conv。

为了便于演示,我们以 3x3 图像为例。

从参数的角度来看,我知道我们会得到更少的参数并最终得到相同的结果。
如果图像(3x3)执行 3x3 转换,我们将得到一个 1x1 标量,这个内核大小是 3x3,意味着我们有 9 个参数。
另一方面,如果图像先进行 1x3 卷积,然后对其输出进行 3x1 卷积。它会直观地得到相同的结果,一个 1x1 的标量,而这个内核大小是 2x3x1 = 6,这意味着我们有 6 个参数。

但是,从计算时间的角度来看,我认为 3x3 不应该被 1x3 & 3x1 代替。

例如,如果我们使用图像执行 3x3 内核,我们应该进行 9 次逐像素乘法运算,然后进行 1 次加法运算。总共 10 次操作得到结果。

但是,如果我们使用 image(3x3) 来执行 3x1 内核,我们必须执行 [3(multiply) + 1(add)] * 3 次才能得到 1x3 特征图,那么我们仍然需要执行 1x3 内核. 然后它将进行 3(乘)+ 1(加)操作。整个过程共有16个操作。

我想展示的是,虽然我们将参数从替换 3x3 conv 减少到 3x1 & 1x3 conv,但在训练过程中我们仍然需要更多的时间来计算。

培训花费大量时间,实施 3x1 和 1x3 并不能节省我们的时间。那么,我们应该用 1x3 conv + 3x1 conv 代替 3x3 conv 吗?

1个回答

3x3 卷积可以做 1x3 后跟 3x1 不能做的事情,例如对角线过滤。

正如您所说,这完全取决于参数的数量,第一个卷积比第二个解决方案具有更多的能力。