当前位置:网站首页>深度学习系列47:styleGAN总结
深度学习系列47:styleGAN总结
2022-06-23 06:18:00 【IE06】
1. styleGAN 1
gan的一个问题是很难生成大尺寸的图片,直到2018年,NVIDIA首次用ProGAN解决了这一挑战。它首先用极低分辨率的图像(如4×4)训练生成器和鉴别器,然后每次增加一个更高分辨率的层。最初的输入向量shape为[512,4,4],最后输出为[3,1024,1024],一共是18层:
18 = 1(初始进入的conv层)+8 * 2(每一个块包含的两个卷积层,将vector从[4,4]变到[1024,1024])+1(to_rgb层,将通道变成3)
styleGAN是proGAN的升级版:
1)使用8个FC层将输入图片编码为中间向量,类似PCA的转换,将不同的特征(头发、眼睛、鼻子等)进行解耦,否则会出现“特征纠缠”问题,训练数据中某种特征过多会影响其他特征。
2)隐变量w经过A转换后会连接到不同比例的每个层中,用于对每个通道进行缩放、偏移,称为AdaIN模块。这个缩放和偏移存放的是风格信息,不同的值会生成不同的风格。
因为Synthesis network的网络层有18层,所以我们才会说通过w生成得到了18个控制向量,用于控制不同的视觉特征。
3)噪声不是在原始向量中添加,而是添加在Synthesis的每一层中,修改缩放和偏移的值:
4)训练过程中同时使用了两个w,记为A和B,分别用来训练某些网络级别:
分辨率(4x4 - 8x8)的网络部分使用B的style,其余使用A的style, 可以看到图像的身份特征随souce B,但是肤色等细节随source A;
分辨率(16x16 - 32x32)的网络部分使用B的style,这个时候生成图像不再具有B的身份特性,发型、姿态等都发生改变,但是肤色依然随A;
分辨率(64x64 - 1024x1024)的网络部分使用B的style,此时身份特征随A,肤色随B。
2. styleGAN 2
stylegan2主要是为了解决stylegan生成的图像上容易出现“水滴”问题。导致水滴的原因是Adain操作,Adain对每个feature map进行归一化,因此有可能破坏掉feature之间的信息,产生上述现象。而去除了Adain后,该问题便解决了。
主要修改点包括:
1)移除最开始的数据处理
2)在标准化特征后取消乘以均值
3)将noise模块在外部style模块添加
4)加入weight demodulation,解决取消乘以均值后各特征不成比例的问题:
5)Lazy regularization:每16个minibatch才优化一次正则项,这样可以减少计算量,同时对效果也没什么影响。
3. styleGAN 3
在GAN的合成过程中,某些特征依赖于绝对像素坐标,这会导致:细节似乎粘在图像坐标上,而不是所要生成对象的表面。这个问题的出现其实是GAN模型存在的一个普遍问题:生成的过程并不是一个自然的层次化生成。粗糙特征(GAN的浅层网络的输出特征)主要控制了精细特征(GAN的深层网络的输出特征)的存在与否,并没有精细控制它们的出现的精确位置。
目前的生成器网络架构是卷积+非线性+上采样等结构,而这样的架构无法做到很好的Equivariance(等变性)
而stylegan3从根本上解决了stylegan2图像坐标与特征粘连的问题,实现了真正的图像平移、旋转等不变性,大幅度提高了图像合成质量。
(1) 利用Fourier特征(傅里叶特征)代替了stylegan2生成器的常数输入
(2) 删除了noise输入(特征的位置信息要完全来自前层粗糙特征)
(3) 降低了网络深度(14层,之前是18层),禁用mixing regularization和path length regularization,并且在每次卷积前都使用简单的归一化 (这里有点直接推翻了stylegan2的一些思想)
(4) 用理想低通滤波器来代替双线性采样。
(5) 为了得到旋转不变性网络,做出来两个改进:将所有层的卷积核大小从3替换为1,通过将feature map的数量增加一倍,用来弥补减少的特征容量
4. styleGAN功能

GAN有一个平滑和连续的隐空间,而不像VAE(Variational Auto Encoder)有间隙。因此,当你在潜伏空间中取两个点f1和f2,将产生两个不同的面,你可以通过在两个点之间取一个线性路径来创建两个面的过渡或插值。
边栏推荐
猜你喜欢

直播回顾 | 传统应用进行容器化改造,如何既快又稳?

【STL】pair用法总结

开源OAuth2框架 实现SSO单点登录

Idea installing the cloudtoolkit plug-in
![[project training] multi segment line expanded to parallel line](/img/f2/ee4985fd2454bf00d600e34a818f2d.png)
[project training] multi segment line expanded to parallel line

Badly placed()'s problem

mysql 优化

Swagger3 integrates oauth2 authentication token
![[STL] summary of deque usage of sequential containers](/img/33/65c54d14697ee43b2655ea1255d67d.png)
[STL] summary of deque usage of sequential containers

MySQL mvcc multi version concurrency control
随机推荐
asp. Net file download demo and related problems
如何在 PHP 中进行日期格式验证检查(正则)
解决挖矿病毒 sshd2(redis未设密码、清除crontab定时任务)
Idea installing the cloudtoolkit plug-in
XML DTD record
QT designer cannot modify the window size, and cannot change the size by dragging the window with the mouse
[bull Chinese document] queue package used to process distributed jobs and messages in nodejs
Centos7 MySQL records
【项目实训】线形组件的细节
How to migrate virtual machines from VirtualBox to hype-v
Mongodb record
xml schem 记录
关于#sql#的问题:有没有不增加字段,在原有字段的基础上,对字段里面的null值进行填充的方法呢
Summary of qvariant use in QT
Eureka
TP6 安装拓展
云原生落地进入深水区,博云容器云产品族释放四大价值
图解三次握手四次挥手,小白都能看懂
898. 子数组按位或操作
Why does TCP protocol shake hands three times instead of two?