论文阅读:Learning sRGB-to-Raw-RGB De-rendering with Content-Aware Metadata

论文阅读:Learning sRGB-to-Raw-RGB De-rendering with Content-Aware Metadata

Abstract

大多数的 Camera ISP 会将 RAW 图经过一系列的处理,变成 sRGB 图像,ISP 的处理中很多模块是非线性的操作,这些操作会破坏环境光照的线性关系,这对于一些希望获取环境光照线性关系的 CV 任务来说是不友好的,对于这类任务来说,线性的 RAW-RGB 图像来说更合适,不过,一般的 RAW-RGB 图像的 bit 位都是 12 或者 14 比特的,直接存储 RAW-RGB 图像比较费存储空间。为了解决这个问题,有几个 raw 重建的方法,是通过从 RAW-RGB 图像中提取特定的元数据,并嵌入 sRGB 图像中,这些元数据,最后可以用来参数化一个映射函数,这个映射函数可以将 sRGB 图像重映射回 RAW-RGB 图像。现有的 RAW 重建的方法都是基于简单的采样以及全局映射函数来实现。这篇文章提出了一种联合学习的方式,将采样策略与重建方法进行联合优化,最终得到的采样策略可以基于图像内容自适应地进行采样,从而可以得到更好的 RAW 重建结果。文章也提出了一种在线 fine-tuning 的方式进一步提升重建网络的效果。

在这里插入图片描述

De-rendering Framework

在这里插入图片描述
文章先对这个 RAW-RGB 图像的重建,进行了一个抽象的表述,假设 x \mathbf{x} x y \mathbf{y} y 分别表示 sRGB 图像以及 RAW-RGB 图像,RAW-RGB 图像的重建问题,可以抽象为寻找一个映射函数,使得

y = f ( x ) \mathbf{y} = f(\mathbf{x}) y=f(x)

对于元数据的这类方法,映射关系通常基于一个小样本的采样来获得:

y = f ( x ; s y ) \mathbf{y} = f(\mathbf{x}; s_{\mathbf{y}}) y=f(x;sy)

这类采样,一般是基于事先设定好的规则,比如均匀采样等。这篇文章,希望能同时学习到采样函数以及映射函数,即:

y = f ( x ; s y = g ( x , y ) ) \mathbf{y} = f(\mathbf{x}; s_{\mathbf{y}} = g(\mathbf{x}, \mathbf{y}) ) y=f(x;sy=g(x,y))

其中, g ( x , y ) g(\mathbf{x}, \mathbf{y}) g(x,y) 是一个可学习的映射函数。

文章作者将 f , g f, g f,g 用两个 U-Net 的网络进行建模, 并且通过端到端的方式进行训练,在训练阶段,从 RAW-RGB 图像中提取 k % k\% k% 的像素点,采样网络输入一张 RAW-RGB 图像以及一张 sRGB 图像,输出一个二值的采样图,被采样点的位置上赋值为 1,为了更有效的计算采样点,采样网络也会学习将 RAW-RGB 图像分成多个超像素区域,每个采样点就从超像素区域通过 max-pooling 获得,而对于重建网络,输入的就是 sRGB 图像,采样的 RAW-RGB 图像点以及采样图,从而恢复出完整的 RAW-RGB 图像。测试阶段,包含两个阶段,第一阶段就是在拍摄的时候,利用采样网络 g g g 对 RAW-RGB 图像进行采样,同时 ISP 会输出一张 sRGB 图像;然后第二阶段就是需要 RAW-RGB 图像的时候, 通过重建网络 f f f 进行重建。

在这里插入图片描述

基于内容的元数据采样方式,就是想基于图像内容找到最合适的图像采样点。为了实现这个目的,文章作者提出了一种基于 superpixel 的方式,将图像分成若干个 superpixel 区域,然后每个 superpixel 区域进行采样。通过这种方式,可以将 RAW-RGB 图像分成很多个分割区域,每个区域选择最具代表性的采样点。

文章中的采样网络是直接从 RAW-RGB 图像中进行采样,如下图所示,首先将 RAW-RGB 图像分成若干个均匀分布的网格,网络会预测相关分数 q c ( p ) q_c(\mathbf{p}) qc(p),表示每个像素 p \mathbf{p} p 属于网格 c c c 的概率有多大,为了计算效率, 文章中只选择了一个 9 邻域的网格来计算相关分数。相关性图通过如下的 loss 来学习获得:

L S = α ∑ p ∥ x ( p ) − x ^ ( p ) ∥ 2 2 + ( 1 − α ) ∑ p ∥ y ( p ) − y ^ ( p ) ∥ 2 2 + m 2 S 2 ∑ p ∥ p − p ^ ∥ 2 2 (1) L_S = \alpha \sum_{\mathbf{p}} \left \| \mathbf{x}(\mathbf{p}) - \hat{\mathbf{x}}(\mathbf{p}) \right \|_{2}^{2} + (1-\alpha) \sum_{\mathbf{p}} \left \| \mathbf{y}(\mathbf{p}) - \hat{\mathbf{y}}(\mathbf{p}) \right \|_{2}^{2} + \frac{m^2}{S^2} \sum_{\mathbf{p}} \left \| \mathbf{p} - \hat{\mathbf{p}} \right \|_{2}^{2} \tag{1} LS=αpx(p)x^(p)22+(1α)py(p)y^(p)22+S2m2ppp^22(1)

其中, x ^ ( p ) \hat{\mathbf{x}}(\mathbf{p}) x^(p) x ( p ) \mathbf{x}(\mathbf{p}) x(p) 重建之后的 RGB 值,其表达式如下所示:

u c = ∑ p ∈ N c x ( p ) ⋅ q c ( p ) ∑ p ∈ N c q c ( p ) , x ^ ( p ) = ∑ c u c ⋅ q c ( p ) (2) \mathbf{u}_c = \frac{\sum_{\mathbf{p} \in \mathcal{N}_c} \mathbf{x}(\mathbf{p}) \cdot q_c(\mathbf{p}) }{\sum_{\mathbf{p} \in \mathcal{N}_c} q_c(\mathbf{p})}, \quad \hat{\mathbf{x}}(\mathbf{p}) = \sum_c \mathbf{u}_c \cdot q_c(\mathbf{p}) \tag{2} uc=pNcqc(p)pNcx(p)qc(p),x^(p)=cucqc(p)(2)

其中, u c \mathbf{u}_c uc 表示超像素区域中心的特征向量, N c \mathcal{N}_c Nc 表示网格 c c c 的 9 邻域内的所有像素集合, y ^ ( p ) , p \hat{\mathbf{y}}(\mathbf{p}), \mathbf{p} y^(p),p 都用类似的方法进行计算, m 和 S m 和 S mS 表示权重参数。如果选择 % k \%k %k 的采样点,文章就将整个图像区域分成 % k \%k %k 个网格区域,然后每个网格区域选择似然估计最大的像素点作为采样点:

p c ∗ = arg max ⁡ p ∈ N c q c ( p ) (3) \mathbf{p}^{*}_c = \argmax_{\mathbf{p} \in \mathcal{N}_c} q_c(\mathbf{p}) \tag{3} pc=pNcargmaxqc(p)(3)

这些采样点,最后会形成一个二值化化的采样 mask m ( p ) \mathbf{m}(\mathbf{p}) m(p),然后用这个 mask 与 RAW-RGB 图像相乘,就能得到采样后的 RAW-RGB 值,这些值存下来作为元数据。

介绍完了采样,后面的重建就比较直观,将 RGB 图像 x \mathbf{x} x,采样后的 RAW-RGB 图像值 s y \mathbf{s}_y sy 以及 mask m \mathbf{m} m 串起来,一起输入重建网络,重建网络最后预测出一个完整的 RAW-RGB 图像,重建 loss 由下所示:

L R = ∑ p ∥ y ( p ) − y ^ ( p ) ∥ 1 L_{R} = \sum_{\mathbf{p}} \left \| \mathbf{y}(\mathbf{p}) - \hat{\mathbf{y}}(\mathbf{p}) \right \|_{1} LR=py(p)y^(p)1

其中, y ^ = f ( x , s y , m ) \hat{\mathbf{y}}=f(\mathbf{x}, \mathbf{s}_y, \mathbf{m}) y^=f(x,sy,m)

推理的时候,可以利用在线 finetune 的方式进一步提升重建效果,可以通过只对采样点处的像素进行重建损失的计算:

L O = ∑ p m ( p ) ∥ y ( p ) − y ^ ( p ) ∥ 1 L_{O} = \sum_{\mathbf{p}} \mathbf{m}(\mathbf{p}) \left \| \mathbf{y}(\mathbf{p}) - \hat{\mathbf{y}}(\mathbf{p}) \right \|_{1} LO=pm(p)y(p)y^(p)1

文章中还利用了元学习的策略,进一步提升推理时候的重建效果:

L M = ∑ p ∥ y ~ θ ′ ( p ) − y ^ ( p ) ∥ 1 L_{M} = \sum_{\mathbf{p}} \left \| \tilde{\mathbf{y}}_{\theta'}(\mathbf{p}) - \hat{\mathbf{y}}(\mathbf{p}) \right \|_{1} LM=py~θ(p)y^(p)1

最终的训练loss 是这几种 loss 的加权:

L T o t a l = L R + λ S L S + λ M L M L_{Total} = L_{R} + \lambda_{S}L_{S} + \lambda_{M}L_{M} LTotal=LR+λSLS+λMLM

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/252019.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL 常用数据类型总结

面试: 为什么建表时,加not null default ‘’ / default 0 答:不想让表中出现null值. 为什么不想要的null的值 答:(1)不好比较,null是一种类型,比较时,只能用专门的is null 和 is not null来比较. 碰到运算符,一律返回null &#xff08…

了解如何在linux使用podman管理容器

本章主要介绍使用 podman 管理容器。 了解什么是容器,容器和镜像的关系 安装和配置podman 拉取和删除镜像 给镜像打标签 导出和导入镜像 创建和删除镜像 数据卷的使用 管理容器的命令 使用普通用户管理容器 使用普通用户管理容器 对于初学者来说,不太容…

MySQL笔记-第09章_子查询

视频链接:【MySQL数据库入门到大牛,mysql安装到优化,百科全书级,全网天花板】 文章目录 第09章_子查询1. 需求分析与问题解决1.1 实际问题1.2 子查询的基本使用1.3 子查询的分类 2. 单行子查询2.1 单行比较操作符2.2 代码示例2.3 …

【51单片机系列】直流电机使用

本文是关于直流电机使用的相关介绍。 文章目录 一、直流电机介绍二、ULN2003芯片介绍三、在proteus中仿真实现对电机的驱动 51单片机的应用中,电机控制方面的应用也很多。在学习直流电机(PWM)之前,先使用GPIO控制电机的正反转和停止。但不能直接使用GPIO…

Android---Kotlin 学习006

数字类型 和 java 一样,Kotlin 中所有数字类型都是有符号的,也就是说既可以表示正数,也可以表示负数。 安全转换函数 与 java 不一样,kotlin 提供了 toDoubleOrNull 和 toIntOrNull 这样的安全转换函数,如果数值不能…

FL Studio终身永久2024中文版下载安装详细操作图文步骤教程

FL Studio2024版是一款在国内非常受欢迎的多功能音频处理软件,我们可以通过这款软件来对多种不同格式的音频文件来进行编辑处理。而且FL Studio 2024版还为用户们准备了超多的音乐乐器伴奏,我们可以直接一键调取自己需要的音调。 FL Studio 2024版不仅拥…

早上好,我的leetcode 【hash】(第二期)

写在前面:坚持才是最难的事情 C代码还是不方便写,改用python了,TAT 文章目录 1.两数之和49. 字母异位词分组128.最长连续序列 1.两数之和 你好,梦开始的地方~ https://leetcode.cn/problems/two-sum/description/?envTypestudy…

PMP项目管理 - 采购管理

系列文章目录 PMP项目管理 - 质量管理 PMP项目管理 - 采购管理 PMP项目管理 - 资源管理 现在的一切都是为将来的梦想编织翅膀,让梦想在现实中展翅高飞。 Now everything is for the future of dream weaving wings, let the dream fly in reality. PMP项目管理 -…

Next.js加载异步组件 骨架屏

Next.js 中有两种处理页面加载的方式,一种是 Loading UI 一种是 Streaming。接下来我将介绍这两种的区别,以及实际的业务场景。 当我们进入某个页面时,需要获取页面数据,可能是从数据库读取也有可能是 API 服务,总之这…

Linux---进程概念

目录 一、冯诺依曼体系结构 二、操作系统 1.关于下三层的理解 2.关于上三层的理解 三、进程 1.进程(也叫做任务)对应的标识符---pid 2.fork---用代码创建进程(系统接口) 1)初步认识一下fork 2)fork函数的返回值 3)fork的原理 问题1…

残差网络中的BN (Batch Normalization 批标准化层)的作用是什么?

文章目录 什么是BN (Batch Normalization 批标准化层)一、BN层对输入信号进行以下操作:二、BN 层有什么作用? 什么是BN (Batch Normalization 批标准化层) BN层的全称是Batch Normalization层,中文可以翻译为批标准化…

[Big Bird]论文解读:Big Bird: Transformers for Longer Sequences

文章目录 1 介绍2 模型架构3 结果 论文:Big Bird: Transformers for Longer Sequences 作者:Manzil Zaheer, Guru Guruganesh, Avinava Dubey, Joshua Ainslie, Chris Alberti, Santiago Ontanon, Philip Pham, Anirudh Ravula, Qifan Wang, Li Yang, Am…

多维时序 | MATLAB实现RIME-LSSVM【23年新算法】基于霜冰优化算法(RIME)优化最小二乘向量机(LSSVM)多变量时间序列预测

多维时序 | MATLAB实现RIME-LSSVM【23年新算法】基于霜冰优化算法(RIME)优化最小二乘向量机(LSSVM)多变量时间序列预测 目录 多维时序 | MATLAB实现RIME-LSSVM【23年新算法】基于霜冰优化算法(RIME)优化最小二乘向量机(LSSVM)多变量时间序列预测预测效果基本介绍模型描述程序设…

【最新版】在WSL上运行 Linux GUI (图形用户界面)应用(Gnome 文本编辑器、GIMP、Nautilus、VLC、X11 应用)

文章目录 一、 安装WSL1. 全新安装2. 现有 WSL 安装 二、运行 Linux GUI 应用1. 更新发行版中的包2. 安装 Gnome 文本编辑器启动 3. 安装 GIMP启动 4. 安装 Nautilus启动 5. 安装 VLC启动 6. 安装 X11 应用 适用于 Linux 的 Windows 子系统 (WSL) 现在支持在 Windows 上运行 Li…

深入比较Input、Change和Blur事件:Vue与React中的行为差异解析

目录 前言 1. Input事件: 行为差异: 2. Change事件: 行为差异: 3. Blur事件: 行为差异: 4. 在Vue中的表现: Input事件: Change事件: Blur事件: 5.…

Quartus 18.1软件及支持包安装教程

安装前最好关闭电脑的杀毒软件和防火墙 安装包可以到Quartus官网下载需要的版本,注意选择操作系统 Quartus官网:FPGA 设计软件 - 英特尔 Quartus Prime (intel.cn) 下载解压后以管理员的身份运行 QuartusSetup-18.1.0.625.exe文件,版本不同…

Vue中的数据变化监控与响应——深入理解Watchers

目录 ​编辑 前言 1. 基本用法: 2. 深度监听: 3. 立即执行: 4. 监听多个数据: 5. 清理监听器: 6. 监听路由变化: 总结: 我的其他博客 前言 在Vue.js中,watch是一种用于监听…

【Spring】Spring中的事务

文章目录 1. Spring事务简介2. Spring事务的案例案例代码代码目录结构数据库pom.xmlResource/jdbc.propertiesconfig/SpringConfig.javaconfig/JdbcConfig.javaconfig/MyBatisConfig.javadao/AccountDao.javaservice/AccountService.javaservice/impl/AccountServiceImpl.java测…

设计模式 简单工厂 工厂方法模式 抽象工厂模式

工厂模式介绍 工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。它是创建型模式。 简单工厂 简单工厂模式是指由一个工厂对象决定创建出哪一种产品类的实例, 但它不属于GOF 23种设计模式 简单工厂适用于工厂类负责创建的对象较少的场景,…

Command line is too long. Shorten command line for Application or also

一、问题描述 Error running ‘Application’: Command line is too long. Shorten command line for Application or also for Spring Boot default configuration? 二、原因分析 springboot项目启动命令过长! 三、解决方案 第1步:点击项目启动配置项 第2步…