1. 摘要
Noise2Noise (N2N) 可以利用一对独立的噪声图片来训练去噪模型,在这里,作者更进一步提出了一个策略 Noise2Void (N2V) ,只利用噪声图像即可。
因此 N2V 可以被应用在一些其它方法不能应用的领域,特别是生物医学图像,在这里干净或者噪声目标图像经常是不可能获取到的。
2. 方法介绍
噪声图像的产生 x = s + n x=s+n x=s+n,可以看作是从下面的联合分布产生的,
假设 p ( s ) p(s) p(s) 是满足下式的任意分布,
s i , s j s_i,s_j si?,sj? 是在一定半径距离内的两个像素,也就是说像素 s i s_i si? 在统计上不是独立的。
而针对噪声,则假设其是条件独立的形式,
也就是,在给定信号的情况下, n i n_i ni? 是条件独立的。而且,进一步假设噪声是零均值的,那么有,
换句话说,如果我们获取到了同一个信号的不同噪声图片,然后对它们取平均,结果将会接近真正的信号。
2.1. 传统的有监督训练
现在,我们考虑训练一个 CNN 来实现 x x x 到 s s s 的映射,也就是一个图片作为输入,预测出另一个图片作为输出。
每个输出的预测像素值 s i ^ \hat{s_i} si?^? 都对输入像素有一定大小的感受野 x R F ( i ) x_{RF(i)} xRF(i)?,也就是影响像素预测的一组输入像素。然后,我们可以把 CNN 看作是一个函数,其输入是 x R F ( i ) x_{RF(i)} xRF(i)?,输出则是位置 i i i 处的像素值 s i ^ \hat{s_i} si?^?。
一对训练数据 ( x j , s j ) (x^j, s^j) (xj,sj) 可以看作是数据对 ( x R F ( i ) j , s i j ) (x_{RF(i)}^j, s_i^j) (xRF(i)j?,sij?),我们现在利用这些数据对来更新网络参数,
2.2. Noise2Noise 训练
N2N 可以让我们应对没有真实标签的训练数据,我们一开始的训练数据为 ( x j , x ′ j ) (x^j, x^{'j}) (xj,x′j),其中,
然后我们可以将我们的训练数据看作是数据对 ( x R F ( i ) j , x i ′ j ) (x_{RF(i)}^j, x_i^{'j}) (xRF(i)j?,xi′j?)。尽管我们尝试去学习从一个噪声图片到另一个噪声图片的映射,训练依旧可以收敛到正确的解,因为噪声输入的期望值等于干净信号。
2.3. Noise2Void 训练
这里,我们更进一步,尝试从单一的噪声图片构建出训练数据对,即输入和目标。如果我们像之前一样简单地提取出一个小块并用它的中间像素值作为目标,网络会仅仅学到一个恒等映射,也就是将输入的中间像素值直接映射到输出。
因此,我们的网络需要一个特殊的感受野,也就是在中间位置有一个盲点。预测像素值 s i ^ \hat{s_i} si?^? 受到所有矩形邻域输入的影响除了在位置 i i i 处的输入像素 x i x_i xi?。
盲点网络可以使用传统的有监督训练或者 N2N 训练方式,此时目标分别是干净图像和噪声图像。由于可利用的输入信息少了一点,我们期望它的准确率会略有下降。
盲点网络的优点是它不能学习一个恒等映射。因为我们假设噪声像素是相互独立的,周围的像素没有和 n i n_i ni? 相关的信息。而信号不是相互独立的,我们仍然可以通过其周围的像素来估计出 s i s_i si?。
2.4. 实现细节
尽管盲点网络可以仅仅利用单独的噪声图片来进行训练,但要想高效地设计出这样一个网络并不容易。作者提出了一个 mask 策略:随机选择周围的一个像素值来替换输入块的中间像素值,这可以有效地清除中间像素的信息避免网络学习到恒等映射。
但是,这样依然不是非常高效,我们必须处理整个块来计算单个像素值对应的梯度。因此,作者使用下面的近似技术:给定一个噪声图像 x i x_i xi?,随机裁剪出 64 ? 64 64*64 64?64 大小的小块(这大于整个网络的感受野)。然后在每个小块内,分层采样来随机选取 N N N 个像素,对它们进行掩盖并用原始的噪声像素来作为目标。这样,就可以一次性计算这 N N N 个点对应的梯度,而忽略其它的预测值。
3. 实验结果
N2V 可以应用在一些没有干净图像或者噪声图像的场景,但它也有一些局限性。比如下图所示,红色箭头所指的位置是一个孤立的亮点,而其周围比较暗,这样 N2V 就不能从周围像素中正确地预测出中间像素。
另外,如果噪声不满足相互独立的假设,N2V 也就无法很好地去除这些噪声。
获取更多精彩,请关注「seniusen」!