paper: https://www4.comp.polyu.edu.hk/~cslzhang/paper/PAMI_LUT.pdf

code: https://github.com/HuiZeng/Image-Adaptive-3DLUT(即将开源)

该文是香港理工大学张磊老师及其学生在图像增强领域的又一颠覆性成果。它将深度学习技术与传统3DLUT图像增强技术详解,得到了一种更灵活、更高效的图像增强技术。所提方法能够以1.66ms的速度对4K分辨率图像进行增强(硬件平台:Titan RTX GPU)。

Abstract

最近几年基于学习的方法已成为图像增强(增强图像的色调、对比度等)的主流方案,然而这些图像增强方法或者产生不好的效果或者需要大量的计算量以及内存占用,严重影响了这些方法在高分辨率图像方面的实际应用(比如12M像素)。

该文提出了一种图像自适应的3D查找表(3D LUT)方法用于图像增强,在具有超快速度的同时具有鲁棒的增强效果。3DLUT是传统图像编辑领域常用方案,但这些查找表往往需要人工调节并固化。该文首次提出采用成对/不成对学习的方式从标注数据集中学习3DLUT。更重要的是,所学习到的3DLUT具有图像自适应特性,可以灵活的进行图像增强。所提方法采用端到端的方式同时学习3DLUT以及一个小网络,小网络用于根据输入图像学习查找表的融合权值,将融合后的3DLUT作用于输入图像即可得到期望的输出。所提方法仅仅包含不到600K参数,能够以不超过2ms的速度处理4K分辨率图像(硬件平台:Titan RTX GPU)。在具有超快的推理速度同时,所提方法同样以极大的优势(PSNR,SSIM以及颜色差异度量指标)超越其他图像增强方法。

该文的贡献主要包含以下三点:

  • 首个采用深度学习方法学习3DLUT并用于自动图像增强的方案,更重要的是,所提方法学习到的3DLUT具有图像自适应性,可以更灵活的进行图像增强;
  • 所提方法仅有不超过600K参数量,且能够以不超过2ms的速度处理4K分辨率图像(GPU);
  • 在两个公开数据集上以极大优势超越其他SOTA图像增强方案。

Method

上图给出了本文所提出方案的框架图,它包含多个基准3DLUT与一个小的CNN网络。基准3DLUT可以确保输入到输出的颜色变换可以被更好的包含,而CNN则用于学习3DLUT的融合权值并将多个3DLUT融合为一个新的3DLUT,最后所得3DLUT用于图像变换。

3DLUT and trilinear interpolation

3DLUT是一种经典且有效并被广泛应用的图像增强技术,下图给出了3DLUT的示意图。3DLUT定义了一个包含M3M^3M3个元素{V(i,j,k)}i,j,k=0,⋯,M−1\{V_{(i,j,k)}\}_{i,j,k=0,\cdots,M-1}{V(i,j,k)​}i,j,k=0,⋯,M−1​的晶格(注:M表示每个颜色通道的采样数,实际应用中一般为33)。每个Vi,j,kV_{i,j,k}Vi,j,k​定义了输入RGB颜色{ri,j,kI,gi,j,kI,bi,j,kI}\{r_{i,j,k}^I, g_{i,j,k}^I, b_{i,j,k}^I\}{ri,j,kI​,gi,j,kI​,bi,j,kI​}及对应的输出RGB颜色{ri,j,kO,gi,j,kO,bi,j,kO}\{r_{i,j,k}^O, g_{i,j,k}^O, b_{i,j,k}^O\}{ri,j,kO​,gi,j,kO​,bi,j,kO​},而变换的精度则由M控制(默认33)。

给定M以及索引 RGB颜色{ri,j,kI,g_i,j,kI,bi,j,kI}\{r_{i,j,k}^I, g\_{i,j,k}^I, b_{i,j,k}^I\}{ri,j,kI​,g_i,j,kI,bi,j,kI​}可以通过均匀离散RGB颜色空间得到。不同的3DLUT具有不同的输出RGB颜色{ri,j,kO,gi,j,kO,bi,j,kO}\{r_{i,j,k}^O, g_{i,j,k}^O, b_{i,j,k}^O\}{ri,j,kO​,gi,j,kO​,bi,j,kO​},而这在所提方法中是可学习的参数。当M=33时,每个3DLUT包含108K参数量。

基于3DLUT的颜色变换可以通过两个操作达成:lookuptrilinear interpolation。给定输入RGB颜色{ri,j,kI,gi,j,kI,bi,j,kI}\{r_{i,j,k}^I, g_{i,j,k}^I, b_{i,j,k}^I\}{ri,j,kI​,gi,j,kI​,bi,j,kI​},lookup操作可以通过如下公式进行:
x=rx,y,zIs,y=gx,y,zIs,z=bx,y,zIsx = \frac{r^I_{x,y,z}}{s}, y=\frac{g^I_{x,y,z}}{s}, z=\frac{b^I_{x,y,z}}{s} x=srx,y,zI​​,y=sgx,y,zI​​,z=sbx,y,zI​​
其中s=CmaxMs=\frac{C_{max}}{M}s=MCmax​​,而CmaxC_{max}Cmax​表示颜色值。在完成输入RGB颜色定位后,它的8个最近邻元素将被用于trilinear interpolation并得到输出RGB。trilinear interpolation可以描述如下:假设i=⌊x⌋,j=⌊y⌋,k=⌊z⌋i=\lfloor x \rfloor, j = \lfloor y\rfloor, k=\lfloor z\rfloori=⌊x⌋,j=⌊y⌋,k=⌊z⌋,dx=rx,y,zI−ri,j,kIs,dy=gx,y,zI−gi,j,kIs,dz=bx,y,zI−bI_i,j,ksd_x = \frac{r^I_{x,y,z}-r^I_{i,j,k}}{s}, d_y = \frac{g^I_{x,y,z}-g^I_{i,j,k}}{s}, d_z = \frac{b^I_{x,y,z}-b^I\_{i,j,k}}{s}dx​=srx,y,zI​−ri,j,kI​​,dy​=sgx,y,zI​−gi,j,kI​​,dz​=sbx,y,zI​−bI_i,j,k​,那么三次插值公式如下:

c_(x,y,z)O=(1−dx)(1−dy)(1−dz)c(i,j,k)O+dx(1−d_y)(1−dz)c(i+1,j,k)O+(1−dx)dy(1−dz)c(i,j+1,k)O+(1−dx)(1−dy)dzc(i,j,k+1)O+dxdy(1−dz)c(i+1,j+1,k)O+(1−d_x)dydzc(i,j+1,k+1)O+dx(1−dy)dzc(i+1,j,k+1)O+dxdydzc(i+1,j+1,k+1)O\begin{aligned} c\_{(x, y, z)}^{O} &=\left(1-d_{x}\right)\left(1-d_{y}\right)\left(1-d_{z}\right) c_{(i, j, k)}^{O}+d_{x}\left(1-d\_{y}\right)\left(1-d_{z}\right) c_{(i+1, j, k)}^{O} \\ &+\left(1-d_{x}\right) d_{y}\left(1-d_{z}\right) c_{(i, j+1, k)}^{O}+\left(1-d_{x}\right)\left(1-d_{y}\right) d_{z} c_{(i, j, k+1)}^{O} \\ &+d_{x} d_{y}\left(1-d_{z}\right) c_{(i+1, j+1, k)}^{O}+\left(1-d\_{x}\right) d_{y} d_{z} c_{(i, j+1, k+1)}^{O} \\ &+d_{x}\left(1-d_{y}\right) d_{z} c_{(i+1, j, k+1)}^{O}+d_{x} d_{y} d_{z} c_{(i+1, j+1, k+1)}^{O} \end{aligned} c_(x,y,z)O​=(1−dx​)(1−dy​)(1−dz​)c(i,j,k)O​+dx​(1−d_y)(1−dz​)c(i+1,j,k)O​+(1−dx​)dy​(1−dz​)c(i,j+1,k)O​+(1−dx​)(1−dy​)dz​c(i,j,k+1)O​+dx​dy​(1−dz​)c(i+1,j+1,k)O​+(1−d_x)dy​dz​c(i,j+1,k+1)O​+dx​(1−dy​)dz​c(i+1,j,k+1)O​+dx​dy​dz​c(i+1,j+1,k+1)O​​

其中c∈{r,g,b}c\in \{r,g,b\}c∈{r,g,b}。上述三次插值过程是可微的,可以轻易的推导出cO_i,j,kc^O\_{i,j,k}cO_i,j,k的梯度。由于每个输入的三次插值结果完全独立,故而可以采用GPU进行并行加速。

Learning image-adaptive 3D LUTs

传统的基于3DLUT的图像增强方法具有两个主要局限:(1)3DLUT大多人工设计,需要设计人员具有丰富经验,同时消耗大量时间;(2)一个3DLUT仅能处理一种固定的变换,难以适应全场景的变换。尽管现有相机、图像编辑工具中提供了多个LUTs集合供用户手动选择以大臣个不同的增强效果,但是这种交互方式不够灵活。

为解决上述第一个局限,作者提出采用数据驱动方法生成3DLUT;为解决上述第二个局限,模型应当具有内容自适应特性,因此作者提出学习图像自适应的3DLUT。

一个很自然的想法是通过场景分类的方式选择不同的3DLUT,这也是诸多相机、图像编辑工具常用方案。然而这种硬决策方案具有这样几个缺陷:(1) 它难以将多个可能场景正确的划分到预定义类别中,因为不同类别具有不同的3DLUT;(2)需要大量的3DLUT以尽可能的覆盖全场景;(3) 分类器的训练独立于3DLUT,导致组合方案并非最优。如果场景分类错误,那么所选择的3DLUT大概率生成非常差的结果。

在该文中,作者采用一种更高效的方式学习图像自适应的3DLUT:同时学习N个3DLUT与一个小CNN模型(用于预测3DLUT的融合权值)。对于输入图像,其最终的增强输出可以描述如下:

q=∑n=1Nwnϕn(x)q = \sum_{n=1}^N w_n \phi_n (x) q=n=1∑N​wn​ϕn​(x)

而{wn}n=1,⋯,N=f(x)\{w_n\}_{n=1, \cdots, N}=f(x){wn​}n=1,⋯,N​=f(x)表示通过CNN模型预测的内容自适应权值。所提方法仅仅需要几个3DLUT(N=3)进行图像变换,同时采用软加权策略以获得图像内容自适应的变换效果。更进一步,考虑到像素变换的独立性,上述操作可以进一步简化如下:

q=(∑n=1Nwnϕn)(x)q = (\sum_{n=1}^N w_n \phi_n)(x) q=(n=1∑N​wn​ϕn​)(x)

也就是时候,可以先进行3DLUT融合,再进行图像变换。这种处理方式进一步提升的所提方法的推理速度。下表给出了所提方法中CNN模型的参数配置,它包含5个卷积(后接LeakyReLU、IN)、一个dropout以及一个全连接层。整个CNN模型包含269参数量(N=3)。

Learning Criteria

接下来就要介绍了优化的目标函数了,目标函数定义如下:
minf,ϕnL(q,y)min_{f,\phi_n} \mathcal{L}(q,y) minf,ϕn​​L(q,y)
其中f,ϕnf, \phi_nf,ϕn​表示CNN模型与3DLUT,L\mathcal{L}L表示某些损失函数与正则项。

如前所述,所提方法可以采用成对数据进行训练,也可以采用非成对数据进行训练。我们先来看一下成对训练的损失函数,这个就比较简单的常规的损失函数即可,比如L1、MSE等。在这里作者选用了简单的MSE损失函数,定义如下
L=1T∑t=1T∣qt−yt∣2\mathcal{L} = \frac{1}{T} \sum_{t=1}^{T} |q_t -y_t|^2 L=T1​t=1∑T​∣qt​−yt​∣2
接下来,我们再看一下非成对数据的损失函数。这里借鉴的是GAN的思想进行非成对数据的训练,前述的3DLUT以及CNN可以视作生成器,只需要再引入一个判别器即可。此时生成器通过如下损失进行训练:

LG=Ex[−D(G(x))]+λ1Ex[∥G(x)−x∥2]\mathcal{L}_{G}=\underset{x}{\mathbb{E}}[-D(G(x))]+\lambda_{1} \underset{x}{\mathbb{E}}\left[\|G(x)-x\|^{2}\right] LG​=xE​[−D(G(x))]+λ1​xE​[∥G(x)−x∥2]

其中λ1=1000\lambda_1 = 1000λ1​=1000。判别器的损失函数定义如下:

LD=Ex[D(G(x))]−Ey[D(y)]+λ2Ey^[(∥∇y^D(y^)∥2−1)2]\mathcal{L}_{D}=\underset{x}{\mathbb{E}}[D(G(x))]-\underset{y}{\mathbb{E}}[D(y)]+\lambda_{2} \underset{\widehat{y}}{\mathbb{E}}\left[\left(\|\nabla \widehat{y} D(\widehat{y})\|_{2}-1\right)^{2}\right] LD​=xE​[D(G(x))]−yE​[D(y)]+λ2​y​E​[(∥∇y​D(y​)∥2​−1)2]

其中,λ2=10\lambda_2=10λ2​=10,前两项为标准的判别损失,最后一项为梯度惩罚项用于稳定训练。那么总的损失函数则定义为:

Lgan=LG+LD\mathcal{L}_{gan} = \mathcal{L}_G + \mathcal{L}_D Lgan​=LG​+LD​

Regularization

我们可以采用前述损失以及SGD/Adam优化器进行训练3DLUT以及CNN。然而得到的3DLUT具有非平滑现象,见下图a。这种局部陡峭现象会导致变换后图像的伪影问题,为使得所学习的3DLUT具有更好的稳定性好鲁棒性,作者引入了两种正则项。

  • Smooth Regularization。为了稳定的将输入RGB变换到期望的颜色空间,而不引入伪影,3DLUT的输出RGB应当具有局部平滑性。全变差Total Variation, TV是图像复原领域经典的平滑正则化技术,作者将其引入到3DLUT,此时TV正则定义如下:

RTV=∑c∈{r,g,b}∑i,j,k(∥c(i+1,j,k)O−c(i,j,k)O∥2+∥c(i,j+1,k)O−c(i,j,k)O∥2+∥c(i,j,k+1)O−c(i,j,k)O∥2)\begin{aligned} \mathcal{R}_{T V} &=\sum_{c \in\{r, g, b\}} \sum_{i, j, k}\left(\left\|c_{(i+1, j, k)}^{O}-c_{(i, j, k)}^{O}\right\|^{2}+\| c_{(i, j+1, k)}^{O}\right.\\ &\left.-c_{(i, j, k)}^{O}\left\|^{2}+\right\| c_{(i, j, k+1)}^{O}-c_{(i, j, k)}^{O} \|^{2}\right) \end{aligned} RTV​​=c∈{r,g,b}∑​i,j,k∑​(∥∥∥​c(i+1,j,k)O​−c(i,j,k)O​∥∥∥​2+∥c(i,j+1,k)O​−c(i,j,k)O​∥∥​2+∥∥​c(i,j,k+1)O​−c(i,j,k)O​∥2)​

除了3DLUT应具有平滑性外,CNN预测的内容自适应权值同样非常重要,作者也为其引入了L_2L\_2L_2正则以提升所得3DLUT的平滑性。总的平滑正则项描述如下:

Rs=RTV+∑n∥wn∥2\mathcal{R}_{s}=\mathcal{R}_{T V}+\sum_{n}\left\|w_{n}\right\|^{2} Rs​=RTV​+n∑​∥wn​∥2

  • Monotonicity regularization。除了平滑性外,单调性也适合3DLUT应当具有的一个属性。为此作者设计了如下的单调正则项:
    Rm=∑c∈{r,g,b}∑_i,j,k[g(c(i,j,k)O−c(i+1,j,k)O)+g(c_(i,j,k)O−c(i,j+1,k)O)+g(c(i,j,k)O−c(i,j,k+1)O)]\begin{aligned} \mathcal{R}_{m} &=\sum_{c \in\{r, g, b\}} \sum\_{i, j, k}\left[g\left(c_{(i, j, k)}^{O}-c_{(i+1, j, k)}^{O}\right)+g\left(c\_{(i, j, k)}^{O}\right.\right.\\ &\left.\left.-c_{(i, j+1, k)}^{O}\right)+g\left(c_{(i, j, k)}^{O}-c_{(i, j, k+1)}^{O}\right)\right] \end{aligned} Rm​​=c∈{r,g,b}∑​∑_i,j,k[g(c(i,j,k)O​−c(i+1,j,k)O​)+g(c_(i,j,k)O−c(i,j+1,k)O​)+g(c(i,j,k)O​−c(i,j,k+1)O​)]​

其中g(⋅)g(\cdot)g(⋅)表示标准ReLU操作。

Final training losses and implementation

通过集成前述两个正则项,最终的损失函数定义如下:

Lpaired=Lmse+λ_sRs+λmRmLunpaired=Lgan+λsRs+λmRm\mathcal{L}_{paired} = \mathcal{L}_{mse} + \lambda\_s \mathcal{R}_s + \lambda_m \mathcal{R}_m \\ \mathcal{L}_{unpaired} = \mathcal{L}_{gan} + \lambda_s \mathcal{R}_s + \lambda_m \mathcal{R}_m Lpaired​=Lmse​+λ_sRs​+λm​Rm​Lunpaired​=Lgan​+λs​Rs​+λm​Rm​

其中λs=0.0001,λm=10\lambda_s=0.0001, \lambda_m = 10λs​=0.0001,λm​=10。

在实现方面,基本框架为Pytorch,trilinear interpolation通过CUDA并行实现。训练的优化器为Adam,Batch=1,学习率固定0.0001(pair)和0.0002(unpair),随机裁剪、随机镜像等数据增强。而这N个3DLUT的初始化方式为:第一个为恒等映射,其他则初始化为0。CNN的全连接层的bias初始化为1,确保起始阶段的权值预测为1。

Experiments

训练数据:MIT-Adobe FiveK, HDR+。评价准则:PSNR、SSIM。下面直接看结果咯。

下图给出了三个不同图像采用所提方法生成的3DLUT以及最终的增强结果。可以看到:所提方法生成的结果比固定3DLUT的方式更灵活,效果更佳。

下图给出了所提方法与其他SOTA方法在FiveK数据集上的指标对比以及视觉效果对。可以看到所提方法不仅具有更好的指标,同样具有更好的视觉效果。

下面给出了所提方法与其他SOTA方法在HDR+数据集上的指标与视觉效果对比。

与此同时,作者也给出了不同图像编辑工具与所提方法的处理效果对比,见下图。

最后,作者给出不同的图像增强方法的推理速度对比,见下图。还有什么比这个速度更惊人的吗?以1.66ms的速度处理4K图像,只能感慨一下,快到没反应。

全文到此结束,对该感兴趣的同学建议去看一下原文。最后期待作者尽快开源代码。

原文:图像增强领域大突破!以 1.66ms 的速度处理 4K 图像,港理工提出图像自适应的 3DLUT

微信公众号: 极市平台(ID: extrememart )
每天推送最新CV干货

图像增强领域大突破!以 1.66ms 的速度处理 4K 图像,港理工提出图像自适应的 3DLUT相关推荐

  1. 图像增强领域大突破!以1.66ms的速度处理4K图像,港理工提出图像自适应的3DLUT...

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨Happy 编辑丨极市平台 导读 该文是香港理工大学张磊老师及其学生在图像增强领域的又一颠覆性成 ...

  2. CVPR 2022 | 大连理工提出自校准照明框架,用于现实场景的微光图像增强

    论文标题: Toward Fast, Flexible, and Robust Low-Light Image Enhancement 论文链接: https://arxiv.org/pdf/2204 ...

  3. 图像雅各比矩阵-将图像像素速度与相机速度关联

    如何将图像像素速度转变到相机速度? 导入 符号定义 固定点相对于移动相机的速度 构建交互矩阵 导入 在基于图像的视觉伺服中,我们可以通过相机观察到图像在相机中的位置发生变化 ,针对于每个像素来说呢?便 ...

  4. ASIC加速技术在航空航天领域的应用:提高飞行器速度和稳定性

    文章目录 引言 技术原理及概念 1. 高速信号处理 2. 实时控制 3. 加密和解密 相关技术比较 实现步骤与流程 1. 准备工作:环境配置与依赖安装 2. 核心模块实现 3. 集成与测试 应用示例与 ...

  5. 医疗领域大突破:AI眼病诊断工具堪比专家,准确率达94%!

    来源:新智元 本文共1379字,建议阅读5分钟. DeepMind计划开发一种医疗产品,能够帮助医生通过普通的眼部扫描检测50多种可能威胁到视力的疾病. [ 导读 ]Deepmind与英国NHS旗下的 ...

  6. AIWalker是个什么样的号?为什么要推荐呢?聚焦low-level,关注AI最前沿

    今天给大家推荐一个好朋友Happy运营的公众号[AIWalker],该公众号重点致力于low-level领域(比如超分.降噪.增强等)知识的分享,同时也会对最前沿的Transformer.网络架构.目 ...

  7. HINet | 性能炸裂,旷视科技提出适用于low-level问题的Half Instance Normalization

    编辑:Happy 首发: AIWalker 大家好,我是Happy. 一直以来,甚少有normalization技术在low-level得到广泛应用并取得优异性能,就算得到应用其性能也会受限或者造成异 ...

  8. 【 AI 简报 2020930 期】NVIDIA开源C++标准库等热点新闻等你来!

    导读:本期为 AI 简报 2020930期,将为您带来过去一周关于 AI 新闻 9 条,其他互联网圈内新闻 5 条,希望对您有所帮助~ 有更好的建议或者意见请在下方留言~ AI 1. AI养猪.智能超 ...

  9. 基于retinex理论改进的低照度图像增强算法

    写本文的目的是记录自己学习过或做过的一些东西,深化理解,理清思路,便于回忆.本人处于学习阶段,欢迎指出不对的地方. 本文算法参考文献:李勇.基于Retinex理论的低照度图像增强算法研究与实现[D]. ...

最新文章

  1. 聊聊 Kafka: Kafka 的基础架构
  2. (MyEclipse) MyEclipse完美破解方法(图)
  3. PO_标准内部请购内部采购单抛转订单模组(流程)
  4. python 字符串数组互转
  5. Makefile与Shell的问题
  6. python接口自动化(四十二)- 项目架构设计之大结局(超详解)
  7. click事件在什么时候出发_关于JS 事件冒泡和onclick,click,on()事件触发顺序
  8. ASP.NET 性能监控工具和优化技巧
  9. ISIS开发出加密安卓通信软件
  10. Java语言实现文本转语音
  11. Spss-系统聚类软件实操
  12. 世界记忆大师的记忆力训练方法
  13. “飞思卡尔”智能车竞赛有感
  14. h桥控制电机刹车_一种电机H桥制动电路的制作方法
  15. pycharm清华镜像源使用
  16. 用大写字母打印三角形
  17. 关于共享自习室查询座位空闲状态的算法笔记
  18. 蚂蚁森林在沙漠种植了5552万棵树,原来我也在做一件改变世界
  19. 在Linux上安装Git
  20. 2022-2028年版中国类金融行业发展走势与投资风险评估报告

热门文章

  1. android应用按照字母表排名(包含英文字母开头的)
  2. Qt中处理execl时,querySubObject(“WorkBooks“)返回为空
  3. inherits java_Java 继承(Inherits)
  4. win10如何实现电脑上文件共享访问
  5. mapreduce JVM参数配置的问题
  6. 黑盒测试之正交试验法
  7. 功能测试技术--正交试验法及其他
  8. java面试题及答案(java面试题及答案整理)
  9. java 项目数据库脚本命名_java项目酒店管理(含数据库脚本)
  10. 麦克风阵列技术-统计视角观察