手把手教你在Tensorflow实现BEGAN 达到惊人的人脸图像生成效果

2023-11-17

导读:本文是基于谷歌大脑(Google Brain)发表在 arXiv 的最新论文《BEGAN:边界平衡生成对抗网络》实现的。该工作针对GAN 面临的一些难题,例如如何衡量收敛,如何控制分布多样性以及如何维持鉴别器和生成器之间的平衡等问题,提出了改善。作者使用了很简单的网络结构以及标准的训练过程,在人脸生成任务中取得了优异的视觉效果,达到了目前最先进水平。

  论文摘要

  作者提出了一种新的能够促成平衡(Equilibrium)的方法,以及配套的损失函数,这个损失的设计由Wasserstein 距离(Wasserstein distance)衍生而来,Wasserstein 距离是用于训练基于自编码器的生成对抗网络(auto-encoder based Generative Adversarial Networks)的。该方法在训练阶段能够维持生成器和鉴别器之间的平衡。除此之外,该方法还提供了一种新的近似收敛策略,实现了快速稳定的训练,并且达到了很高的视觉质量。作者还推导出一种能够控制图像多样性和视觉质量之间的权衡的方法。该工作中,作者主要关注图像生成任务,即使是在更高分辨率的情况下,也建立了视觉质量的新里程碑。并且仅是使用一个相对简单的模型结构和标准的训练流程就实现了这些。

  论文有以下四个创新点:

  1. 一个简单且鲁棒的 GAN 结构,使用标准的训练步骤实现了快速且稳定的收敛

  2. 一个平衡的概念,用于平衡判别器和生成器的竞争力

  3. 一种控制图像多样性和视觉质量之间的权衡的新方法

  4. 一种近似衡量收敛的方法。目前已发表的这类方法的工作只有一个,就是 Wasserstein GAN(WGAN)

  网络设计方法

  鉴别器:

  在鉴别器的设计上,作者使用自编码器作为生成对抗网络的鉴别器,这一思想最早在EBGAN(Energy-based generative adversarialnetwork)中提出。

  生成器:

  在生成器的设计上,BEGAN 则借鉴了 Wasserstein GAN 定义损失(loss)的思路。传统的GAN会尝试直接匹配数据分布,作者提出的方法是使用从Wasserstein距离衍生而来的损失去匹配自编码器的损失分布。这是通过传统的GAN目标加上一个用来平衡鉴别器和生成器的平衡项实现的。

  平衡:

  在深度神经网络中,生成器的函数G和鉴别器的函数D的表示能力是一个必须要考虑的因素。它们由模型实现函数的方法以及参数的数量共同决定。传统情况下,G和D往往不能达到平衡,判别器D往往在训练早期就能竞争过生成器G。为了解决这一问题,作者引入了平衡的概念。

  作者提出了一个衡量生成样本多样性的超参数 γ : 生成样本损失的期望与真实样本损失的期望值之比。在作者的模型中,判别器有两个目标:对真实图像自编码,并且将生成图像与真实图像区分开。这个超参数能够平衡这两个目标。γ 值比较低会导致图像多样性较差,因为判别器太过于关注对真实图像自编码。

  EBGAN网络结构:

  作者使用带有指数线性单元(ELUs)的3x3卷积。每一层都重复2次。每次下采样卷积滤波都线性增加。下采样操作通过子采样完成,采样步长为2,上采样通过最近邻方法实现。在编码器和解码器的边界处,处理过的数据块通过全卷积层,不需要任何非线性操作映射到嵌入态。

  作者表示他们的方法训练过程更简单,并且与传统的GAN相比,网络结构也更简单:不需要批归一化(batch normalization),丢弃操作(dropout),反卷积(transpose convolutions),或者卷积滤波的指数增长(exponential growth for convolution filters)。

  实验结果

  实验数据:来自celeA数据库的360000张名人人脸图像,保证了图像多样性与质量。

  基于能量的生成对抗网络(EBGAN)与作者提出的方法结果对比:

  超参数 γ 值分别为0.7,0.5和0.3时的生成结果对比,随着 γ 值增加,多样性也有了增加,但是人工效果也更明显:

  空间连续性:

  不同生成模型的图像在隐空间的插值结果:

  图像质量与收敛性关系图:

  

  收敛性度量和图像质量评价:从图中可以看出模型收敛很快,我们提出的衡量BEGAN收敛的方法与图像保真度之间有很好的联系。

  总结

  作者提出了一个新的平衡方法用来平衡对抗网络。使用该方法,网络可以收敛得到多样化且视觉效果喜人的图像。即使在更高的分辨率上进行细小的修改也能保持这一效果。训练过程稳定,快速,并且对参数变化鲁棒,并且不需要进行复杂的迭代训练。

  代码实现——BEGAN的Tensorflow实现实现细节:

  训练的模型是基于64x64的图像的。128x128的之后会更新。与原文不同的是训练损失更新方法,以及学习速率衰减。首先,论文的损失更新方法是Loss_G以及Loss_D同时进行更迭。但是当我尝试这种方法时,模型会崩溃。所以,这个代码使用了一种替代方法。第二,每2000次迭代,学习速率衰减为0.95。这个参数只是训练经验值,你可以改动或查看论文的设置。

  训练过程:

  如果想看训练过程,请下载“dropbox”文件夹,并且运行tensorboard--logdir='./',我上传了两个训练好了的模型(64x64 和 128x128)

  Kt图。当你训练模型时,可以参考这个结果。达不到1.0.在我的设置下,可以收敛到0.08:

  

  收敛度量(M_global),与论文的图相同:

  

  生成器的输出和解码器输出对比:

  使用方法:推荐你下载这个“dropbox”文件夹(https://www.dropbox.com/sh/g72k2crptow3ime/AAAhkGlHCw9zQh0aE-Ggdt3Qa?dl=0

  制作训练数据:

  1、下载celeA 数据集(img_align_celeba.zip)(http://pan.baidu.com/s/1eSNpdRG#list/path=%2FCelebA%2FImg)并且解压到 'Data/celeba/raw'

  2、运行 ' python ./Data/celeba/face_detect.py '

  训练(参考main.py中的began_cmd):

  测试(参考main.py中的began_cmd):

  环境需求:

  • TensorFlow 1.0.0

  • Python 2.7.12, Opencv, scipy0.18.1, numpy 1.11.2

  代码实现结果:

  1、这是我训练的模型的随机选取的结果。gamma从0.3到0.5。没有进行择优。Gamma为0.3时,结果很好但是比较偏向女性的脸。gamma为0.4时,效果最佳。gamma为0.5时,纹理很好但是会出现空洞的问题。

  

  2、128x128图像和64x64图像。128x128图像十分震撼。中间四张图像看起来像女性的真实的面孔。

  

  3、从初始图到200000次迭代的结果。

  论文地址:https://arxiv.org/pdf/1703.10717.pdf

  GitHub资源:https://github.com/Heumi/BEGAN-tensorflow

 

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

手把手教你在Tensorflow实现BEGAN 达到惊人的人脸图像生成效果 的相关文章

  • k8s中Endpoint是什么

    在Kubernetes K8s 中 Endpoint是一种资源对象 用于表示一个Service所依赖的真实后端节点的Pod信息 它存储了一组IP地址和端口号的列表 这些IP地址和端口号对应着提供相同服务的Pod实例 主要作用 Endpoin
  • 预估db2、oracle、teradata数据库sql执行代价和时间方法

    DB2 只能得到cost 1 执行存贮过程建表 CALL SYSPROC SYSINSTALLOBJECTS EXPLAIN C CAST NULL AS VARCHAR 128 数据库用户名 2 执行 EXPLAIN PLAN SET Q
  • Unity中容易被忽略的小技巧

    今天在游戏蛮牛上看到慕容小匹夫的一篇文章 感觉对自己现在的水平很实用 就给转载了过来 以便日后好温习一下 这里还是要支持原创作者 原文地址在这里 一 编辑器染色 一个常见的工作情景是我们在调整场景内的某些组件参数时 没有注意到自己是在Pla
  • iphone查看/private/var/mobile/Containers/Data/Application/文件

    xcode查看iPhone的private var 文件夹 xcode连接iPhone真机 选择app下载Containers文件夹到mac电脑中 查看手机中下载的文件 使用xcode真机调试的时候 文件目录都是这种 private var
  • 51单片机用c语言在液晶1602上显示汉字,51单片机LCD1602显示汉字(中文)源程序...

    include stc15f2k60s2 h define uchar unsigned char define uint unsigned int 数据端口接 P0 sbit lcdrs P2 7 端口定义 sbit lcdrw P2 6
  • php 自带过滤和转义函数

    php 自带过滤和转义函数 函数名 释义 介绍 htmlspecialchars 将与 单双引号 大于和小于号化成HTML格式 转成 amp 转成 quot 转成 039 lt 转成 lt gt 转成 gt htmlentities 所有字
  • LeGO-LOAM中的数学公式推导

    LeGO LOAM是一种在LOAM之上进行改进的激光雷达建图方法 建图效果比LOAM要好 但是建图较为稀疏 计算量也更小了 本文原地址 wykxwyc的博客 github注释后LeGO LOAM源码 LeGO LOAM NOTED 关于代码
  • c语言while break用法举例,c语言中continue和break的用法

    目前 随着计算机在人们生活和工作中的普及 其教学研究地位也在逐渐提升 C语言是一种计算机程序设计语言 其具有高级语言和汇编语言的特点 下面小编就跟你们详细介绍下c语言中continue和break的用法 希望对你们有用 c语言中contin
  • Git SSL certificate problem: unable to get local issuer certificate

    错误 Push failed Unable to access https github com ttsin gitTest git SSL certificate problem unable to get local issuer ce
  • Python物理数值解析

    让我们回忆一下库仑定律 来自位于 r 0 r 0 r0 处的单个点电荷 q 0 q 0
  • 自动驾驶是用Python实现的?你敢用吗?

    一 安装环境 gym是用于开发和比较强化学习算法的工具包 在python中安装gym库和其中子场景都较为简便 安装gym pip install gym 安装自动驾驶模块 这里使用Edouard Leurent发布在github上的包hig
  • eclipse汉化.设置为中文 简单好操作 java初学者看过来

    方法 1 查找语言包下载网址 并复制 2 打开eclipse 点击 help Install New Software Add 3 在 Location 中粘帖网址 点击 Add 4 勾选 简体中文包 5 等待加载完 重启 本教程操作环境
  • Kafka原理分析

    在基础篇中我们介绍MQ的一些基础原理 这篇文章 我们针对kafka进行较深入的分析 上篇文章中我们提到了kafka中一个名词broker 其实broker可以理解成为一台kafa服务器 kafka的特性和功能 在kafka设计之初是为了实时
  • Redis的安装(CentOS7)与部分配置文件的讲解

    Redis的安装 CentOS7 与部分配置文件的讲解 Redis的安装 步骤一 安装Redis依赖 下载安装最新版的gcc编译器 yum install y gcc tcl 步骤二 上传安装包并解压 1 将Redis安装包上传到 opt中
  • vue点击把某个区域变成图片数据

    前言 使用html2canvas 可以实现把某个区域变成图片的base64数据 官网入口 点我 目录 实现步骤 1 引入 npm引入 js引入 2 在需要使用的vue组件中引入 3 将制定区域内转成图片 添加ref标记 4 点击开始转换的方
  • SV--线程(mailbox)

    3 mailbox 3 1概述 线程之间如果传递信息 可以使用mailbox mailbox和队列queue有相近之处 mailbox是一个对象 因此也可以用new 来例化 例化时 有一个可选的参数size来限定其存储的最大数量 如果siz

随机推荐

  • Windows中zlib的安装与配置

    安装zlib所需前置条件 cmake VS 2022 其他版本也可以 cmake的安装可以看 windows中CMake的安装与配置 第一步 下载zlib库源文件 下载zlib库源文件 可以去官网下载 也可以去github下载 这里推荐Gi
  • 数据挖掘--分类算法的优缺点

    1决策树 Decision Trees 的优缺点 决策树的优点 一 决策树易于理解和解释 人们在通过解释后都有能力去理解决策树所表达的意义 二 对于决策树 数据的准备往往是简单或者是不必要的 其他的技术往往要求先把数据一般化 比如去掉多余的
  • 万向区块链元宇宙系列报告:对工业元宇宙的认知

    伴随着元宇宙概念大热 国内外多个巨头企业抢先布局 国内多个地方政府也在积极布局 发展元宇宙技术及相关产业 试图抢占先机 针对各业务场景与元宇宙的融合 万向区块链首席经济学家办公室团队出具了系列元宇宙相关研究报告 本篇将主要聚焦工业元宇宙 探
  • json和pickle的dump,dumps,load,dumps方法的使用

    序列化 Serialization 将对象的状态信息转换为便于存储或传输的形式的过程称之为序列化 该过程的逆向则称之为反序列化 如 1 数据和文本的转换 2 Python的数据类型和二进制数据类型的转化 3 Python的数据类型和json
  • 微信小程序 - 判断一个经纬度是否在一个多边形区域内

    功能描述 最近公司做了一个定位打卡的小程序 需要判断用户的经纬度是否在一个闭合的多边形区域内 在区域内允许打卡 否则提示 不再打卡范围 由于腾讯地图小程序SDK没有提供相关功能 所以需要自己手写造轮子 实现思路 首先已知一个用户坐标 x0
  • python函数式编程例子-python之面向过程,函数式编程,面向对象浅析

    python编程有面向过程 面向函数 面向对象三种 那么他们区别在哪呢 这个问题 让我想起我在学习编程的时候 我的老师给我举的例子 分享给大家 面向过程就是将编程当成是做一件事 要按步骤完成 比如煮咖啡这件事 先拿一定量的咖啡豆 然后磨成粉
  • Vue----双向绑定指令

    文章目录 3 7 双向绑定指令 3 7 1 v model 指令的修饰符 3 7 双向绑定指令 vue提供了 v model双向绑定指令 用来辅助开发者在 不操作DOM 的前提下 快速 获取表单数 据
  • 使用idea自带的maven插件配置镜像

    一 选择idea自带maven路径 setting文件的位置选择 二 打开setting文件 三 修改maven的镜像
  • 华为HCIE云计算之Fusion Access桌面云

    华为HCIE云计算之Fusion Access桌面云 一 Fusion Access介绍 二 华为Fusion Access架构 1 Fusion Access桌面云解决方案逻辑架构 2 FusionSphere云平台架构 三 Fusion
  • 【无人机分配】一种无人机实时最优任务分配模型附matlab代码

    作者简介 热爱科研的Matlab仿真开发者 修心和技术同步精进 matlab项目合作可私信 个人主页 Matlab科研工作室 个人信条 格物致知 更多Matlab仿真内容点击 智能优化算法 神经网络预测 雷达通信 无线传感器 信号处理 图像
  • 不能看到共享的服务器文件夹,服务器不能共享文件夹

    服务器不能共享文件夹 内容精选 换一换 VPC为弹性云服务器构建隔离的 用户自主配置和管理的虚拟网络环境 提升用户云中资源的安全性 简化用户的网络部署 使用弹性文件服务时 文件系统和云服务器归属于同一VPC下才能文件共享 VPC可以通过网络
  • Java发送HTTP的get,post请求(JSON)

    import net sf json JSONObject import org apache commons httpclient import org apache commons httpclient methods GetMetho
  • 2020-09-06

    Elasticsearch Elasticsearch 简称ES 是一个可分布式的实时搜索和分析引擎 一个建立在全文搜索引擎 一个建立在全文搜索引擎Apache Lucence基础上的搜索引擎 它不仅可以进行全文搜素 还可以进行以下工作 分
  • centos7 Docker化应用体验

    centos7 Docker化应用体验 环境分析 WordPress运行环境需要如下软件的支持 PHP 5 6 或 更新版本 MySQL 5 6 或 更新版本 Apache 和 mod rewrite 模块 下载应用镜像 下载mariadb
  • RobotFramework-ride自动化操作教程

    一丶启动robotframework 启动RIDE 打开用例文件 找到文件位置 gt 选择文件 查看资源文件 确保用例所需资源文件当前目录都存在 三 用例编写 执行 新增用例 2 执行用例 勾选要执行的用例 点击run tests 或者 F
  • 浅谈漏洞及其分类

    浅谈漏洞及其分类 一 漏洞概念 漏洞是指一个系统上硬件 软件 协议等具体实现或系统安全策略上存在的弱点或缺陷 系统对特定威胁攻击或危险事件的敏感性 或进行攻击的威胁作用的可能性 这些缺陷 错误或不合理之处可能被有意或无意地利用 可以使攻击者
  • python中unexpected indent报错的解决办法

    python中unexpected indent报错的解决办法 在我们初步学习pyton的时候 由于对python语言的学习掌握不充分 则会导致所编写的代码 运行时候报错 比如 容易报错的unexpected indent问题 下面举例说明
  • Mybatis多对多查询+PageHelpler分页问题

    多对多查询 说明 tb user用户表 tb role角色表 tb user role用户角色关联表 实现表数据的多对多查询并返回 使用PageHelper对查询结果分页 用户表 Data NoArgsConstructor AllArgs
  • 想学好python?这18条学习技巧你一定要掌握。能甩别人两条街。

    在这篇文章中 我们将讨论最常用的python技巧 大多数这些技巧都是我在日常工作中使用过的简单的Trick 我觉得好东西就是要拿出来和大家一起分享 闲话少说 我们直接开始吧 处理用户的多个输入 有时我们需要从用户那里获得多个输入 以便使用循
  • 手把手教你在Tensorflow实现BEGAN 达到惊人的人脸图像生成效果

    导读 本文是基于谷歌大脑 Google Brain 发表在 arXiv 的最新论文 BEGAN 边界平衡生成对抗网络 实现的 该工作针对GAN 面临的一些难题 例如如何衡量收敛 如何控制分布多样性以及如何维持鉴别器和生成器之间的平衡等问题