学习笔记:SemanticStyleGAN 面向可控图像合成和编辑的组合生成先验学习

2023-11-01

[CVPR-2022] SemanticStyleGAN: Learning Compositional Generative Priors for Controllable Image Synthesis and Editing 面向可控图像合成和编辑的组合生成先验学习


项目主页:https://semanticstylegan.github.io/
论文链接:https://arxiv.org/abs/2112.02236
代码链接:https://github.com/seasonSH/SemanticStyleGAN

摘要

最近的研究表明,StyleGANs为图像合成和编辑的下游任务提供了有前途的先验模型。然而,由于StyleGANs的潜在代码设计用于控制全局样式,因此很难实现对合成图像的细粒度控制。我们提出了SemanticStyleGAN,它训练生成器分别对局部语义部分进行建模,并以组合的方式合成图像。不同局部部分的结构和纹理由相应的潜码控制。实验结果表明,我们的模型在不同的空间区域之间提供了较强的解纠缠性。当与为StyleGANs设计的编辑方法相结合时,它可以实现更细粒度的控制来编辑合成的或真实的图像。该模型还可以通过迁移学习扩展到其他领域。因此,作为一种内置解纠缠的通用先验模型,它可以促进基于GAN的应用程序的开发,并支持更多潜在的下游任务。

1. 背景

  • 近年来关于生成对抗网络(GAN)的研究在图像合成方面取得了令人瞩目的进展,通过潜在空间中的随机编码可以生成逼真的图像。这些模型通过充当神经渲染器,为下游任务提供强大的生成先验。(神经渲染:通过深度的图像或视频生成方法,实现对一些场景属性的显式或隐式控制,例如照明、相机参数、姿势、几何、外观和语义结构)

  • 在此类生成先验中最著名的工作之一是StyleGAN,通过在StyleGAN的潜在空间中学习线性边界或神经网络,可以控制生成图像的全局属性或3D结构。然而在实际应用中,一个重要的问题在于它的潜在空间是基于图像尺度来分解的,这使得StyleGAN擅长做全局风格的控制,却不利于局部编辑。

针对这个问题,本文提出了一种以可控方式合成图像的新型生成对抗网络模型——SemanticStyleGAN。与以往的GAN网络不同,它的潜在空间是基于语义分割掩码定义的语义部分进行分解的。每个语义部分都用相应的局部潜码单独调制,并通过组合局部特征图来合成图像。该模型能够使得潜在空间在不同的语义局部上解纠缠,进而实现局部的风格变换。

下图展示了本文模型的合成结果,最左侧一列是原始图像,最上面一行是想要从中迁移局部特征的图像,例如背景、皮肤、眼睛等。以最后一列的“Hair”为例,合成的图像只改变了头发这一个特征,而其他不相关的区域特征则保持不变。

图0


2. 方法

2.1 整体框架

图2-2

  1. 首先,一个8层MLP将随机采样的向量 z z z映射到中间潜码w;

  2. 然后,引入K个局部生成器 ,利用潜码w对不同的语义部分进行建模,每个局部生成器 g g g以傅里叶特征为输入,输出一个特征图 f 和一个伪深度图 d;

  3. 然后将它们聚合成一个全局特征图 f 和一个粗分割掩码m用于图像合成;

  4. 渲染网络R接收来自局部生成器的聚合结果,并输出RGB图像和相应的语义分割掩码;

  5. 最后,双分支判别器对RGB图像和语义分割掩码的联合分布进行建模,完成对抗学习。

下面具体讲一下这几个模块。

2.2 局部生成器

图中是局部生成器的架构。每个局部生成器都是一个具有10层的调制MLP,它以傅立叶特征和潜码w作为输入,输入的傅里叶特征首先被转换为具有线性全连接层的隐藏特征图。为了降低计算成本,输入的傅里叶特征图以及输出的特征图都小于最终输出图像,本文选择了64×64以平衡效率和质量。

图3

  • 蓝色块是调制的1×1卷积层,它的权重取决于输入的潜码;

  • 紫色块是全连接层, “toDepth”层是输出1通道伪深度图的全连接层, “toFeat”是一个输出512通道特征图的全连接层;

  • 这里的wbase是控制粗略结构的共享潜码。每个局部潜码wk 控制分割标签中定义的第k个语义区域的形状和纹理,每个wk又进一步被分解为一个形状编码wks和一个纹理编码wkt 。 在训练期间,风格混合在wbase、wks 和wkt 之间的每个局部生成器中独立进行,这样不同的局部部分和不同的形状和纹理可以协同工作以进行合成。

通过局部生成器,我们得到特征图 fk 和伪深度图 dk

2.3 聚合

聚合
在聚合步骤中,首先从伪深度图生成粗分割掩码mmk(i, j)表示第k类掩码m中的像素(i, j):

公式1
然后聚合特征图,⊙表示逐元素乘法:

公式2
聚合的特征图 f 包含有关输出图像的所有信息,接下来就将特征图 f 送入渲染网络R进行渲染。

2.4 渲染网络

渲染网络R类似于原始的StyleGAN2生成器,但做了一些修改。 首先,它不使用调制卷积层,输出完全取决于输入特征图。 另外,本文以16×16和64×64的分辨率输入特征图,其中特征连接以64×64进行。这里多输入一个16×16的特征图的原因是,低分辨率特征图的额外输入可以更好地聚合不同的局部部分。

并且作者发现,由于softmax输出和真实分割掩码之间的内在差距,直接使用粗分割掩码m进行训练是比较困难的。因此,除了每个卷积层之后的ToRGB分支外,还加入一个额外的ToSeg分支,对分割掩码进行上采样和残差操作,来细化粗分割掩码。 这里需要一个正则化损失,以便最终掩码不会与粗略掩码偏离太多。最后就得到了生成的RGB图像和细化后的最终掩码。

图3-1

“ConvBlock”是具有2个卷积层的StyleGAN2卷积块,⊕表示上采样和求和。

2.5 双分支判别器

在本模型中,判别器需要将RGB图像和分割掩码作为输入。由于分割掩码上的大梯度幅度,简单的连接不起作用,因此作者使用了一个双分支判别器,它有两个卷积分支分别用于RGB图像和分割掩码,然后对全连接层的输出求和。

图15
“残差块”是卷积层; 除输入通道外,图像分支和分割分支是对称的;“连接标准”是计算标准差的步骤。如果删除分割分支,这个判别器就等同于StyleGAN2的判别器。


3. 实验

3.1 语义感知和解纠缠生成

3.1.1 合成质量的定量评估

对于合成质量,作者将本文的模型与StyleGAN2和SemanticGAN进行比较。原始StyleGAN2既不模拟分割掩码也不提供局部可控性,将其作为合成质量的上限进行比较;SemanticGAN将StyleGAN2修改为联合训练框架,以输出图像和分割掩码。所有模型都在调整为 256×256 的CelebAMask-HQ的前28,000张图像上进行训练。

表1

“img”和“seg”分别指RGB图像和分割掩码。Fréchet Inception Distance(FID)和 Inception Score(IS)用于衡量合成质量,箭头向下就表示数值越小越好,箭头向上就表示数值越大越好。

  • 与原始StyleGAN相比,SemanticGAN的质量要低得多,这表明学习图像和分割掩码的联合模型是一项具有挑战性的任务;

  • 假设SemanticGAN的主要瓶颈是用于学习分割掩码的附加补丁判别器,我们将其替换为提出的双分支判别器,新的训练框架获得了更好的综合分数;

  • 进一步用本文的SemanticStyleGAN生成器替换SemanticGAN生成器,与SemanticGAN生成器相比,本文的模型显示出相似的合成质量,同时在每个语义区域上提供了额外的可控性。

作者还将模型扩展到 512×512 分辨率,并分别实现了 7.22 和 3.47 的 FID 和 IS。作为参考,StyleGAN2生成器的 FID 和 IS 分别为 6.47 和 3.55。

3.1.2 模型的成分聚合

图中解释了本文模型的成分聚合,也就是拆分一下各局部生成器的生成结果。从背景开始,逐渐将更多的组件添加到特征图中。

图4
第一行是合成的RGB图像,最后一行是分割掩码。第二行显示的是用于聚合的每个相应组件的伪深度图。在合成过程中,所有的伪深度图都没有按顺序融合在一起,这就表明这些局部生成器可以独立工作来生成语义部分。虽然缺乏3D监督,但伪深度图学习了有意义的形状,可以用来协作组成不同的人脸。

3.1.3 通过傅里叶特征操作进行图像合成和转换

与生成完整图像的传统GAN网络不同,这样的合成过程还允许本文的模型仅生成前景并通过操纵傅里叶特征来控制它。

图6
如图所示,这里的真实图像用作合成的背景,并反转为特征图。然后可以在特征空间中在这张真实图像上合成前景,也就是人脸图像。前景的位置和大小可以通过傅里叶特征来控制,比如平移、缩小。

3.1.4 整个潜在空间和指定子空间的潜在插值结果

图7

  • 第一行显示本文的模型可以在两个随机采样的图像之间平滑插值;

  • 另外,我们可以通过更改相应的潜码来对特定的语义区域进行插值,例如背景、脸或者头发,同时固定其他不相关的部分。以第三行的“Face”为例,这里的“Face”是指与脸相关的所有组成部分,包括眼睛、嘴巴还有皮肤。从图中可以看到,只有与脸有关的部分有改变,而与脸无关的部分,例如背景和头发就没有发生变化。

这个实验结果表明,本文的模型已经为语义编辑学习了一个平滑且解开的潜在空间。

3.1.5 局部潜在空间中的随机抽样

图8-1
中间列显示随机采样的人脸,前后两列分别显示了改变形状和纹理编码的结果。即使在训练期间没有明确的约束,本文的模型也可以解开大多数局部形状和纹理。

3.2 控制合成和图像编辑

接下来作者在下游编辑任务上评估本文的模型,并将其与StyleGAN2进行比较。

3.2.1 重建性能的定量评估

为了评估真实图像的编辑结果,首先需要将这些图像嵌入到潜在空间中。在这里,作者使用Restyle(psp)编码器对重建性能进行定量评估。底部两行(StyleGAN2 和 Ours)在 CelebAMask-HQ 的同一拆分上进行训练。

表2
表中展示了图像重建的定量结果。虽然在各个指标上并没有明显的提升,但差距很小,因此可以表明本文的模型在重建方面取得了可比的性能。

3.2.2 反演和编辑结果

本文的模型是否可以应用于这些重建图像的局部编辑?我们选择覆盖面部图像不同部分的局部属性进行编辑实验,分别是表情、秃头、刘海和胡须,并且在未用于训练的图像上进行测试。

作者采用了为StyleGAN2提出的两种流行的编辑方法:StyleFlow 和 InterFaceGAN。这两种方法都需要生成一组假图像并标记它们的属性来训练一个潜在的操作模型。对于这两个生成器,我们随机合成50,000张图像进行标记。下图就是将这两种编辑方法应用于StyleGAN2和本文模型的定性结果。对于每个属性和方法,图中展示了Restyle编码器的反演结果、编辑后的图像以及它们之间的差异图。

图9
从RGB图像上看,差距不是很明显,但从右侧的图看就比较直观了。例如最后一行的胡须,StyleGAN2虽然能够完成指定语义区域的改变,但由于潜在空间中的纠缠,不相关的部分也或多或少地有所变动。相比之下,本文的模型就只关注特定的语义区域。

3.2.3 文本引导合成

图中是顺序编辑下的文本引导图像合成结果。

图11
第一行是StyleGAN2应用基于优化的StyleCLIP的结果,第二行是本文的模型在相同输入文本下的结果。 从图中可以看出,文本只试图改变指定的区域,但原来的StyleCLIP经常修改整个图像。而本文的模型可以将编辑限制在指定的局部区域。这个结果表明,本文的方法可能更适合用于文本引导图像合成。

3.3 其他领域的结果

从头开始训练本文的模型需要同时访问图像和分割掩码,这在某些情况下可能不可行。作者想知道这个模型是否可以在仅图像数据集上进行微调,同时保留局部解纠缠。因此在其他数据集上也进行了实验。

图12
上图展示了在另外三个数据集上(Toonify、MetFaces、BitMoji)微调后的结果。与用来训练的数据集(CelebAMask-HQ)相比,这些数据集的图像数量要少得多,并且没有分割掩码。从图中可以看出,对于仅图像数据集,本文的模型经过微调也能够保持局部可控性。

图13
虽然到目前为止都是在人脸数据集上进行的实验,但本文的方法不包括任何为人脸设计的模块,所以也可以应用于其他对象。上图就展示了在非人脸数据集(DeepFashion)上训练本文模型的结果,可以看到我们仍然可以控制不同语义部分的结构和纹理,比如说头发,还有身上的衣服。


4. 局限性

  • 适用的数据集

尽管已经证明本文的方法可以应用于人脸图像以外的其他领域,但仍然可以看到设计和监督造成的限制。 由于需要为每个类构建一个局部生成器,因此该方法无法扩展到具有太多语义类的数据集,例如场景。 此外,出于合成质量的目的,作者将SemanticGAN的半监督框架更改为全监督框架,这限制了本文的模型从头开始在仅图像数据集上进行训练。 将来开发本文方法的半监督版本将是有益的。

  • 解纠缠

由于姿势、形状和纹理之间的分离仅通过局部生成器中的层分离设计来强制执行,它们之间的边界有时仍然是模棱两可的。 例如,共享的粗略结构潜码可以编码一些关于表情的信息,而形状编码可能会影响胡须。 然而,在这项工作中,作者主要关注不同语义部分之间的空间解纠缠,相信未来可以结合额外的正则化损失或架构调整来更好地解纠缠这些信息。


5. 总结

  • 本文提出了一种以可控方式合成图像的新型生成对抗网络模型。通过设计局部生成器、掩码特征聚合以及图像和分割掩码的联合建模,来控制不同语义区域的结构和纹理。

  • 实验表明,本文的生成器可以与现有的编辑方法相结合,以更可控的方式编辑图像。并且适用于仅具有有限图像的其他领域,同时保留空间解纠缠能力。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

学习笔记:SemanticStyleGAN 面向可控图像合成和编辑的组合生成先验学习 的相关文章

  • 支付宝小程序集成mqtt兼容IOS和安卓

    1 前言 去年就想做支付宝小程序接入mqtt协议 但最终多方咨询 问客服问社区得到的答案都是支付宝小程序不能直接支持mqtt协议 偶然间发现徐宏大神的佳作 终于发现了xmqtt js这个好东西 它实现了支付宝小程序完美接入mqtt协议 设备
  • where、having、group by、order by、limit的区别和使用顺序

    where having group by order by limit的区别和使用顺序 姚文斌的博客 CSDN博客
  • 怎么让别人连接自己的数据库(MySQL)

    怎么让别人连接自己的数据库 MySQL update user set host where user root and host localhost flush privileges
  • 实现领域驱动设计----第一章

    带着问题上路 什么是领域驱动设计 是什么 为什么要做领域驱动设计 为什么要做 怎样做领域驱动设计 怎样做 其他的设计模式与领域驱动设计的区别 有类似为什么要做 但是是在取长补短的总结 译者序 就像在20世纪六七十年代出现了软件危机之后 面向
  • LINK : fatal error LNK1104: 无法打开文件“XXXXX.lib”解决方法

    1 首先我们一开始是配置包含的库目录 2 找到我们缺少XXXX lib对应的目录 确定 3 然后在链接器 输入 附加的依赖项中我们输入这个lib文件的全名 这一步按照实际情况添加 然后编译链接即可 主要原理分析 1 报错提示找不到这个lib
  • 玩转Mysql系列 - 第17篇:存储过程&自定义函数详解

    这是Mysql系列第17篇 环境 mysql5 7 25 cmd命令中进行演示 代码中被 包含的表示可选 符号分开的表示可选其一 需求背景介绍 线上程序有时候出现问题导致数据错误的时候 如果比较紧急 我们可以写一个存储来快速修复这块的数据

随机推荐

  • Ubuntu下的Nginx + Uwsgi + Django项目部署详细流程

    文章目录 前言 环境 工具 申请一个服务器 获取服务器实例 获取IP 配置安全组 配置放行端口 http www iszip com post 022714 html 连接服务器 配置用户 使用pyenv管理python版本 下载pyenv
  • sublime 搜索时忽略文件夹

    如上图 添加 folder exclude patterns 要忽略的文件夹 转载于 https www cnblogs com benchan2015 p 4949017 html
  • STM32------ADC实验

    目录 前言 一 库函数 1 ADC Init函数 2 ADC使能函数 3 ADC使能软件转换函数 4 ADC规则通道配置函数 5 ADC获取转换结果函数 6 实验目的 二 软件设计 1 adc c 2 adc h 前言 一 库函数 1 AD
  • react动态二级/三级路由操作

    一级路由就不写了 比较简单 下面是在一级页面mvvm中进行写入二级及三级路由页面 app js中进行路由配置
  • 【golang】巧用select {}阻塞main函数

    很多时候我们需要让main函数不退出 让它在后台一直执行 例如 func main for i 0 i lt 10 i 启动20个协程处理消息队列中的消息 c consumer New go c Start select 阻塞 可能大多数人
  • Leetcode304.二维区域和检索——动态规划之矩阵前缀和

    文章目录 引入 Leetcode题解 引入 接上文Leetcode10 正则表达式匹配 动态规划之一个模型三个特征 在第17次双周赛的时候 我遇到这么一道题1314 矩阵区域和 不过在此 我们先讨论该题的解法的经典题型 304 二维区域和检
  • k8s-kubeadm安装k8s

    前言 本文主要介绍Docker和Kubernetes的安装步骤 安装Docker采用官网提供的安装方式 安装k8s采用官网提供的kubeadm方式 其中镜像地址都采用了国内阿里镜像地址 k8s集群服务器初始化 准备工作 关闭防火墙 syst
  • 【C++】挖金子(黄金矿工)分析与代码实现

    帮 大一学弟 AC一道题 题面 思路 每个格子都可以作为开始节点 遍历找到最大数 可以直接用优先队列去模拟 或者用dfs 回溯 代码 include
  • python中yield总结

    总结 1 通常的for in 循环中 in后面是一个数组 这个数组就是一个可迭代对象 类似的还有链表 字符串 文件 它可以是mylist 1 2 3 也可以是mylist x x for x in range 3 它的缺陷是所有数据都在内存
  • c#如何判断两个对象是否相等

    在c 中判断对象相等 这是对引用类型进行判断 而不是对值类型 如果是对字符串 或者是数值进行判断相等只需要用 运算符就可以了 对两个对象用 运算符 只能判断他们两个在内存中的地址是否一样的 1 对一个类只实例化一次 向那些赋值来赋值去的引用
  • ab常见问题汇总

    测试服务器ab 被测试服务器apache apache版本2 2 25 问题一 socket Too many open files 24 解决 在测试服务器操作 1 查看当前系统设置 open files n 1024为1024 root
  • FPGA 时序约束 二 :创建时钟和时钟不相关约束

    创建时钟是针对代码中主时钟而言 创建时钟之前需要知道代码中的主时钟都是什么 可以在综合以后 打开综合 然后在TCL 中输入命令 report clock networks name mynetwork 确定了主时钟 就可以对其创建时钟周期约
  • win 双机mysql集群_heartbeat双机 V3 CRM实现多台mysql集群

    一 系统环境 OS AS 5 3 i386 两服务器 db ha1 10 0 3 194 db ha2 10 0 3 195 VIP 10 0 3 111 资源名称 ha mysql1 ha mysql2 fs mysql1 fs mysq
  • 将字符串“I am a student.”逆序输出为“student. a am I”

    给到一串字符 I am a student 将其输出为 student a am I 整体思路为先将整个字符串逆序为 tneduts a ma I 然后再将每个单词进行逆序转换为 student a am I 那么我们只需先写出将整个字符串
  • 数组目标值target两个整数,并返回它们的数组下标

    1 题目背景 给定一个整数数组nums和一个整数目标值target 请你在该数组中找出和为目标值target的那两个整数 并返回它们的数组下标 你可以假设每种输入只会对应一个答案 但是 数组中同一个元素在答案里不能重复出现 你可以按任意顺序
  • String 在Java中的用法详解

    认识String类 和 String的使用 1 创建字符串 1 常见的构造String的方式 2 String的基本概念 2 字符串比较相等 3 字符 字节 字符串的转换 1 字符与字符串 2 字节与字符串 4 字符串常见操作 1 字符串比
  • Java多线程和操作系统多线程关系

    这篇文章要讨论的是Java编程中的多线程和操作系统中的多线程的区别问题 线程状态 首先两者的线程状态是一样的 创建 就绪 执行 阻塞 终止 其实这五个状态也是进程的状态 那么Java中的多线程 和 OS中的多线程的区别在哪里 我们先来看下O
  • 骑士宣言

    关于骑士 有很多的妙论 在中古世纪 骑士是最耀眼的战斗力 从中也延伸出了骑士的八大美德 历来很多玩家都把骑士当作最灿烂的职业 但大家却不曾想过骑士原本是一种象征意义的精神 我们来为这八大美德宣誓 谦卑 谦虚和永远将自己放在卑微的位置是骑士的
  • RabbitMQ(二):五种模式的简单介绍

    RabbitMQ 二 五种模式的简单介绍 一 Hello World 点对点 二 Work Queues 工作队列 三 Publish Subscribe 发布订阅 四 Routing 路由 五 Topics 话题 RabbitMQ 一 C
  • 学习笔记:SemanticStyleGAN 面向可控图像合成和编辑的组合生成先验学习

    CVPR 2022 SemanticStyleGAN Learning Compositional Generative Priors for Controllable Image Synthesis and Editing 面向可控图像合