非对称卷积—Asymmetric Convolutions

最近拜读了Christian Szegedy的Rethinking the Inception Architecture for Computer Vision,让我开了许多脑洞。不得不承认,现在的深度学习发展太快了,稍不留神,1年前的许多方法都过时了。上面这篇文章应该是GoogLeNet的延伸吧,Christian Szegedy在发布GoogLeNet之后,又完善了网络一下(变得更复杂),然后写了上面的文章。

可能是我读论文读的太少,我第一次在Inception Architecture中见到了非对称卷积。什么意思呢?就是平常我们看到的卷积核一般都是 1x1、3x3、5x5 大小,Inception Architecture中用的卷积核是 7x1、1x7,先不提Inception Architecture的网络结构有多奇葩,光这个非对称kernel就很诡异了。

于是,为了有个形象的理解,我就写了个小小的测试程序:

import tensorflow as tf

x = tf.Variable(tf.ones([1, 4, 4, 1]))
w = tf.Variable(tf.ones([3, 1, 1, 1]))
output = tf.nn.conv2d(x, w, strides=[1, 1, 1, 1], padding='SAME')

init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)

对比一下输入和输出(我把4维向量2维化了,方便理解):

w =  [1 1 1] # 非对称卷积核

x = [[1 1 1 1],     output = [[2 3 3 2], # 输入和输出
     [1 1 1 1],               [2 3 3 2],
     [1 1 1 1],               [2 3 3 2],
     [1 1 1 1]]               [2 3 3 2]]

有了上面的运算结果,就一目了然了,但采用这种非对称卷积的目的何在?原因总结如下:

  • 1、先进行 n×1 卷积再进行 1×n 卷积,与直接进行 n×n 卷积的结果是等价的。原文如下:

In theory, we could go even further and argue that one can replace any n × n convolution by a 1 × n convolution followed by a n × 1 convolution

  • 2、非对称卷积能够降低运算量,这个很好理解吧,原来是 n×n 次乘法,改了以后,变成了 2×n 次乘法了,n越大,运算量减少的越多,原文如下:

the computational cost saving increases dramatically as n grows.

  • 3、虽然可以降低运算量,但这种方法不是哪儿都适用的,非对称卷积在图片大小介于12×12到20×20大小之间的时候,效果比较好,具体原因未知。。。原文如下:

In practice, we have found that employing this factorization does not work well on early layers, but it gives very good results on medium grid-sizes (On m×m feature maps, where m ranges between 12 and 20).

你可能感兴趣的:(非对称卷积—Asymmetric Convolutions)