基于对抗生成网络的图像转换技术【论文笔记】

来源:互联网 发布:解手机密码软件 编辑:程序博客网 时间:2024/05/19 20:20

前两篇文章是对方法的改进,详细地论证了提出的方法的可行性和优越性。后两篇是应用型,针对一个特定的问题提出方法。

Image-to-Image Translation with Conditional Adversarial Networks

这是由Berkeley AI Research (BAIR) Laboratory发表的一篇图像转换技术。如果提前没有接触过这类问题并且有强迫症的朋友(比如我)就会读起来很花时间,因为它引用和概述的文章、模型是在太多了。
自GAN[1]问世,图像处理,计算机图形学和计算机视觉中的许多问题可以被构成为将输入图像“转换”成输出图像。大多数图像到图像的翻译问题是多对一(计算机视觉):将照片映射到边缘,段或语义标签,或一对多(计算机图形):映射标签或稀疏用户输入到逼真的图像。前人做了很多这样的工作,基本方法都是:predict pixels from pixels. 这篇文章制定一个通用的框架,因此用大量实验证明可行性。

Fig1. 解决的问题

模型

条件GAN,它和普通的GAN的区别是:

  • GAN是从随机噪声向量z到输出图像y的映射的生成模型: G : z→y
  • 条件GAN是学习从观察图像x和随机噪声向量z到输出图像y的映射的生成模型:G : (x,z)→y

Fig2. Conditioning GAN

传统的GAN的目标函数是:
GAN objective

G最小化目标函数,D 最大化它, i.e. G* = arg min(G) max(D) LcGAN (G, D).
条件GAN的目标函数是:
cGAN

L2 loss会在图像生成问题上产生模糊的结果,但是L1会解决这个问题。为什么呢?

图像超分辨率是对多帧低分辨率图像进行插值处理变成一帧高分辨率图像,最后进行再构成处理变成超分辨率图像。这是一个病态问题。需要利用先验信息对问题进行正则化处理。
通常使用的是L1L2范数和Tikhonov正则法。先给出超分辨率的定式。

X是想要求得的超分辨率图像。Y是观测到的实际图像。DHF分别是下采样,光学模糊,运动推断矩阵(图像配准)。前项是数据项,后项是正则项。lambda是正则化系数,平衡正则项和数据项之间的误差,起着保真的作用。变大时,解趋于光滑,反之则解的边缘锐化。p=1时,是L1范数的正则化问题。p=2时,是L2范数的正则化问题。图像从清晰变模糊,也就是X和Y之间的误差变小的过程。上式的数据项的值变小,L1、L2范数自然也就会规律性变小。

在面对两个向量之间的差异时,L2比L1更加不能容忍这些差异。也就是说,相对于1个巨大的差异,L2距离更倾向于接受多个中等程度的差异。

Although these losses fail to encourage high-frequency crispness, in many cases they nonetheless accu- rately capture the low frequencies. For problems where this is the case, we do not need an entirely new framework to enforce correctness at the low frequencies. L1 will already do.

最后目标函数就变成了这样:

Final objective

如果没有z,网络也可以完成从x到y的映射,但是会产生确定性的输出。在最终模型里,仅用dropout的形式提供噪声,在train和test都用generator的几层,尽管出现了dropout的噪声,但是观察到网络输出时非常小的随机性。

Designing conditional GANs that produce stochastic out- put, and thereby capture the full entropy of the conditional distributions they model, is an important question left open by the present work.

哪部分损失是最重要的?作者采用控制变量法做了实验

不同loss

L1:合理但模糊
cGAN(λ= 0):更清晰,但是导致了门面合成中的一些伪像
L1 + cGAN(λ = 100):减少了这些伪像

网络架构

使用convolution-BatchNorm-ReLu

Generator with skips

Fig3. Skip connections

目标是让输入输出的结构大致对齐。在第i层和第n-i层中加入skip connections,就是说第i层直接全部通向第n-i层。
原论文的U-Net长这样:

U-Net

Markovian discriminator (PatchGAN)

这里生成器D使用Patch*GAN模型,only penalizes structure at the scale of patches. D去区分图像中的每个*N×N补丁is real or fake. 这里整个图像中卷积鉴别器,平均所有响应以提供D的最终输出。后面证明N可以比图像的全尺寸小得多,并且仍然产生高质量的结果。较小的PatchGAN具有较少的参数,运行快,还可以应用于任意大的图像。

这样的鉴别器将图像有效地模拟为马尔科夫随机场,假设超过一个补丁直径的像素之间具有独立性。 这是在纹理和风格转换中的常见假设。 因此*Patch*GAN可以被理解为纹理/风格损失的一种形式。
在优化上,使用minibatch SGD 中的Adam solver.

adaptive moment estimation,自适应矩估计。利用梯度的一阶矩估计和二阶矩估计动态调整每个参数的学习率。Adam的优点主要在于经过偏置校正后,每一次迭代学习率都有个确定范围,使得参数比较平稳。

评估

1.Amazon Mechanical Turk (AMT):判断“真假”。对于诸如着色和照片生成等图形问题,人类观察者的合理性通常是最终目标。使用这种方法测试地图生成,航空照片生成和图像着色。

AMT以API接口形式提供云人力服务,提供了一系列试验,将“真实”图像与生成的“假”图像相对照。对于着色实验,真实和假的图像是从相同的灰度输入生成的。对于地图杂色照片,真和假的图像不是从同一个输入生成的,以使任务更加困难并避免底层的结果。

2.FCN-score:衡量合成城市景观是否足够逼真,现成的识别系统可以识别它们中的物体。

采用流行的FCN-8s架构进行细分,并在城市景观数据集上进行训练。然后按照这些照片合成的标签,通过分类精度对合成照片进行合成。

实验

实验部分做了好几种(实在是太多了。。。作者很用心啊。。。)
Semantic labels↔photo.
Architectural labels→photo.
Map↔aerial photo.
BW→color photos.
Edges→photo.
Sketch→photo.
Day→night.

Perceptual validation

发现在具有刚性几何形状的如地图中,比更为混乱的较小的结构误差更为明显。但在着色上不是最好。

AMT

Semantic segmentation

发现对于视觉问题,目标(即预测输出接近ground truth)可能不如图形任务那么模糊,而像L1这样的重建方式的损失就足够了。

FCN-scores

Unsupervised Representation Learning With Deep Convolutional Generative Adversarial Network

GAN这个框架有很多优点:收敛、不依赖马尔科夫链、只需要用BP算法计算梯度等。然而这个方法还有很多问题。

首先,这种方法并不能学习到真正的数据分布pg(x)。由于其中的生成器和判别器使用了神经网络,所以训练出来的生成模型更像一个黑盒子:给定输入,产生输出。而其中内部机制并不明晰。

除此之外,训练过程并不稳定:训练器的训练过程应该与生成器的训练过程保持同步。特别在判别器没有更新的情况下,绝对不能更新太多次生成器,否则可能会发生“Helvetica Scenario”现象,也就是不论输入的随机采样的噪声向量z是啥,都会得到同样的生成结果x。

作者在GAN的基础之上,引入了一系列约束,结合CNN在一定程度上解决了这个问题。并且在后面附带了大量的实验来证实他们提出的这个模型的强大。
首先,本篇论文的作者也认为GAN在训练中非常不稳定:

GANs have been known to be unstable to train. Often resulting in generators that produce nonsensical outputs.

主要工作:

  1. 提出了深度卷积GAN:DCGAN,并且在这个架构上增加了一些约束,使得在大多数情况下能够稳定地训练
  2. 将训练好的判别器用来进行图片分类的任务,结果发现效果要比其他无监督的算法要好(可能是由于这种方法判别器能更好地学习到知识的特征表达)。
  3. 将模型学习到的filters可视化,发现一些filters学习到了如何去“画”一些特殊的对象(也就是说学习到的filter是合理的靠谱的)。
  4. 发现生成器具备了“向量运算”的神奇性质,类似于word embedding可以操纵向量,并且能够按照“语义”生成新内容。
    Approach and Model Architecture

对于卷积神经网络部分,作者用上了几个最近被证实有效的对CNN架构的修改。

  1. 把所有的pooling (例如maxpooling)等用”stride”替代。这能让网络学习到自己的空间上的降采样。作者将这个方法用在了生成器(使用stride上采样)和判别器上。
  2. 去掉了卷积特征之后的全连接层。改用global average pooling,这虽然会影响收敛速度但是能增加模型的稳定性。
  3. 使用了Batch Normalization,这能够通过让输入到每一个节点的数据都保持0均值1方差,从而稳定训练,并且能够帮助训练更深层的模型。这个方法非常重要,它能够防止模型永远只能输出相同的样本,也就是上面提到的“Helvetica Scenario”现象。这个现象是GAN在实际使用中遇到的最大的问题。
  4. 生成器中除了输出层以外,激活函数都是用ReLU,输出层激活函数使用Tanh。这能够让模型在训练中更快地达到饱和并且能对彩色样本有更好的效果。而且,使用leaky rectified activation效果也不错(尤其是对一些高分辨率的图片)。

总结来说,作者给出了一个关于稳定训练的DCGAN的guideline:

  1. 将所有的pooling层替换成strided convolution(判别器)和fractional-strided convolution(生成器)。
  2. 在生成器和判别器中使用Batch Normalization 。
  3. 在更深的架构中删除全连接的隐层。
  4. 生成器:在输出层使用Tanh激活函数,其余层使用ReLU。
  5. 判别器:在每一层都是用LeakyReLU。
    生成器结构的示意图:

实验

作者在三个数据集上训练了DCGAN,分别是:Large-scale Scene Understanding(LSUN), Imagenet-1k 和一个比较新的面部数据库。又用了一些数据来验证DCGAN各方面的能力。

DCGAN作为特征抽取器

首先,作者使用了DCGAN作为特征抽取器,在CIFAR-10的数据上训练了一个分类器。下面是分类精度的结果:

为了验证DCGAN能够抽取图片的特征,使用了Imagenet-1k进行训练,然后使用CIFAR-10进行分类性能测试。从表格中能看出,DCGAN+L2-SVM已经能取得不错的效果了。虽然不如Exemplar CNN,但作者觉得后续还有微调的空间。

然后又用相似参数进行了街景房间门牌号数据集(SVHN)做了测试。使用了DCGAN的判别器中抽取到的特征之后,能够达到state-of-the-art的效果(22.48%错误率)。并且证实,达到这个效果并不是因为用了CNN,因为他们发现用了结构完全一样的纯CNN的模型,就达不到这个效果了(28.87%错误率)。看来对抗学习是有效果的。

可视化

首先,作者在latent空间进行了简单的修改。作者认为,如果在这个潜在空间做出一些微小的移动导致了语义上的变化(例如多了一张床或者窗户等),这也就说明模型学习到了相关知识的语义上的表达。发现在随机采样的点处用插值的方法施加微小变化生成的图片。明显看出这些是在一个视角做出一些微小的变化。然后又做了一个判别器中特征的可视化 。

操纵生成器的特征表达

在做了这些可视化之后,作者又想尝试操纵生成器的特征表达。

“遗忘”掉特殊的对象

首先,作者尝试去让生成器“遗忘掉”一些特定的对象。如果隐变量中的某些变量决定了对象是否被生成出来,那么删除这些变量,是不是能让生成的图像中不包含这些对象?

作者通过一个设计实验来达到这个效果:生成150个样本,其中有52个样本包含了窗子,然后将这个窗子的位置人为地标志出来。然后在倒数第二层卷积层上使用一个logistic regression来判断这个激活函数是否控制着窗子的生成。如果在卷积层的某个filter上发现在标志着窗子的位置范围内有值,则将这个filter抹掉。然后我们会发现,我们生成的图片中的窗子真的被删掉了。

向量可计算性

作者还发现图像之间也可以像word embedding一样进行计算:

需要注意的是:首先,用来计算的向量其实是z而不是生成图片。其次,应该拿三个类似效果的z取平均之后再进行运算。例如我们首先找到能够三个能够产生smiling woman的z,取平均之后为z1,然后找到三个能够生成natural woman的z取平均后为z2,然后再找到三个能够生成natural man的z取平均后为z3,最终经过计算可以得到z4=z1−z2+z3。再用这个得到的z4就能生成smiling man的图片。

类似上面介绍“卧室变换”的方法,作者也有插值的方法做了“面部朝向”的实验。就是说,将脸朝左到朝右的两个z,插值出了一大堆“过渡”的z,然后得到了这样的效果:

Context Encoders: Feature Learning by Inpainting

Image往往有很多的结构特性,这篇文章的目的:用CNN预测结构。

Structure

  • Encoder

用CNN预测周围环境中场景的缺失部分。类似Autoencoders. 输入image,通过低维“bottleneck”层重建获得场景的紧凑特征。但是该特征表示可能只是压缩图像内容而不学习语义上有意义的表示。完成填充图像的大的缺失区域但不从附近的像素获得“提示”的任务。

  • Fully-connected layer withgroups

中间的通道没有连接不同特征图的参数,只传播信息。 这之后是跨越通道传播信息的步幅1卷积。

  • Decoder
    上采样后卷积/分段步幅卷积
    激活函数:ReLu
  • Loss

Image: x, encoder: F, output: F(x) Mˆ:二进制掩码,missing区域的值为1,Input pixels:值为0
由于L2(或L1)loss通常优于模糊的解决方案,超过高度精确的测试。这是因为L2损失预测分布平均值非常“安全”,因为这样可以最大限度地减少平均像素误差,但会导致a blurry averaged image 。
Reconstruction lossLrec(x)=||Mˆ(xF((1Mˆ)x))||22,

Adversarial lossminDmaxGExX[log(D(x))]+EzZ[log(1D(G(z)))]

GF mask: Mˆx
Joint loss:
joint loss
还有一个图很好的表示这个模型:

实验

对丢失其中的一块,作者想了三种情况,Central region,Random block,Random region。

缺失方式

同样选择了SGD的Adam sover。验证了两个数据集Paris StreetView和ImageNet。

结果表现出上下文编码器具有缺失区域的图像的语义细节理解的能力,把上下文编码器作为图像分类,通过对象检测和语义分割的预训练步骤,表现学习的特征对其他任务的可转移性。 文章将这些任务的结果与其他无监督或自我监督的方法进行比较,证明这个方法胜过先前的方法。结果在图像的语义区域的绘制中表现一般。如果区域可以用低级纹理填充,则纹理合成方法通常可以执行得更好。
结果

Generative Visual Manipulation on the Natural Image Manifold

这篇文章作者想要以用户控制的方式修改图像外观,同时保持结果的真实性。希望通过GAN直接从数据学习自然图像流形,作者定义了一类图像编辑操作,并将其输出限制在所有时间的学习流程上。可以实现用户的涂鸦风格转换。

以前的工作有有两点不足:
1. 生成的图像虽然很好,但仍然不是很逼真的
2. 这些生成模型被设置为通过对随机的潜在矢量空间进行采样来产生图像

作者使用GAN来学习自然图像的多样性,但是实际上并不将其用于图像生成。 相反,用它作为对各种图像操纵操作的输出的约束,以确保结果始终在学习的流形上。 这使我们能够以自然和数据驱动的方式重新编写多种编辑操作,特别是颜色和形状操作。 该模型自动调整输出,保持所有编辑尽可能逼真。

基于这个思想作者提出了三个应用系统:
1. 基于一个潜在的生成模型来处理存在的照片,以实现不同的外观(形状和颜色)
2. 一个图像的“生成转型”看起来更像是另一个
3. 根据用户的涂鸦和弯曲界面,从头开始创建一个新的图像

假设所有的自然图像都位于理想的低维流形M上,距离函数 S(x1,x2)测量两个图像之间的感知相似度。直接建模很困难,所以用GAN来近似。其中z使用均匀分布Unif[1,1]d,定义M̃ =G(z)|zZ, S(G(z1),G(z2))z1z22

这里使用GAN近似理想的流形原因有二:
1. 它产生高质量的样本。 虽然有时候缺乏视觉细节,但是该模型可以合理的吸引人的样本与合理的整体结构。
2. 潜在空间中的欧几里德距离通常对应于感知上有意义的视觉相似性。

给定两个流行: G(z0),G(zN)),寻找N + 1个平滑过渡的图片G(z0),G(z1),...G(zN), 通常通过构建以图像为节点的图像图,成对距离作为边缘,同时计算起始图像和结束图像之间的最短路径。
这里约束条件是
minimize nt=0S(G(zt),G(zt+1))
S(G(z1),G(z2))z1z22
所以简单的线性插值[(1tN)·z0+tN·zN]Nt=0 是最短路径。

方法

  1. 给定一张真实的照片,通过找到原始图像的GAN的最接近的潜在特征向量z,将其投影到图像流形的近似值上。
  2. 提出一种实时方法来逐渐和平滑地更新潜在矢量z,使其产生既满足用户编辑并保持靠近自然图像的所需图像。

不幸的是,在这种变换中,生成器通常会丢失输入图像的一些重要的低维细节。因此,作者提出一种密集的通信方法来估计应用于生成模型的编辑中的色彩变化形状变化。 然后,使用边缘感知插值技术将这些更改转移到原始照片,并产生最终的操纵结果。

将图像投影到流形上

现在,目标是通过最小化重建误差,使用生成模型G来重构原始照片xR,其中一些可微分特征空间C中的L(x1,x2)=||C(x1)C(x2)2。如果C(x)= x,那么重构误差就是像素点的欧氏误差。
(1)
使用深层神经网络激活会导致意识上有意义的细节重建。作者发现从ImageNet上训练的AlexNet提取的原始像素和conv4特征(×0.002)的加权组合表现最好。
通过优化投影:由于特征提取器C和生成模型G都是可微分的,因此可以使用L-BFGS-B直接优化上述目标。然而,C(G(z))的级联使问题非常非凸,结果,重构质量很大程度上依赖于z的良好初始化。我们可以从多个随机初始化开始,并以最低的成本输出解决方案。然而,获得稳定重构所需的随机初始化的数量是非常大的(大于100),这使得实时处理变得不可能。我们反而训练一个深层神经网络来直接最小化方程1。
通过前馈网络进行投影:训练一个前馈神经网络P(x;θP),其直接预测来自x的潜在向量z。预测模型P的训练目标如下:
(2)
其中xRn表示数据集中的第n个图像。模型P的架构等同于对抗网络的鉴别器D,并且仅在最终的网络输出数量上变化。这看起来很像encoder P 和 decoder G的自动编码器,但是decoder G在整个训练过程中是固定的。虽然这两个目标函数看起来是一样的,但是基于学习的方法通常执行得更好并且不会落入局部最优。

后面发现混合这两方法效果更好。(首先预测P(xR;θP),然后将其用作优化目标的初始化Eq1).小数是重建损失。

操纵潜在矢量

通过前面的方法可以开始修改图像。通过同时匹配用户意图来更新初始投影x0,靠近原始图像x0
每个编辑操作被形成为输出图像x的局部部分上的约束fg(x)=vg, 编辑操作g包括颜色,形状和弯曲约束。定一个初始投影x0,发现一个接近x0的新图像x∈M,尽量满足尽可能多的约束

其中数据项测量与约束的偏差,平滑度项强制以小步进移动,使得图像内容不被太多改变。 在实验中设置λs=5
在GAN上上述公式简化近似为:

最后一项 ED=λD·log(1D(G(z)))可选地捕获由GAN鉴别器D判断的所产生的输出的视觉真实性。这进一步将图像推向自然图像的流形,并稍微改善结果的视觉质量。 默认情况下,不使用它以提高速率。

编辑转换

通过一个具体的例子,生成红色的鞋子来说明这个方法。

Motion+Color flow algorithm:
通过推广传统光流方法中的亮度恒定性假设来估计颜色和几何变化,产生motion+color的目标函数:

I(x,y,t)表述插入的第t个图像的RGB值,(u,v)是相对于t的变化的流向量,A表示3×4颜色仿射变换矩阵。数据项通过引入局部仿射色彩转移模型A来放松颜色恒定性假设,而空间和颜色正则化项鼓励运动和颜色变化的平滑度。 我们通过使用传统光流算法迭代地估计流(u,v)来求解目标,并通过求解线性方程组来计算颜色变化A. 我们迭代3次。 我们产生8个中间帧(即N = 7)。估计附近帧之间的变化,并逐帧连接这些变化,以获得沿插值序列z0z1的任意两个帧之间的长距离变化。

用户界面

用户界面包括一个显示当前编辑的照片的主窗口,显示所有候选结果的缩略图的显示器,以及用于展示原始照片和最终结果之间的插补序列的滑块。作者给了一个视频链接。

  • 给定用户指导导出的目标z*,通过将z初始化为z0的随机扰动,生成多个不同的结果。生成64个示例,并显示按目标成本排序的最佳9个结果。
  • 一旦用户完成一个编辑,就可以拖动一个滑块来查看在原始照片和最后的照片之间插入的所有中间结果。允许用户通过单个编辑来探索更多的替代方案。如改变手提包的手柄更红,或使鞋跟略微更高,而不必承诺到特定的最终状态。

系统提供了三个约束条件: 着色,勾画和弯曲
着色刷:用户从调色板中选择一种颜色,并可以调整画笔大小。 对于用这个画笔标记的每个像素,fg(I)=Ip=vg
勾画画笔:用户勾勒出形状或添加细节。fg(I)=HOG(I)p约束在图像中的某个位置p处的可区分的HOG描述符以接近用户笔迹。 选择HOG特征提取器,因为它是分箱的,这使得它可以很好地描绘不准确的图形。
弯曲刷:用户可以更明确地修改形状。 用户首先选择一个局部区域(具有可调整大小的窗口),然后将其拖到另一个位置。 然后,对移位像素放置一个颜色和草图约束,鼓励目标补丁模拟拖动区域的外观。

实验

数据集:各种照片集合:“鞋”,有从Zappos.com收集的50K鞋子(鞋子大致居中,但不完全一致,大致面向左,前面侧面图); “室外”教室数据集(126K图像)来自LSUN挑战;麻省理工学院数据集的“户外自然”图像(150K);和从Amazon下载的两个基于查询的产品集合,包括“手袋”(138K)和“衬衫”(137K)。下载的手提包和衬衫大致居中,但没有进一步对齐。

然后从三个方面实验:真实的图像处理,生成图像转换,使用画笔工具从头开始生成照片。

作者在评估方面做的很全面,做了四种评估:
1. 图像重建评估:基于优化的和基于网络的神经网络方法相当,其组合产生更好的结果。
2. 类特定模型:文章已经在特定类图像上训练了生成模型。作为比较,又在三个数据集(鞋子,手袋和衬衫)上训练一个跨类模型,并且观察到与类特定模型相比,模型实现了更低的重建误差。也尝试使用类特定的模型来重建不同类的图像。平均跨类别重建错误更低。然而,作者期望一个在许多类别(例如1,000)上训练的模型可以更好地推广到新颖的对象。
3. 感知研究:作者进行一个小的感知研究来比较四种类型的图像的照片真实性:实际照片,由GAN生成的样本,我们的方法(仅形状)和我们的方法(形状+颜色).单独的DCGAN模型产生较少的照片逼真的图像,但是当与编辑传输相结合时,现实主义显着提高。
4. 附加评估:评估动作+颜色流动方法,并将结果与旨在处理两个图像之间的大位移的流行对准方法进行比较。

[1]: I. Goodfellow, J. Pouget-Abadi, M. Mirza, B. Xu, D. Warde-Farley, S. Ozair, A. Courville, and Y. Bengio. Generative Adversarial Nets. NIPS, 2014
[2]: R.Zhang,P.Isola,andA.A.Efros.Colorfulimagecolorization. ECCV, 2016. 1, 2, 5, 7, 8, 16

阅读全文
0 0