能不能给出一个目标图像,使用神经网络自动提取出它的特征码呢?如果可以,那么我们就可以方便地对这些图像进行编辑,创造出各种各样“酷炫”的风格人像。

这个工作可以分为两步:

(1)先利用StyleGAN生成的特征码和生成的人脸图像训练一个网络,把人脸图像作为输入,把特征码作为输出,理论上可以得到一个StyleGAN的逆向网络模型,如果训练成功的话,这个模型可以自动将人脸图像转换为特征码;
(2)利用真实人脸图像对上面得到的模型进行进一步训练和“微调”,使之能够用于真实人脸的特征码提取。这篇文章先说明第一步的工作。

我们构造了一个如下图所示的神经网络,并计划对它进行训练。这个网络的输入为256x256的图片,输出为18x512的dlatents(StyleGAN的中间数据层,即:w)

构建这个模型的代码如下,我们这里把这个模型叫做lotus_body():

# 定义StyleGAN的逆向网络模型lotus
# 下面的功能函数均使用keras原生函数构造
def lotus_body(x):# input: (none, 256, 256, 3), output: (none, 8, 8,2048)# 必须设定include_top=False, weights=None, 才能将输入设为256x256x3# resnet输出C5,C5的shape是(none, 8, 8, 2048)resnet = keras.applications.resnet50.ResNet50(include_top=False, weights=None, input_tensor=x, input_shape=(256,256,3))y = resnet.outputprint('ResNet50 C5 shape : ', y.shape)# output: (none, 8, 8, 144)# 输出feature maps = filters = 144, 2D卷积输出的高和宽8 - 1 + 1 = 8y = keras.layers.convolutional.Conv2D(144, (1, 1), padding='same', activation='relu')(y)# output: (none, 96, 96)y = keras.layers.Reshape((96, 96))(y)for i in range(3):# output: (none, 96, 96)# 输出feature maps = filters = 96, 1D卷积输出的长度96 - 1 + 1 = 96y = keras.layers.local.LocallyConnected1D(96, 1)(y)# output: (none, 96, 96),(2,1)代表将输入的第二个维度重拍到输出的第一个维度,而将输入的第一个维度重排到第二个维度y = keras.layers.Permute((2, 1))(y)# output:(none, 96, 96)y = keras.layers.local.LocallyConnected1D(96, 1)(y)# output: (none, 18, 512)y = keras.layers.Reshape((18, 512))(y)print('lotus body output shape : ', y.shape)return y

为了训练这个模型,我们用StyleGAN生成了1200个dlatents以及它们所对应的人脸图片,并记录到文件中,训练时我们从文件中加载数据,并训练lotus模型。

由于lotus模型输出的不是目标的分类,而是18x512的张量,因此我们使用mean_squared_error作为损失函数loss,优化器(optimizer)使用的是adam,epochs = 503,batch_size = 6,最后训练得到的accuracy = 0.8933。

我们用StyleGAN生成了1280个dlatents以及它们所对应的人脸图片,使用mean_squared_error作为损失函数loss,优化器(optimizer)使用的是adam,epochs = 599,batch_size = 8,最后训练得到的accuracy = 0.9201。

使用神经网络自动提取出它的特征码(1)相关推荐

  1. 轻轻松松使用StyleGAN(五):提取真实人脸特征码的一些探索

    我们在上一篇文章中提到:能不能给出一个目标图像,使用神经网络自动提取出它的特征码呢? 如果可以,那么我们就可以方便地对这些图像进行编辑,创造出各种各样"酷炫"的风格人像. 这个工作 ...

  2. python卷积神经网络cnn的训练算法_【深度学习系列】卷积神经网络CNN原理详解(一)——基本原理...

    上篇文章我们给出了用paddlepaddle来做手写数字识别的示例,并对网络结构进行到了调整,提高了识别的精度.有的同学表示不是很理解原理,为什么传统的机器学习算法,简单的神经网络(如多层感知机)都可 ...

  3. 适用于特殊类型自然语言分类的自适应特征谱神经网络

    点击上方蓝字关注我们 适用于特殊类型自然语言分类的自适应特征谱神经网络 王一峰, 孙丽茹, 崔良乐, 赵毅 哈尔滨工业大学(深圳)理学院,广东 深圳 518055    摘要:计算机算力的提升使得深度 ...

  4. 【原创·论文翻译】GaitSet-旨在用自己的语言表达出作者的真实意图

    GaitSet: Regarding Gait as a Set for Cross-View Gait Recognition 作者:Hanqing Chao1,Yiwei He, Junping ...

  5. 人工智能知识全面讲解:多层神经网络与误差逆传播算法

    7.3.1 从单层到多层神经网络 明斯基教授曾表示,单层神经网络无法解决异或问题,但是当增加一个计 算层以后,两层神经网络不仅可以解决异或问题,而且具有非常好的非线性分 类效果.只是两层神经网络的计算 ...

  6. 神经网络/深度学习(一)

    感知机 多层感知机(神经网络) 误差逆传播(error BackPropagation,简称BP)算法 深度学习 卷积神经网络(Convolutional Neural Networks, CNN) ...

  7. 卷积神经网络CNN原理详解(一)——基本原理

    卷积神经网络CNN原理详解(一)--基本原理 转载过来为了自己以后学习方便,大家请看原文章 为什么要用神经网络? 特征提取的高效性. 大家可能会疑惑,对于同一个分类任务,我们可以用机器学习的算法来做, ...

  8. 用深度神经网络搭建马赛克神器,高清无码效果感人

    目录 1.项目背景 2.适用范围 3.使用方法 1.项目背景 相信一提起马赛克这个东西,不少小伙伴都痛心疾首,虽然最近几年也频繁传出有在研发去除马赛克的软件,一直没有成品问世.不过最近一位程序员及经过 ...

  9. GNN|如何做的比卷积神经网络更好?

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 英国机器视觉会议(BMVC)大约两周前在英国卡迪夫结束,是计算机视 ...

最新文章

  1. 今天看论坛,有这样一句话,深有同感,还是家里好
  2. mos管结电容等效模型_MOS管硬开关震荡分析“新能源汽车与电力电子技术”系列之十九...
  3. 2017.0612.《计算机组成原理》总线结构
  4. ASP.NET Core 导入导出Excel xlsx 文件
  5. ICWAI和ICWA的完整形式是什么?
  6. 包的引入(base版本)
  7. 配置webpack.config.js遇到的一些问题
  8. JAVA的静态函数不能重载,可以覆盖(隐藏)
  9. 【三维路径规划】基于matlab自适应遗传算法求解单无人机三维路径规划问题【含Matlab源码 214期】
  10. 【Gym-100085 K】Kingdom Roadmap【树上构造题】
  11. 使用JQuery快速高效制作网页交互特效第六章课后
  12. 1252 :[蓝桥杯2015初赛]奇妙的数字 C/C++
  13. Oracle导入元数据,eova oracle 导入元数据报错
  14. 【CISCO】链路聚合基础命令详解。
  15. 基于web的网上书城网站设计与实现(SpringBoot ,Vue,MySQL )
  16. android音乐搜索功能实现,撸个应用学Android——空灵音乐本地音乐版
  17. day18Excise1
  18. 7-10 黑洞数(20 分)
  19. TSINGSEE青犀视频监控平台的多种联网方式详解
  20. pythonocc安装_PythonOCC开发-如何搭建开发环境和一个创建圆台例子

热门文章

  1. MySQL进阶篇(01):基于多个维度,分析服务器性能
  2. Java描述设计模式(12):外观模式
  3. Java描述设计模式(02):简单工厂模式
  4. Redis-字符串(string)基础
  5. 基于lfslivecd-x86-6.3-r2145安装vnc和qemu
  6. PDF阅读器中如何改变线条颜色、线宽和线型等
  7. Vue.use自定义自己的全局组件
  8. 这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧
  9. 【matlab】随意记录
  10. 第3課 ここはデパートです