美文网首页
CycleGAN-两个领域非匹配图像的相互转换

CycleGAN-两个领域非匹配图像的相互转换

作者: baiyang白杨 | 来源:发表于2019-05-22 17:12 被阅读0次

1. CycleGAN的简介

        pix2pix可以很好地处理匹配数据集图像转换,但是在很多情况下匹配数据集是没有的或者是很难收集到的,但是我们可以很容易的得到两个领域大量的非匹配数据。2017年有两篇非常相似的论文CycleGAN和DiscoGAN,提出了一种解决非匹配数据集的图像转换方案。而且CycleGAN在转换的过程中,只是将A领域图像的某些特性转换成B领域的一些特性,图像的其余大部分内容都没有改变。CycleGAN 能实现两个相近数据集之间的转换。

2. CycleGAN的网络结构

CycleGAN网络结构的拆分

        该结构中,生成器相当于一个自编码网络,前半部分进行编码,后半部分进行解码,而且生成器G和生成器F的结构完全相同,其中生成器G负责实现由X到Y的转换,生成器F负责实现由Y到X的转换,它们的输入、输出的大小均为(batch_size, n_channel, cols, rows),判别器的输入为(batch_size, n_channel, cols, rows), 判别器的输出为(batch_size, 1, s1, s2)。

3. CycleGAN的损失函数

(1)对抗损失

L_{GAN}(G, D_{Y} , X, Y) = E_{y\in p_{data} } (y)[log D_{Y}(y) ] +  E_{x\in p_{data} } (x)[log (1-D_{Y}(G(x)) )]

L_{GAN}(F, D_{Y} , Y, X) = E_{x\in p_{data} } (x)[log D_{X}(x) ] +  E_{y\in p_{data} } (y)[log (1-D_{X}(G(y)) )]

对抗损失的作用是,使生成的目标领域的图像和目标领域的真实图像尽可能地接近。

(2)循环损失

L_{cyc}(G, F) = E_{x\in p_{data} } (x)[||F(G(x))-x|| _{1} ]  + E_{y\in p_{data} } (y)[||G(F(y))-y|| _{1} ]

循环损失的作用是,使生成的图像尽可能多的保留原始图像的内容。

在网络训练的过程中是将G和F联合起来一起训练的,D_{X} D_{Y} 是单独进行训练的。

G-F联合网络的损失函数为:L_{G-F}=L_{GAN} (G, D_{Y} , X, Y) + L_{GAN} (F, D_{X} , Y, X) + \lambda L_{cycle}(G, F)

fake_B = G_AB(real_A)

loss_GAN_AB = torch.nn.MSELoss(D_B(fake_B), valid)

fake_A = G_BA(real_B)

loss_GAN_BA = torch.nn.MSELoss(D_A(fake_A), valid)

loss_G_GAN = (loss_GAN_AB + loss_GAN_BA) / 2      #  生成器的对抗损失

recov_A = G_BA(fake_B)

loss_cycle_A = torch.nn.L1Loss(recov_A, real_A)

recov_cycle_B = G_AB(fake_A)

loss_cycle_B = torch.nn.L1Loss(recov_B, real_B)

loss_cycle = (loss_cycle_A + loss_cycle_B) / 2          #  生成器的循环损失

Loss_G = loss_G_GAN + lambda_cycle * loss_cycle

D_{X} 的损失函数为: L_{D_{X} } = L_{GAN}(F, D_{X} , Y, X)

loss_real = torch.nn.MSELoss(D_A(real_A), valid)

fake_A = fake_A_buffer.push_and_pop(fake_A)

loss_fake = torch.nn.MSELoss(D_A(fake_A.detach()), fake)

loss_D_A = (loss_real + loss_fake) / 2

D_{Y} 的损失函数为: L_{D_{Y} } = L_{GAN}(G, D_{Y} , X, Y)

loss_real = torch.nn.MSELoss(D_B(real_B), valid)

fake_B = fake_B_buffer.push_and_pop(fake_B)

loss_fake = torch.nn.MSELoss(D_B(fake_B.detach(), fake)

loss_D_B = (loss_real + loss_fake) / 2

相关文章

  • CycleGAN-两个领域非匹配图像的相互转换

    1. CycleGAN的简介 pix2pix可以很好地处理匹配数据集图像转换,但是在很多情况下匹配数据集是...

  • CycleGAN无配对图像翻译

    CycleGAN非配对图像翻译 非配对图像翻译的目标:从非配对图像中学到转换 从非配对的两个领域之间学到一种映射,...

  • Pix2pix-两个领域匹配图像的转换

    1. Pix2pix的简介: 图像处理中的很多问题都是将一张输入的图片转变成一张对应的输出图像,比如将一张...

  • StarGAN-多领域间的转换

    1. StarGAN 的简介 Pix2pix解决了两个领域之间匹配数据集之间的转换,然而在很多情况下匹配数...

  • golang进阶之路

    类型转换 go语言提供了一种在不同但是相互兼容的类型之间相互转换的方式,并且这种转换非常安全。非数值类型之间的转换...

  • SingleGAN: Image-to-Image Transl

    Abstract. 图像转换是计算机视觉中的新兴领域,其目标是学习输入图像和输出图像之间的映射。 然而,最近的方法...

  • Go语言 类型转换,类型断言,类型开关

    类型转换Go语言中提供了一种不同类型但是相互兼容的可以相互转换的方式,这种方式是非常有用且安全的。非数值间相互转换...

  • 模式匹配

    模式匹配, 即寻找待匹配图像和全体图像中最相似的部分,用于物体检测任务。将图像A在图像B中匹配的图像框起来 算法基...

  • 027-Opencv笔记-模板匹配

    模板匹配 模板匹配就是在整个图像区域发现与给定子图像匹配的小块区域。所以模板匹配首先需要一个模板图像T(给定的子图...

  • 驼峰命名转中划线

    //转换以大写字母为边界的的字符串,也就是将驼峰转换为中划线 \B 匹配一个非单词边界。他匹配一个前后字符都是相同...

网友评论

      本文标题:CycleGAN-两个领域非匹配图像的相互转换

      本文链接:https://www.haomeiwen.com/subject/xfrlzqtx.html