示例#1
0
def upsample(x, factor: int):
    """ Up sample image by a factor of 2 using nearest neighbour.

    Example:
        a = C.input_variable((3, 32, 32)
        b = UpSampling2D(a)

        assert b.shape == (3, 64, 64)

    Arguments:
        x: input image tensor, assumed (channel, row, col)

    Returns:
        :class:`~cntk.ops.functions.Function`

    """
    # old implementation for upsample by factor 2
    # xr = C.reshape(x, (x.shape[0], x.shape[1], 1, x.shape[2], 1))
    # xx = C.splice(xr, xr, axis=-1)  # axis=-1 refers to the last axis
    # xy = C.splice(xx, xx, axis=-3)  # axis=-3 refers to the middle axis
    # r = C.reshape(xy, (x.shape[0], x.shape[1] * 2, x.shape[2] * 2))

    xx = C.splice(*[x for __ in range(factor * 2)], axis=0)
    r = C.depth_to_space(xx, factor)
    return r
示例#2
0
def test_depth_to_space(image_shape, num_channels, block_size, device_id,
                        precision):
    dev = cntk_device(device_id)
    from cntk.internal import sanitize_dtype_cntk

    input_val = np.array(np.reshape(range(num_channels), (num_channels, 1, 1)),
                         dtype=PRECISION_TO_TYPE[precision])
    input_val = np.tile(input_val, (1, ) + image_shape)
    img = C.input_variable(
        (num_channels, ) + image_shape,
        dtype=sanitize_dtype_cntk(PRECISION_TO_TYPE[precision]))

    # Result from depth_to_space node.
    depth_to_space_op = C.depth_to_space(img, block_size)
    output_test = depth_to_space_op.eval({img: input_val})

    # Reference result from simulating depth_to_space with other CNTK ops.
    h, w = image_shape
    reshape_node = C.reshape(img, (block_size, block_size, num_channels //
                                   (block_size**2), h, w))
    transpose_node = C.transpose(reshape_node, [2, 3, 0, 4, 1])
    depth_to_space_sim_op = C.reshape(
        transpose_node,
        (num_channels // (block_size**2), h * block_size, w * block_size))
    output_ref = depth_to_space_sim_op.eval({img: input_val})

    assert np.array_equal(output_test, output_ref)
示例#3
0
def test_space_to_depth(image_shape, num_channels, block_size, device_id, precision):
    dev = cntk_device(device_id)
    from cntk.internal import sanitize_dtype_cntk

    input_val = np.random.randint(low=0, high=100, size=(num_channels,) + image_shape).astype(PRECISION_TO_TYPE[precision])
    img = C.input_variable((num_channels,) + image_shape, dtype=sanitize_dtype_cntk(PRECISION_TO_TYPE[precision]))
    depth_to_space_op = C.depth_to_space(img, block_size)
    space_to_depth_op = C.space_to_depth(depth_to_space_op, block_size)
    output_val = np.squeeze(space_to_depth_op.eval({ img : input_val }), 0)

    assert np.array_equal(output_val, input_val)
示例#4
0
def test_DepthToSpace(tmpdir):
    num_channels = 9
    block_size = 3
    image_shape = (4, 5)
    input_val = np.array(np.reshape(range(num_channels), (num_channels, 1, 1)), dtype=np.float32)
    input_val = np.tile(input_val, (1,) + image_shape)
    input_val.shape = (1,) + input_val.shape
    img = C.input_variable((num_channels,) + image_shape, dtype=np.float32)
    model = C.depth_to_space(img, block_size)

    verify_one_input(model, input_val, tmpdir, 'DepthToSpace')
示例#5
0
def test_depth_to_space(image_shape, num_channels, block_size, output_ref, device_id, precision):
    dev = cntk_device(device_id)
    from cntk.internal import sanitize_dtype_cntk    

    input_val = np.array(np.reshape(range(num_channels), (num_channels, 1, 1)), dtype=PRECISION_TO_TYPE[precision])
    input_val = np.tile(input_val, (1,) + image_shape)
    img = C.input_variable((num_channels,) + image_shape, dtype=sanitize_dtype_cntk(PRECISION_TO_TYPE[precision]))
    depth_to_space_op = C.depth_to_space(img, block_size)
    output_test = depth_to_space_op.eval({ img : input_val })

    assert np.array_equal(output_test, output_ref)
示例#6
0
def test_space_to_depth(image_shape, num_channels, block_size, device_id, precision):
    dev = cntk_device(device_id)
    from cntk.internal import sanitize_dtype_cntk

    input_val = np.random.randint(low=0, high=100, size=(num_channels,) + image_shape).astype(PRECISION_TO_TYPE[precision])
    img = C.input_variable((num_channels,) + image_shape, dtype=sanitize_dtype_cntk(PRECISION_TO_TYPE[precision]))
    depth_to_space_op = C.depth_to_space(img, block_size)
    space_to_depth_op = C.space_to_depth(depth_to_space_op, block_size)
    output_val = np.squeeze(space_to_depth_op.eval({ img : input_val }), 0)

    assert np.array_equal(output_val, input_val)
示例#7
0
def test_DepthToSpace(tmpdir):
    num_channels = 9
    block_size = 3
    image_shape = (4, 5)
    input_val = np.array(np.reshape(range(num_channels), (num_channels, 1, 1)), dtype=np.float32)
    input_val = np.tile(input_val, (1,) + image_shape)
    input_val.shape = (1,) + input_val.shape
    img = C.input_variable((num_channels,) + image_shape, dtype=np.float32)
    model = C.depth_to_space(img, block_size)

    verify_one_input(model, input_val, tmpdir, 'DepthToSpace')
示例#8
0
def test_depth_to_space(image_shape, num_channels, block_size, output_ref, device_id, precision):
    dev = cntk_device(device_id)
    from cntk.internal import sanitize_dtype_cntk

    input_val = np.array(np.reshape(range(num_channels), (num_channels, 1, 1)), dtype=PRECISION_TO_TYPE[precision])
    input_val = np.tile(input_val, (1,) + image_shape)
    img = C.input_variable((num_channels,) + image_shape, dtype=sanitize_dtype_cntk(PRECISION_TO_TYPE[precision]))
    depth_to_space_op = C.depth_to_space(img, block_size)
    output_test = depth_to_space_op.eval({ img : input_val })

    assert np.array_equal(output_test, output_ref)
示例#9
0
def test_depth_to_space(image_shape, num_channels, block_size, device_id, precision):
    dev = cntk_device(device_id)
    from cntk.internal import sanitize_dtype_cntk

    input_val = np.array(np.reshape(range(num_channels), (num_channels, 1, 1)), dtype=PRECISION_TO_TYPE[precision])
    input_val = np.tile(input_val, (1,) + image_shape)
    img = C.input_variable((num_channels,) + image_shape, dtype=sanitize_dtype_cntk(PRECISION_TO_TYPE[precision]))

    # Result from depth_to_space node.
    depth_to_space_op = C.depth_to_space(img, block_size)
    output_test = depth_to_space_op.eval({ img : input_val })

    # Reference result from simulating depth_to_space with other CNTK ops.
    h, w = image_shape
    reshape_node = C.reshape(img, (block_size, block_size, num_channels // (block_size**2), h, w))
    transpose_node = C.transpose(reshape_node, [2, 3, 0, 4, 1])
    depth_to_space_sim_op = C.reshape(transpose_node, (num_channels // (block_size**2), h * block_size, w * block_size))
    output_ref = depth_to_space_sim_op.eval({ img : input_val })

    assert np.array_equal(output_test, output_ref)