CNNの畳み込み概要

 

1は、畳み込み関数:パラメータ(パラメータ共有コンボリューションカーネル)を減少させる、連続して出力抽象的にコンボリューション処理は、局所特徴グローバル機能によって要約されている(畳み込み異なる層は視点ことが観察されてもよいです)

2、畳み込みカーネル

画像処理があるとして、早期の畳み込みカーネルは、手動で要約しました:

取得するために学習することにより、ニューラルネットワーク、コンボリューションカーネルのネットワークトレーニングプロセスの深さ。

3、ニューラルネットワーク畳み込みタイプ

  • グループのコンボリューション:パケット畳み込み。各コンボリューション通路チャネルグルーピング後。削減パラメータ。

入出力チャンネルが64であるような、コンボリューションカーネルのサイズは、3×3の量が元のパラメータである64 * 64 * 3 * 3 = 36864、チャネル32は、入力および出力パラメータの量である8つのグループにグループ化されます8 * 8 * 8 * 3 * 3 = 4608。オリジナル1/8。

  • たたみ込み深1の畳込み深さ、対応するチャネルの空間部分のみ畳み込み
  • 点別畳み込み:コンボリューションカーネルのサイズは、チャネル部分のみ畳み込み1 * 1であります
  • 深さ方向分離型の畳み込み:2は、上記すなわち、この目的のために組み合わせました。各空間チャネルの畳み込みの最初の部分は、各チャンネルの畳み込み次いで、チャネルの空間的分離。削減パラメータ。

例えば、3×3のコンボリューションカーネルのサイズを使用して、入力チャンネル16、出力チャネル32は、直接畳み込み場合、我々は32を必要とするコンボリューションカーネルは、各パラメータは、16 * 3 * 3、32個のパラメータの合計であり、* 3 * 3 * 16 = 4608。別々に動作するとき、最初のステップは、我々各コンボリューションカーネルの畳み込みのみつの入力チャンネル、すなわち空間部畳み込み、畳み込みカーネルは、16各1 * 3 * 3、144個のパラメータの合計を必要とする最初の二つのステップ、チャネル畳み込みの一部に、コンボリューションカーネルのサイズは* 1(すなわち、元の空間情報を保存するために)、チャネル16の畳み込み、すなわちA畳み込みカーネルパラメータであるので、この時点では必要とされない畳み込み空間1 * 1 * 16、畳み込みカーネル32、16 * 32 = 512パラメータと出力32。総パラメータ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

 

おすすめ

転載: www.cnblogs.com/lunge-blog/p/11876606.html