发现一个关于生成高清动漫头像的很棒的博客:gwern faces,讲述了从GAN诞生以来尝试过的各种方法生成动漫人脸的经验,值得一看

如何对无监督的styleGan生成器找到对应的特征的输入z

  1. 新创建一个encoder,用于对image编码获取其对应的z。方法是,通过训练好的styleGAN,获取z-生成image对,将该z-image作为训练集用于训练该编码器,则该编码器能够对任意一张图片获得其对应于该styleGAN的编码z,既可通过对该z进行扰动获得一些特征调整。
  2. 通过反向传播的方法,获取对应编码z。一个神经网络中有3种变量:输出、网络参数、输出(loss)。这3种变量不同的操作组合可以用来做不同的事。
    • 固定输入,让网络参数可以变动,目的是让输出loss最小,这种操作是为了优化更新网络参数,获得更好的模型
    • 固定输入,让输出loss可以变动,从而研究网络参数可解释性
    • 固定输出目标,如styleGAN中,试图找到对应编码z的原图像,固定网络参数,输入不同z,试图让经过styleGAN生成器生成的图像与原图像目标之间的loss最小,从而得到该原图像对应的最接近的输入z。这与对抗样本的创建方式有思想上的雷同之处,对抗样本是试图修改输入图像,希望让loss最大。
      与对抗样本中对特征层进行loss放大类似的是,也可以同样对z输入后Generator得到的中间特征进行loss计算,类似于perceptual loss。这样可以让z的调整更关注重要的语义特征而不是无关紧要的细节特征。这个 latent code can be the original z, or z after it’s passed through the stack of 8 FC layers and has been transformed, or it can even be the various per-layer style noises inside the CNN part of StyleGAN; 有人实验证明,对 layer-wise encodings作为扰动对象比最原始的z作为扰动对象效果更好。
  3. encoder和反向传播结合的方法。该方法即前两种方法的结合,先用encoder输出接近最有z的结果,再使用反向传播进行优化。这样可以在反向传播时更少的迭代,也更能防止在反向传播阶段陷入局部最优,因为encoder给出了不错的初始化z,而不是法2种的随机初始化z。

然而flow-based模型如Glow,可以直接输入图像得到一个对应的z,从而不需要以上这些方法,但是Glow的问题在于耗时太久,耗资源太大。
通过以上方法,可以得到每张图片对应的z,从而可以对z进行编辑,从而对对应图片进行特征修改,如改变眼睛颜色,或者融合两个人脸。那么如何找到z(styleGAN中是512维向量)中每一维对应的特征种类呢。同一个特征可能对应多个维度向量,并且是非线性相关的,可以借助另外的模型来对某种特征进行z上的划分:
找出某种特征的不同种类图像,例如微笑的人脸和不微笑的人脸,生成这些图片对应的z,每个z有微笑和不微笑的标签,再训练一个简单的分类器(线性分类器或随机森林等),对这些512维的z进行分类,从而可以知道z的哪些维度对微笑特征的影响较大,这些特征分类器可以用于对z进行控制。

以下工作是个对z进行控制的不错的工作:

stylegan encoder-2019

该工作中基本使用了方法2中的逻辑。我们的目的是对一张人脸图片进行性别(或其他特征如年龄和表情)编辑
首先需要对某个特征找到其direction latent code,这个direction latent code的维度应该和最后编辑的输入styleGAN的latent code维度相同,一般使用经过styleGAN中8层fc变换后的中间向量。
如何得到方向向量呢(见Learn_direction_in_latent_space.ipynb)?首先使用训练好的styleGAN的生成器,输入不同的z,生成得到人脸图片和中间向量,对这些人脸图片进行性别标记,每一张图片的中间向量和性别标记则形成了这个特征的训练集。之后采用分类器,如逻辑回归或其他,对该数据集进行训练,逻辑回归方法中的参数,即为性别种类的分界线,该参数数量和中间向量的维度一致,该参数即为性别特征的单位。工作中介绍到,对某一种特征,需要的种类图片有100张即可以达到80%的分类准确率。如果某种特征有多个标签,需要尝试将多类别变成线性关系。
得到性别特征向量之后,下一步是寻找想要编辑的人脸图片对应的中间向量,因为特征向量是在中间向量上进行加减。该工作中首先使用了人脸关键点检测算法对人脸图片中的人脸进行了检测和矫正(见align_images.py)。之后梯度下降获得该人脸图片对应的中间向量(见encode_images.py) 该工作中使用训练好的vgg16来计算随机初始化的中间向量生成的图片和真实图片之间的perceptual loss,然后反向传播回归获得真实人脸图片对应的最接近的中间向量,做法是去除vgg16的分类层(top层),分别输入真实人脸图片,和由styleGAN根据输入的中间向量生成的假人脸图片,再计算二者的特征loss,该loss用于对中间向量进行梯度下降更新,此过程中vgg16的参数都是固定不变的。优化中间向量稳定后即可。
得到方向向量和人脸图片中间向量后,即可对中间向量进行方向向量的倍数加减,得到编辑后的中间向量后,再使用styleGAN前向生成特征编辑后的人脸。见Play_with_latent_directions.ipynb
作者给出的样例效果确实不错,不过我自己找的人脸,编辑效果一般。表情还行,年龄和性别有点拉垮
ganspace-nips2020
interfacegan-cvpr2020
本文将每种二分类特征看作一个超平面,超平面两侧是两种特征种类,离超平面的距离表现了二分类特征的“浓度”,超平面的法向量即为编辑方向。不同种类特征的超平面不一定是互相垂直的,所以试图单独编辑某种特征时,往往会导致另一种特征也会被修改。
例如戴眼镜和年龄大的关系比较强,编辑年龄更大时可能会导致出现眼镜。在编辑年龄法向量时,可以计算该单位向量在戴眼镜特征法向量垂直方向上的投影,从而可以获得不被影响的方向向量,在该方向上编辑即可,这种操作在文中被称为conditional manipulation。
个人认为,这种做法没有彻底解决解耦问题,或者说很方便地解决解耦问题,因为需要知道当前特征向量和哪些特征向量非常相关,并且将强相关的特征均计算其超平面。
本文的整体思路和之前的方法没有太大区别,一些细节做得更好,论文写得更学术化,例如在选取不同特征样本时,数量使用更多,只取了第三方模型分类得分更高的10%数据(每种类别10%)。操作依然是在中间向量空间上操作,对超平面的计算使用svm分类器。
styleflow

如何编辑styleGAN生成的图像的属性相关推荐

  1. 【项目实战课】基于Pytorch的StyleGAN v1人脸图像生成实战

    欢迎大家来到我们的项目实战课,本期内容是<基于Pytorch的StyleGAN v1人脸图像生成实战>. 所谓项目实战课,就是以简单的原理回顾+详细的项目实战的模式,针对具体的某一个主题, ...

  2. 【OpenCV 例程200篇】05. 图像的属性(np.shape)

    [OpenCV 例程200篇]05. 图像的属性(np.shape) 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更新中 ...

  3. python 制作高斯mask_Python中numpy如何生成mask图像

    有的小伙伴对numpy如何生成mask图像产生了疑问,今天就这个问题为大家进行解答. 在numpy中,有一个模块叫做ma,这个模块几乎复制了numpy里面的所有函数,当然底层里面都换成了对自己定义的新 ...

  4. GAN能生成3D图像啦!朱俊彦团队公布最新研究成果

    晓查 发自 凹非寺 量子位 出品 | 公众号 QbitAI GAN现在可以合成3D图像了! 最近,MIT计算机科学与AI实验室的朱俊彦团队,发表了一篇论文<Visual Object Netwo ...

  5. 英伟达用GAN生成脑瘤图像,训练出的AI医生,准确率提高16%

    栗子脑 发自 凹非寺 量子位 出品 | 公众号 QbitAI 辅助医生做疾病诊断的AI,已越来越常见. 从前,每只AI要吃下来自放射科的许多许多图像数据,学好图中的特征,才可能出师. 数据集越大越好, ...

  6. 利用PCL库从点云数据生成深度图像及关键点提取

    利用PCL库从点云数据生成生成深度图像及关键点提取 利用PCL库从点云数据生成深度图像及关键点提取 本想利用标准点云数据库分割成若干块,利用标准点云数据生成深度图像作为数据库用来验证算法,目前效果不是 ...

  7. AnyChart使用指南三:生成动态图像

    AnyChart主要工作原理是有一个.swf文件作为对象,数据和设置存放在.xml文件中,然后在.html文件里通过JS来调用,生成动态图像. 由于想使用到struts中去,xml文件自动生成,有个叫 ...

  8. RStudio环境或者ggsave函数保存生成的图像为指定文件格式(pdf、jpeg、tiff、png、svg、wmf)、指定图像宽度、高度、分辨率(width、height、dpi)

    RStudio保存生成的图像为指定格式.指定分辨率的图片文件或者pdf.ggsave函数保存生成的图像为指定格式(pdf.jpeg.tiff.png.svg.wmf).指定分辨率(width.heig ...

  9. stylegan生成循环gif图片

    style参考地址:https://github.com/NVlabs/stylegan 生成gif参考地址:https://github.com/parameter-pollution/styleg ...

  10. 利用ASP.NET一般处理程序动态生成Web图像(转)

    摘自:http://www.cnblogs.com/zhouhb/archive/2011/02/15/1955262.html 一般处理程序的扩展名为ashx,它实现了IHttpHandler接口, ...

最新文章

  1. python使用什么注释语句和运算-Python中的注释符有哪几种?( )
  2. Tensorflow2.0报错:ProfilerNotRunningError: Cannot stop profiling. No profiler is running.
  3. 【雅礼集训2017】字符串【后缀自动机】【数据分治】
  4. vscode 编辑器快捷键
  5. 生信宝典被分享最多的15篇文章
  6. 前端开发 表格的补充 注释 标签的嵌套规则 0228
  7. 卡巴斯基亚太区总经理:不做免费杀毒厂商
  8. kali远程登录window_手把手教你配置VS Code远程开发工具,工作效率提升N倍
  9. php图片缩放比例缩放,php图片等比例放大与缩小的方法举例
  10. memcached 可视化客户端工具TreeNMS
  11. 北理珠计算机专业在广东排第几,独立学院排名第一!北理珠这项工作获省教育厅肯定...
  12. 对话 DenseNet 一作黄高:做有韧劲、能抗压、不断探索未知的科研
  13. react中Suspense,EventEmitter的使用
  14. RMON学习笔记(二)
  15. 运放的 零点和极点快速找到
  16. ShardingSphere实践(1)——ShardingSphere介绍
  17. 计算机培训班价格多少钱?
  18. OCP-V13-700
  19. SQLSERVER 集合处理——INTERSECT
  20. 基于RTSP的流媒体播放器制作(2)

热门文章

  1. Intent 简介与详解
  2. Bezier曲线及其de casteljau算法 matlab实现
  3. plotyy函数_Matlab plotyy函数的使用及问题总结
  4. 网络故障排查的思路和方法
  5. 少儿学编程系列 --- 使用python程序暴力求解:数学游戏 24 Game的答案
  6. 服务器远程连接端口号修改
  7. php alt什么意思,img标签的alt作用是什么
  8. toft 测试用例rat_测试案例如何区分RAT,FAST,TOFT,FET | 学步园
  9. 公司禁用U盘的方法总结
  10. 冰冻三尺,非一日之寒。数据解析——xpath(1)