CycleGAN模型原理

原创文章,转载请注明: 转载自慢慢的回味

本文链接地址: CycleGAN模型原理

CycleGAN模型原理

前面我们了解了好几种GAN,它们大致可分为:
随机生成模型的GAN,包括GAN,DCGAN,WGAN,WGAN-GP等;
带条件生成模型的GAN,包括CGAN,InfoGAN,ACGAN等。
它们都是监督学习模型,即生成网络都有一个目标样本集。

除了监督学习模型,还有一类非监督学习模型,比如CycleGAN。
CycleGAN如下图所示,它能在油画到相片互相生成;马到斑马互相生成;夏天到冬天季节相互变化。它们都不是要把当前域的样本拟合到另一个域。
它们只是把当前域X的某种公共特征(着色填充)变成了另一个域Y的公共特征,且保持当前图片的主要特征(线条轮廓)不变。
即:
1 X域所有图片的共性:油画 -> Y域所有图片的共性:真实照片,当前主要特征画内容的线条保持不变;
2 X域所有图片的共性:马的纹理 -> Y域所有图片的共性:斑马纹理,当前马的轮廓不会变;
3 X域所有图片的共性:夏天风景 -> Y域所有图片的共性:冬天风景,当前的河流,树木轮廓都不会变。
继续阅读“CycleGAN模型原理”本作品采用知识共享署名 4.0 国际许可协议进行许可。

WGAN-GP与WGAN的区别

原创文章,转载请注明: 转载自慢慢的回味

本文链接地址: WGAN-GP与WGAN的区别

WGAN-GP与WGAN的区别

相比较WGAN,WGAN-GP不再使用clip野蛮的剪裁鉴别网络的梯度值,而是使用梯度惩罚来使梯度更新平滑,即满足1-lipschitz条件,解决了训练梯度消失梯度爆炸的问题。
WGAN视频讲解参考

1 使用随机方式把真实图片和伪造图片混合在一起。

class RandomWeightedAverage(_Merge):
    """Provides a (random) weighted average between real and generated image samples"""
    def _merge_function(self, inputs):
        alpha = K.random_uniform((32, 1, 1, 1))
        return (alpha * inputs[0]) + ((1 - alpha) * inputs[1])

继续阅读“WGAN-GP与WGAN的区别”本作品采用知识共享署名 4.0 国际许可协议进行许可。

WGAN与DCGAN的区别

原创文章,转载请注明: 转载自慢慢的回味

本文链接地址: WGAN与DCGAN的区别

WGAN与DCGAN的区别

1 它们的主要区别在于损失函数不一样,DCGAN使用的是二位交叉熵(binary_crossentropy),WGAN使用的是推土机距离(wasserstein_loss),即目标值与预测值乘积的均值,所以鉴别网络末端不再使用激活函数sigmoid,而是直接输出全连接网络的值。

    def wasserstein_loss(self, y_true, y_pred):
        return K.mean(y_true * y_pred)

这儿需要注意的是:
对于真实的图片,y_true即目标值是-1,参考如下代码。而预测值是0-1,所有预测为真时(鉴别成功),值为-1×1=-1,为伪造的图片时(鉴别失败),值为-1×0=0,即鉴别失败时损失大(0>-1);
对于伪造的图片,y_true即目标值是1,参考如下代码。而预测值是0-1,所有预测为真时(鉴别失败),值为1×1=1,为伪造的图片时(鉴别成功),值为1×0=0,即鉴别失败时损失大(1>0);

        # Adversarial ground truths
        valid = -np.ones((batch_size, 1))
        fake = np.ones((batch_size, 1))

继续阅读“WGAN与DCGAN的区别”本作品采用知识共享署名 4.0 国际许可协议进行许可。

ACGAN与CGAN的区别

原创文章,转载请注明: 转载自慢慢的回味

本文链接地址: ACGAN与CGAN的区别

ACGAN与CGAN的区别如下


1 与CGAN一样的是,在生成网络的输入都混入label;
2 不一样的是在鉴别网络输入时,ACGAN不再混入label,而是在鉴别网络的输出时,把label作为target进行反馈来提交给鉴别网络的学习能力。
3 另一个不一样的是,生成网络和鉴别网络的网络层不再是CGAN的全连接,而是ACGAN的深层卷积网络(这是在DCGAN开始引入的改变),卷积能够更好的提取图片的特征值,所有ACGAN生成的图片边缘更具有连续性,感觉更真实。

继续阅读“ACGAN与CGAN的区别”本作品采用知识共享署名 4.0 国际许可协议进行许可。

CGAN与GAN的区别

原创文章,转载请注明: 转载自慢慢的回味

本文链接地址: CGAN与GAN的区别

CGAN与GAN的区别如下


GAN视频讲解参考
CGAN视频讲解参考
在生成网络的输入和鉴别网络的输入都混入label,这样生成网络就会学会根据label生成含有label特征的图片;鉴别网络就能学会根据label快速学会分类图片。
如下生成网络model不直接传入noise,而是传入noise和label对于元素相乘的结果。
label[1,]->Embedding[10,100]->label_embedding[1,100]->Flatten[100,] X Noise[100,] = model_input[100,]

        noise = Input(shape=(self.latent_dim,))
        label = Input(shape=(1,), dtype='int32')
        label_embedding = Flatten()(Embedding(self.num_classes, self.latent_dim)(label))
 
        model_input = multiply([noise, label_embedding])
        img = model(model_input)

继续阅读“CGAN与GAN的区别”本作品采用知识共享署名 4.0 国际许可协议进行许可。