StackGAN笔记

2023-11-02

Stack可译做堆叠,就是在GAN上面再放上一个GAN。
作者讲述的自己的解决思路,原来难以生成高分辨率的图像,他们分解了这个问题,把生成高分辨率图片这个任务分解成两个更为简单的任务。就是文中说的一个GAN生成大致的形状和颜色,第二个GAN生成细节和修正错误,这比直接一个GAN生成更加容易。这似乎研究中解决一些任务的一种常用的方法,以前看的一篇论文,图像修复的,先修复缺失的轮廓边缘,再填充颜色。比直接一次完成好。就是把一个任务分成可以区分的两个任务,分别加以处理。

翻译:

摘要:
从文字描述中生成具有照片般真实感的图片一直是计算机视觉中具有挑战性的一个课题,并且具有很多的应用。现有方法生成的图片可以粗略的反映出给定的描述,但是缺乏需要的细节和生动的对象局部。本文提出了stackGan,它从文字描述中生成具有照片般真实感的图像。1阶段的GAN根据文字描述草绘出一张简单形状和基本颜色符合的低分辨率图片,第二阶段的GAN把第一阶段的结果和文字条件作为输入,生成具有照片真实感的高分辨率的图片。二段GAN能够修正错误,并且通过增强过程给图片增加令人信服的细节。StackGAN生成的图片比其它方式生成的看上去更加可信。重要的一方面,这个模型可以生成256*256的,其它模型最多知道了128.为了掩饰StackGAN的效果,我们基于CUB 和Oxford-102 数据集做了广泛的实验,这两个数据集包含了足够多的各种类别的对象,并且每类对象有很多的外观变体,被广泛用于图像生成分析。

1、引言:
内容和摘要差不太多,略。
2、相关工作:
从基于深度学习的,到基于GAN的,到基于CGAN的讲了一下,再讲了和自己结构类似的模型,相对来说这个主要的优势是生成图片的分辨率高。
3、StackGAN
首先讲主要结构和摘要差不多
3.1 GAN和CGAN的构成
3.2 Stage-I GAN
在这里插入图片描述
如上图所示,首先使用编码器做文本嵌入将文字编码成为隐变量。因为隐变量的维数很大,它对应到的隐变量空间相对于数据量来说很大,所以这可能造成隐变量数据组成的流形的不连续。(我的理解:隐变量数据流形以及后面的条件流形,应该是说的文字描述是隐变量空间下面的一个低维流形,远不会充满整个空间。 不连续大概就是说比如手机,台式机这两个样本描述差别较大,不连续,给个手机,平板,笔记本,台式机这样的样本描述就会比较连续了)为了缓解这个问题,论文引入了条件增强技术来为生成器产生更多的条件变量。方法就是从高斯分布 N (µ(ϕt), Σ(ϕt))中生成隐变量,其中均值和方差矩阵都是隐变量ϕt的函数,也是通过学习得到,并且µ0(ϕt) 和 Σ0(ϕt)使用了重参数技巧进行训练。

这种方案有利于在条件流行上形成微小的扰动,从而在小样本数量的情况下生成更多的文本-图片対。为了增强条件流行的平滑性,还加入了一个正则式:DKL(N (µ(ϕt), Σ(ϕt))|| N (0, I)) 就是让函数构成的高斯分布和标准高斯分布的KL散度最小化。上面最后形成条件 c0,在这里插入图片描述
其中e ∼ N (0, I)).
于是Stage-I的训练就是最大,最小化小面这两个式子。和GAN总体形式差不多,只是函数里面多了些参数,另外生成器多了个正则化项。Io和t是真实分布的图片和文本,z是随机的那个隐变量。
在这里插入图片描述
Stage-I结构:
生成器:文本嵌入ϕt被放入全连接层产生µ0 和 σ0,然后放入高斯分布产生c0,c0再喝z连接输入生成网络
判别器:文本嵌入ϕt先通过全连接层变成Nd维的数据,然后重复它,将它变成Md × Md × Nd的张量。输入的图片会降采样到Md × Md大小。然后将这两者在通道维度连接起来形成一个tensor,将这个tensor送入1*1的卷积层以共同学习图片和张量的特征,最后,连接到一个右端只有一个节点的全连接层产生出得分。

Stage-I结构:
生成器:第I阶段生成的图片可能缺乏逼真的局部细节,或者包含一些形状扭曲。文本中一些对于生成图片很重要的信息可能被忽略了。二阶段的网络使用第一阶段生成的图片和以及前面文本嵌入作为输入,文本嵌入可以帮助生成第一阶段忽略掉的信息。
stage-II训练过程的公式表达如下
在这里插入图片描述
其中S0就是第一阶段输出的图片
c是条件,它和第一阶段共用ϕt,但是使用不同的全连接层来生成高斯分布的均值和方差,希望通过这个来捕获第一阶段缺失的信息。

网络结构:
二阶段生成器的输入组合方式和1阶段判别器的类似,就是将条件c的第0维作为通道,重复每个元素到图片大小,在通道维度连接图片和条件,输入生成器。然后通过若干个残差网络连接起来编码图片和文字特征,最后通过若干个上采样层生成图片。
为了判别器能更好的学习图片和文本之间的alignment(译作对齐,啥意思?),两个阶段都使用了Reed 等提出的matching-aware discriminator 感知匹配鉴别器,而不是一般的鉴别器。就是李宏毅课程中讲到的,有两种负样本,生成图片和条件。真实图片和不匹配的条件。

实现细节:
上采样模块 采用的是最近邻插值方法 nearest-neighbor upsampling,后面跟随一个 3 × 3 步长为 1的卷积,除了最后一层之外,都采用批处理正则化+Relu激活函数。
残差网络模块中类似采用 3 × 3 步长为 1的卷积+批处理正则化+Relu激活函数。

下采样采用4*4 步长为2的卷积,批正则化+LeakyReLU,第一层没有批处理正则化。

训练过程:先交替的训练Stage-I的网络600个epoch(确定是epoch?),然后再交替的训练Stage-II的网络600个epoch(确定是epoch?)
学习率初始化0.0002,没100就减少到1/2
都采用adam优化器,64个样本点为一批。

实验
作者采用了广泛的方法来评价他们的模型,使用了领先的比较方法。
同时还评估了自己模型设计和局部模块。比如只用Stage-I生成高分辨率图片,条件增强部分是否有用等。
采用CUB数据集,含有200种鸟的11788张图片,以及Oxford-102数据集,含有102种花的8189张图片。其中cub数据集做了裁剪,因为鸟的在整张图片中的大小比例太小。按照论文xxx的设置,分成了类别不相交的训练集和测试集(为何,这里没看懂)
During training, we randomly crop and flip images,and generate the corresponding text embedding as the average of four randomly selected descriptions corresponding to the image.
训练过程中还随机的裁剪和旋转图片,生成对应的文本嵌入做为随机选择四张图片对应的描述的平均。(没看懂)

后面是结果对比,暂略。

组件的分析:
如果只使用Stage-I的,得分低很多,说明Stage-II的必要性。如果Stage-II不输入文字,得分降低,说明这个也是有用的。
条件增强模块:去掉条件增强模块分数也会降低一些,固定模型的其它输入,只改变条件增强这里的输入,会产生如下图所示的效果。
条件增强改变了图片的视角或者生成对象的姿势。
在这里插入图片描述
为了展示StackGAN学习到了平滑的隐变量流形,作者利用模型从线性插值的句子嵌入(Sentence embedding interpolation:应该就是指从一句文本线性渐变到第二句文本,然后对应到文本嵌入的向量上线性渐变)中生成图片,如下图,第一行,红鸟到黄鸟的渐变,第二三句是更复杂的句子的渐变,句子中包含了更多的描述,比如翅膀颜色,k可译做堆叠,就是在GAN上面再放上一个GAN。
条件增强改变了图片的视角或者生成对象的姿势。在这里插入图片描述为了展示StackGAN学习到了平滑的隐变量流形,作者利用模型从线性插值的句子嵌入(Sentence embedding interpolation:应该就是指从一句文本线性渐变到第二句文本,然后对应到文本嵌入的向量上线性渐变)中生成图片,如下图,第一行,红鸟到黄鸟的渐变,第二三句是更复杂的句子的渐变,句子中包含了更多的描述,比如翅膀颜色,鸟喙等。

在这里插入图片描述

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

StackGAN笔记 的相关文章

随机推荐

  • Vue3 + Element Plus 实现动态标签页及右键菜单

    文章目录 1 前言 1 1 目的 1 2 普通右键菜单 1 3 本文右键菜单方式 2 生成动态标签页 2 1 准备变量容器 2 2 构造标签页 2 3 动态添加标签页 2 4 动态移除标签页 3 生成右键菜单 3 1 扩展标签页 3 2 增
  • subprocess执行命令行获取返回

    subprocess subprocess 模块允许我们启动一个新进程 并连接到它们的输入 输出 错误管道 从而获取返回值 Popen 是 subprocess的核心 子进程的创建和管理都靠它处理 import subprocess p s
  • 编写教师和学生信息的程序

    编写教师和学生信息的程序 1 定义一个抽象类Person 在Person类中声明两个属性 name和age 并设置其对应的getter方法 用于获取人的姓名和年龄 在Person类中声明一个有参构造方法 用于对Person类中的属性进行初始
  • 两个多项式求和

    单链表的应用 两个多项式求和 提到多项式想必定会想到其系数和指数 定义数据结构 typedef struct Polynomial float coe 多项式系数 int exp 多项式指数 struct Polynomial next P
  • 【模式识别&目标检测】——基于机器视觉的无人机避障&RP-YOLOv3实例

    目录 引入 一 YOLOv3模型 1 实时目标检测YOLOv3简介 2 改进的实时目标检测模型 二 数据集建立 结果分析 1 数据集建立 2 模型结果分析 三 无人机避障实现 参考文献 引入 目前对于障碍物的检测整体分为 激光 红外线 超声
  • ubuntu18.04多版本cuda安装与转换(实测有效)

    ubuntu18 04 CUDA详解 Ubuntu18 04安装cuda 10 1及10 0 和cudnn 1 安装显卡驱动 1 1 禁用nouveau驱动 1 2 安装NVIDIA显卡驱动 2 安装CUDA10 1 2 1 下载cuda安
  • 公司前端开发架构改造

    要看更多的文章 欢迎访问我的个人博客 http oldli net 现在的前端早已不是几年前的前端 再也不是jQuery加一个插件就能解决问题的时代 最近对公司前端的开发进行了一系列的改造 初步达到了我想要的效果 但是未来还需要更多的改进
  • 【DOCKER】docker run的-d,-v等参数用处

    0 引用 ref1 docker ps的详解 表格和文本的记录版本 1 手册查询内容 root master cpu docker run help Usage docker run OPTIONS IMAGE COMMAND ARG Ru
  • linux脚本的注释符号是什么,linux的shell编程中的符号`是什么

    bin sh 是指此脚本使用 bin sh来解释执行 是特殊的表示符 其后面根的是此解释此脚本的shell的路径 bash 表示系统提示符 表示此用户为普通用户 超级用户的提示符是 bash是shell的一种 是linux下最常用的一种sh
  • ARM MMU 详解

    一 MMU 的产生 许多年以前 当人们还在使用DOS或是更古老的操作系统的时候 计算机的内存还非常小 一般都是以 K 为单位进行计算 相应的 当时的程序规模也不大 所以内存容量虽然小 但还是可以容纳当时的程序 但随着图形界面的兴起 还有用户
  • @Resource注解的使用

    1 在spring的配置文件中导入命名空间 xmlns context http www springframework org schema context http www springframework org schema cont
  • 推荐一个好组件Javascript文本比较工具

    您的项目上有没有遇到需要在前端显示并比较两个不同版本的文本文件 希望它像winmerge 或eclipse的svn比较工具那样标注不同的地方 我找到了 分享给大家吧 最近项目上需要一个类似cvs svn文本比较工具 把左右两个文本中不一样的
  • 在Eclipse添加Android兼容包( v4、v7 appcompat )

    昨天添加Android兼容包 碰到了很多问题 在这里记录一下 让后面的路好走 如何选择兼容包 请参考Android Support Library Features 二 一 下载Support Library 方法1 右击项目 选择Andr
  • Jenkins配置定时调度部署

    H 22 表示每天22点 自动构建
  • 怎么找CVPR/ICCV/ECCV文章

    原文链接 https www jianshu com p aed3dd8c81fa CVPR论文查找 每年一届 点击如下链接 输入相关关键字即可搜索 http openaccess thecvf com CVPR2013 search py
  • 冒泡排序原理详解及代码实现

    1 冒泡排序数组排序常用的一种方式 为什么要叫冒泡排序呢 这还要从它的原理说起 2 代码实现 低效版 3 原理详解 冒泡排序最基本的思想就是从左到右依次判断相邻的两个数的大小关系 如果前面的数大于后面的数 则两数互换位置 但是只是从左到右遍
  • C++11---智能指针

    智能指针 1 为什么引入智能指针 1 1 内存泄漏 2 智能指针的使用及原理 2 1 RAII 2 2 智能指针的原理 3 C 98 auto ptr 4 unique ptr 5 shared ptr 5 1 循环引用 6 weak pt
  • 在Anaconda下安装了TensorFlow库matplotlib库却调用不了了

    在Anaconda下安装了TensorFlow库 但是Anaconda中的matplotlib库却调用不了了 解决方法如下 1 打开Anaconda Prompt 2 输入activate tensorflow 3 输入conda inst
  • 2022年全国职业院校技能大赛(中职组)网络安全竞赛试题解析-A

    2022年全国职业院校技能大赛 中职组 网络安全竞赛试题 1 总分100分 需要环境可以私信博主 赛题说明 一 竞赛项目简介 网络安全 竞赛共分A 基础设施设置与安全加固 B 网络安全事件响应 数字取证调查和应用安全 C CTF夺旗 攻击
  • StackGAN笔记

    Stack可译做堆叠 就是在GAN上面再放上一个GAN 作者讲述的自己的解决思路 原来难以生成高分辨率的图像 他们分解了这个问题 把生成高分辨率图片这个任务分解成两个更为简单的任务 就是文中说的一个GAN生成大致的形状和颜色 第二个GAN生