【深度学习】图像风格混合——StyleGAN2原理解析

1、前言

上一篇文章,我们详细讲解了StyleGAN的原理。这篇文章,我们就来讲解一下StyleGAN2,也就是StyleGAN的改进版。

原论文:Analyzing and Improving the Image Quality of StyleGAN

参考代码:①Pytorch版本,非官方

​ ②StyleGan 2 (labml.ai)

​ PS:推荐看代码②,里面对每行都进行了注释。

视频:【图像风格混合——StyleGAN2原理解析-哔哩哔哩】

2、StyleGAN存在的问题

在StyleGAN中,大多数的生成的图像容易产生一个类似水滴状的伪影,并且这些伪影在64 x 64 后就便存在在特征图中

在这里插入图片描述

3、StyleGAN2的改进点

3.1、模型图改进

针对上面的问题,作者对模型进行了修改,具体情况如下图

作者经过实验发现,AdaIN的归一化操作,是造成水滴伪影出现了根本原因,于是,作者把AdaIN层里面的归一化去掉。又经过实验,发现,将噪声B和偏置项b移动出style模块之外,取得的效果更好。经过此操作后,作者发现归一化和A映射的时候,只需要标准差就可以了(舍弃均值),如下图的图(c)

在这里插入图片描述

图(a)是传统StyleGAN的生成网络;图(b)是StyleGAN生成网络的细节拆分;图(c)是StyleGAN2的生成网络;

对图(c),首先随机生成一个常数特征图c,然后把它与w latent Code映射成的A进行Mod std操作。由于仅仅是对常数c进行缩放操作,所以可以把这个缩放直接写入到下一个层(Conv 3 x 3),也就是直接对Conv这参数进行缩放
w i , j , k ′ = s i ∗ w i , j , k w'_{i,j,k} = s_i*w_{i,j,k} wi,j,k=siwi,j,k
w 、 w ′ w、w' ww分别表示原始的参数跟缩放后的参数, s s s表示从w latent Code映射过来的缩放权重, i i i表示第几张特征图, j j j表示输出特征图, k k k代表卷积核

同样的,在下面的实例归一化中,作者去掉了减去均值的操作,只对输出值进行缩放而已,所以同样可以写入到卷积层的参数中
w i , j , k ′ ′ = w i , j , k ′ ∑ i , k w ′ i , j , k 2 + ϵ w''_{i,j,k}=\frac{w'_{i,j,k}}{\sqrt{\sum\limits_{i,k}{{w'}^2_{i,j,k}}+\epsilon}} wi,j,k′′=i,kwi,j,k2+ϵ wi,j,k
其中, ϵ \epsilon ϵ一个很小的常数,防止分母为0

于是乎,StyleGAN2的模型图就从图(c)简化成了图(d)

除此之外,在StyleGAN中,每个分辨率都注入两次风格信息w,这些w都是一样的。在StyleGAN2中,作者提出生成不同的w,每次都注入不同的w。记为w+

所以对于StyleGAN中,w latent Code ∈ R [ b a t c h , , 512 ] \in R^{[batch,,512]} R[batch,,512],w+ latent Code ∈ R [ b a t c h , 18 , 512 ] \in R^{[batch,18,512]} R[batch,18,512],因为分辨率从4x4开始上采样8次,每个分辨率注入两次风格信息,再加上在4 x 4 也要注入两次,所以得到 18 x 512 维度的w+。

3.2、损失函数改进

3.2.1、Lazy regularization(惰性正则化)

在StyleGAN中,判别网络,除了正常的判别损失,还加上了一个正则化项,其公式如下
R 1 = γ 2 E x ∼ p d a t a [ ( ∣ ∣ ∇ x D ( x ) ∣ ∣ 2 − 1 ) 2 ] R_1=\frac{\gamma}{2}\mathbb{E}_{x \sim p_{data}}\left[\left(||\nabla_xD(x)||_{2} -1\right)^2\right] R1=2γExpdata[(∣∣xD(x)21)2]
其中, γ \gamma γ是一个自己设定的超参数, P d a t a P_{data} Pdata表示真实数据的分布, ∇ x D ( x ) \nabla_xD(x) xD(x)表示对 D ( x ) D(x) D(x)关于 x x x求梯度

这个正则化项的做法,是为了防止梯度消失或者爆炸而提出的,将其梯度限定在1。

而在StyleGAN2中,作者发现,这个正则化项的计算频次要低于主要的损失函数,经过实验,每16个minbatchs执行一次正则化项即可,这样可以大大降低计算成本和总内存的使用。

3.2.2、Path length regularization(路径长度正则化)

**论文原话翻译:**我们鼓励固定大小的步长𝒲在图像中产生非零的、固定大小的变化。我们可以通过在图像空间中步入随机方向并观察相应的𝐰梯度来根据经验测量与该理想的偏差。无论𝐰图像空间方向如何,这些梯度的长度都应该接近相等,这表明从潜在空间到图像空间的映射是有条件的。

其实就是在生成网络中加入另一个损失项,其公式如下
E w , y ∼ N ( 0 , I ) ( ∣ ∣ J w T y ∣ ∣ 2 − a ) 2 \mathbb{E}_{w,y\sim\mathbf{N(0,\mathbf{I})}}\left(||\mathbf{J}^T_{w}\mathbb{y}||_2-a\right)^2 Ew,yN(0,I)(∣∣JwTy2a)2
其中, J w \mathbf{J}_w Jw是生成图像对w的雅可比矩阵,即 J w = ∂ g ( w ) / ∂ w \mathbf{J}_w=\partial{g(w)}/\partial{w} Jw=g(w)/w。y是从标准正态分布中采样出来的随机图像。为了避免雅可比矩阵的显式运算,对其进行恒等变化 J w T y = ∇ w ( g ( w ) ∗ y ) \mathbf{J}^T_{w}\mathbb{y}=\nabla_w(g(w)*y) JwTy=w(g(w)y) a a a J w T y \mathbf{J}^T_{w}\mathbb{y} JwTy的指数移动平均。

这个公式怎么理解呢,emmmmm…

我们从矩阵与向量的乘法角度去理解吧,y是一个随机图像,其维度为 y ∈ R M y \in R^M yRM(M=3wh,即RGB图像维度),而对于 J w T ∈ R L × m \mathbf{J}_w^T\in R^{L\times m} JwTRL×m J w \mathbf{J}_w Jw代表的是生成图像在w上面的变化,y为随机采样出来的图像,这两个值做矩阵乘法,就是将图像y映射到 J w \mathbf{J}_w Jw所在空间,其实也就是将变化送到图像y中,取L2范数,代表的就是图像变化的长度。减去 a a a再取平方自然就是希望图像变化的长度等于 a a a

最最最最最重要的是,作者在论文里面证明,当 J w \mathbf{J}_w Jw这个矩阵正交,损失达到最小。当矩阵正交时,意味着w的各个分量之间相互正交垂直,线性无关,也就达到了解耦的目的。

怎么证明的?emmmmm…我看了很多人的文章,想找到其中推导,都未曾找到…感兴趣的自己看论文吧,在下才疏学浅,资质驽钝,未能参透。

3.3、训练方式改进

在StyleGAN中,使用的是PGGAN的渐进式训练方法,这种方法可以很好地生成高分辨率大图,但是,他有一个缺陷,即某些细节丧失了移动不变性。

在这里插入图片描述

当人脸旋转的时候,牙齿却没有跟着旋转。作者认为,造成这种情况的原因是,每个分辨率都会生成一张图像,在低分辨率的时候,生成器会尽量生成细节,如果在低分辨率区域生成很多次中间牙齿,这会导致在中间层(中分辨率)的时候,中间牙齿的频率过高,没有办法调节过来。

作者提出其他训练方法取代渐进式训练

在这里插入图片描述

图(a)代表的是MSG-GAN的模型训练方法,中间的虚线将模型分为生成网络(上)和判别网络两部分(下),作者对其进行简化,在每一个分辨率tRGB后直接与上一个分辨率的上采样图像简单相加,即图(b),Ps:图(b)里面的上采样和下采样均使用双线性插值。

而图(c)是经过图(b)进一步修改成残差网络的。

作者经过实验发现,残差网络对判别器的作用很大。但是,将残差网络用在生成器却造成了损害。于是,作者使用图(b)作为生成器结构和图(c)作为判别器结构。

除此之外,里面的tRGB等等操作,与StyleGAN中的不一样,具体的在代码中有体现,更具体的,请参考StyleGan 2 (labml.ai)

4、Projection of images to latent space(将图像投影到隐空间)

其实就是把我们现实的真实图像投影到w空间,将图像的风格信息提取出来,然后对该风格进行修改,以达到修改我们真实图像的目的

论文里面没有对具体方法进行展开,但是我在拜读其他人的文章时,里面提到了两种具体方法StyleGAN 和 StyleGAN2 的深度理解 - 知乎 (zhihu.com)

①在训练StyleGAN的时候,训练一个编码器,将真实图片喂进去,输出隐空间的向量。

②将预训练好的StyleGAN,随机采样z latent Code映射成w latent Code,然后生成的图像与真实图像计算损失,更新w latent Code,直到收敛。

显然,第一个方法不能处理训练数据集以外的图像;而第二种虽然可以,但是每次都要迭代训练更新w,也颇为麻烦。

论文里面用到的时第二种,对这些感兴趣的,参考论文Image2StyleGAN: How to Embed Images Into the StyleGAN Latent Space?

5、结束

以上,便是StyleGAN的全部内容,如有问题,还望指出,阿里嘎多!

在这里插入图片描述

6、参考

图像生成典中典:StyleGAN & StyleGAN2 论文&代码精读 - 知乎 (zhihu.com)

StyleGAN 和 StyleGAN2 的深度理解 - 知乎 (zhihu.com)

StyleGan 2 (labml.ai)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/814073.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Godot4.2】CanvasItem绘图函数全解析 - 7.自定义节点TextBoard

概述 之前发布的几篇文章几乎阐述了CanvasItem绘图函数最基础的内容。 本篇结合draw_style_box()和TextParagraph类,自定义了一个可以自适应宽高显示多行文本,且带有一个样式盒作为背景的文字板节点TextBoard。 系列目录 0.概述1.绘制简单图形2.设定绘…

SPP论文笔记

这篇论文讨论了在深度卷积网络中引入空间金字塔池化(SPP)层的方法,以解决传统深度卷积网络需要固定图像尺寸的限制。以下是论文各部分的总结: 1. 引言 论文指出现有的深度卷积神经网络(CNN)需要固定大小的…

全景剖析SSD SLC Cache缓存设计原理-2

四、SLC缓存对SSD的寿命是否有优化? 当使用QLC或TLC NAND闪存并将其切换到SLC模式进行写入时,会对闪存的寿命产生以下影响: 短期寿命提升: SLC模式下,每个存储单元仅存储一个比特数据,相对于QLC或TLC来说…

前端vue: 使用ElementUI适配国际化

i18n介绍 i18n(其来源是英文单词 internationalization的首末字符i和n,18为中间的字符数)是“国际化”的简称。 前端国际化步骤 1、安装i18n插件 安装插件时候,注意必须指定版本号,不然安装会报错。 npm i vue-i1…

linux 部署安装mongodb教程

现在去官网下载mongodb的tar包,在本地创建文件夹 cd /home wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.17.tgz tar -zxvf mongodb-linux-x86_64-rhel70-4.2.17.tgz mv mongodb-linux-x86_64-rhel70-4.2.17 mongodb cd /home/mongodb mkdir log t…

GAN:对抗式生成网络之图片生成

对抗式生成网络(Adversarial Generative Network, AGN)这一术语在您提供的信息中并未直接出现。通常,在深度学习文献和实践中,与“对抗”和“生成”概念相结合的网络架构指的是生成式对抗网络(Generative Adversarial Networks, GANs)。GANs由Ian Goodfellow等人于2014年…

数据结构之单链表相关刷题

找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程(ಥ_ಥ)-CSDN博客 所属专栏:数据结构 数据结构之单链表的相关知识点及应用-CSDN博客 下面题目基于上面这篇文章: 下面有任何不懂的地方欢迎在评论区留言或…

wangeditor与deaftjs的停止维护,2024编辑器该如何做技术选型(一)

wangeditor暂停维护的声明: wangeditor是国内开发者开发的编辑器,用户也挺多,但是由于作者时间关系,暂停维护。 deaft的弃坑的声明: draft是Facebook开源的,但是也弃坑了,说明设计的时候存在很大…

LeetCode最长有效括号问题解

给定一个仅包含字符的字符串(’ 和 ‘)’,返回最长有效的长度(出色地-形成) 括号子弦。 示例1: 输入:s “(()” 输出:2 说明:最长的有效括号子字符串是 “()” 。 示例2: 输入:s “)()())…

在Linux上利用mingw-w64生成exe文件

一、概要 1、elf与exe 在Linux上用gcc直接编译出来的可执行文件是elf格式的,在Windows上是不能运行的 Windows上可执行文件的格式是exe 利用mingw-w64可以在Linux上生成exe格式的可执行文件,将该exe文件拷贝到Windows上就可以运行 2、程序要留给用户…

体验Humane AI:我与可穿戴AI别针的生活

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

如何使用 ArcGIS Pro 制作热力图

热力图是一种用颜色表示数据密度的地图,通常用来显示空间分布数据的热度或密度,我们可以通过 ArcGIS Pro 来制作热力图,这里为大家介绍一下制作的方法,希望能对你有所帮助。 数据来源 教程所使用的数据是从水经微图中下载的POI数…

JVM复习

冯诺依曼模型与计算机处理数据过程相关联: 冯诺依曼模型: 输入/输出设备存储器输出设备运算器控制器处理过程: 提取阶段:输入设备传入原始数据,存储到存储器解码阶段:由CPU的指令集架构ISA将数值解…

分布式技术--------------ELK大规模日志实时收集分析系统

目录 一、ELK日志分析系统 1.1ELK介绍 1.2ELK各组件介绍 1.2.1ElasticSearch 1.2.2Kiabana 1.2.3Logstash 1.2.4可以添加的其它组件 1.2.4.1Filebeat filebeat 结合logstash 带来好处 1.2.4.2缓存/消息队列(redis、kafka、RabbitMQ等) 1.2.4.…

搭建基于Hexo的个人博客,以及git相关命令

全文写完之后的总结 测试命令 hexo clean hexo g hexo s 上传到服务器命令 hexo clean hexo g hexo d 上传到服务器(如果上一个命令用不了),也要先hexo clean,hexo g git init git add . git commit -m "first commit" git p…

部署HDFS集群(完全分布式模式、hadoop用户控制集群、hadoop-3.3.4+安装包)

目录 前置 一、上传&解压 (一 )上传 (二)解压 二、修改配置文件 (一)配置workers文件 (二)配置hadoop-env.sh文件 (三)配置core-site.xml文件 &…

Fuel tank position

Fuel tank position 汽车油箱位置在哪里,加油的时候就不会听错方向

uni-app的页面中使用uni-map-common的地址解析(地址转坐标)功能,一直报请求云函数出错

想在uni-app的页面中使用uni-map-common的地址解析(地址转坐标)功能,怎么一直报请求云函数出错。 不看控制台啊,弄错了控制台,就说怎么一直没有打印出消息。 所以开始换高德地图的,昨天申请了两个 一开始用的第二个web…

OpenAI CEO山姆·奥特曼推广新AI企业服务,直面微软竞争|TodayAI

近期,OpenAI的首席执行官山姆奥特曼在全球多地接待了来自《财富》500强公司的数百名高管,展示了公司最新的人工智能服务。在旧金山、纽约和伦敦的会议上,奥特曼及其团队向企业界领袖展示了OpenAI的企业级产品,并进行了与微软产品的…

前端入门:极简登录网页的制作(未使用JavaScript制作互动逻辑)

必备工具:vscode Visual Studio Code - Code Editing. Redefined 目录 前言 准备 HTML源文件的编写(构建) head部分 body部分 网页背景设置 网页主体构建 CSS源文件的编写(设计) 结果展示 前言 博主稍稍自…