真二次元!动漫形象风格迁移

2023-10-26

点击上方“机器学习与生成对抗网络”,关注星标

获取有趣、好玩的前沿干货!

文章:机器之心

一张输入人脸图像,竟能生成多样化风格的动漫形象。伊利诺伊大学香槟分校的研究者做到了,他们提出的全新 GAN 迁移方法实现了「一对多」的生成效果。

在 GAN 迁移领域,研究人员可以构建一个以人脸图像为输入并输出人脸动漫形象的映射。相关的研究方法已经出现了很多,如腾讯微视此前推出的迪士尼童话脸特效等等。

在迁移过程中,图像的内容(content)部分可能会被保留,但风格(style)部分必须改变,这是因为同一张脸在动画中能以多种不同的方式表示。这意味着:迁移过程是一个一对多的映射,该映射可以表示为一个函数,用于接受内容代码(即从人脸图像中恢复)和风格代码(这是一种潜变量)并生成动漫脸。但是,一些重要的限制条件必须遵守。

  • 首先是控制(control):通过改变输入人脸来改变动漫人脸的内容(如动漫人脸应该随着输入人脸的转头而转头);

  • 其次是一致性(consistency):使用相同潜变量渲染成动漫的真实人脸应在风格上高度匹配(如不改变潜变量的前提下,动漫人脸不会随输入人脸的转头而改变风格);

  • 最后是覆盖范围(coverage):每个动漫人脸都可以使用内容和风格的组合来获取,这样就可以利用所有可能的动漫形象。

在近日的一项研究中,来自伊利诺伊大学香槟分校的研究者提出了一种新的 GAN 迁移方法 GANs N’ Roses(简写为 GNR),这一多模态框架使用风格和内容对映射进行直接的形式化(formalization)。简单来讲,研究者展示了一种以人脸图像的内容代码为输入并输出具有多种随机选择风格代码的动漫形象。

  • 论文地址:https://arxiv.org/pdf/2106.06561.pdf

  • GitHub 项目地址:https://github.com/mchong6/GANsNRoses

从技术上来讲,研究者基于对内容与风格的简单和有效定义中得出了对抗性损失,它保证了映射的多样性,即可以从单一内容代码中生成多样化风格的动漫形象。在合理的假设下,这种映射不仅多样化,还能以输入人脸为条件正确地表示动漫形象的概率。相比之下,当前的多模态生成方法无法捕捉动漫中的风格。大量的定量实验表明,与 SOTA 方法相比,GNR 方法可以生成更多样风格的动漫形象。

GNR 的生成效果怎么样呢?我们可以先来看下 demo 图像戴珍珠耳环的少女的动漫形象:

目前,用户也可以试玩,只需上传自己的图像即可一键生成自己的动漫形象。机器之心用葡萄牙球星 C 罗的图片试了试生成效果,em……:

试玩地址:https://gradio.app/hub/AK391/GANsNRoses

与此同时,在没有对视频进行任何训练的情况下,GNR 方法还可以实现视频到视频的迁移。

技术实现

给定两个域 、,目标是在域中生成一组不同的,使其具有与 x 相似的语义内容。该研究详细阐述了从域 到的转换细节。如图 2 所示,GANs N’ Roses 由一个编码器 E 和一个解码器 F 组成,这两个编码器可用于这两个方向。编码器 E 将图像 x 分解为内容编码 c(x) 和风格编码 s(x)。解码器 F 接收内容编码和风格编码,并从 生成合适的图像。

编码器和解码器共同形成了一个生成器。在运行时,通过向编码器传递图像来使用这个生成器,以保留生成的内容编码 c(x),获得一些其他相关的风格编码 s_z,然后将这对编码传递给解码器。该研究希望最终动漫内容由内容代编码控制,风格由风格编码控制。

图 2 GANs N’ Roses

但什么是内容,什么是风格?GANs N'Rose 的核心思想是将内容定义为事物所在的位置,将风格定义为事物的外观。这可以通过使用数据增强的思想来实现。选择一组相关的数据增强,在所有条件下:风格是不变的,内容是可变的。注意,这个定义是以数据增强为条件的——不同的数据增强集将导致不同的风格定义。

确保风格的多样性

为了确保用户可以得到不同风格的动漫,当前有三种策略:首先,可以简单地从随机选择的风格代码 s_z 中生成;其次,解码器具有可以从解码器中恢复 s_z 的属性;第三,可以编写一个确定的惩罚函数,强制不同风格代码的解码不同;但这些策略都不是令人满意的。

该研究对风格和内容的定义提供了一种新的方法。即必须学习一个映射 F(c, s; θ),该映射采用内容编码 c 和风格编码 s 来生成动漫面孔。 表示从数据中随机选择的单个图像,T(·) 表示对该图像应用随机选择的增强的函数,P(C) 表示内容编码的分布,P(Y) 表示真实动漫(等)的真实分布,为生成的动漫图像。这里必须有 c(xi) ∼ P(C)。因为风格定义为在增强下不会改变的内容,合理选择的增强应该意味着 c(T(x_i)) ∼ P(C) , 即对图像应用随机增强会导致内容编码是先前内容编码的示例。这个假设是合理的,如果它被严重违反,那么图像增强训练分类器将不起作用。

损失函数为:

实验结果

在实验部分,该研究使用 batch 为 7,λ_scon = 10, λ_cyc = 20, λ_adv = 1 进行实验。网络架构基于 StyleGAN2[9],该架构风格编码的维度为 8。使用 Adam 优化器 [12] 对所有网络进行 300k 批次迭代,学习率为 0.002。在输入图像上使用的随机增强包括随机水平翻转、(−20,20)之间的旋转、缩放(0.9,1.1)、平移(0.1,0.1)、剪切(0.15)。图像被放大到 286 × 286,并随机裁剪为 256 × 256。数据集主要采用 selfie2anime 数据集 [10] 以及 AFHQ [1] 的附加实验。

定性比较

一般来说,当给定相同的源图像和不同的随机风格编码时,GNR 会产生不同的图像。风格编码驱动头发、眼睛、鼻子、嘴巴、颜色等的外观,而内容驱动姿势、面部大小、面部部位的位置等。图 4 显示,GNR 在质量和多样性方面优于其他 SOTA 多模态框架。

GNR 生成的图像具有不同的颜色、发型、眼睛形状、面部结构等,而其他框架则只能生成不同的颜色。

将多模态结果与 SOTA 迁移框架进行了比较。

该研究还在图 5 中与 AniGAN [14] 进行了比较。请注意,即使 AniGAN 是在更大、更多样化的数据集上进行训练的,但是,该研究也能够生成具有更好的、更多样性的、更高质量的图像。此外,AniGAN 以 128 × 128 的分辨率生成,而该研究以 256 × 256 的分辨率生成。

下图展示的消融实验显示了多样性鉴别器(Diversity Discriminator)在确保多样性输出方面起着重要作用(图 6),实验可得多样性鉴别器明显促进了 GNR 输出更具多样性、更真实的图像。

定量比较

表 1 中使用多样性 FID、FID 和 LPIPS 对 GNR 进行了定量评估。在表 1 的所有实验中,研究发现 GNR 在所有指标上都明显优于其他 SOTA 框架。DFID 和 LPIPS 都关注图像的多样性,这些指标的得分从数量上证实了该研究生成图像的多样性优于其他框架。

视频到视频迁移

该研究对风格和内容的定义是,当一张脸在一个框架中移动时,风格不应该改变,但内容会改变。特别是,内容对特征所在的位置进行编码,而风格对特征的外观进行编码。反过来,内容编码应该捕获所有帧到帧的运动,合成动漫视频,而不必训练时间序列。

该研究将 GNR 逐帧应用于人脸视频,然后将生成的帧组装成视频。图 3 第 2 行中的结果显示,GNR 产生根据源移动的图像,同时在时间上保持一致的外观。

猜您喜欢:

等你着陆!【GAN生成对抗网络】知识星球!

超100篇!CVPR 2020最全GAN论文梳理汇总!

附下载 | 《Python进阶》中文版

附下载 | 经典《Think Python》中文版

附下载 | 《Pytorch模型训练实用教程》

附下载 | 最新2020李沐《动手学深度学习》

附下载 | 《可解释的机器学习》中文版

附下载 |《TensorFlow 2.0 深度学习算法实战》

附下载 | 超100篇!CVPR 2020最全GAN论文梳理汇总!

附下载 |《计算机视觉中的数学方法》分享

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

真二次元!动漫形象风格迁移 的相关文章

  • GUI 中的 __init__ 与 tkinter

    我正在学习使用 Tkinter 使用 python 创建简单的 GUI 我目前正在使用 python 文档作为参考 link http docs python org 2 library tkinter html 我想做的第一件事是理解那里
  • urllib2 连接超时错误

    我正在尝试使用 urllib2 打开页面 但我不断收到连接超时错误 我正在使用的线路是 f urllib2 urlopen url 确切的错误是 URLError
  • 如何从哨兵网址创建redis python客户端?

    我的网址为 BROKER URL sentinel 192 168 10 1 26379 0 sentinel 192 168 10 2 26379 0 sentinel 192 168 10 3 26379 0 在此 redis运行在19
  • M2Crypto:验证 DSA 签名

    我在使用 Python M2Crypto 验证 DSA 签名时遇到问题 签名是在 Java 中使用标准 java security Signature 类以及 Sun 的加密提供程序和 SHA1withDSA 算法指定生成的 这是一些 sh
  • 如何检测网格单元格中的点击并更改其颜色?

    对 python 相当陌生 并试图重新创建我在学校玩的游戏 对于这个游戏 我需要随机产生这些炸弹 如果击中 这些炸弹会将您的银行帐户减少到零 并将方块的炸弹方块的颜色更改为红色 而安全的则变为绿色 我遇到的问题是 我想将炸弹方块的颜色改为红
  • 我可以使用逻辑索引或索引列表对张量进行切片吗?

    我正在尝试使用列上的逻辑索引对 PyTorch 张量进行切片 我想要与索引向量中的 1 值相对应的列 切片和逻辑索引都是可能的 但是它们可以一起吗 如果是这样 怎么办 我的尝试不断抛出无用的错误 类型错误 使用 ByteTensor 类型的
  • 创建一个新列,作为 pandas DataFrame 中行的频率

    我需要一个新专栏C其中每个值是其他两列中的值出现的频率A and B一起出现在数据中 A B C 0 7 9 2 1 7 2 2 2 1 9 3 3 4 8 1 4 9 1 1 5 6 4 1 6 7 2 2 7 7 9 2 8 1 9 3
  • Python使用sudo启动时找不到模块

    我有一个使用 Google Assistant 库的脚本 并且必须从那里导入一些模块 我发现这只适用于 Python 虚拟环境 这真的很奇怪 在同一个文件夹中 我有一个使用 GPIO 引脚并且必须使用 root 的脚本 它们相互交互 因此当
  • 如何将 datetime.date 对象转换为 python 中的 datetime.datetime ? [复制]

    这个问题在这里已经有答案了 可能的重复 将 datetime date 对象转换为 datetime datetime 对象 其中任何缺失的时间属性均为零 https stackoverflow com questions 11192814
  • Jupyter 笔记本中的函数单元测试?

    我有一个 Jupyter 笔记本 我打算反复运行 里面有函数 代码结构是这样的 def construct url data return url def scrape url url fetch url extract data retu
  • Pandas:添加具有最新值的列

    我有两个 pandas 数据框 两个数据框都带有日期时间条目的索引 这df1具有非唯一的时间索引 而df2有独特的 我想添加一栏df2 a to df1通过以下方式 对于中的每一行df1带时间戳ts df1 a应包含最新值df2 a其时间戳
  • 在python中将进度值发送到进度条

    在我的游戏中我有两个模块 岛 py它将岛屿加载到我的游戏中 第二个模块是gui py它在游戏开始之前处理 GUI 小部件 我的问题是如何将 island py 模块中的进度值发送到中创建的进度栏gui py module 编辑 还可以使用加
  • pip 安装和自定义索引 url

    我在尝试使用安装时遇到以下异常pip Retrying Retry total 4 connect None read None redirect None after connection broken by ProtocolError
  • Python 脚本给出“:没有这样的文件或目录”

    我有几个 python 脚本 它们工作得很好 但如果我尝试从 bash 运行它 一个脚本 截至今天早上 开始给我这个错误 没有这样的文件或目录 我可以通过执行以下操作来运行 损坏 的脚本python script name py环顾四周后
  • 如何从嵌套列中提取 json 到数据帧

    我正在从 TD Ameritrade API 中提取股票数据 并且希望将其存储在 DataFrame 中 从 API 中 我得到一个嵌套的 JSON 对象 当我将其放入数据框中时 我得到 4 列 索引 蜡烛 空 符号 然而 蜡烛内部是一个字
  • Pandas 的 T 检验

    如果我想计算 Pandas 中两个类别的平均值 我可以这样做 data Category cat2 cat1 cat2 cat1 cat2 cat1 cat2 cat1 cat1 cat1 cat2 values 1 2 3 1 2 3 1
  • 我可以在调用 Flask app.run 之后让 Python 代码继续执行吗?

    尽管过去 30 年来我一直在使用其他语言进行编程 但我才刚刚开始使用 Python 我想让我的第一个应用程序保持简单 所以我从一个托管在 Raspberry Pi 上的小型家庭自动化项目开始 我的代码工作正常 控制阀门 读取流量传感器并在显
  • 如何使用 ChemDraw/Python 从 InChI 创建 .cdx 文件?

    我想使用 Python 从 InChI 创建一个 ChemDraw cdx 文件 这answer https stackoverflow com a 51543307 7295599给出了一个解决方案cdx gt InChI 下面的最小示例
  • 如何使用 tzutc()

    我缺少什么 如何让这个功能发挥作用 import dateutil parser import datetime my date datetime datetime 2000 1 1 0 0 0 000000 tzinfo tzutc pr
  • Python 中索引的其他形式

    我正在学习机器学习课程 在对 numpy 库的回顾中 使用了一种我以前从未见过的索引方法 我们定义a np array 1 2 3 4 5 6 随后创建两个新数组 np array a 0 0 a 1 1 a 2 1 这是我所知道的索引方式

随机推荐

  • 时空编解码器残差多图卷积网络预测OD客流需求

    paper title Predicting origin destination ride sourcing demand with a spatio temporal encoder decoder residual multi gra
  • windows下调用系统API实现进程创建和文件读写

    题目要求 有一个文本文件CommandList txt 第一行是说明文字 本文件最后一次打开和运行日期是20150407 第二行开始每行是一个可执行程序的名称 含路径 编写一个应用程序能打开该文件 并顺序执行其中的每个程序 并更新文件第一行
  • stm32+hx711+称重传感器

    本项目使用主控stm32f103c8t6 最小系统核心板 称重模块hx711 串口打印到电脑端显示数值 这个传感器内部是一组半桥应变片 使用方法可以有以下三种 1 使用一只传感器配合外接电阻组成全桥测量 量程为一个传感器的量程 50kg 对
  • Python 工匠:编写条件分支代码的技巧

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 本文由鹅厂优文发表于云 社区专栏 作者 朱雷 腾讯IEG高级工程师 Python 工匠 是什么 我一直觉得编程某种意义是一门 手艺 因为优雅而高效的代码 就如同完美的手工艺品一样让人
  • 2017年总结和2018年规划(几年前帖子,私密变公开后时间就变了)

    2017年浑浑噩噩 一直处于摇摆不定的局面 2018年重新找了个工作 必须要努力啦 月薪16000 图形还是要和师兄这边搞搞UE4 图像这边学学计算机视觉 希望能通过试用期 加油
  • 左程云算法笔记025

    map和哈希map的使用 cpp 此文件包含 main 函数 程序执行将在此处开始并结束 include
  • LINUX下查看点云图————point cloud(.ply .vtk .pcd)

    首先 你要确定点云的格式 pcd vtk 还是 ply 如果是 pcd vtk 那么可以用pcl工具查看 1 安装pcl 官网链接点击打开链接 sudo add apt repository ppa v launchpad jochen s
  • python可使用什么退出死循环_碰到python死循环后要怎么退出结束?

    每当编写代码行云流水 却突然碰到代码无限循环 这是非常让人头疼的 难道直接退出程序运行嘛 答案肯定是不行 怎么跳出呢 一起来看下吧 案例 遇到的问题是这样的 如果我定义了一个死循环线程我该如何终止它 我发现用全局变量的方法根本不好使 pys
  • python基础 - networkx 绘图总结

    目录 1 创建方式 2 基本参数 3 DiGraph 有向图 4 Graph 无向图 5 有向图和无向图互转 6 一些精美的图例子 networkx是一个用Python语言开发的图论与复杂网络建模工具 内置了常用的图与复杂网络分析算法 可以
  • 【科普向】LaTeX简介(一篇极简的 LaTeX 介绍文章)

    文章目录 LaTeX诞生背景 TeX和LaTeX LaTeX主要功能 文档结构 数学公式 公式块 我们平时在word里新建一个doc x 文件后 输入内容 调整页边距 字体大小 行间距等待 然后交给打印机打印就可以了 如果你写了一篇关于新疆
  • Qt获取控件位置,坐标总结

    总结的结果是 QMouseEvent中两类坐标系统 一类是窗口坐标 一类是显示器坐标 总结一 经过试验 QMouseEvent globalPos 和 QCursor pos 效果一样 但是Qt帮助文档说不一样 可是我获得值确实相同的 QC
  • 手把手搭建Python量化交易平台-2:量化策略的原理与整体架构

    摘要 探讨量化策略的整体架构 一 量化策略的原理与整体架构 1 输入数据 来自于金融数据共享平台 1 行情或技术面数据 K线数据 MA均线数据 MACD数据 2 财务或基本面数据 国家宏观经济 行业经济 公司财务数据 3 自定义数据 4 投
  • 看懂今天这个!你就是个真正的javaer!

    昨天 猿人君已经教会你搞对象了 听说 由于文字篇幅有限 讲得不明白的地方 大家关注公主号猿人工厂 或者加入qq群765605694 猿人工厂君 手把手的免费教你 恭喜你 从此开始一段新的人生 跨越上和大海 抽象人山人海 在过去的几天里 你已
  • 单词统计

    题目描述 输入一行字符 统计其中有多少个单词 单词之间以空格分隔 输入 一行英文字符 含空格 输出 单词的个数 单独占一行 样例输入 I am a boy 样例输出 4 代码 Java版 import java util Scanner p
  • 毕业后的五年拉开大家差距的原因在哪里?

    有人工作 有人继续上学 大家千万不要错过这篇文章 能看到这篇文章也是一种幸运 真的受益匪浅 对我有很大启迪 这篇文章将会改变我的一生 真的太好了 希望与有缘人分享 也希望对有缘人有所帮助 看完之后有种 相见恨晚 的感觉 特别激动 希望大家好
  • Eclipse环境下通过Cygwin使用NDK编译jni程序

    一 认识Cygwin NDK和jni 首先来认识一下什么是Cygwin NDK和jni Cygwin Cygwin是一个在windows平台上运行的unix模拟环境 它对于学习unix linux操作环境 或者从unix到windows的应
  • java 动态生成 visio----aspose.diagram for java

    最近在鼓捣java 如何生成visio图表 苦于没有API 找到了aspose这个神器 下载试用版本之后 发现最多只能生成10个元素 而且有水印 下面尝试如何去掉水印与元素限制 本文章所涉及的软件均可从网上获取 但是只能用于学习之用 不能用
  • idea使用http客户端上传文件

    controller 文件上传 param file return PostMapping value fileUpload ResponseBody public String uploadSkuImage RequestParam fi
  • 初始C语言——从大到小排序

    三个数的排序 三个数之间两两比较类似于三个数中显示最大值 两两比较 但是有一个问题 最大值问题只需要输出最大值即可而排序问题则还要排序 那么我们是否可以确定三个位置x y z将最大值依次赋值给x y z确保输出时x y z的位置是从左到右输
  • 真二次元!动漫形象风格迁移

    点击上方 机器学习与生成对抗网络 关注星标 获取有趣 好玩的前沿干货 文章 机器之心 一张输入人脸图像 竟能生成多样化风格的动漫形象 伊利诺伊大学香槟分校的研究者做到了 他们提出的全新 GAN 迁移方法实现了 一对多 的生成效果 在 GAN