【深度学习】图像风格混合——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)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

openjudge_2.5基本算法之搜索_1700:八皇后问题

题目 1700:八皇后问题 总时间限制: 10000ms 内存限制: 65536kB 描述 在国际象棋棋盘上放置八个皇后,要求每两个皇后之间不能直接吃掉对方。 输入 无输入。 输出 按给定顺序和格式输出所有八皇后问题的解(见Sample Output)。 样例输入 样例输…

汇舟问卷:海外问卷调查怎么样?

越来越多的企业决定采用线上调查的方式来了解消费者的意愿。这种转变不仅反映了科技发展的必然趋势,也凸显了企业对市场动态和消费者需求的高度重视。 线上调查能够覆盖更广泛的受众群体,通过互联网的普及,企业可以轻松地触及全国各地的消费…

HackTheBox-Machines--MonitorsTwo

文章目录 0x01 信息收集0x02 CVE-2022-46169 漏洞利用0x03 权限提升0x04 提升到root权限 MonitorsTwo 测试过程 0x01 信息收集 a.端口扫描: 发现22、80端口    b.信息收集: 1.2.22 Cacti信息收集 nmap -sC -sV 10.129.186.1321.访问 10.129.186.132,为 1.2.22 Ca…

Vue pdfjs

最终效果图 官网 https://mozilla.github.io/pdf.js 下载 放入项目 vue页面嵌入本地下载好的html sessionStorage.setItem(sdfDldj8KJ45SDF, encodeURIComponent(file_url)) <template><div style"height:100%"><iframe:id"1":key"…

vue快速入门(二十一)计算属性

注释很详细&#xff0c;直接上代码 上一篇 新增内容 计算属性的基本应用 源码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.…

OceanBase V4.2 MySQL模式下,如何通过DBLINK实现跨数据源访问

概述 跨数据源访问可通过 DBLINK&#xff08;以下简称DBLINK&#xff09;实现&#xff0c;从而使得业务代码能够像访问本地数据库一样轻松访问远端数据库。原先&#xff0c;DBLINK主要服务于Oracle模式&#xff0c;但由于OceanBase 的MySQL模式租户同样存在访问远端数据库的需…

C语言 | Leetcode C语言题解之第26题删除有序数组中的重复项

题目&#xff1a; 题解&#xff1a; int removeDuplicates(int* nums, int numsSize) {if (numsSize 0) {return 0;}int fast 1, slow 1;while (fast < numsSize) {if (nums[fast] ! nums[fast - 1]) {nums[slow] nums[fast];slow;}fast;}return slow; }

【机器学习】深入剖析贝叶斯算法原理及其广泛应用

一、引言 在机器学习的广阔领域中&#xff0c;贝叶斯算法以其独特的概率推理方式占据了重要的地位。它不仅为分类问题提供了有效的解决方案&#xff0c;还在自然语言处理、信息检索、垃圾邮件过滤等诸多领域发挥着不可替代的作用。 贝叶斯算法的基本思想源于贝叶斯定理&#xf…

leetcode热题100.爬楼梯(从二进制到快速幂)

Problem: 70. 爬楼梯 文章目录 题目思路Code复杂度 题目 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 示例 1&#xff1a; 输入&#xff1a;n 2 输出&#xff1a;2 解释&#xff1a;有两种方…

java智慧校园系统源码saas电子班牌固件安卓7.1+Java Android原生系统源码

java智慧校园系统源码saas电子班牌固件安卓7.1&#xff0b;Java Android原生系统源码 智慧校园是促进信息技术与教育教学深度有效融合、提高学与教的效果为目的&#xff0c;以物联网、云计算、大数据分析等新技术为核心技术&#xff0c;提供一种环境全面感知、智慧型、数据化、…

SaaS知识库哪些比较好用?中小企业也能适用

在快节奏的商业世界中&#xff0c;拥有一个高效、易于使用的知识管理工具是提升工作效率的关键。对于中小企业来说&#xff0c;选择合适的SaaS&#xff08;软件即服务&#xff09;知识库平台尤为重要&#xff0c;因为它不仅能帮助员工快速找到信息&#xff0c;而且还能优化客户…

[react] useState的一些小细节

1.无限循环 因为setState修改是异步的,加上会触发函数重新渲染, 如果代码长这样 一秒再修改,然后重新触发setTImeout, 然后再触发,重复触发循环 如果这样呢 还是会,因为你执行又会重新渲染 2.异步修改数据 为什么修改多次还是跟不上呢? 函数传参解决 因为是异步修改 ,所以…

TCP协议简单总结

TCP&#xff1a;传输控制协议 特点&#xff1a;面向连接、可靠通信 TCP的最终目的&#xff1a;要保证在不可靠的信道上实现可靠的传输 TCP主要有三个步骤实现可靠传输&#xff1a;三次握手建立连接&#xff0c;传输数据进行确认&#xff0c;四次挥手断开连接 三次握手建立可靠…

每日一题---OJ题: 环形链表

片头 嗨! 小伙伴们,大家好! 今天我们来讲讲这道OJ题----环形链表,准备好了吗? 我们开始咯! 题目似乎有点抽象,我们举几个例子哈 上图中,总共有4个结点,分别为 3, 2, 0, -4, 链表中有一个环,尾结点连接到第二个结点。 上图中,总共有2个结点,分别为 1, 2, 链表中有一个环, 尾结…

抖音小店选品必经五个阶段,看你到哪一步了,直接决定店铺爆单率

大家好&#xff0c;我是电商笨笨熊 新手选品必经的阶段就是迷茫期&#xff0c;不知道怎么选品&#xff0c;在哪里选品&#xff0c;选择什么样的品&#xff1b; 而有些玩家也会在进入店铺后疯狂选品&#xff0c;但是上架的商品没有销量&#xff1b; 而这些都是每个玩家都要经…

JAVA也有自己的大模型生态

说到大模型好像已经绑定了Python语言&#xff0c;现在其他语言也有大模型生态了&#xff0c;它就是Spring AI 官网介绍&#xff1a;https://spring.io/projects/spring-ai#overview github&#xff1a;https://github.com/spring-projects/spring-ai 简单介绍 Spring AI 是 A…

SSL证书添加与ICP备案,对于SpringBoot的要求

配置了SSL证书之后&#xff0c;在SpringBoot的resources文件夹里的application.properties会添加以下代码&#xff1a; server.port443 不需要添加server.address。不然会报错。 https类型的请求默认在Postman里面不可请求。 经过SSL证书处理的网页&#xff0c;链接中使默认…

成为摄影拍照高手,摄影技术进阶秘籍

一、资料前言 本套摄影高手资料&#xff0c;大小2.02G&#xff0c;共有57个文件。 二、资料目录 DSLR数码单反摄影圣经.pdf photoshop超细的人像后期磨皮及专业美化.docx “失传”的人像拍摄绝技.doc 白加黑减.怎样应用曝光补偿.pdf 标准镜头秘笈&#xff1a;标准镜如何…

CSS3 常用样式

个人主页&#xff1a;学习前端的小z 个人专栏&#xff1a;HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结&#xff0c;欢迎大家在评论区交流讨论&#xff01; 文章目录 ✍CSS3 常用样式&#x1f48e;1 CSS3 新增选择器&#x1f339;1.1 属性选择器…

002 若依管理系统前端vue3讲解 - svg雪碧图

小何hdc 跟着小何学编程 ☉本文由小何整理首发&#xff0c; 版权归本公众号所有&#xff0c; 如有侵犯&#xff0c;请自行删除&#xff01; svg雪碧图 安装vite-plugin-svg-icons pnpm install vite-plugin-svg-icons -D 配置 src\main.js import { defineConfig } fr…