pix2pix,pix2pix论文
pix2pix模型中生成的图片的准确率怎么看?
GPT3: pix2pix中生成图片的准确率模型相当不错。它能够从输入图像中生成逼真的图片。
pix2pix网络,Pytorch代码中, valid 和 fake 两个参数表示什么
class UNetDown(nn.Module):
def __init__(self, in_size, out_size, normalize=True, dropout=0.0):
super(UNetDown, self).__init__()
layers = [nn.Conv2d(in_size, out_size, 4, 2, 1, bias=False)]
if normalize:
layers.append(nn.InstanceNorm2d(out_size))
layers.append(nn.LeakyReLU(0.2))
if dropout:
layers.append(nn.Dropout(dropout))
self.model = nn.Sequential(*layers)
def forward(self, x):
return self.model(x)
class UNetUp(nn.Module):
def __init__(self, in_size, out_size, dropout=0.0):
super(UNetUp, self).__init__()
layers = [ nn.ConvTranspose2d(in_size, out_size, 4, 2, 1, bias=False),
nn.InstanceNorm2d(out_size),
nn.ReLU(inplace=True)]
if dropout:
layers.append(nn.Dropout(dropout))
self.model = nn.Sequential(*layers)
def forward(self, x, skip_input):
x = self.model(x)
x = torch.cat((x, skip_input), 1)
return x
class GeneratorUNet(nn.Module):
def __init__(self, in_channels=3, out_channels=3):
super(GeneratorUNet, self).__init__()
self.down1 = UNetDown(in_channels, 64, normalize=False)
self.down2 = UNetDown(64, 128)
self.down3 = UNetDown(128, 256)
self.down4 = UNetDown(256, 512, dropout=0.5)
self.down5 = UNetDown(512, 512, dropout=0.5)
self.down6 = UNetDown(512, 512, dropout=0.5)
self.down7 = UNetDown(512, 512, dropout=0.5)
self.down8 = UNetDown(512, 512, normalize=False, dropout=0.5)
self.up1 = UNetUp(512, 512, dropout=0.5)
self.up2 = UNetUp(1024, 512, dropout=0.5)
self.up3 = UNetUp(1024, 512, dropout=0.5)
self.up4 = UNetUp(1024, 512, dropout=0.5)
self.up5 = UNetUp(1024, 256)
self.up6 = UNetUp(512, 128)
self.up7 = UNetUp(256, 64)
self.final = nn.Sequential(
nn.Upsample(scale_factor=2),
nn.ZeroPad2d((1, 0, 1, 0)),
nn.Conv2d(128, out_channels, 4, padding=1),
nn.Tanh()
)
def forward(self, x):
# U-Net generator with skip connections from encoder to decoder
d1 = self.down1(x)
d2 = self.down2(d1)
d3 = self.down3(d2)
d4 = self.down4(d3)
d5 = self.down5(d4)
d6 = self.down6(d5)
d7 = self.down7(d6)
d8 = self.down8(d7)
u1 = self.up1(d8, d7)
u2 = self.up2(u1, d6)
u3 = self.up3(u2, d5)
u4 = self.up4(u3, d4)
u5 = self.up5(u4, d3)
u6 = self.up6(u5, d2)
u7 = self.up7(u6, d1)
return self.final(u7)
---------------------
安装pix2text出错
内存问题。安装pix2text需要充足的内存,出错是内存过小导致的,需要进行释放内存使用等,深受人们的喜爱。
pix2pix可以生成512*512的图嘛
pix2pix是可以生成512*512的图
图像处理的很多问题都是将一张输入的图片转变为一张对应的输出图片,比如灰度图、梯度图、彩色图之间的转换等。通常每一种问题都使用特定的算法(如:使用CNN来解决图像转换问题时,要根据每个问题设定一个特定的loss function 来让CNN去优化,而一般的方法都是训练CNN去缩小输入跟输出的欧氏距离,但这样通常会得到比较模糊的输出)。这些方法的本质其实都是从像素到像素的映射。于是论文在GAN的基础上提出一个通用的方法:pix2pix 来解决这一类问题。通过pix2pix来完成成对的图像转换(Labels to Street Scene, Aerial to Map,Day to Night等),可以得到比较清晰的结果。
Pix2pix-两个领域匹配图像的转换
? ? ? ? 图像处理中的很多问题都是将一张输入的图片转变成一张对应的输出图像,比如将一张灰度图转换为一张彩色图,将一张素描图转换为一张实物图, 这类问题的本质上是像素到像素的映射。2017年的CVPR上发表了一篇文章提出了一种基于GAN的Pix2pix网络来解决这类问题,pix2pix可以实现两个领域中匹配图像直接的转换,而且所得的结果比较清晰。
? ? ? ? 该结构中生成器G的输入为Img_A,大小为(batch_size, A_channel, cols, rows), 输出为Img_B,大小为(batch_size, B_channel, cols, rows)。判别器D的输入为Img_A和Img_B的图像对,需要将两个图像在channel的维度上进行拼接,因此判别器输入数据的尺寸为(batch_size, A_channel + B_channel, cols, rows),判别器的输出为(batch_size, 1, s1, s2)。
pix2pix使用的是cGAN结构,除了cGAN的基本损失函数,生成器还增加了一个像素损失。
(1)生成器的损失函数 :生成器的损失函数由对抗损失和像素损失构成。
对抗损失:
像素损失:
生成器总的损失为:?
(2)判别器的损失函数 : pix2pix中判别器的损失与cGAN相同。
判别器总的损失为:?
[GAN笔记] CycleGAN
论文链接:
1. 介绍
图像翻译是指将图片内容从一个域转换到另一个域。这类任务一般都需要两个域中具有相同内容的成对图片作为训练数据。比如在pix2pix中,要将白天的图片转换成夜晚的图片(图 1),那么就需要将同一个地方的白天和夜晚的图片作为一对训练数据对模型进行训练。但是这种成对的训练数据很难获得。
2. 方法
3. 效果
论文先将CycleGAN 跟当时的一些图像风格转换的方法在具有成对图像的数据集上进行比较。在这里,用完全监督的方法pix2pix作为上界。可以看到,CycleGAN 生成的图片对于除pix2pix以外的方法来说效果好很多。而相对于pix2pix,CycleGAN 生成的图片虽然不够清晰,但基本接近。
4.总结
CycleGAN 解决了pix2pix 必须使用成对数据进行训练的问题,原理比较简单,但非常有效。只需要不同域的一系列图片即可进行训练。类似的工作还有DualGAN,DiscoGAN。三者的想法和模型基本一样,发在了不同的地方。。