QLinearConv

QLinearConv - 10

版本

  • 名称: QLinearConv (GitHub)

  • : main

  • since_version: 10

  • 函数: False

  • 支持级别: SupportType.COMMON

  • 形状推断: True

此版本的操作符已在 版本 10 中提供。

摘要

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

属性

  • auto_pad - 字符串 (默认为 'NOTSET')

    auto_pad 必须是 NOTSET、SAME_UPPER、SAME_LOWER 或 VALID。默认值为 NOTSET,这意味着使用显式填充。SAME_UPPER 或 SAME_LOWER 意味着填充输入,使得对于每个轴 ioutput_shape[i] = ceil(input_shape[i] / strides[i])。填充在两侧均等或几乎均等地(取决于它是偶数还是奇数)分配。如果填充是奇数,则在 SAME_UPPER 的末尾和 SAME_LOWER 的开头添加额外的填充。

  • dilations - 整数 :

    沿滤波器每个空间轴的膨胀值。如果不存在,则每个空间轴的膨胀默认为 1。

  • group - 整数 (默认为 '1')

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

  • kernel_shape - 整数 :

    卷积核的形状。如果不存在,应从输入 'w' 推断。

  • pads - 整数 :

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

  • strides - 整数 :

    沿每个空间轴的步长。如果不存在,步长默认为沿每个空间轴的 1。

输入

8 到 9 个输入之间。

  • x (异构) - T1

    来自上一层的输入数据张量;大小为 (N x C x H x W),其中 N 是批大小,C 是通道数,H 和 W 是高度和宽度。请注意,这是针对二维图像的。否则,大小为 (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

    可选的一维偏置,将添加到卷积中,大小为 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 位整数张量。