【问题标题】:What is the difference between SeparableConv2D and Conv2D layers?SeparableConv2D 和 Conv2D 层有什么区别?
【发布时间】:2019-07-09 08:43:00
【问题描述】:

我没有在网上找到这个问题的明确答案(抱歉,如果有的话)。 我想逐步了解这两个函数(SeparableConv2DConv2D)之间的区别,例如输入数据集 (3,3, 3)(作为 RGB 图像)。

基于 Keras-Tensorflow 运行此脚本:

import numpy as np
from keras.layers import Conv2D, SeparableConv2D
from keras.models import Model
from keras.layers import Input

red   = np.array([1]*9).reshape((3,3))
green = np.array([100]*9).reshape((3,3))
blue  = np.array([10000]*9).reshape((3,3))

img = np.stack([red, green, blue], axis=-1)
img = np.expand_dims(img, axis=0)

inputs = Input((3,3,3))
conv1 = SeparableConv2D(filters=1, 
              strides=1, 
              padding='valid', 
              activation='relu',
              kernel_size=2, 
              depth_multiplier=1,
              depthwise_initializer='ones',
              pointwise_initializer='ones',
              bias_initializer='zeros')(inputs)

conv2 = Conv2D(filters=1, 
              strides=1, 
              padding='valid', 
              activation='relu',
              kernel_size=2, 
              kernel_initializer='ones', 
              bias_initializer='zeros')(inputs)

model1 = Model(inputs,conv1)
model2 = Model(inputs,conv2)
print("Model 1 prediction: ")
print(model1.predict(img))
print("Model 2 prediction: ")
print(model2.predict(img))
print("Model 1 summary: ")
model1.summary()
print("Model 2 summary: ")
model2.summary()

我有以下输出:

Model 1 prediction:
 [[[[40404.]
   [40404.]]
  [[40404.]
   [40404.]]]]
Model 2 prediction: 
[[[[40404.]
   [40404.]]
  [[40404.]
   [40404.]]]]
Model 1 summary: 
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_1 (InputLayer)         (None, 3, 3, 3)           0         
_________________________________________________________________
separable_conv2d_1 (Separabl (None, 2, 2, 1)           16        
=================================================================
Total params: 16
Trainable params: 16
Non-trainable params: 0
_________________________________________________________________
Model 2 summary: 
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_1 (InputLayer)         (None, 3, 3, 3)           0         
_________________________________________________________________
conv2d_1 (Conv2D)            (None, 2, 2, 1)           13        
=================================================================
Total params: 13
Trainable params: 13
Non-trainable params: 0

感谢this post,我了解 Keras 如何计算模型 2 的 Conv2D 预测,但有人可以解释一下模型 1 预测的 SeperableConv2D 计算及其数量参数 (16) ?

【问题讨论】:

    标签: keras convolution keras-layer


    【解决方案1】:

    由于 Keras 使用 Tensorflow,您可以在 Tensorflow 的 API 中查看差异。

    conv2D 是传统的卷积。所以,你有一个图像,有或没有填充,过滤器以给定的步幅在图像中滑动。

    另一方面,SeparableConv2D 是传统卷积的变体,旨在更快地计算它。 它执行深度空间卷积,然后执行点卷积,将生成的输出通道混合在一起。例如,MobileNet 使用此操作来更快地计算卷积。

    我可以在这里解释这两种操作,但是,post 使用图像和视频进行了很好的解释,我强烈建议您阅读。

    【讨论】:

    • 感谢您的分享,它有助于理解 SeparableConv2D。我来看看我没有为我的可分离卷积初始化深度和点部分,所以我得到了不同的预测......对不起
    • 希望您能赐教!我阅读了一些指南,他们说 SeparableConv2D 主要用于训练在相机、机器人等小型设备上工作……因为它们在硬件方面存在限制。那么如果他们在所有模型中都使用 SeparableConv2D 而不是传统的 Conv2D 呢?传统方式还有优点吗? Tks
    猜你喜欢
    • 2019-09-19
    • 2020-03-01
    • 2020-09-10
    • 2010-09-12
    • 2020-12-04
    • 2010-10-16
    • 1970-01-01
    • 2020-04-23
    • 2018-01-21
    相关资源
    最近更新 更多