QLinearConv

QLinearConv - 10

版本

  • 名称: QLinearConv (GitHub)

  • 域名: main

  • since_version: 10

  • 函数: False

  • support_level: SupportType.COMMON

  • 形状推断: True

此版本的运算符自版本10起可用。

摘要

卷积运算符消耗一个量化输入张量、其比例和零点、一个量化滤波器、其比例和零点,以及输出的比例和零点,并计算量化输出。每个比例和零点对必须具有相同的形状。这意味着它们必须是标量(每个张量)或一维张量(每个输出通道)。每个输入或输出及其相关的零点必须具有相同的类型。当存在偏置时,必须使用比例 = 输入比例 * 权重比例和零点为0进行量化。

属性

  • auto_pad - STRING (默认为 'NOTSET'):

    auto_pad 必须是 NOTSET、SAME_UPPER、SAME_LOWER 或 VALID 中的一个。默认值为 NOTSET,表示使用显式填充。SAME_UPPER 或 SAME_LOWER 表示填充输入,使得 output_shape[i] = ceil(input_shape[i] / strides[i]) 对于每个轴 i。填充在两侧均匀或几乎均匀地分配(取决于它是偶数还是奇数)。如果填充是奇数,额外的填充在 SAME_UPPER 的情况下添加到末尾,在 SAME_LOWER 的情况下添加到开头。

  • dilations - INTS :

    沿着滤波器每个空间轴的膨胀值。如果未指定,则默认每个空间轴的膨胀值为1。

  • group - INT (默认是 '1'):

    输入通道和输出通道分成的组数。默认值为1。

  • kernel_shape - INTS :

    卷积核的形状。如果未提供,应从输入‘w’推断。

  • pads - INTS :

    沿每个空间轴的开始和结束的填充,它可以取任何大于或等于0的值。该值表示在相应轴的开始和结束部分添加的像素数。pads格式应如下所示 [x1_begin, x2_begin…x1_end, x2_end,…],其中xi_begin表示在轴i的开始处添加的像素数,xi_end表示在轴i的结束处添加的像素数。此属性不能与auto_pad属性同时使用。如果不存在,则沿每个空间轴的开始和结束的填充默认为0。

  • 步幅 - 整数 :

    沿每个空间轴的步幅。如果未指定,则沿每个空间轴的步幅默认为1。

输入

在8到9个输入之间。

  • x(异构) - T1:

    来自前一层的输入数据张量;大小为 (N x C x H x W),其中 N 是批量大小,C 是通道数,H 和 W 是高度和宽度。请注意,这是针对 2D 图像的。否则大小为 (N x C x D1 x D2 … x Dn)。可选地,如果维度表示有效,操作期望输入数据张量具有维度表示 [DATA_BATCH, DATA_CHANNEL, DATA_FEATURE, DATA_FEATURE …]。

  • x_scale (异构) - tensor(float):

    为输入‘x’缩放张量。它是一个标量,意味着每个张量/层的量化。

  • x_zero_point (异构) - T1:

    输入‘x’的零点张量。它是一个标量,意味着每个张量/层的量化。

  • w (异构) - T2:

    将在卷积中使用的权重张量;大小为 (M x C/group x kH x kW),其中 C 是通道数,kH 和 kW 是内核的高度和宽度,M 是特征图的数量。对于超过 2 维的情况,内核形状将为 (M x C/group x k1 x k2 x … x kn),其中 (k1 x k2 x … kn) 是内核的维度。可选地,如果维度表示有效,操作期望权重张量具有 [FILTER_OUT_CHANNEL, FILTER_IN_CHANNEL, FILTER_SPATIAL, FILTER_SPATIAL …] 的维度表示。X.shape[1] == (W.shape[1] * group) == C(假设形状数组的索引从零开始)。换句话说,FILTER_IN_CHANNEL 应该等于 DATA_CHANNEL。

  • w_scale (异构) - tensor(float):

    为输入‘w’缩放张量。它可以是一个标量或一维张量,这意味着每个张量/层或每个输出通道的量化。如果它是一维张量,其元素数量应等于输出通道的数量(M)。

  • w_zero_point (异构) - T2:

    输入‘w’的零点张量。它可以是一个标量或一维张量,这意味着每个张量/层或每个输出通道的量化。如果它是一维张量,其元素数量应等于输出通道的数量(M)。

  • y_scale (异构) - tensor(float):

    输出‘y’的缩放张量。它是一个标量,意味着每个张量/层的量化。

  • y_zero_point (异构) - T3:

    输出‘y’的零点张量。它是一个标量,意味着每个张量/层的量化。

  • B (可选, 异构) - T4:

    可选的1D偏置,将被添加到卷积中,大小为M。偏置必须使用scale = x_scale * w_scale和zero_point = 0进行量化

输出

  • y (异构) - T3:

    输出数据张量,包含卷积的结果。输出维度是核大小、步幅大小和填充长度的函数。

类型约束

  • T1 在 ( tensor(int8), tensor(uint8) ) 中:

    将输入类型限制为8位整数张量。

  • T2 在 ( tensor(int8), tensor(uint8) ) 中:

    将过滤器类型限制为8位整数张量。

  • T3 在 ( tensor(int8), tensor(uint8) ):

    将输出类型限制为8位整数张量。

  • T4 在 ( tensor(int32) ) 中:

    将偏置类型限制为32位整数张量。