(x, k, upx, upy, downx, downy, padx0, padx1, pady0, pady1)
return x[:, ::downy, ::downx, :]
Slow reference implementation of `upfirdn_2d()` using standard TensorFlow ops.
Slow reference implementation of `upfirdn_2d()` using standard TensorFlow ops.
Slow reference implementation of upfirdn_2d () using standard TensorFlow ops .
def _upfirdn_2d_ref(x, k, upx, upy, downx, downy, padx0, padx1, pady0, pady1):
    """Slow reference implementation of `upfirdn_2d()` using standard TensorFlow ops."""

    x = tf.convert_to_tensor(x)
    k = np.asarray(k, dtype=np.float32)
    assert x.shape.rank == 4
    inH = x.shape[1].value
    inW = x.shape[2].value
    minorDim = _shape(x, 3)
    kernelH, kernelW = k.shape
    assert inW >= 1 and inH >= 1
    assert kernelW >= 1 and kernelH >= 1
    assert isinstance(upx, int) and isinstance(upy, int)
    assert isinstance(downx, int) and isinstance(downy, int)
    assert isinstance(padx0, int) and isinstance(padx1, int)
    assert isinstance(pady0, int) and isinstance(pady1, int)

    # Upsample (insert zeros).
    x = tf.reshape(x, [-1, inH, 1, inW, 1, minorDim])
    x = tf.pad(x, [[0, 0], [0, 0], [0, upy - 1], [0, 0], [0, upx - 1], [0, 0]])
    x = tf.reshape(x, [-1, inH * upy, inW * upx, minorDim])

    # Pad (crop if negative).
    x = tf.pad(x, [[0, 0], [max(pady0, 0), max(pady1, 0)], [max(padx0, 0), max(padx1, 0)], [0, 0]])
    x = x[:, max(-pady0, 0) : x.shape[1].value - max(-pady1, 0), max(-padx0, 0) : x.shape[2].value - max(-padx1, 0), :]

    # Convolve with filter.
    x = tf.transpose(x, [0, 3, 1, 2])
    x = tf.reshape(x, [-1, 1, inH * upy + pady0 + pady1, inW * upx + padx0 + padx1])
    w = tf.constant(k[::-1, ::-1, np.newaxis, np.newaxis], dtype=x.dtype)
    x = tf.nn.conv2d(x, w, strides=[1,1,1,1], padding='VALID', data_format='NCHW')
    x = tf.reshape(x, [-1, minorDim, inH * upy + pady0 + pady1 - kernelH + 1, inW * upx + padx0 + padx1 - kernelW + 1])
    x = tf.transpose(x, [0, 2, 3, 1])

    # Downsample (throw away pixels).
    return x[:, ::downy, ::downx, :]
def _upfirdn_2d_ref ( x , k , upx , upy , downx , downy , padx0 , padx1 , pady0 , pady1 ) : x = tf . convert_to_tensor ( x ) k = np . asarray ( k , dtype = np . float32 ) assert x . shape . rank == 4 inH = x . shape [ 1 ] . value inW = x . shape [ 2 ] . value minorDim = _shape ( x , 3 ) kernelH , kernelW = k . shape assert inW >= 1 and inH >= 1 assert kernelW >= 1 and kernelH >= 1 assert isinstance ( upx , int ) and isinstance ( upy , int ) assert isinstance ( downx , int ) and isinstance ( downy , int ) assert isinstance ( padx0 , int ) and isinstance ( padx1 , int ) assert isinstance ( pady0 , int ) and isinstance ( pady1 , int ) # Upsample (insert zeros). x = tf . reshape ( x , [ - 1 , inH , 1 , inW , 1 , minorDim ] ) x = tf . pad ( x , [ [ 0 , 0 ] , [ 0 , 0 ] , [ 0 , upy - 1 ] , [ 0 , 0 ] , [ 0 , upx - 1 ] , [ 0 , 0 ] ] ) x = tf . reshape ( x , [ - 1 , inH * upy , inW * upx , minorDim ] ) # Pad (crop if negative). x = tf . pad ( x , [ [ 0 , 0 ] , [ max ( pady0 , 0 ) , max ( pady1 , 0 ) ] , [ max ( padx0 , 0 ) , max ( padx1 , 0 ) ] , [ 0 , 0 ] ] ) x = x [ : , max ( - pady0 , 0 ) : x . shape [ 1 ] . value - max ( - pady1 , 0 ) , max ( - padx0 , 0 ) : x . shape [ 2 ] . value - max ( - padx1 , 0 ) , : ] # Convolve with filter. x = tf . transpose ( x , [ 0 , 3 , 1 , 2 ] ) x = tf . reshape ( x , [ - 1 , 1 , inH * upy + pady0 + pady1 , inW * upx + padx0 + padx1 ] ) w = tf . constant ( k [ : : - 1 , : : - 1 , np . newaxis , np . newaxis ] , dtype = x . dtype ) x = tf . nn . conv2d ( x , w , strides = [ 1 , 1 , 1 , 1 ] , padding = 'VALID' , data_format = 'NCHW' ) x = tf . reshape ( x , [ - 1 , minorDim , inH * upy + pady0 + pady1 - kernelH + 1 , inW * upx + padx0 + padx1 - kernelW + 1 ] ) x = tf . transpose ( x , [ 0 , 2 , 3 , 1 ] ) # Downsample (throw away pixels). return x [ : , : : downy , : : downx , : ]