В чем разница между слоями SeparableConv2D и Conv2D? - PullRequest
0 голосов
/ 15 февраля 2019

Я не нашел однозначного ответа на этот вопрос онлайн (извините, если он существует).Я хотел бы понять различия между двумя функциями ( SeparableConv2D и Conv2D ), шаг за шагом, например, с входным набором данных (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

Я понимаюкак Keras вычисляет прогноз Conv2D для модели 2 благодаря этому посту , но может кто-то объяснить, пожалуйста, SeperableConv2D расчет прогноза модели 1 и его количество параметров (16)

1 Ответ

0 голосов
/ 15 февраля 2019

Поскольку Keras использует Tensorflow, вы можете проверить в API Tensorflow разницу.

conv2D - это традиционная свертка.Итак, у вас есть изображение с заполнением или без него и фильтр, который скользит по изображению с заданным шагом.

С другой стороны, SeparableConv2D - это вариант традиционной сверткиэто было предложено вычислить это быстрее.Он выполняет глубинную пространственную свертку, за которой следует точечная свертка, которая смешивает результирующие выходные каналы.Например, MobileNet использует эту операцию для более быстрого вычисления сверток.

Я мог бы объяснить обе операции здесь, однако, этот пост имеет очень хорошее объяснение с использованием изображений и видео, которые я настоятельно рекомендуюВам прочитать.

Я надеюсь, что это было полезно.

...