Toward Convolutional Blind Denoising of Real Photographs
本文提出了一个针对真实图像的盲卷积去噪网络,增强了深度去噪模型的鲁棒性和实用性。
摘要
作者提出了一个 CBD-Net,由噪声估计子网络和去噪子网络两部分组成。
作者设计了一个更加真实的噪声模型,同时考虑了信号依赖的噪声和相机内部处理的噪声。
基于真实噪声模型合成的图片和真实的噪声图片被联合在一起对网络进行训练。
噪声模型
除了高斯噪声,真实的图片噪声更加复杂,并且是信号依赖的。
给定一个干净图片 x,一个更加真实的噪声模型 \(n(x) ~ N(0, \sigma(y))\) 可以表示为:

其中,\(n(x) = n_s (x) + n_c\) 包含一个信号依赖的组成 \(n_s\) 和一个静态的噪声组成 \(n_c\)。\(n_c\) 是一个方差为 \(\sigma_c ^2\) 的高斯噪声, \(n_s\) 则和图像的像素值有关,比如 \(x(i) * \sigma_s^2\)。
另外,我们再把相机内部处理过程考虑进去的话,就会产生以下这个信号依赖和通道依赖的噪声模型。

\(y\) 表示合成图片, \(f\) 代表相机反应函数(CRF),\(M\) 代表将 sRGB 图片转化为 Bayer 图片的函数,\(M^{-1}\)代表去马赛克函数。
此外,为了扩展到对压缩图片的处理,我们把 JPEG 压缩也考虑进合成图片的生成过程。

- 针对原始图片、无压缩图片和压缩图片,我们分别用以上三种模型来生成训练图片。
网络结构

噪声等级子网络由五层的卷积组成,卷积核大小为 3*3,通道数为 32,激活函数采用 Relu,没有采用池化和批归一化,输出的噪声等级图和原噪声图片大小相同。
去噪子网络将噪声等级图和原噪声图片一起作为输入,采用了 U-Net 的网络结构,卷积核大小为 3*3,激活函数采用 Relu,学习噪声图片的残差。
非对称学习
作者用传统的去噪方法 BM3D/FFDNet 做了一个实验。当给定的噪声等级和真实噪声等级一样时,去噪效果毋庸置疑是最好的。当给定的噪声等级低于真实噪声等级一样时,去噪结果仍然有可见的噪声;但当给定的噪声等级高于真实噪声等级一样时,仍然可以取得非常满意的结果。

- 为了利用这种非对称特性进行盲去噪,我们在噪声估计中提出了不对称损失以避免在噪声水平上出现低估误差。
- 给定像素 \(i\) 处估计的噪声等级 \(\hat \sigma(y_i)\)和真实值 \(\sigma(y_i)\)。当 \(\hat \sigma(y_i) < \sigma(y_i)\),我们应该强加更多惩罚。 因此,噪声等级估计子网络的不对称损失定义如下:

通过设定 \(0 < \alpha < 0.5\),,我们可以强加更多惩罚给低估误差。
另外,我们引入一个总体方差正则化项来限制 \(\hat \sigma(y_i)\) 的平滑性:

对于去噪子网络的输出 \(\hat x\),我们定义重构误差为:

网络的总损失即为以上三部分的求和:

训练过程
基于真实噪声模型合成的图片和真实的噪声图片被联合在一起对网络进行训练,来增强网络处理真实图像的泛化能力。
- 针对一个批次的合成图片,\(L_{rec} , L_{asymm},L_{TV}\) 三个损失都被计算来训练网络。
针对一个批次的真实,由于噪声等级不可知,因此只有,\(L_{rec} 和 L_{TV}\) 两个损失被计算来训练网络。
验证和结果
- 不同 \(\alpha\) 值的去噪结果对比如下图所示,可以看到,较小的 \(\alpha = 0.3\) 会对去除未知噪声并且保留图片的结构有所帮助。

另外,作者又对只用合成图片、只用真实图片和联合真实图片和合成图片三种情况进行了对比,进一步验证了联合训练的有效性。

最后,一些实验结果如下所示:


获取更多精彩,请关注「seniusen」!

Toward Convolutional Blind Denoising of Real Photographs的更多相关文章
- Paper | Toward Convolutional Blind Denoising of Real Photographs
目录 故事背景 建模现实噪声 CBDNet 非对称损失 数据库 实验 发表在2019 CVPR. 摘要 While deep convolutional neural networks (CNNs) ...
- CV code references
转:http://www.sigvc.org/bbs/thread-72-1-1.html 一.特征提取Feature Extraction: SIFT [1] [Demo program][SI ...
- CV codes代码分类整理合集 《转》
from:http://www.sigvc.org/bbs/thread-72-1-1.html 一.特征提取Feature Extraction: SIFT [1] [Demo program] ...
- {ICIP2014}{收录论文列表}
This article come from HEREARS-L1: Learning Tuesday 10:30–12:30; Oral Session; Room: Leonard de Vinc ...
- 计算机视觉与模式识别代码合集第二版one
Topic Name Reference code Feature Detection, Feature Extraction, and Action Recognition Space-Time I ...
- CVPR2018资源汇总
CVPR 2018大会将于2018年6月18~22日于美国犹他州的盐湖城(Salt Lake City)举办. CVPR2018论文集下载:http://openaccess.thecvf.com/m ...
- Paper | Beyond a Gaussian Denoiser: Residual Learning of Deep CNN for Image Denoising
目录 故事背景 网络结构 BN和残差学习 拓展到其他任务 发表在2017 TIP. 摘要 Discriminative model learning for image denoising has b ...
- 论文翻译:2020_FLGCNN: A novel fully convolutional neural network for end-to-end monaural speech enhancement with utterance-based objective functions
论文地址:FLGCNN:一种新颖的全卷积神经网络,用于基于话语的目标函数的端到端单耳语音增强 论文代码:https://github.com/LXP-Never/FLGCCRN(非官方复现) 引用格式 ...
- 《DSLR-Quality Photos on Mobile Devices with Deep Convolutional Networks》研读笔记
<DSLR-Quality Photos on Mobile Devices with Deep Convolutional Networks>研读笔记 论文标题:DSLR-Quality ...
随机推荐
- Python—XML
什么是xml XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML 标签没有被 ...
- mac启动springboot失败,8080端口被占用,mac命令行关闭端口
如下图,idea启动springboot失败,8080端口被占用 Error starting ApplicationContext. To display the conditions report ...
- Webpack4 学习笔记八 开发环境和生产环境配置
webpack resolve属性 webpack 区分开发环境和生产环境 webpack resolve属性 该选项的作用是设置模块如何被解析. resolve.alias: 设置别名, 在vue中 ...
- string类中字符的大小写转换
今天做一道题,要用string类,涉及大小写转换,查看了C++文档,string类没有提供这样的方法,只好自己写. 之后是想到一个比较笨的方法,我把string当成一个容器,然后用迭代器一个一个来替换 ...
- LintCode 7.Serialize and Deserialize Binary Tree(含测试代码)
题目描述 设计一个算法,并编写代码来序列化和反序列化二叉树.将树写入一个文件被称为“序列化”,读取文件后重建同样的二叉树被称为“反序列化”. 如何反序列化或序列化二叉树是没有限制的,你只需要确保可以将 ...
- 二、html篇
1.<br/> 有时css实现换行比较麻烦,可以使用该标签进行换行. 2.<strong></strong> <ins></ins> & ...
- linux wdcp3 上传大文件 服务器i/o错误
在一次上传大文件时 提示 服务器i/o错误 找了些方法都没有解决 最后发现 wdcp3 面板 默认安装时 web服务器引擎是 nginx + apache 共用 而且 nginx 默认并没与安装 ...
- python练习笔记
python练习笔记,装饰器.定制方法生成特定的类 # -*- coding: utf-8 -*- def catch_exception(func): def wrap(self, *args, * ...
- 03 mysql补充 (进阶)
增加字段 alter table tb1 add age int first; 增加到第一 alter table tb1 add sex int after id; # 改变位置,id是字段名字 a ...
- centos 安装java1.8
https://www.cnblogs.com/xuliangxing/p/7066913.html