概述

去噪自动编码器是一种神经网络模型,它通过学习从嘈杂版本重建原始数据来消除损坏或嘈杂数据中的噪声。它被训练为最小化原始数据和重建数据之间的差异。降噪自动编码器可以堆叠以形成深度网络,以提高性能。

该体系结构可以适应其他数据类型,例如图像、音频和文本。可以自定义添加噪声,例如,胡椒盐噪声、高斯噪声。

什么是去噪自动编码器?

去噪自动编码器是一种神经网络,我们可以用它来以无监督的方式学习数据的表示(编码)。它们经过训练,可以重建被噪声破坏的输入信号的干净版本。这对于图像去噪或欺诈检测等任务非常有用,这些任务的目标是从嘈杂的版本中恢复原始信号。

自动编码器由两部分组成:

  • 编码器
  • 译码器。

编码器将输入数据映射到低维表示形式或编码,解码器编码映射回原始数据空间。在训练期间,自动编码器将获得一组干净的输入示例以及这些示例的相应噪声版本。目标是学习一个函数,该函数使用编码器-解码器架构将噪声输入映射到干净的输出。

DAE 的体系结构

降噪自动编码器 (DAE) 的体系结构类似于标准自动编码器的体系结构。它由一个编码器和一个解码器组成,前者将输入数据映射到低维表示或编码,后者将编码映射回原始数据空间。

编码器:

  • 编码器是具有一个或多个隐藏层的神经网络。
  • 它以嘈杂的数据作为输入并输出编码。
  • 编码的维度比输入数据少,因此编码器是一种压缩函数。

译码器:

  • 解码器是一种扩展功能,用于从压缩编码中重建原始数据。
  • 解码器的输入是编码器的编码,输出是原始数据的重建。
  • 解码器是具有一个或多个隐藏层的神经网络。

 在训练期间,DAE 将获得一组干净的输入示例以及这些示例的相应噪声版本。目标是学习一个函数,该函数使用编码器-解码器架构将噪声输入映射到干净的输出。这通常使用重建损耗函数来完成,该函数测量干净输入和重建输出之间的差异。DAE 经过训练,可以通过反向传播更新编码器和解码器的权重,从而最大程度地减少这种损失。

DAE 的应用

去噪自动编码器 (DAE) 在计算机视觉、语音处理和自然语言处理中有许多应用。一些例子包括:

  • 图像降噪:
    DAE 可用于去除图像中的噪声,例如高斯噪声或胡椒盐噪声。
  • 欺诈检测:
    DAE 可用于通过学习从嘈杂的版本重建正常交易来识别欺诈易。
  • 数据插补:
    DAE 可以通过学习从剩余数据中重建缺失值来插补数据集中的缺失值。
  • 数据压缩:
    DAE 可以通过在编码空间中学习紧凑的数据表示来压缩数据。
  • 异常检测:
    DAE 可以通过学习重建正常数据,然后将困难的输入标记为潜在异常来识别数据集中的异常。

使用去噪自动编码器对图像进行去噪

DAE 经过训练,可以从嘈杂的版本重建原始数据。DAE 的输入是嘈杂的图像;输出是原始图像的重建版本。训练是通过最小化原始图像和重建图像之间的差异来完成的。完成后,经过训练的 DAE 可以通过消除噪声和重建原始图像来对新图像进行降噪。

以下示例说明了如何使用去噪自动编码器通过包含 60,000 的 Keras 数字 mnist 数据集对图像进行降噪 28�2828x28用于训练的手写数字 (0-9) 的灰度图像和用于测试的 10,000 张图像。

导入库和数据集

您将需要安装必要的库并加载数据集:

# Install libraries
!pip install tensorflow numpy matplotlib

# Load the dataset
from tensorflow.keras.datasets import mnist
(x_train, _), (x_test, _) = mnist.load_data()

预处理数据

接下来,您需要通过向图像添加噪点并规范化像素值来预处理数据:

# Add noise to the images
noise_factor = 0.5
x_train_noisy = x_train + noise_factor * np.random.normal(loc=0.0, scale=1.0, size=x_train.shape)
x_test_noisy = x_test + noise_factor * np.random.normal(loc=0.0, scale=1.0, size=x_test.shape)

# Clip the images to the valid pixel range
x_train_noisy = np.clip(x_train_noisy, 0., 1.)
x_test_noisy = np.clip(x_test_noisy, 0., 1.)

# Normalize the pixel values
x_train_noisy = x_train_noisy / 255.
x_test_noisy = x_test_noisy / 255.

定义模型

然后,您可以使用 Keras 函数式 API 定义去噪自动编码器模型:

from tensorflow.keras.layers import Input, Conv2D, MaxPooling2D, UpSampling2D
from tensorflow.keras.models import Model

# Define the input layer
input_layer = Input(shape=(28, 28, 1))

# Encoder
x = Conv2D(32, (3, 3), activation='relu', padding='same')(input_layer)
x = MaxPooling2D((2, 2), padding='same')(x)
x = Conv2D(32, (3, 3), activation='relu', padding='same')(x)
encoded = MaxPooling2D((2, 2), padding='same')(x)

# Decoder
x = Conv2D(32, (3, 3), activation='relu', padding='same')(encoded)
x = UpSampling2D((2, 2))(x)
x = Conv2D(32, (3, 3), activation='relu', padding='same')(x)
x = UpSampling2D((2, 2))(x)
decoded = Conv2D(1, (3, 3), activation='sigmoid', padding='same')(x)

# Define the model
autoencoder = Model(input_layer, decoded)
autoencoder.compile(optimizer='adam', loss='binary_crossentropy')

训练模型

最后,您可以训练模型并使用它来对图像进行降噪:

# Train the model
autoencoder.fit(x_train_noisy, x_train, epochs=10, batch_size=128, validation_data=(x_test_noisy, x_test))

降噪图像


# Use the model to denoise the images
denoised_images = autoencoder.predict(x_test_noisy)

使用 Matplotlib 可视化原始、嘈杂和去噪图像。

import matplotlib.pyplot as plt

# Display the first image in the test set
plt.imshow(x_test[0], cmap='gray')
plt.show()

# Display the first image in the noisy test set
plt.imshow(x_test_noisy[0], cmap='gray')
plt.show()

# Display the first image in the denoised test set
plt.imshow(denoised_images[4].squeeze(), cmap='gray')
plt.show()

输出: 

结论

  • 去噪自动编码器是一种神经网络,可以去除图像中的噪声。
  • 它们由编码器和解码器组成,从嘈杂的输入中重建干净的图像。
  • 要训练去噪自动编码器,请向图像添加噪声并最小化重建损失函数。
  • 去噪自动编码器可用于预处理图像,并可有效消除噪声。但是,他们可能需要改进更复杂的噪声或其他数据类型。
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐