论文阅读:Practical Deep Raw Image Denoising on Mobile Devices

news2024/11/17 7:52:31

论文阅读: Practical Deep Raw Image Denoising on Mobile Devices

旷视 2020 ECCV

基于深度学习的降噪方法在近几年得到了大量的研究,这些方法的效果也霸榜了很多公开的数据集。不过这些方法用到的网络模型都很大,无法在手机端侧运行。这篇文章的作者设计了一种能够在手机端运行的轻量级地的降噪模型,而且在主流的旗舰机上还取得了不错的效果。这篇文章的方法有两个关键点:1) 通过对特定 sensor 的噪声模型进行标定,可以在特定噪声模型上去模拟数据从而指导小网络训练,这样的方式甚至比用大网络在基于一般的噪声模型模拟的数据训练的效果要好;2) 虽然对于特定 sensor 来说,不同 ISO 下的噪声形态会有较大差异,不过这篇文章的作者利用一个 K-simga 变换让这些不同的噪声形态变换之后变得比较统一,从而让小网络可以更好地进行处理。文章提到在手机端侧高通 855 平台的运行时间是 70ms 左右。

Introduction

随着智能手机的普及,越来越多的用户用智能手机来满足日常拍照摄影的需求。不过比起单反来说,智能手机由于镜头以及 sensor 上的制约,在夜景中更容易出现噪声。

图像降噪技术经过了十几二十年的发展,但是在手机上实现高质量的降噪依然是一个很大的挑战。最近随着深度学习的兴起,很多基于深度学习的方法取得了比传统方法更好的降噪效果,但是深度学习模型相对来说也很大,所以对在智能手机上用深度模型做降噪依然面临很多困难。

这篇文章的作者提出了一种简单而有效的方法来实现 RAW 域的降噪,文章的作者基于一个关键的观测,即对于某一款特定的 sensor 来说,噪声特性是连续的,并且可以很准确地测量出来。通过对 sensor 的噪声建模,就可以构建有噪声与干净图像的数据对,然后训练一个轻量级的网络,这个基于模拟数据训练的模型,在真实拍摄的数据上,依然可以有效地进行降噪,而且,基于噪声参数模型,文章作者设计了一种单一的线性变换,称为 K-sigma 变换,这个变换可以将不同 ISO 下的噪声形态变换到一个与 ISO 无关的噪声形态。这样可以很方便地对不同 ISO 下的噪声进行降噪。

Method

Noise Model

在这里插入图片描述

在 ISP 中,一个 Camera sensor 将入射的光线通过多个转换步骤,最后得到数字信号,每个转换步骤都可能引入特定的噪声,首先考虑一个理想的光电转换系统,每个像素的电路将光子通过一个线性放大系统转换为电信号:

x ∗ = g α u ∗ x^{*} = g \alpha u^{*} x=gαu

u ∗ u^{*} u 表示照射到每个 pixel 上的平均期望光子数, α \alpha α 表示光电转换效率, g g g 表示模拟增益。

在一个实际的系统中,如果考虑每一步引入的噪声,则有:

x = g ( α u + n d ) + n r x = g(\alpha u + n_d) + n_r x=g(αu+nd)+nr

其中, u u u 表示实际的光子数, n d ∼ N ( 0 , σ d 2 ) n_d \sim \mathcal{N}(0, \sigma_{d}^{2}) ndN(0,σd2) n r ∼ N ( 0 , σ r 2 ) n_r \sim \mathcal{N}(0, \sigma_{r}^{2}) nrN(0,σr2) 是满足高斯分布的噪声,其中 u u u 是服从期望为 u ∗ u^{*} u 的泊松分布:

u ∼ P ( u ∗ ) u \sim \mathcal{P}(u^{*}) uP(u)

结合上面的式子,可以得到:

x ∼ ( g α ) P ( x ∗ g α ) + N ( 0 , g 2 σ d 2 + σ r 2 ) x \sim (g \alpha) \mathcal{P} (\frac{x^{*}}{g \alpha}) + \mathcal{N}(0, g^2 \sigma_{d}^{2} + \sigma_{r}^{2}) x(gα)P(gαx)+N(0,g2σd2+σr2)

上面的式子,就是我们常见的泊松-高斯分布,如果令 $ k = g \alpha$,同时 $\sigma^{2} = g^2 \sigma_{d}^{2} + \sigma_{r}^{2} $,那么上面的泊松-高斯分布可以写成:

x ∼ k P ( x ∗ k ) + N ( 0 , σ 2 ) x \sim k \mathcal{P} (\frac{x^{*}}{k}) + \mathcal{N}(0, \sigma^{2}) xkP(kx)+N(0,σ2)

其中 k k k σ \sigma σ 都是和 ISO 相关的参数。

Parameter Estimation

在这里插入图片描述

有了上面的噪声模型,理论上来说,我们可以通过采样获取不同的噪声样本,从而构建数据对,因为 k k k σ \sigma σ 都是和 ISO 相关的参数,一般来说,就需要对不同的 ISO 下进行 k k k σ \sigma σ 的标定,不过,文章作者通过分析上面式子的期望均值与方差,发现他们满足如下的关系式:

E ( x ) = x ∗ E(x) = x^{*} E(x)=x

V a r ( x ) = k x ∗ + σ 2 Var(x) = k x^{*} + \sigma^{2} Var(x)=kx+σ2

文章的作者拍了一组静态的灰卡,然后将这些灰卡取平均值来获得期望均值, 同时将有同样平均值的像素值聚到一起,计算其方差,然后利用一个线性函数拟合得到 k , σ 2 k, \sigma^{2} k,σ2

The k-Sigma Transform

在实际应用场景中,摄像头会根据实际的场景,自动调整 ISO,所以对于一个降噪模型来说,需要考虑到不同的 ISO。一种直观的方法,就是将不同 ISO 的 k , σ 2 k, \sigma^{2} k,σ2 都计算出来,然后构造不同 ISO 下的训练数据对,从而训练这个降噪模型,这样对网络的 Capacity 就有一定的要求。文章作者提出了一种 k-sigma 变换的方法,将不同 ISO 下的噪声形态进行了统一。

这个 k-sigma 变换的定义如下:

f ( x ) = x k + σ 2 k 2 f(x) = \frac{x}{k} + \frac{\sigma^{2}}{k^2} f(x)=kx+k2σ2

x x x 的噪声分布,可以得到 f ( x ) f(x) f(x) 的分布如下所示:

f ( x ) ∼ P ( x ∗ k ) + N ( σ 2 k 2 , σ 2 k 2 ) f(x) \sim \mathcal{P}(\frac{x^{*}}{k}) + \mathcal{N}(\frac{\sigma^{2}}{k^2}, \frac{\sigma^{2}}{k^2}) f(x)P(kx)+N(k2σ2,k2σ2)

泊松-高斯分布可以通过下面的近似变换成高斯分布:

P ( x ∗ k ) + N ( σ 2 k 2 , σ 2 k 2 ) ≈ N ( x ∗ k , x ∗ k ) + N ( σ 2 k 2 , σ 2 k 2 ) = N ( x ∗ k + σ 2 k 2 , x ∗ k + σ 2 k 2 ) = N [ f ( x ∗ ) , f ( x ∗ ) ] \begin{aligned} & \mathcal{P}(\frac{x^{*}}{k}) + \mathcal{N}(\frac{\sigma^{2}}{k^2}, \frac{\sigma^{2}}{k^2}) \\ & \approx \mathcal{N}(\frac{x^*}{k}, \frac{x^*}{k}) + \mathcal{N}(\frac{\sigma^{2}}{k^2}, \frac{\sigma^{2}}{k^2}) \\ & = \mathcal{N}(\frac{x^{*}}{k} + \frac{\sigma^{2}}{k^2} , \frac{x^{*}}{k} + \frac{\sigma^{2}}{k^2}) \\ & = \mathcal{N}[f(x^{*}), f(x^{*})] \end{aligned} P(kx)+N(k2σ2,k2σ2)N(kx,kx)+N(k2σ2,k2σ2)=N(kx+k2σ2,kx+k2σ2)=N[f(x),f(x)]

进而可以得到:

f ( x ) ∼ N [ f ( x ∗ ) , f ( x ∗ ) ] f(x) \sim \mathcal{N}[f(x^{*}), f(x^{*})] f(x)N[f(x),f(x)]

上面的式子表明, f ( x ) f(x) f(x) 的分布只和 f ( x ∗ ) f(x^{*}) f(x) 有关,文章的作者基于这点观测,他们认为可以训练一个单一的网络,网络的输入就是 f ( x ) f(x) f(x),网络的输出则是 f ( x ∗ ) f(x^{*}) f(x) 的估计值,然后通过逆变换 f − 1 ( ⋅ ) f^{-1}(\cdot) f1() 得到降噪后的 x x x
在这里插入图片描述

Learning to Denoise

在这里插入图片描述

文章设计了一个对智能手机硬件来说更加友好地网络结构,不过整体看起来和常规的 U-net 的结构差别不大,唯一的区别就是里面的 block 大量采用了 separable-conv 的卷积方式,这种卷积形式可以减少很多的运算量,只在连接 Input 与 Output 的这一层用了常规的卷积。具体来说,Encoder 端,采用了 5 × 5 5 \times 5 5×5 的卷积核,Decoder 端,采用了 3 × 3 3 \times 3 3×3 的卷积,并且在 Encoder 与 Decoder 之间采用了跳连,最后的 Input 与 Output 还有一个很长的跨连,意味着整个个网络是学了一个残差。

这篇文章用到的数据集是 See-in-the-Dark (SID) 数据集,这个数据集包含了成对的 RAW 图,分别是用 Sony α7s II 和 Fujifilm X-T2 拍摄的,文章只挑选了这个数据集的一部分用来做验证,从 SID 数据集中,挑选了曝光时间为 10s 及 30s 的拍摄图像,同时去除了含有明显噪声的图像,最终得到了 214 张高质量的清晰 RAW 图。

为了构建训练数据,文章将 RAW 图裁成了 1024 × 1024 1024 \times 1024 1024×1024,同时利用水平与垂直翻转的方式对数据进行增广,增广的时候,确保数据是 RGGB 的 Bayer 模式,然后将数据变成 4 通道的输入,每个输入的 size 变成 512 × 512 512 \times 512 512×512,这些数据再加上模拟的噪声,就得到了有噪声的 Input,最后将有噪声的 Input 与干净的 Output 都进行 K-sigma 变换,变换到另外一个与 ISO 无关的空间,在这个空间里进行降噪的学习。

训练的时候,损失函数用的是 l1-loss,优化器是 Adam,学习率是一种循环的方式进行设置,从 1e-3 慢慢衰减到 1e-5,训练的 batchsize 为 1。

Experiments

为了验证这个方法在实际场景中的有效性,文章用了一个商用的手机来进行评估,文章中用的商用手机是 OPPO Reno-10x,评估的是这款手机后置的主摄镜头,这个主摄镜头搭配的是 Sony IMX586 sensor,一共 4800 万像素,每个像元的大小是 0.8um。

首先是标定这款镜头及sensor 对应的噪声参数,文章中提到,为了获得稳定的光照环境,文章是在一个暗室里用 Xrite SpectraLight QC 进行照明,每个 ISO 下, 通过调整光源的强度,来输出稳定的光照,在每个ISO 下,连续拍摄 64 张 RAW 图,然后对这 64 张 RAW 求平均作为无噪图的估计,然后再用上文提到的方法,对每个 ISO 下的 k , σ 2 k, \sigma^2 k,σ2 进行估计,进而可以得到不同 ISO 下的 k , σ 2 k, \sigma^2 k,σ2,然后可以拟合出不同 ISO 下的 k , σ 2 k, \sigma^2 k,σ2 的分布曲线,有了这样两条曲线,就能对噪声进行仿真模拟,从而构建有噪的图

在这里插入图片描述

End

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

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

相关文章

安装 DolphinDB Python API

1. 下载 whl 包 根据 CPU 架构、操作系统,从官方网站 pypi.org 下载对应的 Python API 安装包。 对应 x86_64, Python3.8 的包: 下载链接 2. pip 离线安装 pip install dolphindb-1.30.19.2-cp38-cp38-manylinux2010_x86_64.whl 3. 验证安装是否成…

数理天地杂志数理天地杂志社数理天地编辑部2022年第20期目录

数学基础精讲《数理天地》投稿:cn7kantougao163.com 函数定义域求法分析探讨 刘志勇; 2-3 不等式证明之极值点偏移问题探究 鲁媛媛; 4-5 利用导数突破函数的图象问题 王法金; 6-7 导数求解函数单调性的类型及分析 陈泓; 8-9 关注解三角形的一个常考…

JDK下载安装及环境配置

一、文章导读 随着互联网的日益发展, 越来越多的小伙伴加入了程序员这个行列, 也有很多小伙伴正计划学习编程, 学习Java 那么对于新手来说, 第一件事就是下载安装Java开发工具包, 也就是JDK, 今天我们就来一起详细的说说怎么操作 二、JDK版本描述 学习环境中, 我们通常…

诊所要使用微信预约系统,需准备哪些资料?

许多诊所想在自己的微信公众号里,做一个预约挂号的功能,但无论是做公众号预约系统,还是预约小程序,都需要具备以下几类资料: 营业执照 诊所为患者提供线上预约挂号功能,需要借助于微信企业服务号或者小程序…

什么是CRM系统?为什么现代企业都在使用?

如今市场竞争日益激烈,不少企业管理者通过各种方式,试图寻找一个合适并有效的解决方案,以此来帮助他们解决企业管理各种难题,让企业业绩不断提高,获得持续的成功。 而企业管理软件的出现填补了企业管理领域的空缺。从…

clickhouse 多维分析函数

前言 clickhouse的强大之处在于充分利用内存计算的高效性从而快速得到计算结果,尤其是对于一些需要做聚合分析、统计等场景下,clickhouse提供了一些按维度分析的函数,本文将介绍clickhouse常用的几类多维分析函数。 groupby函数 还记得在mys…

深入理解 Hive UDAF

1. 概述 用户自定义聚合函数(UDAF)支持用户自行开发聚合函数完成业务逻辑。从实现上来看 Hive 有两种创建 UDAF 的方式,第一种是 Simple 方式,第二种是 Generic 方式。 1.1 简单 UDAF 第一种方式是 Simple(简单) 方式,即继承 org.apache.hadoop.hive.ql.exec.UDAF 类,并…

[附源码]java毕业设计线上图书销售管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

R语言绘制柱形图系列

#EasyCharts团队出品&#xff0c; #如有问题修正与深入学习&#xff0c;可联系微信&#xff1a;EasyChartslibrary(ggplot2) #---------------------------单数剧系列柱形图----------------------------------------------------mydata<-data.frame(Cutc("Fair",…

2021年全国研究生数学建模竞赛华为杯A题相关矩阵组的低复杂度计算和存储建模求解全过程文档及程序

2021年全国研究生数学建模竞赛华为杯 A题 相关矩阵组的低复杂度计算和存储建模 原题再现&#xff1a; 一、问题背景   计算机视觉、相控阵雷达、声呐、射电天文、无线通信等领域的信号通常呈现为矩阵的形式&#xff0c;这一系列的矩阵间通常在某些维度存在一定的关联性&…

艾美捷Bio-Helix IRIS9 Plus预染蛋白ladder方案

艾美捷Bio-Helix IRIS9 Plus预染蛋白ladder(9条预染条带&#xff0c;15-180 kDa)是9种分子量为15至170kDa的预染色蛋白的组合。9种重组蛋白与蓝色发色团共价偶联&#xff0c;而1条15kDa的绿色带、一条70kDa的红色带和一条新设计的60kDa的孔雀绿色带作为参考带。IRIS9 Plus预拉伸…

轻量化网络 Mobilenet V1/V2/V3 学习记录

1. 传统卷积2. Mobilenet V12.1 Separable卷积2.2 整体结构3. Mobilenet V23.1 Relu3.2 逆残差3.3 整体结构4. Mobilenet V34.1 SE attention4.2 Switch激活函数5. Mobilenet V3 代码2016年直至现在&#xff0c;业内提出了SqueezeNet、ShuffleNet、NasNet、MnasNet以及MobileNe…

根目录挂载的/dev/mapper/centos-root分区扩容

iso&#xff1a;centos7.9 操作系统40G&#xff0c;我想用其中一块盘扩容给我的根目录 1. 新增一个分区&#xff0c;并将分区设置为物理卷 [rootmaster ~]# parted /dev/vdb GNU Parted 3.3 使用 /dev/vdb 欢迎使用 GNU Parted&#xff01;输入 help 来查看命令列表。 (…

IPD的商业实现过程

一、商业实现的主要流程 在传统的以产品为唯一中心的企业里,商业实现其实是产品实现的结果和表现。但随着企业外部影响商业结果的因素增多,随着产业链中更多的企业间协调机会和协同要求的出项,商业实现像产品实现一样具有实体性,也需要发现机会,需要制定计划,进行商业开发…

【Java 数据结构】栈与OJ题

篮球哥温馨提示&#xff1a;编程的同时不要忘记锻炼哦&#xff01;风在叙述它的阅历&#xff0c;树在书写它的温柔。 目录 1、什么是栈&#xff1f; 2、模拟实现一个栈 2.1 构造方法和成员属性 2.2 push 方法 2.3 pop 方法 2.4 peek 方法 2.5 empty 方法 3. 栈相关的OJ…

一次请求的来龙去脉 - Tomcat架构解析(一)

> Tomcat作为我们学习JavaEE的一个重要的web服务器&#xff0c;对整个请求的来龙去脉有所了解&#xff0c;将直接使得我们对JavaEE的学习更加的事半功倍。并且深入了解Tomcat架构设计之后&#xff0c;将使得我们在以后搭建自己的项目架构提供借鉴。那么接下来&#xff0c;我…

DOTA-PEG-葡萄糖 DOTA-葡萄糖

DOTA-PEG-葡萄糖 DOTA-葡萄糖 中文名称&#xff1a;葡萄糖-四氮杂环十二烷四乙酸 英文名称&#xff1a;Glucose-DOTA 别称&#xff1a;DOTA修饰葡萄糖&#xff0c;DOTA-葡萄糖 PEG接枝修饰葡萄糖 葡萄糖-聚乙二醇-四氮杂环十二烷四乙酸 DOTA-PEG-葡萄糖 纯度&#xff1a…

Vue--》简述组件的数据共享

目录 组件数据共享 父组件向子组件共享数据 子组件向父组件共享数据 兄弟组件共享数据 组件数据共享 组件之间的关系&#xff1a;在项目开发中&#xff0c;组件之间的最常用的关系分为两种&#xff1a;父子关系和兄弟关系。 父组件向子组件共享数据 通过自定义属性实现父…

进大厂必备的 Java 八股文大全(2022 最强精简易懂版)

很多同学会问 Java 面试八股文有必要背吗&#xff1f; 答案是&#xff0c;必须背&#xff0c;博主是个三本&#xff0c;今年凭借这篇八股文斩获了多个大厂暑期实习 offer&#xff0c;相信秋招一定也可以发挥重要作用。 你可以讨厌这种模式&#xff0c;但你一定要去背&#xf…

【Kafka从成神到升仙系列 四】你真的了解 Kafka 的缓存池机制嘛

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱敲代码的小黄&#xff0c;独角兽企业的Java开发工程师&#xff0c;CSDN博客专家&#xff0c;Java领域新星创作者&#x1f4d5;系列专栏&#xff1a;Java设计模式、数据结构和算法、Kafka从入门到成神、Kafka从成神到…