我看到很多网站都说我们可以用 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 吗?