Definition: Depthwise Convolution

Bei der Depthwise Convolution wird jeder Filter auf genau einem Channel ausgeführt.

Haben wir als Input ein RGB Bild: , so werden intern 3 verschiedene Filter erstellt, wobei jeder Filter exklusiv für einen der 3 Input-Channel zuständig ist.

Als Ergebnis erhalten wir (mit padding=same) drei verschiedene -Feature Maps.

Wollen wir die Anzahl der Feature Maps erhöhen, erstellen wir einfach weitere -er Filter-Paare.

Anmerkung

Snippet: Depthwise Conv in Keras und PyTorch

In Keras erhalten wir eine Depthwise Convolution durch

import numpy as np
import keras
 
x = np.random.rand(1, 96, 96, 3)
 
layer = keras.layers.DepthwiseConv2D((3,3), depth_multiplier=4, activation='relu', padding="same")
y = layer(x)
 
print(layer.count_params())
# 120
 
print(y.shape)
# (1, 96, 96, 12)

In PyTorch erhalten wir eine Depthwise Convolution durch

from torch import nn
def count_parameters(model):
    return sum(p.numel() for p in model.parameters() if p.requires_grad)
 
layer = nn.Conv2d(in_channels=3, out_channels=12, kernel_size=(3,3), groups=3)
 
print(count_parameters(layer))
# 120

wobei für Depthwise Convolution gelten muss, dass in_channels=groups.