Operator KneeLUT

Operator Library: Memory

该算子通过一组基准点实现对查找表的近似,因此得名 KneeLUT。算子输出上所有可表示值的范围被 Knee LUT 分为由基准点定义的 N 个区间。区间数量 N 可以表示为 2 的幂次方,即 N = 2^n,其中 n 是整数。参数 BasePointPows 定义了 n。所有区间的区间距离是恒定且相等的。

有关 operator 延迟的信息,请参见 Table 46, 'Individual Latencies of the Operators in Library Memory'。

每个区间由一个起始基准点和一个结束基准点来描述。起始基准点定义了第 1 个区间步长的输出值。结束基准点定义了区间终点的理论值(该终点不可达,等于下一个区间的起始基准点)。区间内的所有值均通过线性近似计算。连续区间的结束基准点和起始基准点具有相同的 X 坐标,即它们之间没有区间步长。

KneeLUT 中每个区间的基准点值可以单独定义。可以在整个输出范围内定义不连续函数。然而,每个区间内部的子函数是线性的,其梯度/斜率由起始和结束基准点定义。所有起始基准点都属于该区间。所有结束基准点均不属于该区间,且线性近似永远无法到达这些点。

所有基准点均归一化至算子输出端最大可表示的值,即 。所有起始基准点均在 0 到 1 的范围内。零对应于输出端最小可表示的值。在此版本的 KneeLut 中,由于算子仅支持无符号值,因此它等于 0。1 表示算子输出端最大可表示的值,即 。所有结束基准点都可以超出 0 到 1 的范围,以允许包含在区间内的最后一个值映射到最高和最低数字,即 0 和 1。这意味着结束基准点可能大于 1 或小于 0。使用与起始基准点相同的 Scaling 技术,终点必须缩放到 .

让我们通过两个示例来说明该算子的行为。

  1. 恒等

    KneeLUT 的第一个函数是恒等函数。假设我们的 KneeLUT 具有以下参数:

    • BasePointPows = 2
    • Input Bit Width = 4
    • Output Bit Width = 5

    因此,我们必须定义四个起始基准点和四个结束基准点。对于恒等函数,我们定义:

    这些值由以下公式决定:

    其中 x 是基准点索引。

    下图显示了这些基准点。起始基准点用红色正方形标记,结束基准点用品红色圆形标记。此外,绘制了一条线来说明各区间的线性函数。

    该图还显示了输出的近似值(蓝色星号)。基准点经过了归一化处理,即 0 表示输出值 0,1 表示输出值 。下图显示了基于给定基准点实际使用的查找表。可以看出,这些值四舍五入到了最接近的整数值。

    查找表将计算以下值:

  2. 不连续函数

    在下一个示例中,我们来看看一个不连续函数。假设采用与第一个示例相同的 KneeLUT 参数。这一次,基准点不是由函数定义的:

    同样,下图显示了这些基准点。起始基准点用红色正方形标记,结束基准点用品红色圆形标记。此外,绘制了一条线来说明各区间的线性函数。

    该图还显示了输出的近似值(蓝色星号)。同样,该图已归一化至 1。

    下图显示了基于给定基准点实际使用的查找表。可以看出,这些值四舍五入到了最接近的整数值。

    查找表将根据给定的基准点计算以下值:

    可以利用每个区间的斜率 m(x) 和偏移量 b(x) 来计算这些值。

    随后,结果 LUT(x) 为

[警告] 超出范围的近似值

如果近似值超出了可用的输出范围,算子不会将其截断至最大或最小可能值。 这些值将是未定义的。

算子限制

  • 存在以下约束:

I/O Property

Property 值
Operator Type O
Input Link I, image data input
Output Link O,数据输入

Supported Link Format

Link Parameter Input Link I Output Link O
Bit Width [1, 64] [1, 60]
Arithmetic unsigned as I
Parallelism any as I
Kernel Columns 1 as I
Kernel Rows 1 as I
Img Protocol {VALT_IMAGE2D, VALT_LINE1D, VALT_PIXEL0D} as I
Color Format VAF_GRAY as I
Color Flavor FL_NONE as I
Max. Img Width any as I
Max. Img Height any as I

参数

BasePointPows
键入 static 参数
默认 6
范围 [1, 60 - InputBitWidth + OutputBitWidth]

此参数根据以下公式定义 KneeLUT 的基点数量: NumberOfBasePoints = 2 ^ BasePointsPows。

步长为 Parallelism。

StartBasePoints
键入 动态/静态读/写参数
默认 恒等函数
范围 any

此字段参数定义了一组归一化的 2^BasePointPows 区间起始基点。 这些点已归一化至算子输出端可表示的最大值。

了解如何配置字段参数,请参见 'Parameter Editing'。

EndBasePoints
键入 动态/静态读/写参数
默认 恒等函数
范围 any

此参数定义了一组归一化的 2^BasePointPows 区间结束基点。 这些点已归一化至算子输出端可表示的最大值。 归一化值可以超出 0 到 1 的范围,以允许最后一个区间点分别达到最大和最小可表示值。

使用示例

以下示例展示了 KneeLUT 算子的使用方法:

  • 'Knee-Lookup Table 16 Bit'

    示例 - 展示了针对 16 位输入和输出数据查找表的使用。 由于块 RAM 资源有限,针对 16 位数据必须使用 Knee LUT。