chainer.functions.depthwise_convolution_2d(x, W, b=None, stride=1, pad=0)[source]

2次元の深さごとの畳込み関数。 

 

これは2次元の深さごとの畳込みの実装です。この関数は2つもしくは3つの変数をとります。すなわち、入力画像 x フィルター荷重 W、 そしてバイアスベクター b.の設定はオプションです。

 

表記法: 次元の表記法です。

  • \(n\)はバッチサイズ
  • \(c_I\)は入力数
  • \(c_M\)はチャンネルの乗数
  • \(h\) と \(w\) はそれぞれ入力画像の高さと幅
  • \(h_O\) と \(w_O\) はそれぞれ出力画像の高さと幅 
  • \(k_H\) と \(k_W\) はそれぞれフィルターの高さと幅 
Parameters:
  • x (chainer.Variable or numpy.ndarray or cupy.ndarray) – shapeが \((n, c_I, h, w)\)である入力値.
  • W (Variable) – shapeが \((c_M, c_I, k_H, k_W)\).である荷重変数
  • b (Variable) – 長さ \(c_M * c_I\)のバイアス変数 (オプション).
  • stride (int or pair of ints) – フィルター適用間隔。stride=s と stride=(s, s) は等しい
  • pad (int or pair of ints) – 入力配列の空間的パディング幅。pad=p と pad=(p, p) は等しい。
Returns:

出力値。shape が \((n, c_I * c_M, h_O, w_O)\)となる。

Return type:

Variable

 

Convolution2Dと同様に DepthwiseConvolution2Dxにおける、サイズ \((k_H, k_W)\) のフィルタとパッチの間の相関関係演算します。しかし、Convolution2Dとは異なり、DepthwiseConvolution2D はフィルターの入力チャンネルを加算せず、結合します。このため、深さごとの畳込みの出力の shape \((n, c_I * c_M, h_O, w_O)\)となり、 \(c_M\) はチャンネル乗数と呼ばれます。 

\((h_O, w_O)\) は Convolution2Dと等しい式によって決定されます。

バイアスベクトルが与えられている場合、全ての畳み込みの出力の空間的位置に加算されます。

L. Sifre. Rigid-motion scattering for image classificationもお読みください。

 

See also

DepthwiseConvolution2D

 

Example

 



>>> x = np.random.uniform(0, 1, (2, 3, 4, 7))
>>> W = np.random.uniform(0, 1, (2, 3, 3, 3))
>>> b = np.random.uniform(0, 1, (6,))
>>> y = F.depthwise_convolution_2d(x, W, b)
>>> y.shape (2, 6, 2, 5)