zoukankan      html  css  js  c++  java
  • CNN卷积汇总

     

    1,卷积作用:减少参数(卷积核参数共享),卷积过程中不断对上一个输出进行抽象,由局部特征归纳为全局特征(不同卷积层可视化可以观察到这点)

    2,卷积核

    早期卷积核由人工总结,如图像处理中有:

    深度神经网络中,卷积核则由网络训练过程中学习获得。

    3, 神经网络中的卷积类型

    • Group convolution:分组卷积。对通道channel进行分组后分别卷积。减少参数。

    比如输入和输出通道都为64,卷积核大小为3*3,则原始参数量为64*3*3*64=36864,通道分组为8组,每组输入输出都为32,参数量为8*8*3*3*8=4608。为原来的1/8。

    • Depthwise convolution卷积核深度为1,只对相应通道的空间部分卷积
    • Pointwise convolution:卷积核大小为1*1,只对通道部分卷积
    • Depthwise Separable convolution:上面2者结合即为此。先对每个通道的空间部分卷积,再对各个通道卷积,分离了空间与channel。减少参数。

    比如,输入通道为16,输出通道为32,使用卷积核大小3*3,如果直接卷积,则我们需要32个卷积核,每个参数为3*3*16,总参数为32*3*3*16=4608。分开操作时,第一步,我们每个卷积核只一个输入通道进行卷积,即对空间部分卷积,需要16个卷积核,每个3*3*1,共144个参数;第二步,对通道部分卷积,此时不需要对空间卷积了,所以卷积核大小为1*1(即保留原始空间信息),对16个通道卷积,即一个卷积核参数为1*1*16,输出32则用32个卷积核,共16*32=512个参数。总参数656个。参数量为原来的1/7。对于空间和通道较独立的数据,使用此方法不仅效率高,而且效果好。

    • Dilated convolution:空洞卷积。解决下采样(pooling)过程中信息丢失问题,实现像素级的语义分割。

     如图,卷积核大小不变,但是中间可以留空,这样可以增大卷积核的视野,而无需扩大卷积核大小(增加参数/计算量)。

    • 反卷积(转置卷积):反卷积核与元素卷积核的输入输出shape是交换形式,实现还原原始shape的操作。

    4,tensorflow实现

    常规卷积

    tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, data_format=None, Name=None)

    可以用高级API,这里步长对于样本和通道维度默认设为1了,所以只有2个参数。对于dilation也是如此。同时还有trainable等特性。

    tf.layers.Conv2D(
        filters,
        kernel_size,
        strides=(1, 1),
        padding='valid',
        data_format='channels_last',
        dilation_rate=(1, 1),
        activation=None,
        use_bias=True,
        kernel_initializer=None,
        bias_initializer=<tensorflow.python.ops.init_ops.Zeros object at 0x000001ECFFC4D188>,
        kernel_regularizer=None,
        bias_regularizer=None,
        activity_regularizer=None,
        kernel_constraint=None,
        bias_constraint=None,
        trainable=True,
        name=None,
        **kwargs,
    )

    Depthwise convolution

    tf.nn.depthwise_conv2d(input, filter, strides, padding, rate=None, name=None, data_format=None)

    Separable convolution

    tf.nn.separable_conv2d(input, depthwise_filter, pointwise_filter, strides, padding, rate=None, name=None, data_format=None)

    反卷积

    tf.nn.conv2d_transpose(value, filter, output_shape, strides, padding="SAME", data_format="NHWC", name=None)

    以上参数就不具体说明了,在此只是作个汇总,方便查看。

     参考资料

    https://www.cnblogs.com/noticeable/p/9197640.html

    https://www.cnblogs.com/cvtoEyes/p/8848815.html

  • 相关阅读:
    pair
    非整除集合
    集合 set
    实现字通配符*
    vector
    矩阵及其初等变换
    求数组中连续子数组(最少有一个元素)的最大和。
    最长上升序列(Lis)
    st表求区间最大值
    [Noip2015] 信息传递
  • 原文地址:https://www.cnblogs.com/lunge-blog/p/11876606.html
Copyright © 2011-2022 走看看