美文网首页tensorflow相关
非对称卷积—Asymmetric Convolutions

非对称卷积—Asymmetric Convolutions

作者: Traphix | 来源:发表于2016-07-14 10:18 被阅读1339次

    最近拜读了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

        本文链接:https://www.haomeiwen.com/subject/wpeejttx.html