SpaceToDepth#

SpaceToDepth - 13#

Version

  • name: SpaceToDepth (GitHub)

  • domain: main

  • since_version: 13

  • function: False

  • support_level: SupportType.COMMON

  • shape inference: True

This version of the operator has been available since version 13.

Summary

SpaceToDepth rearranges blocks of spatial data into depth. More specifically, this op outputs a copy of the input tensor where values from the height and width dimensions are moved to the depth dimension.

Attributes

  • blocksize (required): Blocks of [blocksize, blocksize] are moved.

Inputs

  • input (heterogeneous) - T: Input tensor of [N,C,H,W], where N is the batch axis, C is the channel or depth, H is the height and W is the width.

Outputs

  • output (heterogeneous) - T: Output tensor of [N, C * blocksize * blocksize, H/blocksize, W/blocksize].

Type Constraints

  • T in ( tensor(bfloat16), tensor(bool), tensor(complex128), tensor(complex64), tensor(double), tensor(float), tensor(float16), tensor(int16), tensor(int32), tensor(int64), tensor(int8), tensor(string), tensor(uint16), tensor(uint32), tensor(uint64), tensor(uint8) ): Constrain input and output types to all tensor types.

Examples

default

b, c, h, w = shape = (2, 2, 6, 6)
blocksize = 2
node = onnx.helper.make_node(
    "SpaceToDepth",
    inputs=["x"],
    outputs=["y"],
    blocksize=blocksize,
)
x = np.random.random_sample(shape).astype(np.float32)
tmp = np.reshape(
    x, [b, c, h // blocksize, blocksize, w // blocksize, blocksize]
)
tmp = np.transpose(tmp, [0, 3, 5, 1, 2, 4])
y = np.reshape(tmp, [b, c * (blocksize**2), h // blocksize, w // blocksize])
expect(node, inputs=[x], outputs=[y], name="test_spacetodepth")

_example

node = onnx.helper.make_node(
    "SpaceToDepth",
    inputs=["x"],
    outputs=["y"],
    blocksize=2,
)

# (1, 1, 4, 6) input tensor
x = np.array(
    [
        [
            [
                [0, 6, 1, 7, 2, 8],
                [12, 18, 13, 19, 14, 20],
                [3, 9, 4, 10, 5, 11],
                [15, 21, 16, 22, 17, 23],
            ]
        ]
    ]
).astype(np.float32)

# (1, 4, 2, 3) output tensor
y = np.array(
    [
        [
            [[0, 1, 2], [3, 4, 5]],
            [[6, 7, 8], [9, 10, 11]],
            [[12, 13, 14], [15, 16, 17]],
            [[18, 19, 20], [21, 22, 23]],
        ]
    ]
).astype(np.float32)
expect(node, inputs=[x], outputs=[y], name="test_spacetodepth_example")

Differences

00SpaceToDepth rearranges blocks of spatial data into depth. More specifically,SpaceToDepth rearranges blocks of spatial data into depth. More specifically,
11this op outputs a copy of the input tensor where values from the height and width dimensionsthis op outputs a copy of the input tensor where values from the height and width dimensions
22are moved to the depth dimension.are moved to the depth dimension.
33
44**Attributes****Attributes**
55
66* **blocksize** (required):* **blocksize** (required):
77 Blocks of [blocksize, blocksize] are moved. Blocks of [blocksize, blocksize] are moved.
88
99**Inputs****Inputs**
1010
1111* **input** (heterogeneous) - **T**:* **input** (heterogeneous) - **T**:
1212 Input tensor of [N,C,H,W], where N is the batch axis, C is the Input tensor of [N,C,H,W], where N is the batch axis, C is the
1313 channel or depth, H is the height and W is the width. channel or depth, H is the height and W is the width.
1414
1515**Outputs****Outputs**
1616
1717* **output** (heterogeneous) - **T**:* **output** (heterogeneous) - **T**:
1818 Output tensor of [N, C * blocksize * blocksize, H/blocksize, Output tensor of [N, C * blocksize * blocksize, H/blocksize,
1919 W/blocksize]. W/blocksize].
2020
2121**Type Constraints****Type Constraints**
2222
2323* **T** in (* **T** in (
24 tensor(bfloat16),
2425 tensor(bool), tensor(bool),
2526 tensor(complex128), tensor(complex128),
2627 tensor(complex64), tensor(complex64),
2728 tensor(double), tensor(double),
2829 tensor(float), tensor(float),
2930 tensor(float16), tensor(float16),
3031 tensor(int16), tensor(int16),
3132 tensor(int32), tensor(int32),
3233 tensor(int64), tensor(int64),
3334 tensor(int8), tensor(int8),
3435 tensor(string), tensor(string),
3536 tensor(uint16), tensor(uint16),
3637 tensor(uint32), tensor(uint32),
3738 tensor(uint64), tensor(uint64),
3839 tensor(uint8) tensor(uint8)
3940 ): ):
4041 Constrain input and output types to all tensor types. Constrain input and output types to all tensor types.

SpaceToDepth - 1#

Version

  • name: SpaceToDepth (GitHub)

  • domain: main

  • since_version: 1

  • function: False

  • support_level: SupportType.COMMON

  • shape inference: True

This version of the operator has been available since version 1.

Summary

SpaceToDepth rearranges blocks of spatial data into depth. More specifically, this op outputs a copy of the input tensor where values from the height and width dimensions are moved to the depth dimension.

Attributes

  • blocksize (required): Blocks of [blocksize, blocksize] are moved.

Inputs

  • input (heterogeneous) - T: Input tensor of [N,C,H,W], where N is the batch axis, C is the channel or depth, H is the height and W is the width.

Outputs

  • output (heterogeneous) - T: Output tensor of [N, C * blocksize * blocksize, H/blocksize, W/blocksize].

Type Constraints

  • T in ( tensor(bool), tensor(complex128), tensor(complex64), tensor(double), tensor(float), tensor(float16), tensor(int16), tensor(int32), tensor(int64), tensor(int8), tensor(string), tensor(uint16), tensor(uint32), tensor(uint64), tensor(uint8) ): Constrain input and output types to all tensor types.