旷视low-level系列(二):Practical Deep Raw Image Denoising on Mobile Devices

2024-02-03 00:36

本文主要是介绍旷视low-level系列(二):Practical Deep Raw Image Denoising on Mobile Devices,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

论文:ECCV 2020
代码:https://github.com/MegEngine/PMRID

文章目录

  • 1. Motivation
  • 2. Contribution
  • 3. Methods
    • 3.1 噪声建模&参数估计
    • 3.2 k-Sigma变换
    • 3.3 移动端友好的网络结构
  • 4. Experiments
  • 5. Comments

1. Motivation

业内周知,基于深度学习的去噪算法在效果上已经甩传统算法几条街了,但是由于模型计算量太大和设备算力不够等因素导致落地困难。为了解决上述问题,旷视的这篇论文提出了一个轻量级的、高效的神经网络去噪模型,能够在移动设备上流畅运行,并且能够获取高质量的去噪结果。

2. Contribution

  • 提出了一种噪声估计和构造合成数据用于训练传感器特定的去噪神经网络的系统方法;
  • 提出了一种新颖的k-Sigma变换,将不同ISO下的噪声图像映射到ISO不变的信号-噪声空间。在该空间中能够训练一个单一的小网络来处理具有不同噪声水平的图像,而不是针对每个ISO单独训练一个小网络或者训练一个能够覆盖所有ISO的大网络;
  • 提出了一种用于高效去噪的移动端友好的网络结构。

3. Methods

3.1 噪声建模&参数估计

在噪声建模部分,作者首先回顾了入射光子到数字信号的转换过程,该过程包含多个阶段,每个阶段都会引入特定的噪声。
在这里插入图片描述
考虑一个没有噪声的理想系统,光子到数字信号的转换可以由一个简单的线性模型表示: x ∗ = g α μ ∗ (1) x^*=g\alpha\mu^*\tag{1} x=μ(1)其中, μ ∗ \mu^* μ为探测器接收到的期望光子数,即不考虑光的量子性质; α \alpha α为量子效率,其定义为光电探测器等设备将其受光表面接收到的光子转换为电子-空穴对的百分比,即量子效率等于光生电子除以入射光子数,通常用QE(quantum efficiency)表示; g g g为模拟增益。

考虑各个阶段引入噪声的情况下,转换过程如下 x = g ( α μ + n d ) + n r (2) x=g(\alpha\mu+n_d)+n_r\tag{2} x=g(αμ+nd)+nr(2) μ \mu μ为探测器实际接收到的光子数,服从泊松分布: μ ∼ P ( μ ∗ ) (3) \mu\sim\mathcal{P}(\mu^*)\tag{3} μP(μ)(3)另外,根据Poisson-Gaussion噪声模型,可以假设 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)

结合公式 (1)~(3),有: x ∼ ( g α ) P ( x ∗ g α ) + N ( 0 , g 2 σ d 2 + σ r 2 ) (4) x\sim(g\alpha)\mathcal{P}(\frac{x^*}{g\alpha})+\mathcal{N}(0,g^2\sigma_d^2+\sigma_r^2)\tag{4} x()P(x)+N(0,g2σd2+σr2)(4)
形式上与Poisson-Gaussion噪声模型是一致的。令 k = g α k=g\alpha k= σ 2 = g 2 σ d 2 + σ r 2 \sigma^2=g^2\sigma_d^2+\sigma_r^2 σ2=g2σd2+σr2,则有: x ∼ k P ( x ∗ k ) + N ( 0 , σ 2 ) (5) x\sim k\mathcal{P}(\frac{x^*}{k})+\mathcal{N}(0,\sigma^2)\tag{5} xkP(kx)+N(0,σ2)(5)可以看到, k k k σ 2 \sigma^2 σ2都与模拟增益 g g g有关,即都是由ISO决定的。

建立的噪声模型需要估计参数 k k k σ 2 \sigma^2 σ2 ,这里采用的是经典的光子转移曲线,即均值-方差曲线:
在这里插入图片描述

论文中通过采集多张灰阶卡的方式计算均值和方差:
在这里插入图片描述
Reno-10x在不同ISO设置下 k k k σ 2 \sigma^2 σ2参数标定的结果:
在这里插入图片描述
获取ISO- k k k和ISO- σ 2 \sigma^2 σ2的关系后,可以很容易地计算出任何ISO设置下的噪声参数,因此合成噪声数据时可选的ISO是连续而非离散的。

3.2 k-Sigma变换

在实际应用中,相机会根据场景照度自动调整ISO,因此在训练去噪网络时需要考虑不同的噪声水平。通常会训练单个网络来覆盖宽泛的ISO,这对网络的学习能力有一定的要求,需要一个大网络才能hold住。为了让小网络具备与大网络相当的去噪能力,作者提出了k-Sigma变换,将网络的输入噪声图像与ISO解耦,降低映射复杂度。

作者这里定义了一个k-Sigma变换,经过变换后网络的输入(即带噪声图像)和输出(即干净图像)之间的映射仅由高斯分布即可表示,并且与ISO无关,对于网络来说拟合难度大大降低。
在这里插入图片描述

3.3 移动端友好的网络结构

在这里插入图片描述
ISO独立去噪pipline:原始噪声图像先进行k-sigma变换,输入网络中去噪,输出再做一个逆变换得到最终的去噪图像。在训练阶段,计算逆变换后的去噪图像与无噪声图像的MAE作为loss。
在这里插入图片描述
作者也设计了一个轻量级的网络,为了降低计算量,只在输入和输出阶段使用正常卷积,其他层都使用深度可分离卷积。

4. Experiments

训练集的构造方式:基于SID的干净图像,从建立的噪声模型中采样噪声,加在干净图像上得到噪声图像。
训练设置:随机裁剪1024x1024的patch,使用BayerAug进行随机翻转,然后打包成512x512x4,随机调整亮度和对比度。
在这里插入图片描述
从实验结果中可以看到,基于k-sigma变换的方法在不同ISO下都表现良好。

5. Comments

亮点:通过k-sigma变换降低数据映射复杂度,小网络的去噪效果就能媲美在普通数据上训练的大网络
局限:k-sigma变换依赖于Poisson-Gaussion噪声模型,低光环境下大概率不适用。

这篇关于旷视low-level系列(二):Practical Deep Raw Image Denoising on Mobile Devices的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/672488

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

flume系列之:查看flume系统日志、查看统计flume日志类型、查看flume日志

遍历指定目录下多个文件查找指定内容 服务器系统日志会记录flume相关日志 cat /var/log/messages |grep -i oom 查找系统日志中关于flume的指定日志 import osdef search_string_in_files(directory, search_string):count = 0

GPT系列之:GPT-1,GPT-2,GPT-3详细解读

一、GPT1 论文:Improving Language Understanding by Generative Pre-Training 链接:https://cdn.openai.com/research-covers/languageunsupervised/language_understanding_paper.pdf 启发点:生成loss和微调loss同时作用,让下游任务来适应预训

lvgl8.3.6 控件垂直布局 label控件在image控件的下方显示

在使用 LVGL 8.3.6 创建一个垂直布局,其中 label 控件位于 image 控件下方,你可以使用 lv_obj_set_flex_flow 来设置布局为垂直,并确保 label 控件在 image 控件后添加。这里是如何步骤性地实现它的一个基本示例: 创建父容器:首先创建一个容器对象,该对象将作为布局的基础。设置容器为垂直布局:使用 lv_obj_set_flex_flow 设置容器

Java基础回顾系列-第七天-高级编程之IO

Java基础回顾系列-第七天-高级编程之IO 文件操作字节流与字符流OutputStream字节输出流FileOutputStream InputStream字节输入流FileInputStream Writer字符输出流FileWriter Reader字符输入流字节流与字符流的区别转换流InputStreamReaderOutputStreamWriter 文件复制 字符编码内存操作流(

Java基础回顾系列-第五天-高级编程之API类库

Java基础回顾系列-第五天-高级编程之API类库 Java基础类库StringBufferStringBuilderStringCharSequence接口AutoCloseable接口RuntimeSystemCleaner对象克隆 数字操作类Math数学计算类Random随机数生成类BigInteger/BigDecimal大数字操作类 日期操作类DateSimpleDateForma

Java基础回顾系列-第三天-Lambda表达式

Java基础回顾系列-第三天-Lambda表达式 Lambda表达式方法引用引用静态方法引用实例化对象的方法引用特定类型的方法引用构造方法 内建函数式接口Function基础接口DoubleToIntFunction 类型转换接口Consumer消费型函数式接口Supplier供给型函数式接口Predicate断言型函数式接口 Stream API 该篇博文需重点了解:内建函数式

Java基础回顾系列-第二天-面向对象编程

面向对象编程 Java类核心开发结构面向对象封装继承多态 抽象类abstract接口interface抽象类与接口的区别深入分析类与对象内存分析 继承extends重写(Override)与重载(Overload)重写(Override)重载(Overload)重写与重载之间的区别总结 this关键字static关键字static变量static方法static代码块 代码块String类特