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

news2024/11/27 6:19:11

论文阅读: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

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【深度强化学习】TRPO、PPO

策略梯度的缺点 步长难以确定,一旦步长选的不好,就导致恶性循环 步长不合适 → 策略变差 → 采集的数据变差 → (回报 / 梯度导致的)步长不合适 步长不合适 \to 策略变差 \to 采集的数据变差 \to (回报/梯度导致的&am…

【Unity】简单实现生成式电子围栏

【Unity】简单实现生成式电子围栏 三维电子围栏是一种通过使用三维技术和电子设备来建立虚拟围栏,用于监控和控制特定区域的系统。它可以通过使用传感器和摄像头来检测任何越界行为,并及时发出警报。这种技术可以应用于安防领域以及其他需要对特定区域进…

C#实现MQTT over WebSocket

如何在网页端实现MQTT消息的发布和订阅? 实现MQTT功能,可以发布和订阅主题通过WebSocket协议将MQTT消息转发给对应的网页端 带着这个实现思路,采用C#控制台程序实现MQTT服务端功能,web端可以直接使用websocket插件与服务端双向通…

在金属/绝缘体/p-GaN栅极高电子迁移率晶体管中同时实现大的栅压摆幅和增强的阈值电压稳定性

标题:Simultaneously Achieving Large Gate Swing and Enhanced Threshold Voltage Stability in Metal/Insulator/p-GaN Gate HEMT (IEDM2023) 摘要 摘要:对于增强型GaN功率晶体管的发展,栅压摆幅和阈值电压稳定性通常是互相排斥的。本文展…

Web前端-HTML(简介)

文章目录 1. HTML1.1概述1.2 HTML骨架标签1.3 HTML元素标签及分类1.4 HTML标签关系 2. 代码开发工具&#xff08;书写代码&#xff09;3. 文档类型<!DOCTYPE>4. 页面语言lang5. 字符集 1. HTML 1.1概述 HTML 指的是超文本标记语言 (Hyper Text Markup Language)&#x…

串口通信(6)-C#串口通信Modbus协议完整实例

本文讲解C#基于ModbusRTU协议串口通信完整实例。 前言 关于modbus的协议从上一篇中有介绍,本篇不在阐述。 串口通信(5)-C#串口通信数据接收不完整解决方案 创建实例 添加控件和事件等 参考界面文件 namespace ModbusRTUDemo {partial class MainForm{/// <summary>…

踩坑记录:java连接ssh的问题

目录 概述一、第一个问题解决 二、第二个问题分析解决 三、第三个问题分析解决 第四个问题解决 概述 手里有个CS架构的老系统&#xff0c;服务端要用SSH的方式传文件。没想到写了两天&#xff01;遇到一堆问题&#xff0c;于是记录下。&#xff08;老系统真恶心啊&#xff01;…

msvcp140.dll丢失怎样修复?全面分析msvcp140.dll的修复方法

在执行特定程序时&#xff0c;有可能遭遇msvcp140.dll文件遗失的困扰&#xff0c;此时该如何处理呢&#xff1f;此次将为您讲述面临此类问题的有效解决方案&#xff0c;涉及到多种修复方法&#xff0c;其中包括利用DLL修复工具进行操作。您可依据个人需求选择相应的修复方式&am…

学习Java第70天,过滤器Filter简介

过滤器概述 Filter,即过滤器,是JAVAEE技术规范之一,作用目标资源的请求进行过滤的一套技术规范,是Java Web项目中最为实用的技术之一 Filter接口定义了过滤器的开发规范,所有的过滤器都要实现该接口 Filter的工作位置是项目中所有目标资源之前,容器在创建HttpServletRequest和…

用GitBook制作自己的网页版电子书

用GitBook制作自己的网页版电子书 前言 几年前阅读过其他人用GitBook创建的文档&#xff0c;可以直接在浏览器中打开&#xff0c;页面干净整洁&#xff0c;非常清爽&#xff0c;至今印象深刻。 GitBook非常适合用来为个人或团队制作文档&#xff0c;对于我这种偶尔写博客的人…

Vue 实现一个弹出框,允许用户输入信息,并在确认时将输入的信息进行输出到控制台

父组件用来点击按钮弹出弹出框 <!--ParentComponent.vue--> <template><div><button click"showPopupV">点我会有个弹出框&#xff01;&#xff01;&#xff01;</button><PopupComponent v-if"showPopup" :data"p…

java-sec-code中重定向

重定向 状态码3xx 存在问题的代码段 GetMapping("/redirect") public String redirect(RequestParam("url") String url) {return "redirect:" url; }用户访问/redirect路径时&#xff0c;redirect方法会获取web请求中的url参数内容&#xff0…

leetcode算法题:省份数量

leetcode算法题547 链接&#xff1a;https://leetcode.cn/problems/number-of-provinces 题目 有 n 个城市&#xff0c;其中一些彼此相连&#xff0c;另一些没有相连。如果城市 a 与城市 b 直接相连&#xff0c;且城市 b 与城市 c 直接相连&#xff0c;那么城市 a 与城市 c 间…

EasyExcel 简单导入

前边写过使用easyexcel进行简单、多sheet页的导出。今天周日利用空闲写一下对应简单的导入。 重点&#xff1a;springboot、easyExcel、桥接模式&#xff1b; 说明&#xff1a;本次使用实体类student&#xff1a;属性看前边章节内容&#xff1b; 1、公共导入service public …

yarn历史日志_配置文件

yarn历史日志yarn配置文件yarn执行任务 1.3. YARN的历史日志 1.3.1. 历史日志概述 我们在YARN运行MapReduce的程序的时候&#xff0c;任务会被分发到不同的节点&#xff0c;在不同的Container内去执行。如果一个程序执行结束后&#xff0c;我们想去查看这个程序的运行状态呢…

GitHub入门介绍:从小白到大佬的旅程

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

动态规划学习——通符串匹配,正则表达式

目录 ​编辑 一&#xff0c;通符串匹配 1.题目 2.题目接口 3&#xff0c;解题思路及其代码 二&#xff0c;正则表达 1.题目 2.题目接口 3.解题思路及其代码 三&#xff0c;交错字符串 1.题目 2&#xff0c;题目接口 3.解题思路及其代码 一&#xff0c;通符串匹配 1…

docker使用详解

介绍 Docker是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中&#xff0c;然后发布到任何流行的Linux或Windows操作系统的机器上&#xff0c;也可以实现虚拟化。 Docker基于轻量级虚拟化技术&#xff0c;整个项目基于Go语言开…

2024最新FL Studio21.2MAC电脑版中文版下载安装步骤教程

FL Studio 简称FL&#xff0c;全称Fruity Loops Studio&#xff0c;因此国人习惯叫它"水果"。目前最新版本是FL Studio21.1.1.3750版本&#xff0c;它让你的计算机就像是全功能的录音室&#xff0c;大混音盘&#xff0c;非常先进的制作工具&#xff0c;让你的音乐突破…

MNIST内置手写数字数据集的实现

torchvision库 torchivision库是PyTorch中用来处理图像和视频的一个辅助库&#xff0c;接下来我们就会使用torchvision库加载内置的数据集进行分类模型的演示 为了统一数据加载和处理代码&#xff0c;PyTorch提供了两个类用于处理数据加载&#xff0c;他们分别是torch.utils.…