Skip to content Skip to footer

如何使用神经网络对图像进行去雨处理

image-20240107230744275

在下雨等恶劣天气条件下,自动驾驶面临着重大挑战。在这篇文章中,我想更深入地研究具体的除雨算法,超越我在上一篇文章中关于恶劣天气下的自动驾驶所介绍的内容。

我们将通过查看此实现来探索称为 MPRNet(多阶段渐进图像恢复网络)的特定神经网络的功能。该网络在雨天条件下增强视觉数据的能力方面脱颖而出,在除雨领域优于许多同行。

虽然它非常有效,但目前对于自动驾驶汽车的实际使用来说,它过于复杂和缓慢。然而,随着处理能力的不断提高,这种结构可能成为一个可行的选择,特别是考虑到它在较小数据集上的高效率。

人工神经网络 (ANN)

image-20240107230759679

受人脑启发的神经网络由相互连接的神经元组成。在输入层和输出层之间是隐藏层。这些层利用权重 (w) 和偏差 (b) 使用激活函数(例如 ReLU 或 Sigmoid)对输入 (x) 进行操作,以更好地对输出 (y) 进行分类。等式如下所示:y = f(wx + b)

在训练过程中,这些权重通过反向传播动态适应。这是一个根据输出与预期相差多远来微调权重的过程,调整神经元操作以在后续迭代中提高准确性。

大多数神经网络在训练期间采用 Dropout,其中暂时排除了一些神经元,以减少对特定神经元的依赖,从而提高泛化性。有趣的是,这个特定的 MPRNet 跳过了这一步,在我看来,这是一个错误,因为它本可以提高其性能。

卷积神经网络 (CNN)

image-20240107230811668

CNN 是专门用于处理视觉和空间数据的人工神经网络类型。CNN 和标准 ANN 之间的主要区别在于包含卷积层,卷积层使用内核提取信息,池化层压缩信息。之后,这些提取的特征被展平并输入到传统的 ANN 中进行进一步处理。我们稍后将更深入地研究细节。

优势

传统的图像修复方法存在明显的缺点。许多方法使用编码器-解码器或单尺度或多尺度管道体系结构。我们稍后会深入研究它们的结构,但现在,请了解每种结构都有其优点和缺点。

编码器-解码器架构在语义准确性和分层特征方面表现出色,但缺乏空间精度,通常会导致信息丢失,尤其是在密集区域。另一方面,单尺度或多尺度流水线架构由于其简单性和速度而非常高效,同时也提供了空间精度。然而,它很难有效地捕获上下文信息。出于这个原因,这里介绍的 MPRNet 利用了一个多尺度管道和两个编码器-解码器,结合了它们的优势。

传统方法的另一个问题是真实值的损失,即由于在最终输出之前没有充分监督的情况下将一个阶段的输出传递到下一个阶段,因此生成的图像与原始图像的偏差太大。这就是为什么我们总是利用原始输入图像并在每个阶段检查输出,通过一个名为SAM的特殊模块来评估地面实况损失。

MPRNet结构和处理流程

image-20240107230847280

让我们快速了解一下图像是如何除雨的,以及 MPRNet 中会发生什么:

最初,图像在第 1 阶段被分成四个不重叠的斑块,然后在第 2 阶段将其分成两个,垂直(顶部和底部)而不是水平(左侧和右侧),如结构所示。然后,该过程将经历三个阶段:

第 1 阶段

此阶段奠定了基础,重点关注较小的补丁并为后续阶段准备功能。以下是细分:

浅层特征提取

第一步涉及从输入图像的较小块中提取低级特征。此提取使用卷积层 (Conv) 和通道注意力块 (CAB) 来运行。以下是它们的工作原理:

卷积层\

image-20240107230905335

这些层系统地在输入图像的重叠区域应用过滤器或内核,如上图所示。它们的作用是执行卷积运算,捕获低级特征,并在看到所需的模式(例如,边缘)时感到非常兴奋。

随着时间的流逝,这些卷积层通过训练阶段的反向传播动态调整其权重来改善模式识别,类似于传统 ANN 的运行方式。

这些操作的结果在特征图中存储为单个值,由带有蓝色数字的网格直观地表示。

从本质上讲,这些初始卷积层标志着特征提取的起点,提供了低级特征和基本信息,以便以后进一步处理。

通道注意力块 (CAB)\

这些块从卷积层离开的地方继续。他们的主要目标是完善和丰富以前由卷积层提取的数据,并改善上下文理解,这不是传统CNN的优势。 CAB在此实现中发挥着重要作用。尽管它们在各个阶段的确切结构和目的略有不同,但它们的基本运作方式如下:

  1. 卷积层:额外的卷积层提取特征,建立在前面解释的过程之上。
  2. 全局平均池化 (GAP):此步骤涉及计算特征图中每个通道的平均值。它有助于压缩特征图的大小,从而促进更快、更简单的处理。值得注意的是,这是特定于此阶段的,在使用 CAB 的情况下并不普遍适用,例如,ORSNet 和解码器跳过此步骤。
  3. 处理通道信息:池化的通道信息通过完全连接的层(神经网络层,其中一层中的每个神经元连接到下一层中的每个神经元)或 1x1 卷积(内核大小为 1x1 的卷积)进行处理。此步骤有助于确定哪些通道包含与给定任务更相关的信息。
  4. 激活函数将 sigmoid 激活函数应用于输出,生成注意力权重。这些权重表示每个通道中特定功能的重要性。Sigmoid 激活越高,重要性就越大,这也引入了非线性来模拟复杂的数据关系。有时使用 ReLU 而不是 Sigmoid,例如,在解码器内的 CAB 中。
  5. 元素乘法:sigmoid 函数的注意力权重与原始特征图相乘。此操作缩放特征图,完成选择性强调过程。它强调重要的渠道,同时减少不太相关的渠道的影响。
  6. 残余连接:为防止丢失基本要素,CAB 使用残余连接维护原始信息。这些连接充当快捷路径,在深度学习模型中实现直接信息流。

分层过程逐渐展开,从低级或浅层特征(如基本边缘)开始,发展到中级特征(如对象形状),最终形成高级或深层特征(如不同对象)。

编码器

在第二步中,为第一阶段的后续解码和恢复奠定了基础。编码器的作用包括压缩图像,同时突出关键特征。下面是编码器中展开的内容:

CAB 的多次迭代分层工作以优化和提取特征,在每次迭代中,在优化特征后,刚才提到的 GAP 发生在 CAB 内部。这种池化进一步压缩信息,逐步,产生前面提到的压缩版本。在这里,强调关键特征,而压制不重要的特征。

编码器和解码器在不同的级别运行。将编码器可视化为向下的阶梯,深入研究编码并逐步提取更深层次的特征。当旅程接近尾声时,解码器代表着一个向上的阶梯。它利用编码信息来重建图像,从较低台阶的抽象特征开始,并在人们登上楼梯时逐渐恢复更精细的细节。

深层特征的串联:

在编码过程之后,编码器会生成四个不同的色块,每个色块都包含深层特征,具体来说,一个用于图像的左上角、右上角、左下角和右下角部分。在此阶段,这些补丁组合在一起,为顶部创建一个补丁,为底部创建一个补丁。这一步背后的基本原理在于即将到来的第二阶段,其中图像被分为上半部分和下半部分,需要适当的信息合并以供以后的融合

译码器

解码器与编码器对应,其功能相反。与编码器类似,它最初采用多次迭代的 CAB 来提取和优化特征。但是,重点随后转移到实际的重建过程:

  1. 用于重建的 CAB:CAB 在优化了特征后,继续使用额外的卷积层重建从编码阶段获得的两个图像块。
  2. 跳过注意机制:采用跳过注意机制来整合来自编码器相应级别的信息。
  3. 上采样:为了提高空间分辨率和细化细节,解码器使用上采样操作。此步骤基本上反转了编码器中看到的压缩效果,基本上解压缩了图像。

虽然这个过程在这个阶段可以被认为是完整的,但创建可以称为典型图像恢复网络或U-Net的东西,如果熟悉的话,我们的目标是超越传统技术的增强。因此,为了进一步改进恢复过程,还有两个阶段需要涵盖。

为了避免仅仅将输出从一个阶段传递到下一个阶段而导致的地面实况损失,采用了两种策略来确保阶段之间的适当信息流:

跨阶段特征融合 (CSFF)

在编码器-解码器架构的每个级别,都实施了 CSFF 以增强不同功能从早期阶段到后期阶段的传播。这涉及从阶段 1 中编码器和解码器的特定级别(假设 lvl n)检索特征并集成它们。然后,在阶段 2 中编码器的等效 lvl n 进行处理时,考虑编码器 lvl n 的这些集成特征。

监督注意力模块 (SAM)

image-20240107230927713

解码器为两个图像块生成不同的特征图后,这些图通过监督注意力模块 (SAM) 进行处理,提供两个主要功能:

  1. 真值损失评估:SAM通过对新获取的特征图进行卷积运算来生成中间图像。随后,它将该中间图像与原始图像进行比较,以评估前面提到的潜在地面实况损失。
  2. 特征重新校准:SAM 在特征过渡到下一阶段之前重新校准特征。这种重新校准涉及使用卷积运算和 Sigmoid 激活函数生成强调特征图中特定区域的注意力图。与CAB的运作类似,该过程将权重分配给不同的区域,从而突出关键区域。

它实质上是“监督”恢复过程,确保输出数据的正确性,作为后续阶段的适当参考,与名称的含义保持一致。

第 2 阶段

image-20240107230940149

第 2 阶段与第 1 阶段的结构类似。尽管主要组件在整个网络中保持一致,但也有明显的变化和一项值得注意的补充:

  1. 更深层次的功能:在第 2 阶段,与第 1 阶段相比,网络以更高级别或更深层次的功能运行。
  2. 补丁:第 2 阶段不是从四个补丁开始,而是从两个补丁开始,在流程的后期将它们连接成一个补丁。
  3. CSFF:在第 2 阶段的编码阶段考虑第 1 阶段 CSFF 的输出。

使用 SAM 输出的功能串联

此步骤由圆圈中的“c”和绿色箭头表示,涉及将第 2 阶段中提取的浅层特征图与第 1 阶段 SAM 输出中的细化特征图相结合。

该过程相对简单:从 SAM 输出中提取的浅层特征图和注意力细化特征图具有一致的维度,因为补丁在 SAM 参与之前就已经连接起来了。因此,无需对齐或预处理,只需这四个地图(第 2 阶段和第 1 阶段的底部和顶部各一个)合并即可创建统一且丰富的要素表示。

在此串联之后,我们继续使用编码器,几乎与第一阶段完全相同,只有上面提到的 3 个小差异。然后将两个补丁连接成一个,然后是另一个解码器和 SAM,就像在第 1 阶段一样。

第 3 阶段

image-20240107230953511

第 3 阶段与前几个阶段不同,它偏离了传统的编码器-解码器设置并停止使用 SAM。取而代之的是,它引入了原始分辨率阶段网络 (ORS-Net),利用了多尺度管道方法。

原始分辨率平台网络 (ORS-Net)

前面我强调了流水线架构和编码器-解码器之间的权衡。虽然后者压缩和重建图像,偶尔会在浓缩区域丢失信息,但在上下文理解方面表现出色,但 Pipelines 保持了原始图像分辨率,从而实现了空间准确性,但由于缺乏简化的低分辨率版本,经常在上下文信息方面苦苦挣扎。

ORSNet 作为一个多尺度管道运行,由称为原始分辨率块 (ORB) 的块组成。这些模块充当顺序阶段,每个模块在输入(串联特征图)通过管道时对输入执行多个操作。从本质上讲,地图从一个块传递到下一个块

球体\

每个 ORB 都包含多个 CAB 和卷积层,用于提取和优化特征。至关重要的是,在这种情况下,CAB 不使用池来避免影响分辨率,这是与编码器-解码器方法的关键区别。这确保了原始分辨率的保留,与管线对保持图像保真度的强调保持一致。

ORB 的输出是原始分辨率的特征图,保留了大多数细节。然后,它会在后续的 ORB 中进行改进和添加更深层次的特征,并在每个处理阶段逐渐增强这些特征

与前几个阶段的用法类似,这里使用了 CSFF。虽然没有后续阶段要将特征传递到,但只有阶段 2(来自编码器和解码器的等效级别)的特征才会被使用并传递到 ORSNet 中的相应 ORB。

最终细化

从 ORSNet 获得的特征图通过称为“部”的卷积层进行最后的细化。此“尾部”操作类似于 MPRNet 过程中的最后一步。虽然并不复杂,但它涉及对特征图的一系列卷积操作,以微调和重新校准它们,为随后的高分辨率恢复做准备

最终输出

在改进之后,一个类似于 SAM 的模块负责。该模块在开始重建和恢复图像之前提供最终的地面实况监督,就像SAM在前几个阶段构建的中间图像一样。

恢复过程涉及反卷积,与卷积相反。此过程实质上撤消了特征提取步骤,重建了图像。随后,需要进行一些最终的后处理,以确保像素值落在 0 到 255 的范围内。由于一系列操作,可能会出现像素值超过此范围的情况,需要进行调整以符合标准图像表示。

就是这样。我们恢复了下雨的形象。

结果

我尝试自己为一些图像除雨,虽然它并不完美,但它仍然运行良好。它也不仅限于除雨。您也可以对图像进行去模糊和去噪。

*如果您愿意找到一个数据集并有足够的存储空间,我强烈建议您使用更大的数据集,但他们提供的数据集可能也足以完成大多数任务

以下是我的结果:

image-20240107231026815

image-20240107231051610

image-20240107231114343

image-20240107231130031