当前位置:   article > 正文

关于图像分割GAN based 方法_gan图像分割

gan图像分割
  1. one=torch.tensor(1,dtype=torch.float32)|
  2. mone=one*-1
  3. moneg=one*-1*gan_loss_percent
  4. D = model_discrination()
  5. #为什么在辨别器反向传播时
  6. d_real = D(real_pair)
  7. d_real = d_real.mean()
  8. d_real.backward(mone)
  9. d_fake = D(fake_pair)
  10. d_fake = d_fake.mean()
  11. d_fake.backward(one)
  12. #生成器反向传播时:
  13. segloss.backward(retain_graph=True)
  14. gd_fake = D(fake_pair)
  15. gd_fake = gd_fake.mean()
  16. gd_fake.backward(moneg)

        在生成对抗网络(GAN)的训练过程中,生成器(G)和鉴别器(D)通过反向传播更新权重以达到最优化。训练分为两个主要步骤:训练鉴别器识别真实图像和生成图像,以及训练生成器欺骗鉴别器。代码片段中的反向传播策略是实现这一训练过程的关键部分。我们来详细解释每一步:

1.鉴别器的训练
鉴别器的目标是正确区分出真实图像和生成图像。在训练鉴别器时,会分别处理真实图像对(`real_pair`)和生成图像对(`fake_pair`)。对于每种情况,鉴别器给出一个分数(通过`D(real_pair)`或`D(fake_pair)`),表示图像为真实图像的可能性。
  1. - **真实图像的梯度更新**
  2.     d_real = D(real_pair)
  3.     d_real = d_real.mean()
  4.     d_real.backward(mone)

    这里,`d_real.mean()`计算一批真实图像的平均得分,意图是最大化这个分数(即让鉴别器更有信心这批图像是真实的)。使用`mone`(即-1)作为梯度方向,意味着要增加这个平均分数(因为在梯度下降中,我们是向梯度的“负方向”更新权重)。

  1. - **生成图像的梯度更新**
  2.     d_fake = D(fake_pair)
  3.     d_fake = d_fake.mean()
  4.     d_fake.backward(one)

    对于生成图像,目标是最小化鉴别器给出的分数(即让鉴别器认为这批图像不是真实的)。使用`one`(即1)作为梯度方向,意味着要减少这个平均分数。

2.生成器的训练
生成器的训练是通过欺骗鉴别器来完成的,目标是让鉴别器将生成的图像判断为真实图像。
  1. - **生成器的梯度更新**(通过鉴别器反馈):
  2.     gd_fake = D(fake_pair)
  3.     gd_fake = gd_fake.mean()
  4.     gd_fake.backward(moneg)
    这一步中,生成器希望鉴别器给生成的图像高分(即鉴别器认为这些生成的图像是真实的)。因此,使用`moneg`(即-gan_loss_percent,一个负值)作为梯度方向,这意味着要增加鉴别器给出的分数。这里的`gan_loss_percent`是一个调整因子,用于平衡GAN损失在总损失中的比重。
  1. - **生成器的梯度更新**(直接关于生成任务的损失):
  2.     segloss.backward(retain_graph=True)

    这一步涉及到生成器的直接优化目标(例如,图像分割任务的损失),而与鉴别器无关。`retain_graph=True`参数允许保留计算图,以便后续可以继续进行梯度计算,这在同一批数据上进行多次反向传播时是必要的。

综上所述,这种训练策略通过在不同的步骤中适当选择梯度方向(正或负),实现了鉴别器和生成器的对抗训练,从而使GAN能够生成高质量的图像。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/415242
推荐阅读
相关标签
  

闽ICP备14008679号