对于pix2pix的介绍以及实现

最近读了pix2pix的相关文章,也是关于对抗生成的。它与之前接触的GAN有挺大的不同。比如从训练集来说,它是进行成对的训练(接下来会介绍),损失函数的不同比如加入了L1损失,以及生成器的输入,以及判别器都有了很大的不同,接下来会为大家一一介绍。

1  生成器UNET

首先先介绍生成器的部分,生成器使用了UNET的生成网络结构如下图

这个图我是在github中截取的。简单的介绍一下生成器的结构。首先从上图最左边输入一张图片,经过两次的卷积变成64个通道,紧接着经过一次池化层不改变通道数,只是把图像的大小变为原来的一半,紧接着操作类似,直到变成最底下的1*512*32*32的这种类型(batchsize=1,通道数为512,图片大小32*32)再次经过两个卷积层变成1*1024*28*28这种类型。之后在看中间的这个箭头它的意思就是合并举个例子就是说,图片最下面的第一个箭头它是由左边的1*512*64*64和右边的经过上采样之后得到的图片1*512*56*56进行通道的拼接。可以看到这里的图片的大小并不是不同的,经过查资料发现可能是做了一些修剪,之后接下来的过程以此类推,不断的进行拼接,最后生成图像。

到这里其实已经没有什么问题了,但是在实现代码中发现,我的生成器结构与文中的略有不同比如我没有使用过池化层或者是连续的两次卷积,经过请教其实多一点少一点并不会有多大的问题,只要好用就行了,如果你的效果比他还好的话,那么就相当于一个小小的创新,不要太在意这些细节,抓住主要的即可。

2  判别器PATCHGAN

刚读文章的时候,文章里介绍会把图片分割成70*70的图片,判断每一个图片的真实值,之后再取平均。我一开始以为是把图片分成70块,判断每一块的真实值,但实际在代码中却是一个个卷积层,并没有看到分割的过程,所以查了一查后来发现分割操作其实卷积层已经完成了,这里涉及到感受野的部分,你可以把它理解一个卷积核可以覆盖的范围,经过最后的计算,最后确实是70*70的大小。这里不过多的介绍感受野,可能以后会写一些关于这部分的内容下面给出鉴别器的结构图:

 3  pix2pix结构图

首先先把结构图给大家看看:

 首先从左边生成器开始讲,我认为它的结构和cgan相同,首先是一个真实的轮廓或者是标签图片放入生成器中进行训练,之后再将生成的假图片和真实的也就是刚刚放入生成器中的真实轮廓放入鉴别器中,在代码中是合并在一起变成6个通道进行训练。鉴别器是放入真实的图片和它的轮廓图片放在一起进行训练。整体结构较为简单,实际效果还不错。具体的损失函数比较简单就是一个生成对抗损失加上一个生成图片和真实图片的L1损失加起来,放入生成器优化器中进行训练。

扫描二维码关注公众号,回复: 15143469 查看本文章

 4  实验结果

最后给出我的运行结果:

 如果大家需要这个代码,大家可以在评论区回复,我再把链接发给大家,因为这是很久之前跑的程序,找起来还是有点麻烦。

大家和我要的代码我一般看见了就发了,一般三到七天吧因为我不经常看,大家要是收到的话可以回我一下,我怕大家没有收到。之后我自己其实也学了一些其他的gan比如stylegan之类的文章,只是因为其他人写的特别好,我就没怎么写,大家有关gan的问题可以问问我,如果我知道的话我一定会给大家解答的,gan真的是比较有意思。

猜你喜欢

转载自blog.csdn.net/qq_45710342/article/details/122332878