高斯白噪声
去噪都通过增加高斯白噪声,为什么?这样有意义吗?这样训练好的模型,可以去除真实场景下的噪声吗?
I. Why Gaussian noise
Bihan Wen通过以下三个子问题来说明:
- 为什么要做仿真噪音synthetic noise的实验?
- 在所有的synthetic noise里,为什么大家都用高斯白噪声,而不太常用其他distribution的噪声?
- 基于synthetic noise,比如高斯噪音的算法,可以适用于真实噪音吗?
问题一:Why synthetic noise?
先说结论:相对于real noise,用synthetic noise的好处是便于分析问题/设计算法,便于量化和评价算法效果。
便于对降噪问题的分析/算法的设计:降噪的本质是对数据本身的重建,以起到排除污染(corruption)的作用。这里面涉及到需要对(1)数据,(2)污染(噪音)的模型和分析。数据的模型就是我们一般常用的那些,比如稀疏表达(sparse coding),统计(probabilistic),低秩(low-rankness),collaborative filtering之类的。这些都是基于一定的数学假设。说穿了,事实上没不存在对数据100%精确的model,或者所谓的true model。再来说噪音模型,我们一般把noise这种污染定义为一个additive或者multiplicative的随机变量。那么这个随机变量的随机分布是什么?如果知道了这个,我们就可以设计出对应的合理的算法。
那么如果是real noise,他是什么分布呢?没有人知道,因为real就意味着未知。噪音可以是unstructured的,也可以是structured的。real的数据里面的噪音,可以是consistent的,也可以是变动的。甚至一幅图,一个视频里的real noise在不同位置都是不一样的。那这种情况下的问题分析就是极难的,或者说这个问题本身就是untrackable的,not well defined的。
所以科研或者工程设计里面,都会对这类问题做出合理的假设,比如这里的:噪音是高斯白噪声。基于这个假设再来分析问题。
便于量化和评价算法效果:评价一个降噪算法的效果,需要采用一定的评价标准(metric)。我们一般把评价标准分为客观(objective)和主观(subjective)的:
客观标准很好理解:给我一个数学计算方式,算出这个降噪过后的数据,到底有多好。这样做清晰明了,一般没有什么好争议的。常见的这样的metric有Peak Signal-to-Noise Ratio (PSNR),Mean Square Error(MSE),Structured Similarity(SSIM),等等。你经常可以在降噪论文里面看到这三个家伙的身影。他们这些metric的绝对数值的高低,直观地反应方法效果的好坏。
虽然我知道也有一些工作,试着propose一些不需要ground truth的objective quality metric,但最常用的这类经典metric无一例外地需要图片的无噪音真实值(ground truth)作为参考。如果你是使用仿真噪音,你自然是有ground truth的。但如果是真实噪音,你确一般不知道ground truth是什么。
所以一般对于真实噪音的降噪实验,我们都只好算法一些subjective的metric:让人眼来辨认降噪出来的图效果是否好。这不同的人,可能对图的喜好也会不一样,这样就经常会产生评价的个体差异,产生争议。就算想要组织一大批人来做测试,成本会很高,不利于科研的高效性。
问题二:Why Gaussian noise?
先说结论:相比于其他的synthetic noise distribution,高斯噪音确实有他的合理性。在真实噪音的噪音源特别复杂的时候,高斯噪音可能算是最好的对真实噪音的模拟。
其实不光是深度学习的降噪算法,传统方法(好吧,自从有了深度学习以后,什么sparse coding,GMM,low-rank,collaborative filtering都变成传统方法了...)也大多喜欢用高斯白噪声来做仿真实验。那么大家不约而同地都玩儿高斯噪音可能有背后的原因。我觉得这个可能才是题主最关心的问题。
解释一:
高斯白噪声是情况最恶劣的噪声:在通信系统中,不由信道引起的噪声在一般情况下会用加性噪声进行建模。即y(t) = x(t) + n(t)。其中x(t)是信号,n(t)是噪声,y(t)是最终接受到的由噪声的信号。加性噪声的模型指的是,噪声和信号相对独立,不管有没有信号,都会有噪声存在。香农信息论中用熵表示信息的不确定程度。根据限功率最大熵定理:如果平均功率受限,那么当信源符合高斯分布时,信源的熵最大(噪声的不确定性最大,对信源的干扰最大)。即如果假定功率受限,高斯白噪声是最干扰信息的噪声。
解释二:
那这里的答案就是,采用高斯噪音,是为了更好地模拟未知的真实噪音:在真实环境中,噪音往往不是由单一源头造成的,而是很多不同来源的噪音复合体。假设,我们把真实噪音看成非常多不同概率分布的随机变量的加合,并且每一个随机变量都是独立的,那么根据Central Limit Theorem,他们的normalized sum就随着噪音源数量的上升,趋近于一个高斯分布。
基于这种假设来看,采用合成的高斯噪音,是在处理这种复杂,且不知道噪音分布为何的情况下,一个既简单又不差的近似仿真。
问题三:Can it work for real noise?
先说结论:在高斯噪音试验下效果的算法,不一定在真实噪音下效果也同样地好。这个要看真实噪音具体长啥样,还要看算法本身的设计是否对噪音分布有一定的鲁棒性。
在搞清楚了问题一和二之后,相信问题三应该就很好理解了:因为Gaussian noise只是对real noise的一个近似和仿真,没有任何的保证说,设计的算法在处理real noise的时候就一定要表现得同样得好。但由于问题二我们讲了,Gaussian noise test有一定的合理性,所以这类算法在real noise的情况下都会有一定的降噪功用。
最近有一些新的数据库,包括了真实噪音图片以及他们捕捉到的ground truth。我认为这类数据库将会带来一波专注于真实噪音除去的工作。
最后再来说说深度学习,在降噪问题上的特殊性:
深度学习之类算法,模型本身是高度data-driven,而不是rule-based的。换句话说,深度学习算法的设计,或者说网络结构的设计,并不强烈依赖于噪音的概率分布。这对于降噪算法的generalization是很好的。
然而这并不是说,深度学习的降噪算法,是对所有噪音类型通吃的。深度学习算法一般需要supervised training。这样在训练数据上的选择,确实往往依赖于噪音的概率分布:如果我们要做Gaussian noise removal,那训练数据就应该是添加了Gaussian noise的结果。那么如果我们要做真实噪音的denoising,要怎么准备训练数据?你的训练数据的噪音分布,和你的测试数据是一样的吗?这些都没有保证,或者说不一定说是consistent的。