lattice regression: 求解查找表

文章探讨了LatticeRegression的原理,包括单调性校准的插值查找表、快速插值方法和正则化技术如GraphLaplacian与Hessian。正则化的不同选择影响模型的平滑程度和线性保持。非均匀LatticeRegression在处理相机成像管道建模时能更好地适应色域变化,通过转换表实现更精确的映射。实验表明,非均匀3DLUT在效率和精度上优于常规方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

lattice regression

1.Monotonic Calibrated Interpolated Look-Up Tables

Fast and Flexible Monotonic Functions with
Ensembles of Lattices

两篇论文都比较偏理论,涉及数学和比较早的论文引用,有些细节不是很容易懂。

1.1 单调性的约束

在这里插入图片描述

1.2. 快速多维线性插值 和 单纯形插值法

Fast Multilinear Interpolation
Simplex Linear Interpolation
两个快速插值的方法。

1.3. 鼓励线性的正则化函数

在这里插入图片描述

在lattice regression 相关论文中又介绍 graph laplacian 正则化 和 graph hessian正则化。
graph laplacian 正则化 是约束相邻的node, 因此向外推断时,趋势会比较平坦。
graph hessian正则化是 约束相邻的node的 差分,因此向外推断时,趋势会保持内部的变化趋势。

在这里插入图片描述

2.lattice regression各种正则化的效果差异

2.1 生成二维曲面示例:

生成二维曲面 lattice regression论文中的示例

在这里插入图片描述

在这里插入图片描述

2.2 graph laplacian regularizer

在这里插入图片描述

在边缘趋向于平坦,维持值不变的

2.3 graph hessian regularizer

相比于 laplacian regualr, graph hessian regularizer不会压抑 线性,会保持线性
在这里插入图片描述

import numpy as np

def get_K(x, dim):

    s = 0
    for i in range(dim):
        for j in range(dim):
            p = i * dim + j
            if (j > 0) and (j < dim-1):
                s += (x[p-1] + x[p+1] - 2*x[p])**2

            if (i > 0) and (i < dim - 1):
                s += (x[p-dim] + x[p+dim] - 2*x[p])**2

    return s / (dim**2)
def get_K2(x, dim):
    x = x.reshape(dim, dim)
    dd = dim - 2
    x1 = x[0:dd, 0:dim]
    x2 = x[2:dd+2, 0:dim]
    x3 = x[:, 0:dd]
    x4 = x[:, 2:dd+2]

    x12 = x[1:dd+1, 0:dim]
    x34 = x[:, 1:dd+1]

    a = (x1 + x2 - 2 * x12) ** 2
    b = (x3 + x4 - 2 * x34) ** 2

    return (np.sum(a) + np.sum(b))/ (dim**2)

'''验证get_K 和 get_K2等价'''
if __name__ == "__main__":
    d = 32
    xxx = np.random.randint(0, 9, (d,d))
    print(xxx)
    xxx = xxx.reshape(-1)
    a = get_K(xxx, d)

    print(a)
    b = get_K2(xxx, d)
    print(b)

在边缘会保持梯度,维持梯度趋势不变
在这里插入图片描述

2.4 torsion regularizer

使每个grid保持线性化, 每个grid趋向与 维持 平行四边形,而不是梯形。
在这里插入图片描述

2.5 单调性约束

根据两条曲线生成二维曲面
在这里插入图片描述

ground truth:
在这里插入图片描述

不加单调性正则化:

    def mono_reg(x, dim):
        x = x.reshape(dim, dim)

        d = 6
        delta1 = x[1:6, :] - x[0:5, :]  # r, c = dim-1, dim   > 0
        delta2 = x[:, 1:6] - x[:, 0:5]  # r, c = dim, dim-1   > 0

        delta3 = -delta1
        delta4 = -delta2
        s = np.mean(np.maximum(0, delta3)**2) + np.mean(np.maximum(0, delta4)**2)
        return s

    L = get_L(dim)
    def mini_fun(x, W, b, n, lamda):
        x = x.reshape(-1, 1)
        aa = (W @ x - b) ** 2 / n
        #bb = get_torsion(x, dim)
        bb1 = x.T @ L @ x
        bb = get_K2(x, dim)
        cc = mono_reg(x, dim)
        return np.sum(aa) + lamda*np.sum(bb) + 0*np.sum(cc)

在这里插入图片描述

加入单调性约束图像效果,在左下角可以看出。

修改上面code最后一行
return np.sum(aa) + lamda*np.sum(bb) + 20*np.sum(cc)

在这里插入图片描述

3.Nonuniform Lattice Regression for Modeling the Camera Imaging Pipeline

利用nonuniform lattice regression 进行颜色映射。

3.1. 模块所处的位置

代替ccm和gamma,tone mapping模块
在这里插入图片描述

3.2. 构建lattice model

输入 r1,g1,b1 输出 r2,g2,b2
可以先考虑输出一个channel: 输入r1,g1,b1 输出r2 channel.

N 是 每一行的 网格数目,比如 N = 17
m = N^3, 我们要求的是一个查找表,比如r2的数目是 m

损失函数如下:
在这里插入图片描述

Wb - y 就是 插值 最小化,不必多说, W是 n行(训练样本数目),m 列的矩阵

Sb是导数平滑项。 比如 a2-0.5a1 + 0.5a3, 那么可以得到一个 N ∗ N ∗ ( N − 2 ) ∗ 3 N*N*(N-2)*3 NN(N2)3行, m列的矩阵。

ρ ( b ) \rho(b) ρ(b) 是约束边缘的项,因为训练数据分布步会是均匀的,想象在3Dlut中饱和度很大的点训练集中可能不会太多或者缺失,这个时候需要对 3Dlut的边缘位置(像素值达到1的点,想象一个立方体除了与(0,0,0)接触的3条边,剩余9条边,使原来是1的现在仍保持1)

原来是0,0,0的仍然保持0,0,0
在这里插入图片描述

在这里插入图片描述

因此 ρ ( b ) \rho(b) ρ(b) 是一个 xxx行 m列的矩阵,xxx的数目我也没计算。

最终目标函数的解为:
在这里插入图片描述

这里lattice regression的构建和之前有些不同就是 把一些约束合并在矩阵里面。其实含义是一样的。

3.3 由于色域的变化并不是均匀的,因此采用non-uniform的lattice 会不会更好?

作者就是通过一个 transformation 将 uniform变为 non-uniform 3D lut.
就是原来的线性映射到每个node, 改为非线性。
比如原来的一条边 1-255分别对应 3Dlut的 1-255,就是均匀的。

现在要设计一个转换关系,转变为非均匀,像素值为10可能不对应3Dlut的第10格。

这样其实是求一个转换关系,类似于 直方图规定化的一个 查找表。
在这里插入图片描述

实际上作者就是构建了一个单调查找表。如何构建呢?
从误差着手。

比如 r1, b1, g1=(1,2,3)查找出来时r2,g2,b2,误差为er1,eb1,eg1。那么(1,2,3)所在的bin 的直方图加上er1,eb1,eg1。 最终可以构建一个1,2,3,4.,,255的直方图,文中时raw图0-1023的直方图。

错误越大,说明该分段 精度越差,需要分配更多的 更细化的 网格。通过图a得到一个图c的转换表。
在这里插入图片描述

但是由于直方图中有很多空bin, 因此平滑一下得到b:
在这里插入图片描述

然后d就是想要的分布,现在的分布时线性,转换为d的分布,就利用直方图规定化的方法,求一个反向查找表。
首先求累计:
在这里插入图片描述

再求反向:
在这里插入图片描述

3.4. 重新求解lattice regression

一个转换的查找表得到之后,non-uinform的每个格的顶点位置也确定了,那么 W, Sb, ρ \rho ρ 也需要重新构建,然后求解
在这里插入图片描述

3.5. 实验

non-uniform 3dlut比 regular3dlut 效果好,比rbf 效率高,且精度不会降太多。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值