摘要

image-1

现有的修复方法在恢复常规或小的图像缺陷方面取得了可喜的效果。然而 ,由于缺乏对空中心的约束,

填充大的连续孔仍然很困难。在本文中,设计了一个循环特征推理网络,该网络主要由即插即用的循环特征推理模块与知识一致性注意模块构成。

类似于人类如何解决难题(即首先解决较容易的部分,然后将结果用作解决困难部分的附加信息)

RFR模块反复推断卷积特征图的孔边界,然后将其用作进一步推断的线索,该模块逐步加强对孔中心的约束,结果变得明确。为了在RFR的特征图中从远处捕获信息,我们进一步开发了KCA并将其合并到RFR中。

RFR-Net与backbone(骨干网络)进行比较,RFR-Net更有效。例如,对于相同的模型大小,SSIM提高了4%。

1. 介绍

image-2

图像修复旨在恢复具有真实内容的受损图像的缺失区域。这些算法在照片编辑、去字幕和其他人可能想要从照片中删除不需要的对象的场景中有着广泛的应用[22, 23, 1, 4]。成功修复的图像应该在估计像素和背景之间的结构和纹理上表现出一致性[27, 17]

最新,深度卷积网络已被用于解决修复问题,大多数最先进(SOTA)的方法[29, 17, 25, 30]利用编码器-解码器架构并假设损坏的图像一旦编码,就应该有足够的信息用于重建和一次性修复。这个假设对于小的或者窄的缺陷是合理的,因为局部区域内的像素可以具有很强的相关性,因此可以从其周围推断出一个像素。然而,随着受损区域变大,已至像素和未知像素之间的距离增加,这些相关性会减弱,孔中心的约束也会放松。在这种情况下,已知区域中的信息对于恢复孔中心的像素并不能提供信息,并且网络会产生语义模糊的结果。另一种方案是以渐进方式从孔边界到中心进行修复。[31, 9]

然而,这些方法不使用循环设计并渲染冗余模型。

此外,由于渐进式修复是在图像级别执行的(也就是一次性对整张图片进行渲染,计算量大),计算成本使这些方法不太实用。除此之外,它们的修复方案仅在单阶段方法中还行,但不适用于子网络。无法满足输入和输出在同一空间(例如RGB空间)中表示的设计要求的多阶段方法。最后,将特征图映射回RGB空间的过程发生在每次迭代中,这会导致每次循环中的信息失真。(例如,将128x128x64的特征图映射到256x256x3的RGB图像中)

结果是,它们要么表现不佳,要么具有不可接受的高计算成本。

在本文中,我们提出了一种新的深度图像修复架构,称为循环特征推理网络(RFR-Net)。具体来说,我们设计了一个即插即用的循环特征推理模块来循环推断和收集编码特征图的孔边界。这样,确定内部的约束,内容逐渐加强,模型可以产生语义明确的结果。与现有的渐进式方法不同,RFR模块在特征映射空间中执行这种渐进式过程,这不仅确保了卓越的性能,而且解决了网络的输入和输出需要在同意空间中表示的限制。循环设计重用参数以提供更轻的模型。此外,可以通过在网络中上下移动模块来灵活控制计算成本。这对于构建高分辨率修复网络至关重要,因为避免计算第一层和最后基层可以消除大部分计算负担。

为了进一步加强RFR恢复高质量特征图的能力,注意力模块[29] 是必要的。然而,在RFR中直接应用现有的注意力设计是次优的,因为他们没有考虑不同递归特征图之间的一致性要求。这可能导致恢复区域的纹理模糊。为了克服这个问题,我们设计了一种知识一致性注意力机制,该机制在循环之间共享注意分数并自适应的组合他们以指导补丁交换的过程。在KCA的帮助下,一致性水平得到了提高,模型的性能也得到了提升。

创新点:

1.提出了循环特征推理模块,该模块利用相邻像素之间的相关性并加强了估计更深像素的约束。RFR模块不仅显著提高了网络的性能,而且绕过了渐进式方法的一些限制。

2.开发了一个KCA(知识一致性注意力机制)模块,该模块自适应地结合来自不同循环的分数,并确保循环之间的补丁交换过程之间的一致性,从而以精致的细节获得更好的结果。

3.新模块被组装起来,形成了一个新的RFR网络。从效率和性能两方面分析模型,并在基准数据集中证明RFR优于前几种方法。

2. 相关工作

image-3

图像修复,传统算法试图从背景区域中寻找补丁来修复空洞。[1, 2, 3, 5, 12, 23, 7]虽然这些传统的方法对于简单的情况非常好,但由于缺乏对图像语义信息的理解,无法在复杂场景中效果差。

为了在语义上修复损坏的图像,深度卷积网络[28],尤其是GAN[8]

Context-Encoder首先采用了conditional GAN用于图像修复,并展示了CNN在图像修复任务中的潜力。

xxx[10]>引入了一个额外的鉴别器来确保局部图像的一致性并使用泊松混合Poission blending[20]来细化图像,从而呈现更详细和更清晰的结果。

xxx[29]分别设计了特征转移devised feature和上下文注意操作contextual attention operation,以允许模型从图像的较远区域借用特征块。

xxx[13]设计了特殊的卷积层,使网络能够在不规则蒙版的图像上进行修复。

但是这些方法都无法解决语义歧义。因为它们试图在约束不足的情况下恢复整个目标。PS:也就是一次性修复全部。

渐进式修复

xxx[26]xxx [17]以逐步的方式使用contour/edge和 image completion,以确保结构一致性。

xxx[11]添加逐步 构建的边界图作为额外的训练目标,以帮助U-Net的修复过程。

这些方法试图通过添加结构约束来解决修复任务,but they still suffer from the lack of information for restoring deeper pixels in hols for their backbong.

xxx[31]使用cascaded generators 来逐步填充图像。

xxx[9]使用单击前馈网络直接修复原始大小的图像。

xxx[18]used an onion-peel scheme to progressively inpaint on video data using content from reference frames, allowing accurate content borrowing.

然而,这些方法一般都遭受了介绍中描述的渐进式修复的局限性。

注意力图像修复模型可以采用注意力机制从背景中借用特征。

xxx[29]利用同一图像中的纹理相似性,从背景区域中更逼真的纹理填充缺陷。

xxx[24]设计了一个多尺度的注意力模块来提高patch-swapping的精度。

xxx[14]使用连贯的语义注意层来确保交换特征之间的语义相关性。

xxx[25]设计了一个双向注意力图估计模块,用于在特征生成期间进行特征重新归一化和掩码更新。

尽管这些方法已经取得了相当大的改进,但是他们对于循环架构仍然不是最优的,因为他们没有考虑来自不同循环的特征图之间的关系。

3. 方法

在本文中,首先介绍构成RFR-Net主体的RFR模块。然后介绍利用循环网络设计的KCA方案。最后介绍整体架构和对应的目标功能。

3.1 循环特征推理模块

RFR模块是一种即插即用模块,具有循环推理设计,可以安装在现有网络的任何部分。RFR模块可以分解为三部分

1)区域识别模块,用于识别本次递归中要推断的区域

2)特征推理模块,旨在推断识别区域内的内容

3)特征合并操作 ,它合并中间特征图

在模块内部,区域识别模块和特征推理模块交替循环工作。填充空洞后,将推理过程中生成的所有特征图合并,以生成具有固定通道数的特征图。

3.1.1 区域识别

部分卷积[13]是一个基本模块,用于识别每次循环中要更新的区域。部分卷积层更新掩码并在卷积计算后重新归一化特征图。更正式地,部分卷积层可以描述如下。

image-4

对于RFR模块中的区域识别,我们将几个部分卷积层级联在一起以更新掩码和特征图。经过部分卷积层后,特征图由归一化层和激活函数处理,然后发送到特征推理模块。我们将更新的掩码和输入掩码之间的差异定义为在此重复中要推断的区域。更新后的掩模中的孔在整个重复周期中被保留,直到在下一次重复周期中被进一步缩小。

3.1.2 特征推理

随着待处理区域的识别,该区域的特征值由特征推理模块估计。特征推理模块的目标是用尽可能高质量的特征值填充识别区域。高质量的特征不仅会产生更好的最终结果,而且会有利于后续推理。

特征推理模块可以设计的非常复杂,以最大化其推理能力。但是,这里我们只是简单得堆叠了一些编码和解码层,并使用跳跃连接将它们桥接起来,这样我们就可以直观地展示特征推理模块的效率。推断特征值后,特征图将被发送到下一个递归。由于RFR模块不约束中间结果的表示,因此更新后的掩码和部分推断的特征图被直接发送到下一个递归,而无需进一步处理。

3.1.3 特征合并

当特征图被完全填满时(或者在特定次数的重复后),特征图已经多次通过特征推理模块。

如果我们直接使用最后一个特征图来生成输出,可能会出现梯度消失,并且在早期迭代中生成的信号会被损坏。为了解决这个问题,我们必须合并中间特征图。然而,使用卷积运算这样做会限制重复次数,因为连接中的通道数是固定的。直接对所有特征图求和可以去除图像细节,因为不同特征图中的孔区域不一致,并且突出的信号被平滑。因此,我们使用自适应合并方案来解决该问题。输出特征图中的值仅根据已填充相应位置的特征图计算。让我们将F’ 定义为特征推理模块生成的第i个特征图,将fr,y定义为特征图F中位置r,y,z处的值。M’ 是特征图F’ 的二进制掩码。输出特征图F处的值可以定义为:

image-5

其中N是特征图的数量。这样,任意数量的特征图都可以被合并,这使得RFR有可能填补更大的漏洞。

3.2 Knowledge Consistent Attention

在图像修复中,注意力模块用于合成质量更好的特征。[29]注意力模块在背景中搜索可能的纹理并使用它们来替换孔中的纹理。然而,将现有的注意力模块直接插入到RFR中是次优的,因为在不同的循环中的补丁交换过程是独立执行的。合成特征图的组件之间的差异可能会在合并时损坏特征图。为了解决这个问题,我们设计了一个新颖的注意力模块,知识一致性注意力机制。

image-6

image-7

与以前的注意力机制独立计算注意力分数不同,我们的KCA中的分数由以前的循环按比例累积的分数组成。结果,可以控制注意力特征图之间的不一致。注意机构的图示在图4中给出,并且细节在下面提供。
在我们的设计中,每个像素的最终组件的决定如下。让我们在第i个递归F’ 中表示输入特征图。首先,我们计算每对特征像素之间的余弦相似性:

image-8

其中image-9表示位置 (x,y) 处的孔特征与位置 (x’,y’) 处的孔特征之间的相似性。之后,我们通过平均相邻区域中目标像素的相似度来平滑注意力得分。

image-10

然后,我们使用softmax函数生成位置(x,y)处像素的分量比例。生成的分数图表示为score’。

为了计算一个像素的最终注意力分数,我们首先决定是否参考该像素在先前重复中的分数。如果一个像素被认为是有效的,那么它在当前复发中的注意力得分将分别计算为当前和以前复发的原始和最终得分的加权和。(也就是加权求和)

如果(x,y)处的像素是上一次循环中的有效像素(即掩码值为image-11为1),则我们上一次重复中的像素的最终得分与该重复中计算的得分相结合,如下所示,其中a是可学习的参数:

image-12

如果该像素在上一次循环中无效,则不会进行额外的操作,当前循环中像素的最终attention score计算如下:

image-13

最后,注意力分数用于重建特征图。具体而言,位置(x,y)处的新特征图计算如下:

image-14

重构特征图后,输入特征F和重建的特征图

连接起来发送到卷积层:

image-15

image-16

3.3模型架构和损失函数

在本文的实现中,分别在RFR模块之前和之后放置了2个和4个卷积层。我们手动选择重复次数IterNum为6 以简化训练。KCA模块位于RFR模块的特征推理模块中倒数第三层之后。网络的结构在Alg中描述(算法伪代码)。

对于图像生成学习,使用预训练的VGG-16固定的perceptual loss和style loss。感知损失和风格损失比较了生成图像的深度特征图和地面实况之间的差异。这样的损失函数可以有效地向模型传授图像的结构和纹理信息。这些损失函数形式化如下:

image-17

表示固定在VGG-16中的第image-18层的池化层。

在以下方程中,Hi, Wi,Ci 分别表示第image-18层特征图的高度,权重和通道大小。

perceptual loss如下:

image-19

同样,style loss的计算如下:image-20

此外,本文的模型还使用了分别计算未屏蔽区域 和 屏蔽区域的 L1 范数。分别为image-21

PS:

L0范数是指向量中非0的元素的个数。(L0范数很难优化求解)

L1范数是指向量中各个元素绝对值之和

L2范数是指向量各元素的平方和然后求平方根

L1范数可以进行特征选择,即让特征的系数变为0.

L2范数可以防止过拟合,提升模型的泛化能力,有助于处理 condition number不好下的矩阵(数据变化很小矩阵求解后结果变化很大)

综上,我们总和的损失函数为:

image-22

我们模型中的损失函数组合类似于[13],并且在以前的作品中被证明是有效的[11].由于要更新的参数数量较少,这种损失函数组合可以实现高效训练。

4. 实验

image-23

4.1 训练设置

我们使用Adam优化器,batch_size=6 训练我们的模型。因为我们只有一个生成器(generator)网络来update,对抗器(discriminator) 不需要优化器。开始时,我们使用1e-4的学习率来训练模型,然后使用1e-5

对模型进行微调。在微调期间,我们冻结了所有的批量归一化层。对于超参数,

image-24

4.2 数据集

我们使用三个通常用于图像修复任务的公共图像数据集和一个掩码数据集[13],来验证我们的模型。

image-25

4.3 比较模型

本文的方法与几种最先进的方法进行比较。这些模型经过训练,直到与我们的相同的实验设置收敛。

这些是

image-26

5. 结果

我们对三个数据集进行实验并测量定性和定量结果,以将我们的模型与以前的方法进行比较。然后,我们将(没有加入注意力模块)RFR-Net与backbone networks 在模型大小和定量性能方面进行比较,以证明我们提出的方法的效率。此外,我们进行消融实验以检查我们模型的设计细节。

5.1 与最先进方法的比较

在这一部分,我们将RFR-Net与上一节中提到的几种最先进的方法进行了比较。我们分别进行了定性分析和定量分析,证明了我们方法的优越性。

定性比较图

image-27

image-28

image-29

从图5,6,7上看,大多数情况下,与最先进的方法相比,我们的修复结果显著减少了明显的不一致性,尤其是对大孔洞的修复。与其他方向相比,我们提出的算法在语义上产生了更加合理和优雅的结果。

定量比较我们还根据结构相似性指数(SSIM),峰值信噪比(PNSR)和平均l1损失来定量比较我们的模型。Table 1 列出了我们的方法在xxxx,xxxxxx等数据集上产生了出色的结果和最高的SSIM,PNSR和mean l1 loss。表中缺失的结果是由于计算资源的限制。

5.2 模型效率

如表2所示,我们的RFR-Net(without the attention module)的参数比广泛使用的Coarse-To-Fine[14]和PConv-UNet[13,21],backbones 的参数更少。

image-30

image-31

image-32

5.3 消融实验

在本节中,我们想分别验证我们的贡献的效果。这里主要说明KCA模块的有效性以及迭代数IterNum的影响。由于篇幅的限制,更多的消融实验放在补充材料中,包括

1)移动RFR模块

2)高效的特征合并

3) RFR模块应用在其他模型上

Effect of Knowledge Consistent Attention

直接将[29]中的注意力模块放在RFR模块中对图像进行修复会产生边界伪影的图像,如图1所示.

这是因为特征映射的不一致性可能会导致特征合并过程后出现阴影状瑕疵。这些图像下方的SSIM、PSNR和Mean l1显示了注意模块之间的定量比较。这些数字是根据巴黎街景上的所有图像计算得出的,假设遮罩率为40%-50%。

image-33

The effect of recurrence number IterNum 相同训练迭代后不同的Iternum对应的Paris数据集的结果如表3所示。

这项消融实验表明我们的方法对超参数的变化具有鲁棒性。结果还表明,与以前的方法相比,改进的性能不是来自更深层,而是来时更高效的架构,因为更多的IterNum不会提高性能,而且我们的模型比SOTAs尺寸更小。

6. 结论

在本文中,我们提出了循环特征推理网络(RFR-Net),它逐渐丰富了被掩蔽区域的信息,并给出了语义明确的修复结果。此外,还开发了一个KCA模块来辅助RFR模块的推理过程。进行了广泛的定量和定性的比较、效率分析和消融实验,证明了所提出的RFR-Net在性能和效率方面的优越性。

7. 致谢

image-34

参考文献

image-35

补充材料

我们模型的详细架构如表4所示,上半部分是整个RFR-Net的架构。下半部分是RFR模块的架构。具体而言,表格的含义在第一行中。

Input_Feat tells the source of the feature.

In_Size和Out_Size表示特征图处理后的大小

Ori表示原始输入的大小,K_Size means the kernel size of the operators.

Stride表示operators 的步长。

Num_Channel表示特征图的通道数。

BN表示在运算后是否使用批归一化层。

Act_Fun表示层之后的非线性函数。

RFR模块实际上具有一个循环设计,该设计从“DeConv3”的特征图 返回到 “PartialConv1”。除了第一次循环外,”ParitialConv1”的输入掩码来自最后一次循环中的”PartialConv2”。All leaky relu layers have a negative slope of 0.2.(所有leaky relu layers 的负斜率为0.2)

image-36

image-37

The design of Feature Reasoning module 该模块旨在部分恢复深度特征图中的遮蔽区域。因此我们需要从已知特征中提取信息并估计新的内容。在这个模块中,这些新内容是以特征重建的方式产生的,并由额外的考虑。根据这个目标,我们开发了基于标准特征提取和重建技术的叫偶句,即编码器和解码器的设计。

Computational Complexity:与非循环版本相比,我们的RFR模块的循环设计增加了计算复杂度。然而,由于RFR模块是为下采样的特征图(尺寸小得多)实现的,推理期间每个额外IterNum的额外计算成本非常有限.(~8ms and ~20mb for each IterNum)

image-38

image-39

image-40

image-41

Package依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
conda create -n torch11 python=3.6.9

conda activate torch11

conda install pytorch==1.1.0 torchvision==0.3.0 cudatoolkit=10.0 -c pytorch

pip install pillow==5.2.0

pip install opencv-python

pip install scikit-image

pip install scipy

pip install thop

Train训练

1
nohup python run.py --data_root datasets/images/fish_dataset --mask_root datasets/masks/mask_dataset --model_path checkpoints/g_320000.pth --batch_size 8  --gpu 0 --num_iters  300000 &

—Finetune微调

1
nohup python run.py --data_root datasets/images/fish_dataset --mask_root datasets/masks/mask_dataset --finetune --model_path checkpoint/g_300000.pth --batch_size 8 --num_iters  500000 &

Test测试

1
python run.py --data_root test/images --mask_root test/masks --model_path checkpoint/g_300000.pth --test --mask_mode 2  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
(1)、查看物理cpu个数

[root@xckydb ~]# grep 'physical id' /proc/cpuinfo | sort -u

1

--查看到物理cpu个数为1

(2)、查看核心数量

[root@xckydb ~]# grep 'core id' /proc/cpuinfo | sort -u | wc -l

6

--查看CPU的核心数为6

(3)、查看线程数

[root@xckydb ~]# grep 'processor' /proc/cpuinfo | sort -u | wc -l

12