完整的论文代码见文章末尾 以下为核心内容
摘要
随着数字化技术的进步,文档图像处理成为计算机视觉领域的关键研究方向。特别是文档图像的自动修复技术,它对提高文档可读性和信息恢复具有极大的实际意义。
本文提出了一个基于门控卷积网络的文档图像修复框架,目的是高效准确地移除文档图像中的遮挡物,并修复受损部分。研究采用基于深度学习的图像分割模型,准确地识别并分离图像中的遮挡物。随后,通过一个优化的图像修复网络,针对已识别的损伤区域进行内容重建,生成视觉和语义上连贯的图像。此外,通过引入门控机制优化网络结构,显著提高了修复质量和处理速度。在实验部分,该框架在多个公开数据集上进行了测试,结果表明其在图像分割精度和修复质量上均超过现有的主流技术。本研究不仅提升了文档图像修复的自动化水平,还为图像处理技术的进一步发展提供了新的研究方向和技术支持。
本文任务
这个任务主要包括两个关键环节:图像分割和修复网络的应用。下面对这两个环节进行更详尽的阐述。
图像分割在去遮挡任务中的应用体现在多个方面。遮挡物的去除,它涉及到识别并准确分割出文档中的遮挡物,如水印或不相关的标记,并将其从图像中完全去除,恢复背后的原始文档内容。其次是文字重叠的处理,在文档中经常会遇到文字重叠的情况,是在手写注释或文档扫描过程中,通过应用图像分割技术,可以将这些重叠的文字分离开,进而提升文档的清晰度和阅读体验。图形与遮挡元素的分离也是技术难点,如果文档中的图表或插图被其他元素遮挡,图像分割技术能够将它们从遮挡元素中分离出来,确保图形信息的完整展示。在成功分离遮挡物与文档内容之后,下一步就是对这些被遮挡或受损的区域进行修复。
图像修复网络是一种设计用来合成或恢复图像中缺失区域内容的深度学习模型。这些网络能够理解图像的上下文信息,并根据周围未受损的区域生成视觉上逼真且语义上合理的内容,以填补被遮挡或移除的部分。修复网络的关键挑战在于如何确保修复后的区域在视觉和语义上与原图像无缝融合,不留痕迹。修复网络的应用包括自动去除干扰,比如自动识别并去除文档图像中的不必要元素,如随机的涂鸦或不恰当的标记,恢复图像的原始状态。在非文档类图像,如个人照片中,修复网络同样能够去除或修饰不希望出现的对象或区域,如过路人、背景中的杂物等。最后,内容恢复与合成也很重要,在移除文档图像中的遮挡物后,修复网络能够基于图像的其他部分来合成和恢复缺失区域的内容,保持文档的完整性。
图像分割网络的设计与实现
自定义编码器-解码器结构
在深度学习领域内,针对图像分割任务的模型结构往往采用编码器-解码器框架,以有效地处理和利用图像的多尺度特征。本文实现了自定义编码器-解码器结构,用来下文中的模型使用。编码器有ResNet编码器,MobileNetV2编码器。解码器类为Decoder。
本文定义了一个ResNet编码器的类,它是对官方 torchvision 库中的 ResNet 模型的修改和扩展,用来为图像分割任务提供一个编码器。这个编码器通过修改ResNet的某些部分,使其更适合于DeepLabv3中的编码器使用。结构如下图3.1所示:
Conv1第一层卷积层,使用特定的核大小、步长和填充来处理输入图像。如果输入通道数不等于3,这一层的参数会根据输入通道数调整。BN1批量归一化层,跟在卷积层后面,用于稳定学习过程并加快收敛速度。ReLU激活函数,用于引入非线性,帮助网络学习复杂的特征。在经过这些层之后,输出图像的尺度变为1/2。
MaxPool被定义为最大池化层,进一步降低特征图的尺度,提高特征的旋转、平移不变性。输出的尺度变为1/4。
Layer1为第一组残差网络层,包含若干个残差块,用于深入提取特征。输出尺度保持为1/4。Layer2为第二组残差网络层,通常包含更多的残差块,设计用于处理更抽象的特征。输出尺度变为1/8。
Layer3 和 Layer4 是后续的残差网络层,分别处理更深层的网络特征。Layer3 维持输出尺度为1/8,而 Layer4 将输出尺度进一步降低到1/16。
在前向传播过程中,除了返回最终的深层特征图(x4,相当于原始图像尺度的1/16),还返回了其他层次的特征图(x3, x2, x1, x0),这些特征图的尺度分别为原始图像尺度的1/8, 1/4, 1/2和原尺度。这样做的目的是为了在解码器中使用,通过融合不同层次的特征图来恢复更详细的分割结果。
ResNet编码器作为一个图像分割模型的编码器,本项目设计时考虑到了图像分割任务中对高级语义特征和细节特征同时有需求的特点。通过保留从浅层到深层的多尺度特征图,它允许后续的解码器部分可以更好地进行特征融合和上采样,从而生成精细的分割结果。
分割网络的基本实现
本文实现的分割网络可以用于图像语义分割任务。这个网络可以处理任意数量的输入和输出通道,并支持不同的骨干网络。网络结构描述如下:
主干网络的选择决定了整个图像分割模型的基础架构。如果选择使用ResNet作为主干网络,会初始化一个ResNet的编码器;如果选择使用MobileNetV2,则会初始化一个MobileNetV2的编码器。ResNet强调深度和复杂性,而MobileNetV2则侧重于轻量级和高效率。
模型通过所选的主干网络进行高级和低级特征的提取。高级特征因其复杂性和深度信息被用于后续的空洞ASPP处理,这一过程通过使用不同尺度的空洞卷积来增强模型对图像各部分的上下文感知能力。与此同时,低级特征则被存储起来,用于之后的特征融合阶段,以保证图像细节的完整性。
模型进入空洞ASPP阶段,这一阶段专门处理从主干网络中提取的最终输出特征。这个模块通过应用多尺度的空洞卷积处理,能够有效地捕获从局部到全局的不同尺度上下文信息,这对于理解和分割复杂图像场景尤为关键。
最终,模型进行特征解码阶段,这一阶段将经过空洞ASPP处理的高级特征与之前保存的低级特征进行逐层融合和逐步上采样。通过这种方式,模型逐渐恢复特征图的分辨率,直至达到与原始图像相同的尺寸。通过这一连串的处理,最终输出的是精细化的分割图,展示了高精度的图像边界和区域分割。
本网络可以根据骨干网络的不同,选择不同的ASPP模块和解码器配置。ASPP模块用于捕获不同尺度的上下文信息,而解码器则负责从编码的特征中恢复出精细的分割图。ResNetEncoder 和 MobileNetV2Encoder 是自定义的编码器类,用于根据指定的骨干生成对应的特征。
输入通过骨干网络,得到特征图和若干个短连接用于后续的特征融合。特征图随后通过ASPP模块,以获得不同尺度的上下文信息。最后,ASPP的输出和短连接一起传递给解码器,解码器负责恢复出详细的分割图。
本模型还可以加载预训练权重,在预训练的权重加载到模型中的时候,只会加载那些键和形状都匹配的权重,忽略掉其余的权重。这样做的好处是可以灵活地适应模型结构的变化,特别是当预训练模型和当前模型在某些层上有差异时。
模型训练
本文实现了一个模型训练框架:涉及模型训练的初始化、数据集的准备、网络的构建、损失函数和优化器的设置、以及训练循环的实现。
使用cudnn.benchmark来加速网络计算。通过配置对象获取训练参数和路径等设置。定义模型和样本输出的保存路径。
创建训练数据集实例,并根据配置可能加入数据增强的数据集。利用DataLoader函数创建数据加载器,将合并后的数据集作为输入,并设置了一系列参数,如批量大小、是否随机洗牌、使用的工作进程数以及是否在内存中锁定数据,以优化加载过程。这个数据加载器负责在训练过程中按批次提供数据,支持多进程加载,以减少数据读取的时间开销。
在设置网络和训练设备的过程中,需要创建一个生成器和一个判别器。这两个部件是神经网络的核心,分别负责生成数据和评估数据。不管是否使用多个GPU,这些网络都会被配置到CUDA设备上,会利用GPU的计算能力来提高处理速度。
接下来,定义一个用于测量网络性能的损失函数,这里使用的是L1损失函数,它帮助网络通过比较生成的数据和实际数据的差异来学习如何改进。同时,为了让生成器和判别器能够更新并改进它们的表现,还需要为它们各自设置一个优化器。使用Adam优化算法,根据网络在训练过程中的表现自动调整学习效率。
所有这些设置的参数,比如学习率、优化算法中的特定系数和权重衰减等,都是从一个配置对象中获取的,这个对象包含了所有的配置信息,使得整个设置过程既标准化又灵活。
在训练图像分割网络时,整个训练周期涉及逐个遍历数据加载器中的批次数据,这些数据包括图像及其对应的遮罩,并被加载到支持CUDA的设备上以利用GPU加速训练过程。每个批次的数据处理中,计算网络的损失,这包括L1损失,用于衡量图像的像素级重建质量,以及GAN损失,用于评估生成图像的真实性。损失计算后,通过梯度反向传播方法更新网络参数,使用Adam优化器,其beta1和beta2参数设置为0.5和0.999,帮助在训练早期快速降低初步高损失并在训练后期维持参数更新的稳定性。
图像修复网络的设计与实现
网络架构
修复网络基于Deepfillv2[19]做改进,本文网络采用了GAN的架构,其中生成器负责产生粗修和精修的结果,而判别器则负责评估这些结果的质量。该过程分为两个阶段,以确保修复结果既快速又精确,Deepfillv2网络架构如下图4-1所示。
第一阶段粗修复网络,这一阶段采用的是一个典型的编码器-解码器架构,目的是产出一个模糊但结构上正确的初步修复结果。门控卷积[16]的引入使得网络在处理图像修复任务时更加灵活和有效,因为它们能够根据需要调整信息的流动,从而更好地处理缺失区域的细节。
第二阶段精修复网络,其编码器被分成两个平行分支,一是采用上下文注意力机制的分支,另一是常规的编码器分支。上下文注意力分支专注于从图像的其他部分寻找和借鉴相似的纹理和结构信息,以更自然地填补缺失区域。这两个分支的输出随后被合并,通过一个解码器生成最终的精修复图像。这种结合上下文信息的方法显著提升了修复质量,尤其是在复杂纹理和细节的恢复上。
判别器采用了SN-patchGAN架构,引入了谱归一化技术,这是一种有效的正则化手段,旨在稳定和改进判别器的训练过程。通过对权重进行归一化,限制了权重更新的幅度,从而维持了训练过程的稳定性和高效性。与传统GAN不同,SN-patchGAN架构在图像的局部区域上进行评判,而非整体图像,这有助于更精细地评价修复区域的质量,进一步提高了修复结果的自然度和真实感。
这种设计可以使判别器更加细致地考虑图像的细节信息,从而获得更好的判别能力。PatchGAN通常会将图像分成多个大小相等的小块,然后独立地对每个小块进行判断,并输出对应的判别结果。
模型评估
数据集
Deeplabv3主要用于图像分割任务,尤其是在复杂场景下的语义分割。本文使用ADE20K数据集。ADE20K数据集的主要特点和详细信息如下:
图像数量:ADE20K包含约2.2万张图像,涵盖了从室内到室外的多样场景。
注释:每张图像都有详细的像素级注释,包括物体和部分场景的标签。数据集中包含了150个以上的物体类别和数百种场景类别。
物体和场景分类:ADE20K提供了丰富的标注信息,不仅包括物体的分类标签,还有场景的上下文信息。这些标注支持精细的场景理解任务,如场景解析和语义分割。
像素级标注:与许多其他数据集不同,ADE20K的每个物体和场景元素都有精确的像素级标注,这对于训练和评估图像分割模型非常有用。
Deepfillv2用于图像修复,特别是在处理大面积缺失和复杂背景时的性能提升。本文使用Places2数据集。以下是Places2数据集的详细介绍:
Places2包含超过1,000万张图片,覆盖了超过365种日常场景类别,如公园、餐厅、街道和家庭室内等。
Places2数据集的图像来源于互联网,经过筛选和清理,以确保质量和多样性。图像分辨率各异,以适应不同的研究需求。每张图像都被标注了一个场景类别,这些类别涵盖了从自然景观到人造环境的广泛场景。
Places2提供了标准的训练集、验证集和测试集分割,使研究人员能够在公平且一致的基础上评估和比较不同方法的性能。训练集包含大量图像,用于训练场景识别模型。验证集和测试集则用于评估模型的泛化能力。修复网络对比试验采用其测试集来进行。
对比试验
在对比实验部分,本文设计了一系列实验来评估提出的图像修复系统与现有几种先进方法的性能对比。
PatchMatch是一个经典的基于补丁匹配的图像修复方法,在处理具有重复纹理的区域时效果不错,但在需要理解图像内容和结构的复杂场景中可能不会有很好的表现。
Global&Local是一种结合全局和局部一致性的深度学习方法,用于图像修复,能够处理高分辨率图像并在多种数据集上表现良好,但这种方法在自由形式的遮罩下可能不太适用。ContextAttention是一种采用上下文注意力模块的图像修复网络,能够显式地从远程空间位置借鉴信息以改善修复质量。这种方法主要针对大矩形遮罩,对于自由形式遮罩的适应性有限。PartialConv使用部分卷积和重新规范化步骤的图像修复方法,旨在仅利用有效像素进行卷积,改善了使用不规则遮罩时的修复效果。该方法在自由形式遮罩上有较好的性能,但在颜色一致性和细节恢复方面仍有改进空间。
通过定量评估平均L1和L2误差,其结果如下所示:
获取方式
完备代码和论文(40页)