【人脸生成】HiSD-通过层级风格解耦实现图到图的迁移

2023-11-11

Image-to-image Translation via Hierarchical Style Disentanglement

  • 厦大,西交,腾讯
  • 清晰易读
  • 用公布的模型在自有数据上实测不及预期,但仍是值得尝试的方法

这是我看的第一篇人脸生成相关的论文,对这个领域不熟悉,因此会更多关注该领域的问题,做法,套路。乍一看这个标题,可能是想把一张图里的风格(style)迁移到另一张图,把这些风格按层级划分,目的是解耦同一张图里的风格,这里的图指的是人脸,进一步你就能想到,人脸上有多种风格,解耦它们是为了可控地只迁移一种特定的风格,同时要维持其他风格不变。

image-to-image translation图到图迁移领域, 一般要解决两个问题:根据多种label转换图片——multi-label task,和生成多种风格的丰富的的图片——multi-style task。

  • multi-style: 目标是生成多种多样的tag相关的风格图片,如生成某人多种戴眼镜的图片,生成某人不同刘海的图片,在本论文里,风格用style code表述(风格编码,一组向量)可以是latent code随机生成的, 也可以是从参考图中抽取,分为两个子任务
    • latent-guided task: latent code是GAN里的z向量,服从高斯分布的随机值,作用是帮助随机生成style code(风格编码), 如下图把戴眼镜这个风格迁移到input中来,生成同一人戴多种眼镜的随机图片。
      • 在这里插入图片描述
    • reference-guided task: 从参考图中提取指定tag的风格,如下图中把参考图里刘海的风格迁移到input上来,生成同一人多种刘海风格的图片。
      • 在这里插入图片描述
  • multi-label: 目的是把输入图片变成指定风格的图片,如把某人的头发变成金色,把给某人带上某款眼镜,头发梳成某种样式。分为两个子任务
    • multi-attribute task: 将某tag下指定的多种属性的style迁移到input中来。比如下图把tag发色下属性为黑和棕色的风格迁移到input中来,生成同一人,发色tag下为某种属性的图片。
      • 在这里插入图片描述
    • multi-tag task: 将多种tag的风格迁移到input中来,如下图把横向参考图中的眼镜的风格,以及纵向参考图中刘海的风格迁移到input中来,生成的图片同时有眼镜和刘海的风格。
      • 在这里插入图片描述

对比SDIT, StarGANv2: SDIT的发色,眼镜,刘海共享一个编码空间,style code和目标label concat, 一起给到生成器去合成图片。StarGANv2学习混合的风格,再用目标label去索引style code, 它有一个多分支的mapping网络以latent code为输入,每个分支各输一个style code, 再根据目标label去索引用哪一个style code, 相应的,编码器,判别器都有多个分支。
在这里插入图片描述
他们认为过去的迁移方法经常带来不必要的修改,如把人换了,或者改变背景。此外还不能独立地学习如刘海,眼镜,发色的风格。这种不可控的迁移严重制约了实际使用。于是他们

  • 层级地组织标签,分为相互独立的tags, 互斥的attributes
  • 重新设计了模块,步骤,目标,一套适用层级风格标签的框架

从论文的图1看,他们把人脸图的原始label转化为层级的tags和attributes, 在标注上解耦了: 刘海,眼镜,发色的风格(他们用的CelebA-HQ数据集就只有这些标注)。
在这里插入图片描述
对于一张图, x i , j x_{i,j} xi,j表示它是带有tag i下属性j的图片. s i , j s_{i,j} si,j 表示该属性的style code。
他们的框架由以下模块组成

  • Mapper module (M): 风格映射器,作用是随机产生指定风格的style code。给定latent code z ∼ N ( 0 , 1 ) z \sim N(0,1) zN(0,1), 以及tagi下的属性j, mapper生成style code s i , j = M i , j ( z ) s_{i,j}=M_{i,j}(z) si,j=Mi,j(z),这里i,j是M的下标,而非输入,表明根据i,j被用来索引使用哪个风格映射器,有的用于随机生成金发风格,有的用于随机生成斜刘海风格。
  • Extractor module (F): 风格提取器,作用是从图片种抽取指定的风格,比如一个发色为金色的图片,通过发色风格提取器后,提取出发色为金色的style code。给定图片 x i , j x_{i,j} xi,j和tag i, extractor从图片种抽取出tagi的风格 s i , j = F i ( x i , j ) s_{i,j}=F_{i}(x_{i,j}) si,j=Fi(xi,j),这里的F以i为下标,也表明有多个风格提取器,有的用于提取发色的风格,有的用于提取刘海的风格。
  • Encoder module (E): 图片编码器,作用是把图片转为编码,以便于用转换器T去修改图片风格, e = E ( x ) e=E(x) e=E(x),e所在的空间才是可以修改风格的空间。
  • Translator module (T): 风格转换器,它以图片编码e和风格编码s为输入,把图片修改为对应风格的编码, e ~ = T i ( e , s i , j ) \tilde{e}=T_i(e,s_{i,j}) e~=Ti(e,si,j),T是可以作用多次的,修改多个风格。这里的T以i为下标,也表明有多个风格转换器,有的用来转换眼镜风格,有的用于转换刘海风格。
  • Generator module (G): 图像生成器,它以图片编码(包括修改后的)为输入,生成风格被修改后的图像, x ~ = G ( e ~ ) \tilde{x}=G(\tilde{e}) x~=G(e~)
  • Discriminator module (D): 图像判别器,它对图像是否为真实图像分类,目的是促进对抗训练生成逼真的图像。

这些模块被独立优化,训练时随机采样tag i, 原始属性j, 目标属性 j ~ \tilde{j} j~, 给定原始图片 x i , j x_{i,j} xi,j, 该框架的训练阶段包括
在这里插入图片描述

  • Non-translation path: 非迁移路径,希望图像编码后还能再生成原图,得到第一张重建图像
    • x i , j ′ = G ( E ( x i , j ) ) x'_{i,j}=G(E(x_{i,j})) xi,j=G(E(xi,j))
  • Self-translation path: 自迁移路径,希望在图像编码上使用自身的风格编码修改后还能生成原图,得到第二张重建图像
    • s i , j = F i ( x i , j ) s_{i,j}=F_i(x_{i,j}) si,j=Fi(xi,j)
    • x i , j ′ ′ = G ( T ( E ( x i , j ) , s i , j ) ) x''_{i,j}=G(T(E(x_{i,j}), s_{i,j})) xi,j′′=G(T(E(xi,j),si,j))
  • Cycle-translation path: 循环迁移路径,希望图像风格被修改后再改回来原风格还能生成原图,得到第三张重建图像
    • s i , j ~ = M i , j ~ ( z ) s_{i,\tilde{j}}=M_{i,\tilde{j}}(z) si,j~=Mi,j~(z)
    • x i , j ~ = G ( T ( E ( x i , j ) , s i , j ~ ) ) x_{i,\tilde{j}}=G(T(E(x_{i,j}),s_{i,\tilde{j}})) xi,j~=G(T(E(xi,j),si,j~))
    • x i , j ~ ′ ′ ′ = G ( T ( E ( x i , j ~ ) , s i , j ~ ) ) x'''_{i,\tilde{j}}=G(T(E(x_{i,\tilde{j}}),s_{i,\tilde{j}})) xi,j~′′′=G(T(E(xi,j~),si,j~))

该框架的损失函数包含

  • 对抗损失:从希望生成的图片能以假乱真的角度看,判别器尽量分错,第2,3项用到了第2,3张重建图,如果它们逼真,代表提取器F, 映射器M, 转换器T能学习的比较好。
    • L a d v = 2 E i , j , x [ log ⁡ ( D i , j ( x i , j ) ) ] L_{adv}=2\mathbb{E}_{i,j,x}[\log({D_{i,j}(x_{i,j})})] Ladv=2Ei,j,x[log(Di,j(xi,j))]
    • + E i , j , x , j ~ , z [ log ⁡ ( 1 − D i , j ~ ( x i , j ~ ) ) ] +\mathbb{E}_{i,j,x,\tilde{j},z}[\log(1-{D_{i,\tilde{j}}(x_{i,\tilde{j}})})] +Ei,j,x,j~,z[log(1Di,j~(xi,j~))]
    • + E i , j , x , j ~ , z [ log ⁡ ( 1 − D i , j ( x ~ i , j ′ ′ ′ ) ) ] +\mathbb{E}_{i,j,x,\tilde{j},z}[\log(1-{D_{i,j}(\tilde{x}'''_{i,j})})] +Ei,j,x,j~,z[log(1Di,j(x~i,j′′′))]
  • 重建损失,希望每张重建图都和原图保持一致性:
    • L r e c = E i , j , x [ ∣ ∣ x i , j ′ − x i , j ∣ ∣ 1 ] L_{rec}=\mathbb{E}_{i,j,x}[||x'_{i,j}-x_{i,j}||_1] Lrec=Ei,j,x[∣∣xi,jxi,j1]
    • + E i , j , x [ ∣ ∣ x i , j ′ ′ − x i , j ∣ ∣ 1 ] +\mathbb{E}_{i,j,x}[||x''_{i,j}-x_{i,j}||_1] +Ei,j,x[∣∣xi,j′′xi,j1]
    • + E i , j , x , j ~ , z [ ∣ ∣ x i , j ′ ′ ′ − x i , j ∣ ∣ 1 ] +\mathbb{E}_{i,j,x,\tilde{j},z}[||x'''_{i,j}-x_{i,j}||_1] +Ei,j,x,j~,z[∣∣xi,j′′′xi,j1]
  • 风格损失,希望从修改风格后的图提取风格,和我们期望的风格一致:
    • L s t y = E i , j , x , j ~ , z [ ∣ ∣ F i ( x i , j ~ ) − s i , j ~ ∣ ∣ 1 ] L_{sty}=\mathbb{E}_{i,j,x,\tilde{j},z}[||F_i(x_{i,\tilde{j}})-s_{i,\tilde{j}}||_1] Lsty=Ei,j,x,j~,z[∣∣Fi(xi,j~)si,j~1]
  • 总优化目标:
    • m i n E , G , T , F , M m a x D L a d v + λ r e c L r e c + λ s t y L s t y \underset{E,G,T,F,M}{min} \underset{D}{max}{L_{adv}+\lambda_{rec}L_{rec}+\lambda_{sty}L_{sty}} E,G,T,F,MminDmaxLadv+λrecLrec+λstyLsty

为了避免对图片进行全局的修改,希望修改只专注于表征风格的局部特征上,

测试时的流程如下, 先生成风格编码,代表你要给图片带来什么风格。style code可以来自latent code, 通过风格映射器M映射到style code的空间,得到很多随机的style code, 也可以从图片中使用风格提取器F抽取
在这里插入图片描述
随后流程都是一样的,编码 -> 修改 -> 生成,比如生成多个刘海图片,用刘海映射器M(i=刘海,j=有)生成很多风格编码喂给转换器T。要生成黑发棕发也只需把相应的风格编码喂给T。要生成带有不同tag的风格图像时,需要不同tag的风格编码,分别使用对应tag的风格转换器,分多次修改编码。
在这里插入图片描述
为了避免全局修改,使修改只作用在感兴趣的局部,而不改变背景光照等,比如戴眼镜只作用在眼睛部位,他们引入了基于特征的局部转换器(Feature-based Local Translator), Translator除了输出修改后的特征e外,还会输出同样大小的m,f, 其中m用于产生注意力的mask, f的作用尚不清楚,转换后的最终输出为
σ ( m ) ⋅ e + ( 1 − σ ( m ) ) ⋅ f \sigma(m) \cdot e + (1-\sigma(m)) \cdot f σ(m)e+1σ(m))f

另一方面,他们觉得在不同性别,年龄这些和tag无关的标签下,tag的属性是不平衡的,他们把这些和tag无关的标签作为判别器的参数,使判别器注意到这种不平衡,并激励转换器不要修改tag无关的条件(????不懂)
L a d v ′ = 2 E ∗ i , j , x [ log ⁡ ( D ∗ i , j ( x i , j , y i ) ) ] L'_{adv}=2\mathbb{E}*{i,j,x}[\log({D*{i,j}(x_{i,j},y_i)})] Ladv=2Ei,j,x[log(Di,j(xi,j,yi))]
+ E ∗ i , j , x , j ~ , z [ log ⁡ ( 1 − D ∗ i , j ~ ( x i , j ~ , y i ) ) ] +\mathbb{E}*{i,j,x,\tilde{j},z}[\log(1-{D*{i,\tilde{j}}(x_{i,\tilde{j}},y_i)})] +Ei,j,x,j~,z[log(1Di,j~(xi,j~,yi))]
+ E ∗ i , j , x , j ~ , z [ log ⁡ ( 1 − D ∗ i , j ( x ~ i , j ′ ′ ′ , y i ) ) ] +\mathbb{E}*{i,j,x,\tilde{j},z}[\log(1-{D*{i,j}(\tilde{x}'''_{i,j},y_i)})] +Ei,j,x,j~,z[log(1Di,j(x~i,j′′′,yi))]
他们评价这个工作的好坏,考虑三个方面
在这里插入图片描述

  • 真实性(Realism FID):如对每张不带刘海的测试图,用随机生成的5个带刘海的style code(for latent-guided task)或随机从5张带刘海的图片中抽取style code(for reference-guided task)转化为带刘海的图片,计算这些图片和真实带刘海图片的FID(Frechet inception distance, 它Inception网络来提取特征,然后使用高斯模型对特征空间进行建模,再去求解两个特征之间的距离,较低的FID意味两组图片的特征分布越接近), FID越小说明生成的刘海图片越像真的刘海图片。
  • 多样性(Diversity User Study%):他们使用用户调查的方式评价多样性
  • 解耦(Disentanglement FID):如转换无刘海的年轻男性图片成有刘海的,并用这些转换图片和真实的有刘海的年轻男性图片计算FID. 如果转换后的图片的tag无关属性,如性别变化了,那么FID就会很高
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【人脸生成】HiSD-通过层级风格解耦实现图到图的迁移 的相关文章

随机推荐

  • 深入理解web安全攻防策略

    前言 互联网时代 数据安全与个人隐私信息等受到极大的威胁和挑战 本文将以几种常见的攻击以及防御方法展开分析 1 XSS 跨站脚本攻击 定义 通过存在安全漏洞的Web网站注册用户的浏览器内运行非法的HTML标签或JavaScript进行的一种
  • VS视图菜单中找不到服务器资源管理器怎么办?

    http www cnblogs com SissyNong archive 2011 06 18 1981970 html 前几天同事安装了VS2010后 发现视图菜单中根本就没有服务器管理器这一项 如果想打开服务器管理器 都要使用快捷键
  • 区块链共识算法的发展现状与展望

    区块链共识算法的发展现状与展望 袁勇等 1 传统分布式一致性算法 2 主流区块链共识算法 3 共识算法的模型与分类 4 区块链共识算法的新进展 4 1 主线 1 PoW 与 PoS 算法的有机结合 4 2 主线 2 原生 PoS 算法的改进
  • 翻转数组

    题目描述 给定一个长度为n的整数数组a 元素均不相同 问数组是否存在这样一个片段 只将该片段翻转就可以使整个数组升序排列 其中数组片段 l r 表示序列a l a l 1 a r 原始数组为 a 1 a 2 a l 2 a l 1 a l
  • 数据挖掘顶级比赛---综合整理

    整理所有可以参加的数据挖掘顶级比赛 1 DrivenData https www drivendata org 2 CrowdANALYTIX https www crowdanalytix com solutions community
  • loss-FSCE 小样本识别

    FSCE Few Shot Object Detection via Contrastive Proposal Encoding 以Faster RCNN 作为小样本目标检测的基本框架 采用两阶段的训练方法 第一阶段的训练集是大量标注的基本
  • OpenCV4 视频目标检测 场景文本检测 手写数字识别 案例

    转载 一直想找本书 能在机器学习复杂的算法原理和高效的编程实战之间达到合适的平衡 让感兴趣的同学拿到就有能用的代码 还有基本原理的介绍 因为了解原理才知道什么时候用什么算法最合适 以及如何调整参数 一直没找到合适的 所以动手写了一本 p 拖
  • 片内外设、片上外设和片外外设的区别

    片内外设就是片上外设 同一种意思不同说法而已 片内外设和片外外设的区别 片内 外设是两个概念 片内指做成芯片的集成电路内部 简称片内 片外同理显而易见 外设是外部设备的简称 是指集成电路芯片外部的设备 集成电路芯片与外部设备的连接一般需要专
  • 2023.6.3 华为机试题小记(附c++题解)

    华为机试小记 导语 进阶题 堆积木 200分 思路 代码 基础题一 寻找最后一个匹配子序列的下标 100分 思路 代码 基础题二 种植白杨树 100分 思路 导语 机试一共三个题 分为两个基础题和一个进阶题 两个基础题各100分 进阶题20
  • 数字统计 题解(c++)

    先看题目 当然 你可以看原题 题目描述 请统计某个给定范围 L R L R L R 的所有整数中 数字 2 2 2 出现的次数 比如给定范围 2 22 2 22 2 22 数字 2 在数 2 中出现了 1 1 1 次 在数 12 中出现 1
  • matlab获取矩阵的行数与列数

    matlab里面与其他高级语言里面获取数据的长度length方法不一样 matlab里面通过size 矩阵变量 返回一个 行数m 列数n 比如一个m n的矩阵A 通过size A 可以得到 m n 通过size A 1 可以得到行数m 通过
  • 关于如何使用neo4j-admin工具批量导入已处理好的csv数据(neo4j 社区版 5.5)

    数据格式有两种 一个是节点 一个是关系 节点类型数据头格式 xxx ID name LABEL 关系类型数据头格式 START ID END ID TYPE 这里不多赘述关于csv数据处理的问题 可以通过搜索找相关资料 本文主要解决的问题是
  • LSTM原理图解

    在解释LSTM原理前先来理解一下RNN的原理 RNN基本原理 原理简介 当我们处理与事件发生的时间轴有关系的问题时 比如自然语言处理 文本处理 文字的上下文是有一定的关联性的 时间序列数据 如连续几天的天气状况 当日的天气情况与过去的几天有
  • sqli-labs(39关-53关)

    目录 第三十九关 第四十关 第四十一关 第四十二关 第四十三关 第四十四关 第四十五关 第四十六关 第四十七关 第四十八关 第四十九关 第五十关 第五十一关 第五十二关 第五十三关 第三十九关 id 1 and 1 1 id 1 and 1
  • 图像处理-双边滤波原理

    双边滤波 Bilateral filter 是一种可以去噪保边的滤波器 之所以可以达到此效果 是因为滤波器是由两个函数构成 一个函数是由几何空间距离决定滤波器系数 另一个由像素差值决定滤波器系数 原理示意图如下 双边滤波器中 输出像素的值依
  • Midjourney如何集成到自己(个人/企业)的平台(二)

    前面一篇写了需要准备东西 如何注册discord平台账号 如何登录discord创建个人服务器把Midjourney机器人授权添加到个人服务器中 并且开通订阅 这篇文章主要讲如何自定义机器人 设置自定义机器人 并授权添加到个人服务器中 1
  • 【Arthas】Arthas mc内存动态编译原理

    1 概述 转载 Arthas mc内存动态编译原理 2 开篇 Arthas支持通过mc命令进行java文件的内存动态编译 mc Memory Compiler 内存编译器 编译 java文件生成 class 从JDK1 6开始引入了Java
  • 手握6项特许经营权,慧居科技如何展现“光与热”?

    作为国内三北地区第二大跨省供热服务供应商 慧居科技在7月10日即将港股上市 尽管目前受经济影响 港股市场处在低迷状态 但供热行业作为公用事业板块属刚性需求 由于受经济周期影响小 经营业绩稳定 反而成为市场的优质板块 吸引了不少的资本关注 7
  • Mac 电脑鼠标和触摸板滚动方向不一致的问题【已解决】

    当我们使用鼠标连接到 MacBook 时 会发现无论怎么设置 鼠标和触摸板的滚动方向都是相反的 导致不能同时使用鼠标和触摸板 解决方法 我安装了下面的程序 它只允许您反转鼠标的滚动行为 Scroll Reverser for Mac OS
  • 【人脸生成】HiSD-通过层级风格解耦实现图到图的迁移

    Image to image Translation via Hierarchical Style Disentanglement 厦大 西交 腾讯 清晰易读 用公布的模型在自有数据上实测不及预期 但仍是值得尝试的方法 这是我看的第一篇人脸