Efficient Unified Demosaicing for Bayer and Non-Bayer Patterned Image Sensors

news2024/12/24 21:36:01

这篇文章是 2023 ICCV 的一篇文章,主要介绍一套统一的去马赛克的算法框架的

由于手机 Camera 上 CMOS 的单个 pixel size 比较小,所以现在很多手机的 Camera CMOS 会采用一些独特的非 Bayer 模式的 CFA (Quad, Nona 以及 Q X Q) 等,这类非 Bayer 模式的特点是在一个局部邻域内的像素是同样的颜色,可以根据不同的光照条件,进行灵活的转换,不过也对去马赛克的方式带来了挑战,如果处理不好,很容易带来 artifacts。之前的去马赛克方法主要是针对传统的 Bayer 模式设计的,对于非 Bayer 类型的 CFA 模式,需要对不同的 CFA 模式设计不同的去马赛克算法。这篇文章的作者提出了一种高效的统一去马赛克的方法,一个模型可以实现对传统的 Bayer 类型以及非 Bayer 类型的 RAW 图像进行去马赛克,这个方法称为基于知识学习的去马赛克方法(KLAP),使用自适应的 CFA filters,每种 CFA 的自适应 filter 只占总参数量的 1%,但依然可以有效地处理所有的 CFA 类型。更进一步的,通过在推理阶段使用元学习的策略(KLAP-M),这个模型可以消除实际 RAW 数据中未知的与 sensor 相关的伪纹理,从而可以有效地将仿真数据与实际数据连接起来。文章提出的 KLAP 和 KLAP-M 的方法在仿真数据与实际数据上对 Bayer 及非 Bayer 类型的 CFA 的去马赛克表现都达到 SOTA 水平。

Introduction

在 ISP 流程中,去马赛克是非常重要的一个模块,因为我们的手机 sensor 捕获的是一个单通道的 RAW 图,但是我们最终看到的图像是一个 RGB 三通道的图像,那么从单通道的 RAW 图到三通道的 RGB 图像的这个过程,就是我们常说的去马赛克的操作。随着目前智能手机的影像质量越来越高,所用的sensor 的像素数量也越来越多,从以前的几百万像素,到后来的 12M,到目前的 50M,甚至有 200M,也就是 2 亿像素,虽然像素的数量在不断增加,但是 sensor 的整体面积并没有增大很多,所以带来的最终结果就是减小了单个像素的感光面积,小像素会导致 sensor 对光照更敏感,也更容易带来噪声,为了解决这个问题,所以现在的很多 sensor 在传统 Bayer CFA 的基础上,发展出了很多不同的非 Bayer 类型的 CFA,简单来说,就是将同颜色的小像素在相邻区域进行统一的排布,形成 2 × 2 , 3 × 3 , Q × Q 2 \times 2, 3 \times 3, Q \times Q 2×2,3×3,Q×Q 的排布,这种排布的好处就是当光线不足的时候,这些相邻同颜色的像素可以合并成一个像素,从而提升整体的信噪比。而当光线充足的时候,又可以变成单个像素成像,从而提升成像的分辨率。不过这种非 Bayer 类型的 CFA 需要专门的去马赛克算法的支持,不同的 CFA 需要不同的去马赛克算法。如果每个 CFA 都需要一个单独的去马赛克模型,那么对于一个需要在不同光照条件下变换不同 CFA 模式的 sensor 来说,是不够灵活的。所以这篇文章就想设计一个统一的去马赛克算法框架,以自适应的去适配不同的 CFA 模式。

在这里插入图片描述

Deep Demosaicing for Each Non-Bayer CFA

Operating Principles of Non-Bayer Sensors

文章首先展示了非 Bayer 模式的 sensor 在不同光照下的输出方式,如图 2 所示:

  • 在这里插入图片描述

对于一个 Q × Q Q \times Q Q×Q 的非 Bayer 的 sensor,当光照不足的时候, Q × Q Q \times Q Q×Q 的像素会合成一个大的像素,然后再经过去马赛克算法,这种方式就是通过增大感光面积来提升信噪比,不过代价就是会损失空间分辨率,而当光照充足的时候, Q × Q Q \times Q Q×Q 的每个 pixel 不再做融合,而是直接参与成像,这个时候有两种操作,一种是先将 Q × Q Q \times Q Q×Q 做一个马赛克算法,变成常规的 Bayer 模式,然后再过去马赛克算法,另外一个操作就是直接将 Q × Q Q \times Q Q×Q 的模式通过去马赛克算法,这两种方式的好处就是成像分辨率提升了,不过每个像素的感光面积下降了,所以需要在光照充足的时候用。所以不同的成像模式,需要不同的去马赛克算法进行支撑。

Data Synthesis for Demosaicing All CFAs

接下来,文章介绍了数据构造的流程,为了构造数据对,文章设计了一种从高质量的 sRGB 图像到 RAW 图的过程, 如图 3 所示:

  • 在这里插入图片描述

简单来说,就是将 ISP 流程中的模块倒转过来,对于颜色亮度来说,需要做逆变换,包括 tone 的逆处理,gamma 的逆变换,CCM 的逆变换以及白平衡的逆变换,不过一般来说,RAW 图到 sRGB 图可能会有动态范围的损失,所以最好能用高比特的 sRGB 图进行退化,才能得到高保真的 RGB 图,做完这些,得到依然是 RGB 域的图像,需要再经过叠加噪声以及通道拆分,下采样,再合并成一个单通道的 RAW 图,这个 RAW 图可以是常规的 Bayer 模式的,也可以是非 Bayer 模式的。

Domain Gap in Synthetic and Real CIS RAW

文章也提到了域差异的问题,这是很多 low-level 的计算机视觉问题的通病吧,仿真构造的数据与实际的数据多多少少总会存在一些域差异,如何拟合或者跨过这个域差异是很多研究者一直在努力解决的问题。文章为了解决或者减轻域差异带来的泛化性问题,提出了一种 meta learning 的策略。

Unified Deep Demosaicing for Multiple Bayer and Non-Bayer CFAs

接下来,是文章的方法部分,整个方法分成三步,如图 4 所示:

  • 在这里插入图片描述
Step 1: Two-stage Knowledge Learning

这一步就是利用两阶段知识迁移的方法训练一个统一的去马赛克模型,首先对于每个特定的 CFA 来说,都会有一个单独的去马赛克模型,称为 IM,假设这些 IM 都有同样的网络结构,不过包含不同的网络参数, { θ i } i = 1 k \{\theta_i\}_{i=1}^{k} {θi}i=1k,其中 θ \theta θ 表示网络参数, i = 1 , 2 , . . . k i=1,2,...k i=1,2,...k 表示不同的 CFA 类型,也就是不同的 IM 模型, k k k 表示总共的 CFA 类型,文章中 k = 4 k=4 k=4 θ u m \theta_{um} θum 表示统一的去马赛克模型的网络结构和参数,一般来说 IM 在对特定的 CFA 类型的时候,去马赛克效果是最好的,不过每个 CFA 类型需要配一个 IM,那么 K 种 CFA 类型就要配 K 个模型。

首先,对每个 CFA 类型,先单独预训练一个 IM 模型,网络结构用基础的 NAFNet,然后在知识收集(knowledge collection)阶段,用每个训练好的 IM 作为老师,UM 模型作为学生,去训练 UM 模型,这有点像知识蒸馏;然后是knowledge examination (KE) 阶段,这个阶段,IM 模型不再参与引导,而是直接用所有 CFA 类型的训练数据,一块训练 UM 模型,这个思路整体还是比较合理的,先利用知识蒸馏引导 UM 模型,然后再用实际的训练数据进行训练,这样可以增大 UM 模型的处理能力。

Step 2: Adaptive Discriminative Filters for each specific CFA Pattern

上面介绍的第一步,是让 UM 模型见过所有不同的 CFA 类型,然后在实际处理的时候,文章作者认为模型处理不同 CFA 类型的时候,可能网络激活的 kernel 也不一样,基于这样一个假设,文章作者借用 FAIG 的思路,设计了一个 Adaptive Discriminative Filters 也就是 ADP,首先对于本文的任务来说,FAIG 的 分数可以表示为: F S j = F A I G j ( θ u m j , θ i j , x i ) FS_{j}=FAIG_{j}(\theta_{um}^{j}, \theta_{i}^{j}, x_{i}) FSj=FAIGj(θumj,θij,xi),其中 i i i 表示 CFA 类型的编号, j j j 表示网络中 kernel 的编号,也就是说,对于某个 kernel j j j 来说,其在 UM 模型中与在 IM 模型中的相似性可以由一个度量,基于这个度量,可以进行排序,然后选择前 q% 的 kernel 作为处理每个 CFA 类型的去马赛克的 kernel,为了将 UM 模型的 kernel 与 IM 模型的 kernel 更好的融合,文章设计了如下的融合表达式:

θ a d p j = θ u m j + ∑ i = 1 k α i θ i j ∗ M i j (1) \theta_{adp}^{j} = \theta_{um}^{j} + \sum_{i=1}^{k} \alpha_{i} \theta_{i}^{j} \ast M_{i}^{j} \tag{1} θadpj=θumj+i=1kαiθijMij(1)

其中, j j j 表示 kernel 的编号, θ u m j \theta_{um}^{j} θumj 表示 Step-1 中预训练好的 UM 模型, α i \alpha_{i} αi 表示对某种特定 pattern 的标识,取值为 0 或者 1, θ i j \theta_{i}^{j} θij 表示每个特定 CFA 类型下,额外增加的 kernel, M i j M_{i}^{j} Mij 表示一个掩码,q% 在文章中取了一个经验值 1%,每种 CFA 类型都取 1%,所以最终的参数量,是 UM 本身的参数加上额外 4% 的参数。

这一步的作用,总得来说,就是在上一步完成 UM 训练的基础上,对 UM 中的一些 kernel 进行替换,以让 UM 模型可以更好的适应不同的 CFA 类型,而替换的准则就是用 FAIG 的思路,计算 UM 模型与 IM 模型里,同样位置的 kernel 参数的一种度量,然后选择前 1% 的 kernel 加入到 UM 模型中

Meta-learning during Inference

最后一步,文章作者为了减轻域差异带来的问题,提出了一种 meta learning 的在线 fine-tune 的策略,这个策略在推理的时候,需要对网络进行少量的迭代,以获得更为鲁棒的效果,这个 meta learning 的训练loss 包含了 pixel binning loss 以及 Noise2Self loss,因为 pixel binning 可以通过像素融合的方式,增大感光面积,提升信噪比,所以文章借助这个特性,提出了一种自监督的降噪方法来去除一些未知的伪纹理:

在这里插入图片描述

L p i x = ∣ G ( x J c , θ a d p ) − U ( G ( m ( x J c ) , θ a d p ′ ) ) ∣ (2) \mathcal{L}_{pix} = \left| G(x_{J^{c}, \theta_{adp}}) - U(G(m(x_{J^{c}}), \theta_{adp}')) \right| \tag{2} Lpix= G(xJc,θadp)U(G(m(xJc),θadp)) (2)

其中, x , J c x, J^{c} x,Jc 分别表示 RAW 图以及要用到的 mask 掩码, m , U m, U m,U 分别表示对 pixel binning 做平均,以及上采样操作,G 表示网络结构, θ a d p \theta_{adp} θadp 表示需要更新的网络参数, θ a d p ′ \theta_{adp}' θadp 网络的初始参数,在 meta learning 过程中不参与更新,这个 loss 设计的目的,就是想通过更新 θ a d p \theta_{adp} θadp 让网络可以学习到 pixel binning 的效果。

此外,作者还引入了另外修改后的 N2S loss 函数,让网络对各种噪声的表现更为鲁棒:

L N 2 S = ∣ G ( x J c , θ a d p ) J − x J ∣ (3) \mathcal{L}_{N2S} = \left| G(x_{J^{c}, \theta_{adp}})_{J} - x_{J} \right| \tag{3} LN2S= G(xJc,θadp)JxJ (3)

最终 meta learning 阶段的 loss 可以表示成:

L t o t a l = λ p i x L p i x + λ N 2 S L N 2 S (4) \mathcal{L}_{total} = \lambda_{pix} \mathcal{L}_{pix} + \lambda_{N2S} \mathcal{L}_{N2S} \tag{4} Ltotal=λpixLpix+λN2SLN2S(4)

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

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

相关文章

redis实战-添加商户缓存

为什么要使用缓存 言简意赅:速度快,好用缓存数据存储于代码中,而代码运行在内存中,内存的读写性能远高于磁盘,缓存可以大大降低用户访问并发量带来的服务器读写压力实际开发中,企业的数据量,少…

vs 2019 Release模式下采用Debug断点调试

由于Release默认模式是不能调试的,有时候我们需要调试,属性更改如下所示: 再次启动程序,就可以进行调试

C语言 for循环

for循环语句 //初始化 //判断 //调整 for(表达式1; 表达式2; 表达式3;)循环语句; 例: for循环里break for循环里continue 注:1.不可在for循环体内修改循环变量,防止for循环失去控制 2.建议for语句的循环控制变量的…

qiankun微前端:qiankun+vite+vue3+ts(未完待续..)

目录 什么是微前端 目前现有的微前端 好处 使用 子应用的页面在主应用里显示 什么是微前端 微前端是一种多个团队通过独立发布功能的方式来共同构建现代化 web 应用的技术手段及方法策略。 我的理解就是将一个大型的前端应用拆分成多个模块,每个微前端模块可以由…

《编译原理》阅读笔记:p25-p32

《编译原理》学习第 5 天,p25-p32总结,总计 8 页。 一、技术总结 1.lexical lexical这个单词后续会经常用到,所以首先要搞懂它的英文意思,不然看到中文的“词法,语法,文法”这三个词的时候就会懵了——l…

【操作系统期末速成】EP05 | 学习笔记(基于五道口一只鸭)

文章目录 一、前言🚀🚀🚀二、正文:☀️☀️☀️2.1 考点十一:死锁的概念与预防2.2 考点十二:死锁的避免一银行间算法2.1 考点十三:死锁的检测与解除 一、前言🚀🚀&#x…

Oracle、MySQL、PostGreSQL、SQL Server-空值

Oracle、MySQL、PostGreSQL、SQL Server-null value 最近几年数据库市场百花齐放,在做跨数据库迁移的数据库选型时,除了性能、稳定、安全、运维、功能、可扩展外,像开发中对于值的处理往往容易被人忽视, 之前写过一篇关于PG区别O…

Linux下安装RocketMQ:从零开始的消息中间件之旅

感谢您阅读本文,欢迎“一键三连”。作者定会不负众望,按时按量创作出更优质的内容。 ❤️ 1. 毕业设计专栏,毕业季咱们不慌,上千款毕业设计等你来选。 RocketMQ是一款分布式消息中间件,具有高吞吐量、低延迟、高可用性…

【工具分享】SQLmap

文章目录 工具介绍安装方式环境准备安装 sqlmap 工具介绍 sqlmap 是一个非常强大的自动化 SQL 注入工具,主要用于渗透测试和安全审计。它能够检测和利用 SQL 注入漏洞,进而访问数据库服务器。 GitHub:https://github.com/sqlmapproject/sql…

【Vue】单向和双向数据绑定

在 Vue.js 中,数据绑定可以分为单向数据绑定和双向数据绑定两种类型。 单向数据绑定 单向数据绑定是指数据从模型流向视图,即数据的变化会自动反映到视图中,但视图中的变化不会自动反映回模型。Vue.js 中的单向数据绑定主要通过以下方式实现…

【数据可视化技术】1、如何使用Matplotlib和Seaborn库在Python中绘制热力图

热力图是一种数据可视化技术,可以显示变量之间的相关性。这个代码段是数据分析和可视化的常用方法,特别适合于展示变量之间的相关性,对于数据科学和机器学习项目非常有帮助。 1、 导入必要的库 首先,确保你已经安装了matplotlib…

机器学习引领教育革命:智能教育的新时代

📝个人主页🌹:Eternity._ 🌹🌹期待您的关注 🌹🌹 ❀目录 📒1. 引言📙2. 机器学习在教育中的应用🌞个性化学习🌙评估与反馈的智能化⭐教学资源的优…

Ubuntu qemu虚拟机 NAT网络 第一次使用,VNC访问

比如Windows 7 虚拟机 要手工设置网络

什么是等级保护2.0?

等保的全称是信息安全等级保护,是《网络安全法》规定的必须强制执行的,保障公民、社会、国家利益的重要工作。 官方定义:等级保护是对信息和信息载体按照重要性等级分级别进行保护的一种工作,指对国家重要信息、法人和其他组织及公…

数据结构历年考研真题对应知识点(树的基本概念)

目录 5.1树的基本概念 5.1.2基本术语 【森林中树的数量、边数和结点数的关系(2016)】 5.1.3树的性质 【树中结点数和度数的关系的应用(2010、2016)】 【指定结点数的三叉树的最小高度分析(2022)】 5.1…

摸鱼大数据——Spark基础——Spark环境安装——Spark Local[*]搭建

一、虚拟机配置 查看每一台的虚拟机的IP地址和网关地址 查看路径: cat /etc/sysconfig/network-scripts/ifcfg-ens33 2.修改 VMware的网络地址: 使用VMnet8 3.修改windows的对应VMware的网卡地址 4.通过finalshell 或者其他的shell连接工具即可连接使用即可, 连接后, 测试一…

前端面试题(基础篇十三)

一、async 和 defer 的作用是什么?有什么区别? (1)脚本没有 defer 或 async,浏览器会立即加载并执行指定的脚本,也就是说不等待后续载入的文档元素,读到就加载并执行。 (2&#xff0…

dledger原理源码分析系列(三)-选主

简介 dledger是openmessaging的一个组件, raft算法实现,用于分布式日志,本系列分析dledger如何实现raft概念,以及dledger在rocketmq的应用 本系列使用dledger v0.40 本文分析dledger的选主 关键词 Raft Openmessaging 心跳/选…

机电公司管理小程序的设计

管理员账户功能包括:系统首页,个人中心,用户管理,管理员管理,客户管理,公告管理,考勤管理,请假管理 微信端账号功能包括:系统首页,公告,机电零件&…

mmap()函数和munmap()函数的例子

代码&#xff1a; #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <sys/mman.h> #include <string.h> #include <stdio.h> #include <unistd.h>#define FILELENGTH 80 int main(void) {int fd-1;char …