pix2pix算法 pix2pix算法改造
pix2pix添加通道
你好题主,这个问题我来回答。你说的添加通道是指pix2pix添加通道
pix2pix算法 pix2pix算法改造
pix2pix的解决方法是在输入中增加一个低维特征通道
pix2pix添加通道 pix2pix的解决方法是在输入中增加一个低维特征通道
pix2pix添加通道
pix2pix的解决方法是在输入中增加一个低维特征通道
[GAN笔记] CycleGAN
论文链接:
1. 介绍
图像翻译是指将图片内容从一个域转换到另一个域。这类任务一般都需要两个域中具有相同内容的成对图片作为训练数据。比如在pix2pix中,要将白天的图片转换成夜晚的图片(图 1),那么就需要将同一个地方的白天和夜晚的图片作为一对训练数据对模型进行训练。但是这种成对的训练数据很难获得。
2. 方法
3. 效果
论文先将CycleGAN 跟当时的一些图像风格转换的方法在具有成对图像的数据集上进行比较。在这里,用完全监督的方法pix2pix作为上界。可以看到,CycleGAN 生成的图片对于除pix2pix以外的方法来说效果好很多。而相对于pix2pix,CycleGAN 生成的图片虽然不够清晰,但基本接近。
4.总结
CycleGAN 解决了pix2pix 必须使用成对数据进行训练的问题,原理比较简单,但非常有效。只需要不同域的一系列图片即可进行训练。类似的工作还有DualGAN,DiscoGAN。三者的想法和模型基本一样,发在了不同的地方。。
用算法“脱掉”女性衣服的DeepNude幕后技术揭秘
概述:
本文从用算法“脱掉”女性衣服的DeepNude的不良应用现象及其消亡的现象为引子,介绍了其应用的2种python技术。支持生成Nude图像的pix2pix算法,和支持对python程序打包的PyOxidizer库做了介绍。旨在抛砖引玉,对读者的python技术提高有帮助。
DeepNude的缘起
" 世界还没有为DeepNude做好准备。 " 2019年3月,当DeepNude正式推出时,它应该只是一个"玩笑项目"。DeepNude提供用户选择一个穿着衣服女性的照片,通过应用算法计算后,应用会将果体的效果呈现出来。在免费版本的照片上标有"假"水印。据称,该算法的模型基于近10,000张果体女性的图像进行训练而来。根据测试,在50美元的付费版本上,水印只出现在角落里,可以很容易地隐藏或修剪。该算法不适用于男性图像。
4月20日,DeepNude宣布临时暂停申请。作者然后宣布他们正在制作桌面版。它于6月23日在Windows 10和Linux上正式推出。几天后,在6月26日,DeepNude指示其服务器以及应用程序不可用。
嘘!悄悄告诉你用算法“脱掉”女性衣服的DeepNude幕后技术
从python算法模型,到能运行在window平台的应用,这些背后都用到了哪些python资源呢,以下为你一一道来。当然作出一款非法的应用,会受到法律的制裁,这里仅仅从技术角度出发来思考。
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)
---------------------
判别器的真假标签
pix2pix可以生成512*512的图嘛
pix2pix是可以生成512*512的图
图像处理的很多问题都是将一张输入的图片转变为一张对应的输出图片,比如灰度图、梯度图、彩色图之间的转换等。通常每一种问题都使用特定的算法(如:使用CNN来解决图像转换问题时,要根据每个问题设定一个特定的loss function 来让CNN去优化,而一般的方法都是训练CNN去缩小输入跟输出的欧氏距离,但这样通常会得到比较模糊的输出)。这些方法的本质其实都是从像素到像素的映射。于是论文在GAN的基础上提出一个通用的方法:pix2pix 来解决这一类问题。通过pix2pix来完成成对的图像转换(Labels to Street Scene, Aerial to Map,Day to Night等),可以得到比较清晰的结果。