Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
models
提交
c5a2c0d2
M
models
项目概览
PaddlePaddle
/
models
大约 2 年 前同步成功
通知
232
Star
6828
Fork
2962
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
602
列表
看板
标记
里程碑
合并请求
255
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
M
models
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
602
Issue
602
列表
看板
标记
里程碑
合并请求
255
合并请求
255
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
c5a2c0d2
编写于
6月 28, 2019
作者:
L
lvmengsi
提交者:
GitHub
6月 28, 2019
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix gan readme (#2590)
* fix gan readme
上级
69a9aa6c
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
36 addition
and
37 deletion
+36
-37
PaddleCV/PaddleGAN/README.md
PaddleCV/PaddleGAN/README.md
+31
-37
PaddleCV/PaddleGAN/images/female_stargan_attgan_stgan.png
PaddleCV/PaddleGAN/images/female_stargan_attgan_stgan.png
+0
-0
PaddleCV/PaddleGAN/images/male_stargan_attgan_stgan.png
PaddleCV/PaddleGAN/images/male_stargan_attgan_stgan.png
+0
-0
PaddleCV/PaddleGAN/network/base_network.py
PaddleCV/PaddleGAN/network/base_network.py
+5
-0
未找到文件。
PaddleCV/PaddleGAN/README.md
浏览文件 @
c5a2c0d2
...
@@ -130,17 +130,17 @@ StarGAN, AttGAN和STGAN所需要的[Celeba](http://mmlab.ie.cuhk.edu.hk/projects
...
@@ -130,17 +130,17 @@ StarGAN, AttGAN和STGAN所需要的[Celeba](http://mmlab.ie.cuhk.edu.hk/projects
Pix2Pix和CycleGAN的效果如图所示:
Pix2Pix和CycleGAN的效果如图所示:
<p
align=
"cent
o
r"
>
<p
align=
"cent
e
r"
>
<img
src =
"images/pix2pix_cyclegan.png"
width=
550
><br
/>
<img
src=
"images/pix2pix_cyclegan.png"
width=
"650"
/><br
/>
Pix2Pix和CycleGAN的效果图
Pix2Pix和CycleGAN的效果图
</p>
</p>
StarGAN,AttGAN和STGAN的效果如图所示:
StarGAN,AttGAN和STGAN的效果如图所示:
<p
align=
"cent
o
r"
>
<p
align=
"cent
e
r"
>
<img
src =
"images/female_stargan_attgan_stgan.png"
width=
550
><br
/>
<img
src=
"images/female_stargan_attgan_stgan.png"
width=
"650"
/><br
/>
StarGAN,AttGAN和STGAN的效果图
StarGAN,AttGAN和STGAN的效果图
</p>
</p>
...
@@ -181,47 +181,43 @@ STGAN只输入有变化的标签,引入GRU结构,更好的选择变化的属
...
@@ -181,47 +181,43 @@ STGAN只输入有变化的标签,引入GRU结构,更好的选择变化的属
-
Pix2Pix由一个生成网络和一个判别网络组成。生成网络中编码部分的网络结构都是采用
`convolution-batch norm-ReLU`
作为基础结构,解码部分的网络结构由
`transpose convolution-batch norm-ReLU`
组成,判别网络基本是由
`convolution-norm-leaky_ReLU`
作为基础结构,详细的网络结构可以查看
`network/Pix2pix_network.py`
文件。生成网络提供两种可选的网络结构:Unet网络结构和普通的encoder-decoder网络结构。网络利用损失函数学习从输入图像到输出图像的映射,生成网络损失函数由CGAN的损失函数和L1损失函数组成,判别网络损失函数由CGAN的损失函数组成。生成器的网络结构如下图所示:
-
Pix2Pix由一个生成网络和一个判别网络组成。生成网络中编码部分的网络结构都是采用
`convolution-batch norm-ReLU`
作为基础结构,解码部分的网络结构由
`transpose convolution-batch norm-ReLU`
组成,判别网络基本是由
`convolution-norm-leaky_ReLU`
作为基础结构,详细的网络结构可以查看
`network/Pix2pix_network.py`
文件。生成网络提供两种可选的网络结构:Unet网络结构和普通的encoder-decoder网络结构。网络利用损失函数学习从输入图像到输出图像的映射,生成网络损失函数由CGAN的损失函数和L1损失函数组成,判别网络损失函数由CGAN的损失函数组成。生成器的网络结构如下图所示:
<p
align=
"cent
o
r"
>
<p
align=
"cent
e
r"
>
<img
src =
"images/pix2pix_gen.png"
width=
550
><br
/>
<img
src=
"images/pix2pix_gen.png"
width=
"550"
/><br
/>
Pix2Pix生成网络结构图[5]
Pix2Pix生成网络结构图[5]
</p>
</p>
-
CycleGAN由两个生成网络和两个判别网络组成,生成网络A是输入A类风格的图片输出B类风格的图片,生成网络B是输入B类风格的图片输出A类风格的图片。生成网络中编码部分的网络结构都是采用
`convolution-norm-ReLU`
作为基础结构,解码部分的网络结构由
`transpose convolution-norm-ReLU`
组成,判别网络基本是由
`convolution-norm-leaky_ReLU`
作为基础结构,详细的网络结构可以查看
`network/CycleGAN_network.py`
文件。生成网络提供两种可选的网络结构:Unet网络结构和普通的encoder-decoder网络结构。生成网络损失函数由CGAN的损失函数,重构损失和自身损失组成,判别网络的损失函数由CGAN的损失函数组成。
-
CycleGAN由两个生成网络和两个判别网络组成,生成网络A是输入A类风格的图片输出B类风格的图片,生成网络B是输入B类风格的图片输出A类风格的图片。生成网络中编码部分的网络结构都是采用
`convolution-norm-ReLU`
作为基础结构,解码部分的网络结构由
`transpose convolution-norm-ReLU`
组成,判别网络基本是由
`convolution-norm-leaky_ReLU`
作为基础结构,详细的网络结构可以查看
`network/CycleGAN_network.py`
文件。生成网络提供两种可选的网络结构:Unet网络结构和普通的encoder-decoder网络结构。生成网络损失函数由CGAN的损失函数,重构损失和自身损失组成,判别网络的损失函数由CGAN的损失函数组成。
<p
align=
"cent
o
r"
>
<p
align=
"cent
e
r"
>
<img
src =
"images/pix2pix_gen.png"
width=
550
><br
/>
<img
src=
"images/pix2pix_gen.png"
width=
"550"
/><br
/>
CycleGAN生成网络结构图[5]
CycleGAN生成网络结构图[5]
</p>
</p>
-
StarGAN中生成网络的编码部分主要由
`convolution-instance norm-ReLU`
组成,解码部分主要由
`transpose convolution-norm-ReLU`
组成,判别网络主要由
`convolution-leaky_ReLU`
组成,详细网络结构可以查看
`network/StarGAN_network.py`
文件。生成网络的损失函数是由CGAN的损失函数,重构损失和分类损失组成,判别网络的损失函数由预测损失,分类损失和梯度惩罚损失组成。
-
StarGAN中生成网络的编码部分主要由
`convolution-instance norm-ReLU`
组成,解码部分主要由
`transpose convolution-norm-ReLU`
组成,判别网络主要由
`convolution-leaky_ReLU`
组成,详细网络结构可以查看
`network/StarGAN_network.py`
文件。生成网络的损失函数是由CGAN的损失函数,重构损失和分类损失组成,判别网络的损失函数由预测损失,分类损失和梯度惩罚损失组成。
<p
align=
"centor"
>
<p
align=
"center"
>
<img
src =
"images/stargan_gen.png"
width=
300
><br/>
<img
src=
"images/stargan_gen.png"
width=
350
/>
StarGAN生成网络结构[7]
<img
src=
"images/stargan_dis.png"
width=
400
/>
<br
/>
</p>
StarGAN的生成网络结构[左]和判别网络结构[右] [7]
<p
align=
"centor"
>
<img
src =
"images/stargan_dis.png"
width=
300
><br/>
StarGAN判别网络结构[7]
</p>
</p>
-
AttGAN中生成网络的编码部分主要由
`convolution-instance norm-ReLU`
组成,解码部分由
`transpose convolution-norm-ReLU`
组成,判别网络主要由
`convolution-leaky_ReLU`
组成,详细网络结构可以查看
`network/AttGAN_network.py`
文件。生成网络的损失函数是由CGAN的损失函数,重构损失和分类损失组成,判别网络的损失函数由预测损失,分类损失和梯度惩罚损失组成。
-
AttGAN中生成网络的编码部分主要由
`convolution-instance norm-ReLU`
组成,解码部分由
`transpose convolution-norm-ReLU`
组成,判别网络主要由
`convolution-leaky_ReLU`
组成,详细网络结构可以查看
`network/AttGAN_network.py`
文件。生成网络的损失函数是由CGAN的损失函数,重构损失和分类损失组成,判别网络的损失函数由预测损失,分类损失和梯度惩罚损失组成。
<p
align=
"cent
o
r"
>
<p
align=
"cent
e
r"
>
<img
src =
"images/attgan_net.png"
width=
800
><br
/>
<img
src=
"images/attgan_net.png"
width=
800
/>
<br
/>
AttGAN的网络结构[8]
AttGAN的网络结构[8]
</p>
</p>
-
STGAN中生成网络再编码器和解码器之间加入Selective Transfer Units
\(
STU
\)
,有选择的转换编码网络,从而更好的适配解码网络。生成网络中的编码网络主要由
`convolution-instance norm-ReLU`
组成,解码网络主要由
`transpose convolution-norm-leaky_ReLU`
组成,判别网络主要由
`convolution-leaky_ReLU`
组成,详细网络结构可以查看
`network/STGAN_network.py`
文件。生成网络的损失函数是由CGAN的损失函数,重构损失和分类损失组成,判别网络的损失函数由预测损失,分类损失和梯度惩罚损失组成。
-
STGAN中生成网络再编码器和解码器之间加入Selective Transfer Units
\(
STU
\)
,有选择的转换编码网络,从而更好的适配解码网络。生成网络中的编码网络主要由
`convolution-instance norm-ReLU`
组成,解码网络主要由
`transpose convolution-norm-leaky_ReLU`
组成,判别网络主要由
`convolution-leaky_ReLU`
组成,详细网络结构可以查看
`network/STGAN_network.py`
文件。生成网络的损失函数是由CGAN的损失函数,重构损失和分类损失组成,判别网络的损失函数由预测损失,分类损失和梯度惩罚损失组成。
<p
align=
"cent
o
r"
>
<p
align=
"cent
e
r"
>
<img
src =
"images/stgan_net.png"
width=
800
><br
/>
<img
src=
"images/stgan_net.png"
width=
800
/>
<br
/>
STGAN的网络结构[9]
STGAN的网络结构[9]
</p>
</p>
...
@@ -230,17 +226,16 @@ STGAN只输入有变化的标签,引入GRU结构,更好的选择变化的属
...
@@ -230,17 +226,16 @@ STGAN只输入有变化的标签,引入GRU结构,更好的选择变化的属
## FAQ
## FAQ
**Q:**
StarGAN/AttGAN/STGAN中属性没有变化,为什么?
**Q:**
StarGAN/AttGAN/STGAN中属性没有变化,为什么?
**A:**
查看是否所有的标签都转换对了。
**A:**
查看是否所有的标签都转换对了。
**Q:**
预测结果不正常,是怎么回事?
**A:**
某些GAN预测的时候batch_norm的设置需要和训练的时候行为一致,查看模型库中相应的GAN中预测时batch_norm的行为和自己模型中的预测时batch_norm的行为是否一致。
**Q:**
为什么STGAN和ATTGAN中变男性得到的预测结果是变女性呢?
**Q:**
预测结果不正常,是怎么回事?
**A:**
某些GAN预测的时候batch_norm的设置需要和训练的时候行为一致,查看模型库中相应的GAN中预测时batch_norm的行为和自己模型中的预测时batch_norm的
行为是否一致。
**A:**
这是由于预测时标签的设置,目标标签是基于原本的标签进行改变,比如原本图片是男生,预测代码对标签进行转变的时候会自动变成相对立的标签,即女性,所以得到的结果是女生。如果想要原本是男生,转变之后还是男生,可以参考模型库中预测代码的StarGAN的标签设置。
**Q:**
为什么STGAN和ATTGAN中变男性得到的预测结果是变女性呢?
**A:**
这是由于预测时标签的设置,目标标签是基于原本的标签进行改变,比如原本图片是男生,预测代码对标签进行转变的时候会自动变成相对立的标签,即女
性,所以得到的结果是女生。如果想要原本是男生,转变之后还是男生,可以参考模型库中预测代码的StarGAN的标签设置。
## 参考论文
## 参考论文
...
@@ -269,8 +264,7 @@ STGAN只输入有变化的标签,引入GRU结构,更好的选择变化的属
...
@@ -269,8 +264,7 @@ STGAN只输入有变化的标签,引入GRU结构,更好的选择变化的属
## 版本更新
## 版本更新
-
4/2019 新增CGAN, DCGAN, Pix2Pix, CycleGAN
-
6/2019 新增CGAN, DCGAN, Pix2Pix, CycleGAN,StarGAN, AttGAN, STGAN
-
6/2019 新增StarGAN, AttGAN, STGAN
## 作者
## 作者
-
[
ceci3
](
https://github.com/ceci3
)
-
[
ceci3
](
https://github.com/ceci3
)
...
...
PaddleCV/PaddleGAN/images/female_stargan_attgan_stgan.png
查看替换文件 @
69a9aa6c
浏览文件 @
c5a2c0d2
1.2 MB
|
W:
|
H:
1.4 MB
|
W:
|
H:
2-up
Swipe
Onion skin
PaddleCV/PaddleGAN/images/male_stargan_attgan_stgan.png
已删除
100644 → 0
浏览文件 @
69a9aa6c
1.4 MB
PaddleCV/PaddleGAN/network/base_network.py
浏览文件 @
c5a2c0d2
...
@@ -182,6 +182,11 @@ def conv2d(input,
...
@@ -182,6 +182,11 @@ def conv2d(input,
use_cudnn
=
use_cudnn
,
use_cudnn
=
use_cudnn
,
param_attr
=
param_attr
,
param_attr
=
param_attr
,
bias_attr
=
bias_attr
)
bias_attr
=
bias_attr
)
if
need_crop
:
conv
=
fluid
.
layers
.
crop
(
conv
,
shape
=
(
-
1
,
conv
.
shape
[
1
],
conv
.
shape
[
2
]
-
1
,
conv
.
shape
[
3
]
-
1
),
offsets
=
(
0
,
0
,
1
,
1
))
if
norm
is
not
None
:
if
norm
is
not
None
:
conv
=
norm_layer
(
conv
=
norm_layer
(
input
=
conv
,
norm_type
=
norm
,
name
=
name
+
"_norm"
,
is_test
=
is_test
)
input
=
conv
,
norm_type
=
norm
,
name
=
name
+
"_norm"
,
is_test
=
is_test
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录