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