在 Matlab 中训练用于图像去噪的卷积神经网络

数据挖掘 神经网络 训练 卷积 matlab
2022-03-03 23:30:24

我目前正在尝试训练 CNN 从图像中去除泊松噪声。我使用的软件是 Matlab 2018b,但是我得到的结果很差。

我已按照以下链接中提供的步骤进行操作。这里声明我们需要制作一个denoisingImageDatastore,它保存我们训练图像的补丁,并将高斯噪声应用于它们。这不是我想要的,但为了练习,我决定在我的 PASCAL VOC 数据集上尝试一下。我现在将大致概述我的 matlab 代码中的步骤。

  1. 我首先创建了一个 imageDatastore,其中包含 45 张用于训练的图像。
  2. 其中 15 张图像将用于验证
  3. 现在我们为训练集和验证集创建去噪图像数据存储。每个图像将有 60 个补丁,补丁大小为 50x50
  4. 然后我们指定训练选项
  5. 然后我使用 matlab 中的 dnCNNLayers 函数指定网络层
  6. 下一步是使用 trainNetwork 函数训练网络

这是训练过程结束时的屏幕截图。

在此处输入图像描述

我只做了 100 次迭代,但结果还不错。在这里,我们可以使用该网络设置原始图像、噪声图像和去噪图像。

在此处输入图像描述

以下链接是我用于此的代码。如果您对如何进一步降低 RMSE 有任何建议,我们将不胜感激。

请注意,我之前已经在更大的数据集上训练了相同的网络,并且进行了近 10000 次迭代,它可以达到的最佳 rmse 约为 2.3。所以很明显有些参数需要改变。

1个回答

所以,我可以指出一些可能导致次优结果的事情:

  • 你的模型可能太简单了。尽管使用的是基于神经网络的图像处理中最先进的 CNN,但您需要注意所使用的架构。例如,您可以查看那篇论文,其中作者使用 CNN + 残差学习对图像进行去噪
  • 您的数据集不够复杂/不够大。正如您所说,您已经在更大的数据集上对网络进行了预训练,但是,“大数据集”的概念还不够精确。也许您没有足够的数据来训练模型。从这个意义上说,使用有据可查的现有架构可能很有用,您可以在其中将结果与报告的结果进行比较,并查看您是否确实拥有训练它所需的数据。
  • 另一个问题是关于训练/测试数据的噪音。如果您的模型太复杂,并且您的数据太差,它可能会记住去噪高斯噪声的机制(这似乎是您的训练数据中的噪声分量),因此不能很好地概括泊松噪声。为了解决这个问题,您可以考虑更改训练数据上的噪声分量(如果它是人工生成的),或者获取不同的数据集。
  • 改变损失,看看其他指标。损失选择对最终模型有很大影响,因为它们决定了梯度的计算方式。例如,按照 Goodfellow、Bengio 和 Aaron 对《深度学习》一书的推理,

    例如,应用于图像像素的均方误差隐含地表明,只有当它显着改变大量像素的亮度时,潜在原因才会显着。如果我们希望解决的任务涉及与小对象交互,这可能会出现问题。Goodfellow、Ian、Yoshua Bengio 和 Aaron Courville。深度学习。麻省理工学院出版社,2016 年。

因此,尽管研究了 RMSE,但我可能会推荐峰信噪比 ( PSNR ) 或结构相似度 ( SSIM )。