(l-onnx-doc-DepthToSpace)= # DepthToSpace (l-onnx-op-depthtospace-13)= ## DepthToSpace - 13 ### Version - **name**: [DepthToSpace (GitHub)](https://github.com/onnx/onnx/blob/main/docs/Operators.md#DepthToSpace) - **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 DepthToSpace rearranges (permutes) data from depth into blocks of spatial data. This is the reverse transformation of SpaceToDepth. More specifically, this op outputs a copy of the input tensor where values from the depth dimension are moved in spatial blocks to the height and width dimensions. By default, `mode` = `DCR`. In the DCR mode, elements along the depth dimension from the input tensor are rearranged in the following order: depth, column, and then row. The output y is computed from the input x as below: ``` b, c, h, w = x.shape tmp = np.reshape(x, [b, blocksize, blocksize, c // (blocksize**2), h, w]) tmp = np.transpose(tmp, [0, 3, 4, 1, 5, 2]) y = np.reshape(tmp, [b, c // (blocksize**2), h * blocksize, w * blocksize]) ``` In the CRD mode, elements along the depth dimension from the input tensor are rearranged in the following order: column, row, and the depth. The output y is computed from the input x as below: ``` b, c, h, w = x.shape tmp = np.reshape(x, [b, c // (blocksize ** 2), blocksize, blocksize, h, w]) tmp = np.transpose(tmp, [0, 1, 4, 2, 5, 3]) y = np.reshape(tmp, [b, c // (blocksize ** 2), h * blocksize, w * blocksize]) ``` ### Attributes * **blocksize - INT** (required) : Blocks of [blocksize, blocksize] are moved. * **mode - STRING** (default is `'DCR'`): DCR (default) for depth-column-row order re-arrangement. Use CRD for column-row-depth order. ### 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. ```{toctree} text_diff_DepthToSpace_11_13 ``` (l-onnx-op-depthtospace-11)= ## DepthToSpace - 11 ### Version - **name**: [DepthToSpace (GitHub)](https://github.com/onnx/onnx/blob/main/docs/Operators.md#DepthToSpace) - **domain**: `main` - **since_version**: `11` - **function**: `False` - **support_level**: `SupportType.COMMON` - **shape inference**: `True` This version of the operator has been available **since version 11**. ### Summary DepthToSpace rearranges (permutes) data from depth into blocks of spatial data. This is the reverse transformation of SpaceToDepth. More specifically, this op outputs a copy of the input tensor where values from the depth dimension are moved in spatial blocks to the height and width dimensions. By default, `mode` = `DCR`. In the DCR mode, elements along the depth dimension from the input tensor are rearranged in the following order: depth, column, and then row. The output y is computed from the input x as below: b, c, h, w = x.shape tmp = np.reshape(x, [b, blocksize, blocksize, c // (blocksize**2), h, w]) tmp = np.transpose(tmp, [0, 3, 4, 1, 5, 2]) y = np.reshape(tmp, [b, c // (blocksize**2), h * blocksize, w * blocksize]) In the CRD mode, elements along the depth dimension from the input tensor are rearranged in the following order: column, row, and the depth. The output y is computed from the input x as below: b, c, h, w = x.shape tmp = np.reshape(x, [b, c // (blocksize ** 2), blocksize, blocksize, h, w]) tmp = np.transpose(tmp, [0, 1, 4, 2, 5, 3]) y = np.reshape(tmp, [b, c // (blocksize ** 2), h * blocksize, w * blocksize]) ### Attributes * **blocksize - INT** (required) : Blocks of [blocksize, blocksize] are moved. * **mode - STRING** (default is `'DCR'`): DCR (default) for depth-column-row order re-arrangement. Use CRD for column-row-depth order. ### 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. ```{toctree} text_diff_DepthToSpace_1_13 text_diff_DepthToSpace_1_11 ``` (l-onnx-op-depthtospace-1)= ## DepthToSpace - 1 ### Version - **name**: [DepthToSpace (GitHub)](https://github.com/onnx/onnx/blob/main/docs/Operators.md#DepthToSpace) - **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 DepthToSpace rearranges (permutes) data from depth into blocks of spatial data. This is the reverse transformation of SpaceToDepth. More specifically, this op outputs a copy of the input tensor where values from the depth dimension are moved in spatial blocks to the height and width dimensions. ### Attributes * **blocksize - INT** (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.