chainer.functions.upsampling_2d(x, indexes, ksize, stride=None, pad=0, outsize=None, cover_all=True)[source]

プーリング・インデックスを用いたアップサンプリング。

 

この関数はプーリング・インデックスを用いたアップサンプリングされた画像を生成する。

 

Example

 

 

このupsampling_2d()のためにプーリングインデックスを生成するmax_pooling_2d() 関数を実行する時chainer.config.use_cudnn フラグをオフに必要があることを注意しなければなりません。 なぜなら、cuDNNがこの処理使われる場合に、indexes が MaxPooling2D オブジェクトで生成されることも格納されることも絶対にないからです。

 

>>> x = np.arange(1, 37).reshape(1, 1, 6, 6).astype('f')

>>> x = chainer.Variable(x)
>>> x.data
array([[[[ 1., 2., 3., 4., 5., 6.],
[ 7., 8., 9., 10., 11., 12.],
[13., 14., 15., 16., 17., 18.],
[19., 20., 21., 22., 23., 24.],
[25., 26., 27., 28., 29., 30.],
[31., 32., 33., 34., 35., 36.]]]], dtype=float32)

 これはマックスプーリング前の素のl x データです。

 

>>> p = F.MaxPooling2D(2, 2)

>>> with chainer.using_config('use_cudnn', 'never'):
... pooled_x = p.apply((x,))[0]
>>> pooled_x.data
array([[[[ 8., 10., 12.],
[20., 22., 24.],
[32., 34., 36.]]]], dtype=float32)

これはマックスプリング後の出力です。 upsampling_2d() はマックスプーリングオブジェクト pに格納された indexes 配列を必要とします。 

 

>>> upsampled_x = F.upsampling_2d(
...     pooled_x, p.indexes, p.kh, p.sy, p.ph, x.shape[2:])

>>> upsampled_x.shape (1, 1, 6, 6)
>>> upsampled_x.data
array([[[[ 0., 0., 0., 0., 0., 0.],
[ 0., 8., 0., 10., 0., 12.],
[ 0., 0., 0., 0., 0., 0.],
[ 0., 20., 0., 22., 0., 24.],
[ 0., 0., 0., 0., 0., 0.],
[ 0., 32., 0., 34., 0., 36.]]]], dtype=float32)

 

Parameters:
  • x (Variable) – 入力値
  • indexes (ndarray or ndarray) – Index array that was used to calculate x with MaxPooling2Dでxを計算する為に利用されるインデックス配列。
  • ksize (int or (int, int)) –  xを計算するために用いられるMaxPooling2D オブジェクトのksize 属性。
  • stride (int or (int, int)) – xを計算するために用いられるMaxPooling2D オブジェクトのストライド 属性。
  • pad (int or (int, int)) –xを計算するために用いられるMaxPooling2D オブジェクトのpad 属性。
  • outsize ((int, int)) – 予期される出力サイズ(高さ,幅)
  • cover_all (bool) – cover_all がMaxPooling2D オブジェクトで用いられているか、いないか。
Returns:

出力値

Return type:

Variable