PD-GAN: Probabilistic Diverse GAN for Image Inpainting

最近对于image inpainting的研究开始向生成结果的多样性开始转变。传统image inpainting方法虽然也可以生成貌似真实的完整图像,但是这些模型有一个根本性的问题:它们默认了输入的缺失图像应该对应某一个完整图像,然后将生成的图像与真实的完整图像通过重建误差来优化网络。这显然是不合理的。就如艺术品修复一样,对于同一件艺术品,不同的艺术家对其修复的结果肯定是不一样的,但是这些修复结果都是合理的(艺术家自身水平达标的前提下),因此,如果将缺失图像用 I m I_m Im来表示,完整图像用 I g I_g Ig表示,模型学习的应该是一个概率表示 p ( I g ∣ I m ) p(I_g|I_m) p(IgIm)

本文基于一个很直观的想法:越靠近mask边缘的缺失像素点,其应该越与mask边缘的已知像素有关。换句话说,越靠近mask边缘的缺失像素点,其多样性应该越小,越远离边缘的缺失像素点,其多样性应该越大。依照这个想法,作者通过构建网络将mask图(原本缺失处是0,观测处是1)生成一个概率图,依照这个概率图来确定生成像素是应该更加确定还是更加多样。
此外,本文与传统方法的另一个不同点在于,为了获得生成结果的多样性,本文并不是将图像经过编码后再解码来生成的,而是从随机噪声开始生成(这样在测试的时候对于同一个测试图像,取不同的噪声可以产生不同的修复结果),然后在生成的过程中不断的添加先验信息(由某个预训练的inpainting模型生成的完整图像),最终生成一个多样性的完整图像。并且为此作者还提出了一个专门配套的perceptual diversity loss来保证生成的多样性。
给出本文的流程图:
在这里插入图片描述
网络是经典的双阶段的模型,第一阶段预训练一个inpainting网络,可以产生比较粗糙的修复图像。之后本文的网络先是输入一个随机噪声,通过开始的几步卷积获得一个上采样结果,之后在每一个SPDNorm Residual Blocks中将预训练模型的粗糙修复结果(先验信息)和对应的mask输入到其中,不断进行特征的生成,最终随机噪声在不断添加的先验信息的加持下,生成理想的结果。SPDNorm Residual Blocks是本文的核心点,其中分为两部分,一部分是Hard SPDNNorm,其中的 D h D^h Dh用mask图生成Hard map。一部分是Soft SPDNorm,其中的 D s D^s Ds用mask图生成soft map。对于输入的特征 F i n F^{in} Fin经过不同的模块通过一系列卷积操作来生成相应的 F h a r d F^{hard} Fhard F s o f t F^{soft} Fsoft在这里插入图片描述
接下来具体来讲一下这两个map图的生成方式。
Hard map:顾名思义,就是一种很直接的概率图。如果将观测像素点的概率看做1,越靠近mask边缘的缺失像素点应该越确定(概率越接近于1),相反其概率应该越接近于0。于是作者给出了一个概率的迭代计算公式:在这里插入图片描述
其中 M i M_i Mi是第 i i i次迭代后得到的概率图,显然每经过一次迭代,概率图就会向内收缩一圈,然后每一次收缩的区域我么可以用 E i = M i − M i − 1 E_i = M_i − M_{i−1} Ei=MiMi1来表示,并且收缩部分的概率由原来的0转变为 1 / k i 1/k^i 1/ki。由此随着越远离mask边缘,其概率也会以指数级衰减。本文将k设置为了4。
Soft map:对比前面hard map,这里最大的不同点就是前面的hard map是不需要训练,直接由mask图计算得到的,而soft map则是由一个可训练的网络得到的。通过一个可训练的网络,soft map提取粗糙完整图像 P P P的特征 F p F^p Fp和前面步骤计算结果 F i n F^{in} Fin的先验信息,动态的生成一个概率图。计算过程可以表示为 D s = σ ( C o n v ( [ F p , F i n ] ) ⋅ ( 1 − M ) + M D^s = \sigma(Conv([F^p ,F^{in}]) · (1 − M) + M Ds=σ(Conv([Fp,Fin])(1M)+M其中 M M M是缺失图像对应的mask图。
在这里插入图片描述

这里个人还有一点看法,通过给的示意图来看,soft map生成结果十分平滑,几乎聚集在0.5左右,并且最重要的一点是,其本身似乎并不满足作者所期望的中间小,边缘大的特性。所以我觉得这里所计算的soft map应该更像是一种依据全局结构信息来生成的一种结构可能性图,而这种可能性图并不非常依赖是否靠近mask边缘:试想一根树枝的图像,我们从中间mask掉一块(灰色部分),通过全局结构信息,我们很容易判定缺失部分中间的信息(A处)是一根树枝,并且相比于树枝周围的信息,B处虽然更加处在边缘,但是显然其信息不如A处容易推断。在这里插入图片描述
由此,作者说soft map更多的是稳定模型训练(实验Table 3有体现),是有根据的。
前面我们可以看出,为了使得生成结果具有多样性,模型每次生成都是从随机噪声开始的。因此为了体现这种随机噪声的作用,最后作者又引入感知多样性损失。首先传统的多样性损失是这样的:在这里插入图片描述
其中 I o u t 1 I_{out1} Iout1 I o u t 2 I_{out2} Iout2分别是由 z 1 , z 2 z_1,z_2 z1,z2生成的完整图像。然而直接套用这个是有问题的:1、我们在进行比较时,不应该将mask之外的内容进行多样性比较。2、为了产生最大的差异性,网络的一个平凡解是直接生成一黑一白的两个图像(后面的实验Fig 7有体现)。由此,作者提出了一种新的感知多样性损失:在这里插入图片描述
首先感知损失,那么一定是特征之间求损失,这里的 F i F_i Fi就是代表VGG-19网络来提取生成图像的特征。之后,作者用M来限制了损失的范围。**其实个人觉得,这里已经有对比学习的味道了。**除此之外,网络还有常用的 reconstruction loss, feature matching loss and hinge adversarial loss。
至此,方法过程介绍完了。

我很抱歉,作为AI语言模型,我无法实现代码复现。但是,我可以提供以下步骤来帮助您实现图像修复(image inpainting): 1. 收集数据集:首先,您需要收集一些包含缺失区域的图像。您可以使用任何数据集,例如CelebA,COCO等。然后,您需要使用图像编辑工具(例如Photoshop)创建一些缺失区域,以便进行修复。 2. 加载数据集并准备数据:将数据集加载到您的开发环境中,并将其准备好使用。您需要将图像裁剪为相同的大小,并将其转换为您的模型可以接受的格式。 3. 建立模型:您可以使用任何深度学习框架(例如TensorFlow,PyTorch等)来建立您的模型。您可以使用卷积神经网络(CNN)或生成对抗网络(GAN)等架构来构建模型。 4. 训练模型:使用准备好的数据集和模型,开始训练模型。您需要确定训练模型的超参数,例如学习率,批量大小,迭代次数等。您可以使用交叉验证技术来评估模型的性能。 5. 测试模型:在训练模型之后,您需要测试模型的性能。您可以使用测试数据集来评估模型的性能,并查看模型是否能够准确地修复缺失区域。 6. 优化模型:如果您的模型的性能不是很好,您可以尝试使用其他超参数或尝试使用不同的架构来优化模型。 总之,图像修复是一个复杂的过程,需要大量的数据集和模型训练。通过尝试不同的模型和超参数,您可以找到最适合您数据集和任务的模型。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值