DML_QUANTIZED_LINEAR_CONVOLUTION_OPERATOR_DESC structure (directml.h)

Performs a convolution of the FilterTensor with the InputTensor. This operator performs forward convolution on quantized data. This operator is mathematically equivalent to dequantizing the inputs, convolving, and then quantizing the output.

The quantize linear functions used by this operator are the linear quantization functions

Dequantize function

f(Input, Scale, ZeroPoint) = (Input - ZeroPoint) * Scale

Quantize function

f(Input, Scale, ZeroPoint) = clamp(round(Input / Scale) + ZeroPoint, Min, Max)

Syntax

struct DML_QUANTIZED_LINEAR_CONVOLUTION_OPERATOR_DESC {
  const DML_TENSOR_DESC *InputTensor;
  const DML_TENSOR_DESC *InputScaleTensor;
  const DML_TENSOR_DESC *InputZeroPointTensor;
  const DML_TENSOR_DESC *FilterTensor;
  const DML_TENSOR_DESC *FilterScaleTensor;
  const DML_TENSOR_DESC *FilterZeroPointTensor;
  const DML_TENSOR_DESC *BiasTensor;
  const DML_TENSOR_DESC *OutputScaleTensor;
  const DML_TENSOR_DESC *OutputZeroPointTensor;
  const DML_TENSOR_DESC *OutputTensor;
  UINT                  DimensionCount;
  const UINT            *Strides;
  const UINT            *Dilations;
  const UINT            *StartPadding;
  const UINT            *EndPadding;
  UINT                  GroupCount;
};

Members

InputTensor

Type: const DML_TENSOR_DESC*

A tensor containing the input data. The expected dimensions of the InputTensor are { InputBatchCount, InputChannelCount, InputHeight, InputWidth }.

InputScaleTensor

Type: const DML_TENSOR_DESC*

A tensor containing the input scale data. The expected dimensions of the InputScaleTensor are { 1, 1, 1, 1 }. This scale value is used for dequantizing the input values.

Note

A scale value of 0 results in undefined behavior.

InputZeroPointTensor

Type: _Maybenull_ const DML_TENSOR_DESC*

An optional tensor containing the input zero point data. The expected dimensions of the InputZeroPointTensor are { 1, 1, 1, 1 }. This zero point value is used for dequantizing the input values.

FilterTensor

Type: const DML_TENSOR_DESC*

A tensor containing the filter data. The expected dimensions of the FilterTensor are { FilterBatchCount, FilterChannelCount, FilterHeight, FilterWidth }.

FilterScaleTensor

Type: const DML_TENSOR_DESC*

A tensor containing the filter scale data. The expected dimensions of the FilterScaleTensor are { 1, 1, 1, 1 } if per tensor quantization is required, or { 1, OutputChannelCount, 1, 1 } if per channel quantization is required. This scale value is used for dequantizing the filter values.

Note

A scale value of 0 results in undefined behavior.

FilterZeroPointTensor

Type: _Maybenull_ const DML_TENSOR_DESC*

An optional tensor containing the filter zero point data. The expected dimensions of the FilterZeroPointTensor are { 1, 1, 1, 1 } if per tensor quantization is required, or { 1, OutputChannelCount, 1, 1 } if per channel quantization is required. This zero point value is used for dequantizing the filter values.

BiasTensor

Type: _Maybenull_ const DML_TENSOR_DESC*

A tensor containing the bias data. The bias tensor is a tensor containing data which is broadcasted across the output tensor at the end of the convolution which is added to the result. The expected dimensions of the BiasTensor are { 1, OutputChannelCount, 1, 1 } for 4D.

OutputScaleTensor

Type: const DML_TENSOR_DESC*

A tensor containing the output scale data. The expected dimensions of the OutputScaleTensor are { 1, 1, 1, 1 }. This input scale value is used for quantizing the convolution output values.

Note

A scale value of 0 results in undefined behavior.

OutputZeroPointTensor

Type: _Maybenull_ const DML_TENSOR_DESC*

An optional tensor containing the filter zero point data. The expected dimensions of the OutputZeroPointTensor are { 1, 1, 1, 1 }. This input zero point value is used for quantizing the convolution the output values.

OutputTensor

Type: const DML_TENSOR_DESC*

A tensor to write the results to. The expected dimensions of the OutputTensor are { OutputBatchCount, OutputChannelCount, OutputHeight, OutputWidth }.

DimensionCount

Type: UINT

The number of spatial dimensions for the convolution operation. Spatial dimensions are the lower dimensions of the convolution filter tensor FilterTensor. This value also determines the size of the Strides, Dilations, StartPadding, and EndPadding arrays. Only a value of 2 is supported.

Strides

Type: _Field_size_(DimensionCount) const UINT*

The strides of the convolution operation. These strides are applied to the convolution filter. They are separate from the tensor strides included in DML_TENSOR_DESC.

Dilations

Type: _Field_size_(DimensionCount) const UINT*

The Dilations of the convolution operation. Dilations are strides applied to the elements of the filter kernel. This has the effect of simulating a larger filter kernel by padding the internal filter kernel elements with zeros.

StartPadding

Type: _Field_size_(DimensionCount) const UINT*

The padding values to be applied to the beginning of each spatial dimension of the filter and input tensor of the convolution operation.

EndPadding

Type: _Field_size_(DimensionCount) const UINT*

The padding values to be applied to the end of each spatial dimension of the filter and input tensor of the convolution operation.

GroupCount

Type: UINT

The number of groups which to divide the convolution operation into. GroupCount can be used to achieve depth-wise convolution by setting the GroupCount equal to the input channel count. This divides the convolution up into a separate convolution per input channel.

Availability

This operator was introduced in DML_FEATURE_LEVEL_2_1.

Tensor constraints

  • BiasTensor, FilterTensor, InputTensor, and OutputTensor must have the same DimensionCount.
  • OutputTensor and OutputZeroPointTensor must have the same DataType.
  • InputTensor and InputZeroPointTensor must have the same DataType.
  • FilterTensor and FilterZeroPointTensor must have the same DataType.

Tensor support

DML_FEATURE_LEVEL_5_2 and above

Tensor Kind Supported dimension counts Supported data types
InputTensor Input 3 to 4 INT8, UINT8
InputScaleTensor Input 1 to 4 FLOAT32
InputZeroPointTensor Optional input 1 to 4 INT8, UINT8
FilterTensor Input 3 to 4 INT8, UINT8
FilterScaleTensor Input 1 to 4 FLOAT32
FilterZeroPointTensor Optional input 1 to 4 INT8, UINT8
BiasTensor Optional input 3 to 4 INT32
OutputScaleTensor Input 1 to 4 FLOAT32
OutputZeroPointTensor Optional input 1 to 4 INT8, UINT8
OutputTensor Output 3 to 4 INT8, UINT8

DML_FEATURE_LEVEL_4_0 and above

Tensor Kind Supported dimension counts Supported data types
InputTensor Input 3 to 4 INT8, UINT8
InputScaleTensor Input 1 to 4 FLOAT32
InputZeroPointTensor Optional input 1 to 4 INT8, UINT8
FilterTensor Input 3 to 4 INT8, UINT8
FilterScaleTensor Input 3 to 4 FLOAT32
FilterZeroPointTensor Optional input 1 to 4 INT8, UINT8
BiasTensor Optional input 3 to 4 INT32
OutputScaleTensor Input 1 to 4 FLOAT32
OutputZeroPointTensor Optional input 1 to 4 INT8, UINT8
OutputTensor Output 3 to 4 INT8, UINT8

DML_FEATURE_LEVEL_2_1 and above

Tensor Kind Supported dimension counts Supported data types
InputTensor Input 4 INT8, UINT8
InputScaleTensor Input 4 FLOAT32
InputZeroPointTensor Optional input 4 INT8, UINT8
FilterTensor Input 4 INT8, UINT8
FilterScaleTensor Input 4 FLOAT32
FilterZeroPointTensor Optional input 4 INT8, UINT8
BiasTensor Optional input 4 INT32
OutputScaleTensor Input 4 FLOAT32
OutputZeroPointTensor Optional input 4 INT8, UINT8
OutputTensor Output 4 INT8, UINT8

Requirements

Requirement Value
Minimum supported client Windows 10 Build 20348
Minimum supported server Windows 10 Build 20348
Header directml.h