对抗生成网络GAN系列——GANomaly原理及源码解析

article/2025/9/24 17:09:53

🍊作者简介:秃头小苏,致力于用最通俗的语言描述问题

🍊往期回顾:对抗生成网络GAN系列——GAN原理及手写数字生成小案例   对抗生成网络GAN系列——DCGAN简介及人脸图像生成案例   对抗生成网络GAN系列——AnoGAN原理及缺陷检测实战   对抗生成网络GAN系列——EGBAD原理及缺陷检测实战

🍊近期目标:写好专栏的每一篇文章

🍊支持小苏:点赞👍🏼、收藏⭐、留言📩

 

文章目录

  • 对抗生成网络GAN系列——GANomaly原理及源码解析
    • 写在前面
    • GANomaly原理解析
      • GANomaly结构
      • GANomaly损失函数
      • GANomaly测试阶段
    • GANomaly源码解析
      • GANomaly模型搭建
      • GANomaly损失函数
      • 小结
    • 参考链接

对抗生成网络GAN系列——GANomaly原理及源码解析

写在前面

​ 在前面,我已经介绍过好几篇有关GAN的文章,链接如下:

  • [1]对抗生成网络GAN系列——GAN原理及手写数字生成小案例 🍁🍁🍁
  • [2]对抗生成网络GAN系列——DCGAN简介及人脸图像生成案例🍁🍁🍁
  • [3]对抗生成网络GAN系列——CycleGAN原理🍁🍁🍁
  • [4] 对抗生成网络GAN系列——AnoGAN原理及缺陷检测实战 🍁🍁🍁
  • [5]对抗生成网络GAN系列——EGBAD原理及缺陷检测实战🍁🍁🍁
  • [6]对抗生成网络GAN系列——WGAN原理及实战演练🍁🍁🍁

  这篇文章我将来为大家介绍GANomaly,论文名为:Semi-Supervised Anomaly Detection via Adversarial Training。这篇文章同样是实现缺陷检测的,因此在阅读本文之前建议你对使用GAN网络实现缺陷检测有一定的了解,可以参考上文链接中的[4]和[5]。

  准备好了吗,嘟嘟嘟,开始发车。🚖🚖🚖

 

GANomaly原理解析


【阅读此部分前建议对GAN的原理及GAN在缺陷检测上的应用有所了解,详情点击写在前面中的链接查看,本篇文章我不会再介绍GAN的一些先验知识。】


GANomaly结构

​ 这部分为大家介绍GANomaly的原理,其实我们一起来看下图就足够了:

image-20221009144326321

图1 GANomaly结构图

  我们还是先来对上图中的结构做一些解释。从直观的颜色上来看,我们可以分成两类,一类是红色的Encoder结构,一类是蓝色的Decoder结构。Encoder主要就是降维的作用啦,如将一张张图片数据压缩成一个个潜在向量;相反,Decoder就是升维的作用,如将一个个潜在向量重建成一张张图片。按照论文描述的结构来分,可以分成三个子结构,分别为生成器网络G,编码器网络E和判别器网络D。下面分别来介绍介绍这三个子结构:

  • 生成器网络G
      生成器网络G由两个部分组成,分别为编码器 G E ( x ) ) G_E(x)) GE(x))和解码器 G D ( z ) G_D(z) GD(z),其实这就是一个自动编码器结构,主要用来学习输入x的数据分布并重建图像 x ^ {\hat x} x^。我们一个个来看,先看 G E ( x ) G_E(x) GE(x)结构,假设我们的输入x维度为 R C × H × W \mathbb{R}^{C×H×W} RC×H×W,经过 G E ( x ) G_E(x) GE(x)结构后,变成一个向量 z z z,其维度为 R d \mathbb{R}^d Rd G E ( x ) G_E(x) GE(x)具体结构很简单啦,这里就不详细介绍了。我会在源码解析部分给出,大家肯定一看就会。】接着我们来看 G D ( z ) G_D(z) GD(z)结构,它会将刚刚得到的向量z上采样成 x ^ \hat x x^ x ^ \hat x x^的维度和 x x x一致,都为 R C × H × W \mathbb{R}^{C×H×W} RC×H×W。关于 G D ( Z ) G_D(Z) GD(Z)结构也很简单,其主要用到了转置卷积,对于转置卷积不了解的可以看博客[2]了解详情。生成器网络G就为大家介绍完了,是不是发现很简单呢。总结下来就两步,第一步让输入x通过 G E ( x ) G_E(x) GE(x)得到z,第二步让z通过 G D ( Z ) G_D(Z) GD(Z)变成 x ^ \hat x x^。这两步也可以用一步表示,即 x ^ = G ( x ) \hat x=G(x) x^=G(x)

      思来想去我还是想在这里给大家抛出一个问题,我们传统的GAN是怎么通过生成器来构建假图像的呢?和GANomaly有区别吗?其实这个问题的答案很简单,大家都稍稍思考一下,我就不给答案了,不明白的评论区见吧!!!🥂🥂🥂

  • 编码器网络E

    ​   编码器网络E的作用是将生成器得到的 x ^ \hat x x^压缩成一个向量 z ^ \hat z z^,是不是发现和生成器网络中的 G E ( x ) G_E(x) GE(x)很像呢,其实呀,它俩的结构就是完全一样的,生成的 z ^ \hat z z^ x ^ \hat x x^ 的维度一致,这是方便后面的损失比较。

 

  • 判别器网络D

    ​   判别器网络D和我们之前介绍DCGAN时的结构是一样的,都是将真实数据 x x x和生成数据 x ^ \hat x x^输入网络,然后得出一个分数。

 

GANomaly损失函数

  GANomaly的损失函数分为两部分,第一部分是生成器损失,第二部分为判别器损失,下面我们分别来进行介绍:

  • 生成器损失函数

    ​ 生成器损失函数又由三个部分组成,分别如下:

    • Adversari Loss

      我还是直接上公式吧,如下:

      L a d v = E x ∼ p x ∣ ∣ f ( x ) − E x ∼ p x f ( G ( x ) ) ∣ ∣ 2 L_{adv}=E_{x \sim px}||f(x)-E_{x \sim px}f(G(x))||_2 Ladv=Expxf(x)Expxf(G(x))2

      这个公式对应图一中的 L a d v = ∣ ∣ f ( x ) − f ( x ^ ) ∣ ∣ 2 L_{adv}=||f(x)-f(\hat x)||_2 Ladv=f(x)f(x^)2🍵🍵🍵这个损失函数应该很好理解,在前面介绍的GAN网络都有提及, f ( ∗ ) f(*) f()表示判别器网络某个中间层的输出。这个损失函数的作用就是让两张图像 x 和 x ^ x和\hat x xx^尽可能接近,也就是让生成器生成的图片更加逼真。


    • Contextual Loss

      同样的,直接来上公式,如下:

      L c o n = E x ∼ p x ∣ ∣ x − G ( x ) ∣ ∣ 1 L_{con}=E_{x \sim px}||x-G(x)||_1 Lcon=ExpxxG(x)1

      这个公式对应图一中的 L c o n = ∣ ∣ x − x ^ ∣ ∣ 1 L_{con}=||x-\hat x||_1 Lcon=xx^1🍵🍵🍵这个函数其实也是要让两张图像 x 和 x ^ x和\hat x xx^尽可能接近。至于这里为什么用的是L1范数而不是L2范数,作者在论文中说这里使用L1范数的效果要比使用L2范数的效果好,这属于实验得到的结论,大家也不用过于纠结。

    • Encoder Loss

      话不多说,上公式,如下:

      L e n c = E x ∼ p x ∣ ∣ G E ( x ) − E ( G ( x ) ) ∣ ∣ 2 L_{enc}=E_{x \sim px}||G_E(x)-E(G(x))||_2 Lenc=ExpxGE(x)E(G(x))2

      这个公式对应图一中的 L e n c = ∣ ∣ z − z ^ ∣ ∣ 2 L_{enc}=||z-\hat z||_2 Lenc=zz^2🍵🍵🍵这里的损失函数在我看来主要作用就是让我们在推理过程中的效果更好,这里就像AnoGAN中不断搜索最优的那个z的作用。


      如果大家这里读过cycleGAN的论文的话,可能会觉得这个损失函数有点类似cycleGAN中的循环一致性损失。我觉得这篇文章的思想可能借鉴了cycleGAN中的思想,感兴趣的可以去阅读一下,非常有意思的一篇文章!!!🥃🥃🥃



    生成器总的损失是上述三种损失的加权和,如下:
    L = w a d v L a d v + w c o n L c o n + w e n c L e n c L=w_{adv}L_{adv}+w_{con}L_{con}+w_{enc}L_{enc} L=wadvLadv+wconLcon+wencLenc

    在论文提供的源码中,默认 w c o n = 50 , w a d v = w e n c = 1 w_{con}=50,w_{adv}=w_{enc}=1 wcon=50,wadv=wenc=1

     


  • 判别器损失函数

    判别器的损失函数就和原始GAN一样,如下:【不清楚的点击☞☞☞了解详情】

    这部分我直接先放上代码吧,不多,也很容易理解,如下:

    self.l_bce = nn.BCELoss()
    # Real - Fake Loss
    self.err_d_real = self.l_bce(self.pred_real, self.real_label)
    self.err_d_fake = self.l_bce(self.pred_fake, self.fake_label)# NetD Loss & Backward-Pass
    self.err_d = (self.err_d_real + self.err_d_fake) * 0.5
    

 

GANomaly测试阶段

  在上一小节,为大家介绍了GANomaly的损失函数,这是在测试阶段使用的。GANomaly针对的是异常检测任务,在测试阶段我们会对输入的数据进行评分,根据评分的结果来判定输入是否异常。在GANomaly中使用的评分函数就是我们上一小节介绍的Encoder Loss,对于一个测试数据x,用 A ( x ) A(x) A(x)表示其异常得分,则:

A ( x ) = ∣ ∣ G E ( x ) − E ( G ( x ) ) ∣ ∣ 2 A(x)=||G_E(x)-E(G(x))||_2 A(x)=GE(x)E(G(x))2

  这里大家需要注意以下,论文中 A ( x ) A(x) A(x)的表达式使用的是L1范数,但是从我阅读论文提供的源码来看,代码中使用的是L2范数。这里保持和源码一致,使用L2范数。代码中关于此部分的描述如下:

# latent_i表示G_E(x),latent_o表示E(G(x))。torch.pow(m,2)=m^2
error = torch.mean(torch.pow((latent_i-latent_o), 2), dim=1)


 

GANomaly源码解析

​ 这里直接使用论文中提供的源码地址:GANomaly源码🌱🌱🌱

GANomaly模型搭建

​  其实通过我前文的讲解,不知道大家能否感受到GANomaly模型其实是不复杂的。需要注意的是在介绍GANomaly结构时我们将模型分为了三个子结构,分别为生成器网络G、编码器网络E、判别器网络D。但是在代码中我们将生成器网络G和编码器网络E合并在一块儿了,也称为生成器网络G。

  下面我给出这部分的代码,大家注意一下这里面的超参数比较多,为了方便大家阅读,我把这里用到超参数的整理出来,如下图所示:

image-20221009200739193

""" Network architectures.
"""
# pylint: disable=W0221,W0622,C0103,R0913##
import torch
import torch.nn as nn
import torch.nn.parallel
from options import Options##
def weights_init(mod):"""Custom weights initialization called on netG, netD and netE:param m::return:"""classname = mod.__class__.__name__if classname.find('Conv') != -1:mod.weight.data.normal_(0.0, 0.02)elif classname.find('BatchNorm') != -1:mod.weight.data.normal_(1.0, 0.02)mod.bias.data.fill_(0)###
class Encoder(nn.Module):"""DCGAN ENCODER NETWORK"""def __init__(self, isize, nz, nc, ndf, ngpu, n_extra_layers=0, add_final_conv=True):super(Encoder, self).__init__()self.ngpu = ngpuassert isize % 16 == 0, "isize has to be a multiple of 16"main = nn.Sequential()# input is nc x isize x isizemain.add_module('initial-conv-{0}-{1}'.format(nc, ndf),nn.Conv2d(nc, ndf, 4, 2, 1, bias=False))main.add_module('initial-relu-{0}'.format(ndf),nn.LeakyReLU(0.2, inplace=True))csize, cndf = isize / 2, ndf     # csize=16,cndf=64# Extra layersfor t in range(n_extra_layers):main.add_module('extra-layers-{0}-{1}-conv'.format(t, cndf),nn.Conv2d(cndf, cndf, 3, 1, 1, bias=False))main.add_module('extra-layers-{0}-{1}-batchnorm'.format(t, cndf),nn.BatchNorm2d(cndf))main.add_module('extra-layers-{0}-{1}-relu'.format(t, cndf),nn.LeakyReLU(0.2, inplace=True))while csize > 4:in_feat = cndfout_feat = cndf * 2main.add_module('pyramid-{0}-{1}-conv'.format(in_feat, out_feat),nn.Conv2d(in_feat, out_feat, 4, 2, 1, bias=False))main.add_module('pyramid-{0}-batchnorm'.format(out_feat),nn.BatchNorm2d(out_feat))main.add_module('pyramid-{0}-relu'.format(out_feat),nn.LeakyReLU(0.2, inplace=True))cndf = cndf * 2csize = csize / 2# state size. K x 4 x 4if add_final_conv:main.add_module('final-{0}-{1}-conv'.format(cndf, 1),nn.Conv2d(cndf, nz, 4, 1, 0, bias=False))self.main = maindef forward(self, input):if self.ngpu > 1:output = nn.parallel.data_parallel(self.main, input, range(self.ngpu))else:output = self.main(input)return output##
class Decoder(nn.Module):"""DCGAN DECODER NETWORK"""def __init__(self, isize, nz, nc, ngf, ngpu, n_extra_layers=0):super(Decoder, self).__init__()self.ngpu = ngpuassert isize % 16 == 0, "isize has to be a multiple of 16"cngf, tisize = ngf // 2, 4    #cngf=32 ,tisize=4while tisize != isize:cngf = cngf * 2tisize = tisize * 2main = nn.Sequential()# input is Z, going into a convolutionmain.add_module('initial-{0}-{1}-convt'.format(nz, cngf),nn.ConvTranspose2d(nz, cngf, 4, 1, 0, bias=False))main.add_module('initial-{0}-batchnorm'.format(cngf),nn.BatchNorm2d(cngf))main.add_module('initial-{0}-relu'.format(cngf),nn.ReLU(True))csize, _ = 4, cngfwhile csize < isize // 2:main.add_module('pyramid-{0}-{1}-convt'.format(cngf, cngf // 2),nn.ConvTranspose2d(cngf, cngf // 2, 4, 2, 1, bias=False))main.add_module('pyramid-{0}-batchnorm'.format(cngf // 2),nn.BatchNorm2d(cngf // 2))main.add_module('pyramid-{0}-relu'.format(cngf // 2),nn.ReLU(True))cngf = cngf // 2csize = csize * 2# Extra layersfor t in range(n_extra_layers):main.add_module('extra-layers-{0}-{1}-conv'.format(t, cngf),nn.Conv2d(cngf, cngf, 3, 1, 1, bias=False))main.add_module('extra-layers-{0}-{1}-batchnorm'.format(t, cngf),nn.BatchNorm2d(cngf))main.add_module('extra-layers-{0}-{1}-relu'.format(t, cngf),nn.ReLU(True))main.add_module('final-{0}-{1}-convt'.format(cngf, nc),nn.ConvTranspose2d(cngf, nc, 4, 2, 1, bias=False))main.add_module('final-{0}-tanh'.format(nc),nn.Tanh())self.main = maindef forward(self, input):if self.ngpu > 1:output = nn.parallel.data_parallel(self.main, input, range(self.ngpu))else:output = self.main(input)return output## 判别器网络结构
class NetD(nn.Module):"""DISCRIMINATOR NETWORK"""def __init__(self, opt):super(NetD, self).__init__()model = Encoder(opt.isize, 1, opt.nc, opt.ngf, opt.ngpu, opt.extralayers)layers = list(model.main.children())self.features = nn.Sequential(*layers[:-1])self.classifier = nn.Sequential(layers[-1])self.classifier.add_module('Sigmoid', nn.Sigmoid())def forward(self, x):features = self.features(x)features = featuresclassifier = self.classifier(features)classifier = classifier.view(-1, 1).squeeze(1)return classifier, features## 生成器网络结构
class NetG(nn.Module):"""GENERATOR NETWORK"""def __init__(self, opt):super(NetG, self).__init__()self.encoder1 = Encoder(opt.isize, opt.nz, opt.nc, opt.ngf, opt.ngpu, opt.extralayers)self.decoder = Decoder(opt.isize, opt.nz, opt.nc, opt.ngf, opt.ngpu, opt.extralayers)self.encoder2 = Encoder(opt.isize, opt.nz, opt.nc, opt.ngf, opt.ngpu, opt.extralayers)def forward(self, x):latent_i = self.encoder1(x)gen_imag = self.decoder(latent_i)latent_o = self.encoder2(gen_imag)return gen_imag, latent_i, latent_o

 

GANomaly损失函数

​  我们在理论部分已经介绍了GANomaly的损失函数,那么在代码上它们都是一一对应的,实现起来也很简单,如下:

## 定义L1 Loss
def l1_loss(input, target):return torch.mean(torch.abs(input - target))## 定义L2 Loss
def l2_loss(input, target, size_average=True):if size_average:return torch.mean(torch.pow((input-target), 2))else:return torch.pow((input-target), 2)self.l_adv = l2_loss
self.l_con = nn.L1Loss()
self.l_enc = l2_lossself.err_g_adv = self.l_adv(self.netd(self.input)[1], self.netd(self.fake)[1])
self.err_g_con = self.l_con(self.fake, self.input)
self.err_g_enc = self.l_enc(self.latent_o, self.latent_i)
self.err_g = self.err_g_adv * self.opt.w_adv + \self.err_g_con * self.opt.w_con + \self.err_g_enc * self.opt.w_enc

  上述代码为GANomaly生成器损失函数代码,判别器的损失函数代码已经在理论部分为大家介绍了,这里就不在赘述了。🍄🍄🍄


 

小结

  这里我并没有很详细的为大家解读代码,但是把一些关键的部分都给大家介绍了。会了这些其实你完全可以自己实现一个GANomaly网络,或者对我之前在Anogan中的代码稍加改造也可以达到一样的效果。论文中提供的源码感兴趣的大家可以自己去调试一下,代码量也不算多,但有的地方理解起来也有一定的困难,总之大家加油吧!!!🌼🌼🌼

 

参考链接

GANomaly: Semi-Supervised Anomaly Detection via Adversarial Training 🍁🍁🍁

GANomaly 异常检测的经典之作|ACCV 2018 🍁🍁🍁

 
 
如若文章对你有所帮助,那就🛴🛴🛴

在这里插入图片描述


http://chatgpt.dhexx.cn/article/su0bErie.shtml

相关文章

强化学习和生成对抗网络

1. 强化学习的定义 强化学习&#xff08;reinforcement learning&#xff09;是机器学习的一个重要分支&#xff0c;是一门多领域交叉学科&#xff0c;它的本质是自行解决决策问题&#xff0c;并且能进行连续决策。 强化学习有四个主要组成部分∶ 1.代理&#xff08;Agent&…

对抗生成网络(GAN)学习笔记

生成模型与判别模型 判别模型&#xff1a;由数据直接学习决策函数Yf(X)或条件概率分布P(Y|X)作为预测模型&#xff0c;即判别模型。判别方法关心的是对于给定的输入X&#xff0c;应该预测什么样的输出Y。 生成模型&#xff1a;由数据学习联合概率分布P(X,Y), 然后由P(Y|X)P(X…

生成对抗网络GAN

1. 概述 生成对抗网络GAN&#xff08;Generative adversarial nets&#xff09;[1]是由Goodfellow等人于2014年提出的基于深度学习模型的生成框架&#xff0c;可用于多种生成任务。从名称也不难看出&#xff0c;在GAN中包括了两个部分&#xff0c;分别为”生成”和“对抗”&am…

深度卷积生成对抗网络

理解与学习深度卷积生成对抗网络 一.GAN 引言&#xff1a;生成对抗网络GAN&#xff0c;是当今的一大热门研究方向。在2014年&#xff0c;被Goodfellow大神提出来&#xff0c;当时的G神还是蒙特利尔大学的博士生。据有关媒体统计&#xff1a;CVPR2018的论文里&#xff0c;有三…

【论文阅读】PU-GAN:点云上采样的对抗生成网络

【论文阅读】PU-GAN&#xff1a;点云上采样的对抗生成网络 在本文中&#xff0c;作者提出了一种点云上采样的对抗网络模型&#xff0c;那么什么是点云的上采样任务呢&#xff1f; 简单来说&#xff0c;点云上采样任务就是输入稀疏点云&#xff0c;输出稠密点云&#xff0c;同时…

生成对抗网络——CGAN

1.生成模型原理 1&#xff09;CGAN的原理 传统的GAN或者其他的GAN都是通过一堆的训练数据&#xff0c;最后训练出了G网络&#xff0c;随机输入噪声最后产生的数据是这些训练数据类别中之一&#xff0c;我们提前无法预测是那哪一个&#xff1f; 因此&#xff0c;我们有的时候…

基于对抗生成网络的滚动轴承故障检测方法

人工智能技术与咨询 点击蓝字 关注我们 来源&#xff1a;《人工智能与机器人研究》 &#xff0c;作者华丰 关键词: 不平衡工业时间序列&#xff1b;异常检测&#xff1b;生成对抗网络&#xff1b;滚动轴承数据 关注微信公众号&#xff1a;人工智能技术与咨询。了解更多咨询&…

深度学习 - 生成对抗网络

目录 1 GAN产生背景 2 GAN模型 3 CGAN 4 InfoGAN 5 Improved Techniques for Training GANs 6 DCGAN -- Deep convolutional generative adversarial networks 7 GAN应用 1 GAN产生背景 1. 机器学习方法 生成方法&#xff0c;所学到的模型称为生成式模型 生成方法通过观测…

对抗生成网络GAN系列——f-AnoGAN原理及缺陷检测实战

&#x1f34a;作者简介&#xff1a;秃头小苏&#xff0c;致力于用最通俗的语言描述问题 &#x1f34a;专栏推荐&#xff1a;深度学习网络原理与实战 &#x1f34a;近期目标&#xff1a;写好专栏的每一篇文章 &#x1f34a;支持小苏&#xff1a;点赞&#x1f44d;&#x1f3fc;、…

对抗生成网络原理和作用

我们通过一个demo&#xff08;gan.py &#xff09;来讲解对抗生成网络的原理和作用 1、创建真实数据 2、使用GAN训练噪声数据 3、通过1200次的训练使得生成的数据的分布跟真实数据的分布差不多 4、通过debug方式一步步的讲解 二、原理&#xff1a; 1、G&#xff08;x&…

生成对抗网络

论文阅读笔记&#xff0c;论文链接 Generative Adversarial Network 生成对抗网络 GAN 理解gan的原理 网络思想 在GAN网络当中&#xff0c;有两个网络&#xff0c;一个是生成网络G&#xff0c;另外一个是判别网络D。生成网络G的目的是生成数据&#xff0c;这里的数据可以是图片…

对抗生成网络GAN系列——CycleGAN简介及图片春冬变换案例

&#x1f34a;作者简介&#xff1a;秃头小苏&#xff0c;致力于用最通俗的语言描述问题 &#x1f34a;往期回顾&#xff1a;对抗生成网络GAN系列——GAN原理及手写数字生成小案例    对抗生成网络GAN系列——DCGAN简介及人脸图像生成案例 &#x1f34a;近期目标&#xff1a;写…

MATLAB代码:对于对抗生成网络GAN的风光场景生成算法 关键词:场景生成 GAN 对抗生成网络 风光场景

MATLAB代码&#xff1a;对于对抗生成网络GAN的风光场景生成算法 关键词&#xff1a;场景生成 GAN 对抗生成网络 风光场景 仿真平台: pythontensorflow 主要内容&#xff1a;代码主要做的是基于数据驱动的风光新能源场景生成模型&#xff0c;具体为&#xff0c;通过构建了一种对…

对抗生成网络GAN系列——GAN原理及手写数字生成小案例

&#x1f34a;作者简介&#xff1a;秃头小苏&#xff0c;致力于用最通俗的语言描述问题 &#x1f34a;往期回顾&#xff1a;目标检测系列——开山之作RCNN原理详解    目标检测系列——Fast R-CNN原理详解   目标检测系列——Faster R-CNN原理详解 &#x1f34a;近期目标&a…

GAN——对抗生成网络

GAN的基本思想 作为现在最火的深度学习模型之一&#xff0c;GAN全称对抗生成网络&#xff0c;顾名思义是生成模型的一种&#xff0c;而他的训练则是处于一种对抗博弈状态中的。它使用两个神经网络&#xff0c;将一个神经网络与另一个神经网络进行对抗。 基本思想&#xff1a;&…

一文读懂对抗生成网络的3种模型

https://www.toutiao.com/i6635851641293636109/ 2018-12-17 14:53:28 基于对抗生成网络技术的在线工具edges2cats&#xff0c; 可以为简笔画涂色 前言 在GAN系列课程中分别讲解了对抗生成网络的三种模型&#xff0c;从Goodfellow最初提出的原始的对抗生成网络&#xff0c;到…

对抗生成网络(GAN)详解

目录 前言 目标函数 原理 训练 给定生成器&#xff0c;训练判别器 给定判别器&#xff0c;训练生成器 总结 前言 之前的生成模型侧重于将分布函数构造出来&#xff0c;然后使用最大似然函数去更新这个分布函数的参数&#xff0c;从而优化分布函数&#xff0c;但是这种方法…

对抗生成网络(GAN)简介及生成数字实战

一、简介 生成对抗网络&#xff08;Generative Adversarial Netword&#xff0c;简称GAN&#xff09;&#xff0c;是一种生成式机器学习模型&#xff0c;该方法由伊恩古德费洛等人于2014年提出&#xff0c;曾被称为“机器学习这二十年来最酷的想法”&#xff0c;可以用来创造虚…

对抗生成网络(Generative Adversarial Net)

好久没有更新博客了&#xff0c;但似乎我每次更新博客的时候都这么说&#xff08;泪&#xff09;。最近对生活有了一些新的体会&#xff0c;工作上面&#xff0c;新的环境总算是适应了&#xff0c;知道了如何摆正工作和生活之间的关系&#xff0c;如何能在有效率工作的同时还能…

【PaddleOCR-det-finetune】一:基于PPOCRv3的det检测模型finetune训练

文章目录 基本流程详细步骤打标签&#xff0c;构建自己的数据集下载PPOCRv3训练模型修改超参数&#xff0c;训练自己数据集启动训练导出模型 测试 相关参考手册在PaddleOCR项目工程中的位置&#xff1a; det模型训练和微调&#xff1a;PaddleOCR\doc\doc_ch\PPOCRv3_det_train.…