两个unit取和会溢出吗_深入理解风格迁移三部曲(一)UNIT

d961c5c7ed643f17ec4fd9cfca129a80.gif   

作者:陈  扬          

编辑:田  旭          

01

简介

近期我研究的方向转向了GAN的应用, 其中图像的风格迁移是GAN中一个非常有意思的应用,传统的方法基于拉普拉斯金字塔对成对的图像进行纹理上的风格迁移.随着2014年GAN的爆火,研究者发现GAN通过判别器D学习两个图像域的关系,实现了unpaired image-to-image(非成对图像数据集的风格迁移)的功能,其中有两个广为人知的应用分别是pix2pix和cycleGAN,今天我们另辟蹊径,从NVIDIA-Lab提出的UNIT框架来探索image-to-image的实现原理.

在开始说UNIT之前,我们先来简要的回顾一下GAN和VAE,这也是在我之前的ODOG项目中有过详细的介绍.

02

GAN

生成对抗网络(英语:Generative Adversarial Network,简称GAN)是非监督式学习的一种方法,通过让两个神经网络相互博弈的方式进行学习。该方法由伊恩·古德费洛等人于2014年提出。

核心公式:

bad0c4d586df1a80cdf52ecf6c28fef9.png

这个公式我们要分成两个部分来看: 

先看前半部分:

371e19852c4e2cacb0409b6a948f8a82.png

这个公式的意思是,先看加号前面4291808aef5a8778b3d007079dad8805.png

,我们希望D最大,所以4029c4fd6f91769c7497fe3068743738.png应该最大,意味着我的判别器可以很好的识别出,真实世界图像是"true",在看加号后面b58ef7cfebb5119968cda0dd13589ea5.png,要让log尽可能的大,需要的是77c9af109ce6aa4c6d370506160e708f.png尽可能的小,意味着我们生成模型的图片应该尽可能的被判别模型视为"FALSE".

再看后半部分部分

43ddfc103cf2754c61127f1974cfa644.png

我们应该让尽可能的小,加号前面的式子并没有G,所以无关,在看加号后面的式子b58ef7cfebb5119968cda0dd13589ea5.png,要让G尽可能地小,就要77c9af109ce6aa4c6d370506160e708f.png尽可能的大,也就是说本来就一张→噪声生成的图片,判别器却被迷惑了,以为是一张真实世界图片.这就是所谓的以假乱真. 

3fcac88dd8de85384989bc89fc2c15da.png

03

VAE

VAE 也叫变分自动编码机, 其基础是自编码机(autoencoder),AE通过对输入X进行编码后得到一个低维的向量y,然后根据这个向量还原出输入X,。通过对比与X,f65c74acc80af5bd499512fa70ad362e.png的误差,再利用神经网络去训练使得误差逐渐 减小从而达到非监督学习的目的.

12b760dd65daaba0b69807ebfce9a6fd.png

简单点来说,就是先通过f把x映射到y,一般来说我们假定734c0924d57fee7a85dfcd424dcffc76.png,再通过把y映射到f65c74acc80af5bd499512fa70ad362e.png,在这里不长篇大论Reparametrization tricks.

04

UNIT

UNIT(Unsupervised Image-to-Image Translation Networks),由NVIDIA-Lab在NIPS 2017年提出,该文章首次提Image-Image Translation这个概念,将计算机视觉和计算机图形学的许多任务总结进去,分为一对多和多对一的两类转换任务,包括CV里的边缘检测,图像分割,语义标签以及CG里的mapping labels or sparse user inputs to realistic images.

3acc493f2514281a730f32eb123189cc.png

该文章定义了e8fb570c005d67a0497f79fd2952d873.png28aa0fcd0a096e3c2b830edee230babb.png作为两个图像域.传统的supervised Image-to-image 通过对图像域进行采样,求其联合概率分布bc9bb6f54a784f659b6689604fddde17.png,通过 Encoder-Decoder 的思想,作者定义了两个E和G,希望使得ebaf8b1d04664fcf76167cf8441f4709.png在latent space上近可能的分布一致.意味着当我们同时对07a7517e5a2a5919bc3cbbbf02381ff4.png时,我们希望得出: 

42c3e3badd7b965f66508a4e2a7b2cc7.png

这样,我们得到了两个Domain下image的一致表示,再通过令G=D,从latent space中重构,51ce34c9309054bd6a5ef2d0a1760415.png

因此,我们两个采样下的9d6977870c2c7236cb26ffe3a5773140.png经过657bc59f886e19378ec503f5633a4cd6.png后得到了1f7481cf9091d4dc37c9f19a12b5b802.png,再把: 

a1b8a3cbc6fd68311380bf189cf6f75c.png

通过Adv_loss对抗学习跨域生成图片的效果.

可能细心的你以及发现了这是不是很类似VAE-GAN吗?是的.

05

损失函数

作者通过联合训练4个网络300579c4d4e91cef87a8132db69a957a.png的三个loss function来训练整个网络: 

6b43127b13c2f21fff81e7fb85c25c36.png

# -------------------------------
# Train Encoders and Generators
# -------------------------------
# Total loss
loss_G = (
loss_KL_1
+ loss_KL_2
+ loss_ID_1
+ loss_ID_2
+ loss_GAN_1
+ loss_GAN_2
+ loss_KL_1_
+ loss_KL_2_
+ loss_cyc_1
+ loss_cyc_2
)
loss_D1 = criterion_GAN(D1(X1), valid) + criterion_GAN(D1(fake_X1.detach()), fake)
loss_D2 = criterion_GAN(D2(X2), valid) + criterion_GAN(D2(fake_X2.detach()), fake)
VAE的目标是minimize source domain to latent space's KL diversity and latent space to destination domain's KL diversity(我觉得中文太拗口了,这句话实在是说不来)来最小化变分上界,VAE的定义如下: 

75a77d533f51d39bc8561a441c5ac16c.png

# Get shared latent representation
mu1, Z1 = E1(X1)
mu2, Z2 = E2(X2)
# Reconstruct images
recon_X1 = G1(Z1)
recon_X2 = G2(Z2)
# Translate images
fake_X1 = G1(Z2)
fake_X2 = G2(Z1)
loss_KL_1 = lambda_1 * compute_kl(mu1)
loss_KL_2 = lambda_1 * compute_kl(mu2)
loss_KL_1_ = lambda_3 * compute_kl(mu1_)
loss_KL_2_ = lambda_3 * compute_kl(mu2_)

对抗:GAN_LOSS被用于确保翻译图像类似图像在目标域.定义如下: 

65ed8d92c0770643ee17a4f7896b760b.png

loss_GAN_1 = lambda_0 * criterion_GAN(D1(fake_X1), valid)
loss_GAN_2 = lambda_0 * criterion_GAN(D2(fake_X2), valid)
loss_D1 = criterion_GAN(D1(X1), valid) + criterion_GAN(D1(fake_X1.detach()), fake)
loss_D2 = criterion_GAN(D2(X2), valid) + criterion_GAN(D2(fake_X2.detach()), fake)

循环一致性:由于shared latent-space假设暗含了循环一致性约束,因此我们在提出的框架中实施循环一致性约束,以进一步规范不适定的无监督图像间转换问题。产生的信息处理流称为循环重建流,定义如下: 

b0fea1a1d6b58c3a0f5b03aa34e64ca2.png

# Cycle translation
mu1_, Z1_ = E1(fake_X1)
mu2_, Z2_ = E2(fake_X2)
cycle_X1 = G1(Z2_)
cycle_X2 = G2(Z1_)
loss_ID_1 = lambda_2 * criterion_pixel(recon_X1, X1)
loss_ID_2 = lambda_2 * criterion_pixel(recon_X2, X2)
loss_cyc_1 = lambda_4 * criterion_pixel(cycle_X1, X1)
loss_cyc_2 = lambda_4 * criterion_pixel(cycle_X2, X2)
训练好的网络,我们可以通过对latent sapcelatent variable重编码,进而把输入图像迁移到各个域中:

06

实验结果

c22d225a2b4e17d3e6639d93cc66f55e.png

c22d225a2b4e17d3e6639d93cc66f55e.png

作者在展示的时候看起来好像可以实现一对多的风格转换,实际上这个算法只能实现1对1的风格迁移,是作者做了N对1对1的实验,所以看起来像1对N的结果.

这算是比较早期的一篇文章,其实现原理也是借鉴很很多前人的工作,实际上我觉得从原创性上来看比不上cycleGAN,不过这这个VAE-GAN延伸的应用性似乎更好一些.接下来会介绍NVIDIA-Lab的FUNIT和MUNIT.

 c30c67de43dbdcb0586bc1c53e7d9b11.gif

END

机器学习算法工程师


                            一个用心的公众号

2017b0578099ad2f10df5706a87bc790.png

长按,识别,加关注

进群,学习,得帮助

你的关注,我们的热度,

我们一定给你学习最大的帮助

abfef0cae4c82651d6c0bb6e81d92fb4.png你点的每个赞,我都认真当成了喜欢
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值