日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

GAN综述及其在图像生成领域的应用(含原理、代码详解)

發(fā)布時間:2024/3/12 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 GAN综述及其在图像生成领域的应用(含原理、代码详解) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本文將持續(xù)更新。

目錄

  • 1. 基本GAN
    • 1.1 GAN(2014)
    • 1.2 CGAN(2015)
    • 1.3 DCGAN(2015)
    • 1.4 VAE-GAN(2016)
    • 1.5 ACGAN(2017)
    • 1.6 styleGAN(2018)
  • 2. GAN在圖像生成領(lǐng)域的應(yīng)用
    • 2.1 Pix2Pix(2017)
    • 2.2 cycleGAN(2017)
    • 2.3 starGAN(2018)
    • 2.4 SPADE(2019)

1. 基本GAN

1.1 GAN(2014)

原始GAN由生成器GGG和判別器DDD構(gòu)成,生成器的目的就是將隨機輸入的高斯噪聲映射成圖像(“假圖”),判別器則是判斷輸入圖像是否來自生成器的概率,即判斷輸入圖像是否為假圖的概率。

GAN的訓(xùn)練是個動態(tài)的過程,是生成器GGG與判別器DDD兩者之間的相互博弈過程。生成器G要生成假圖騙過判別器DDD,而判別器DDD要分辨生成器GGG生成的假圖。GAN的損失函數(shù)如下:


其中,GGG代表生成器, DDD代表判別器, xxx代表真實數(shù)據(jù), pdatap_{data}pdata?代表真實數(shù)據(jù)概率密度分布,zzz代表了隨機輸入數(shù)據(jù),該數(shù)據(jù)是隨機高斯噪聲。

從上式可以看出,從判別器DDD角度來看,判別器DDD希望能盡可能區(qū)分真實樣本x和虛假樣本G(z)G(z)G(z) ,因此D(x)D(x)D(x)必須盡可能大, D(G(z))D(G(z))D(G(z))盡可能小, 也就是V(D,G)V(D,G)V(D,G)整體盡可能大。從生成器GGG的角度來看,生成器GGG希望自己生成的虛假數(shù)據(jù)G(z)G(z)G(z)可以盡可能騙過判別器DDD,也就是希望 D(G(z))D(G(z))D(G(z))盡可能大,也就是V(D,G)V(D,G)V(D,G)整體盡可能小。GAN的兩個模塊在訓(xùn)練相互對抗,最后達到全局最優(yōu)。圖源。


訓(xùn)練過程的代碼示例如下。

for epoch in range(opt.n_epochs):for i, (imgs, _) in enumerate(dataloader):# Adversarial ground truthsvalid = Variable(Tensor(imgs.size(0), 1).fill_(1.0), requires_grad=False)fake = Variable(Tensor(imgs.size(0), 1).fill_(0.0), requires_grad=False)# Configure inputreal_imgs = Variable(imgs.type(Tensor))# -----------------# Train Generator# -----------------optimizer_G.zero_grad()# Sample noise as generator inputz = Variable(Tensor(np.random.normal(0, 1, (imgs.shape[0], opt.latent_dim))))# Generate a batch of imagesgen_imgs = generator(z)# Loss measures generator's ability to fool the discriminatorg_loss = adversarial_loss(discriminator(gen_imgs), valid)g_loss.backward()optimizer_G.step()# ---------------------# Train Discriminator# ---------------------optimizer_D.zero_grad()# Measure discriminator's ability to classify real from generated samplesreal_loss = adversarial_loss(discriminator(real_imgs), valid)fake_loss = adversarial_loss(discriminator(gen_imgs.detach()), fake)d_loss = (real_loss + fake_loss) / 2d_loss.backward()optimizer_D.step()

1.2 CGAN(2015)

CGAN的主要貢獻是在原始GAN的生成器與判別器中的輸入中加入額外標(biāo)簽信息yyy。額外信息yyy可以是任何信息,主要是標(biāo)簽。因此CGAN的提出使得GAN可以利用圖像與對應(yīng)的標(biāo)簽進行訓(xùn)練,并在測試階段利用給定標(biāo)簽生成特定圖像。其損失函數(shù)如下:

在CGAN的論文中,網(wǎng)絡(luò)架構(gòu)使用的MLP(全連接網(wǎng)絡(luò))。在CGAN中的生成器,我們給定一個輸入噪聲pz(z)p_z(z)pz?(z)和額外信息yyy,之后將兩者通過全連接層連接到一起,作為隱藏層輸入。同樣地,在判別器中輸入圖像xxx和 額外信息yyy也將連接到一起作為隱藏層輸入。

CGAN和GAN的區(qū)別如下:

for epoch in range(opt.n_epochs):for i, (imgs, labels) in enumerate(dataloader):# define labels and gen_labbels:labels = Variable(labels.type(LongTensor))gen_labels = Variable(LongTensor(np.random.randint(0, opt.n_classes, batch_size)))# -----------------# Train Generator# -----------------# input + genlabelsgen_imgs = generator(z, gen_labels)validity = discriminator(gen_imgs, gen_labels)# ---------------------# Train Discriminator# ---------------------# input + labels or genlabelsvalidity_real = discriminator(real_imgs, labels)validity_fake = discriminator(gen_imgs.detach(), gen_labels)

1.3 DCGAN(2015)

DCGAN主要是在網(wǎng)絡(luò)架構(gòu)上改進了原始GAN,DCGAN的生成器與判別器都利用CNN架構(gòu)替換了原始GAN的全連接網(wǎng)絡(luò),主要改進之處有如下幾個方面:

  • DCGAN的生成器和判別器都舍棄了CNN的池化層,判別器保留CNN的整體架構(gòu),生成器則是將卷積層替換成了反卷積層(或稱轉(zhuǎn)置卷積層)。
  • 在判別器和生成器中在每一層之后都是用了BN層,有助于處理初始化不良導(dǎo)致的訓(xùn)練問題,加速模型訓(xùn)練,提升了訓(xùn)練的穩(wěn)定性。
  • 利用1*1卷積層替換到所有的全連接層。
  • 在生成器中除輸出層使用Sigmoid激活函數(shù),其余層全部使用ReLu激活函數(shù)。
  • 在判別器所有層都使用LeakyReLU激活函數(shù),防止梯度稀疏。
  • 1.4 VAE-GAN(2016)

    變分自編碼器VAE是由一個編碼器和一個解碼器組成的結(jié)構(gòu),編碼器可以將數(shù)據(jù)映射到一個低維的空間分布,而解碼器可以將這個分布還原回原始數(shù)據(jù),因此解碼器是很像GAN中的生成器。VAE的目的也和GAN相似,都是希望構(gòu)建一個從隱變量zzz生成目標(biāo)數(shù)據(jù)xxx的模型。

    如果在VAE后面拼接上一個判別器D,這樣的話,前兩個模塊就是VAE,后兩個模塊就是GAN:


    從VAE的角度,VAE解碼產(chǎn)生的圖片往往都比較模糊,GAN中的判別器來判別圖片是不是真實的,可以來幫助VAE提高真實性。從GAN的角度,原本生成器輸入都是隨機的,訓(xùn)練起來比較難,而VAE可以提供生成器輸入的大概空間分布,會變得準(zhǔn)確高效一些。因此VAE和GAN相輔相成,都可達到更優(yōu)秀的效果。

    1.5 ACGAN(2017)

    為了提供更多的輔助信息并允許半監(jiān)督學(xué)習(xí),可以向判別器添加額外的輔助分類器,以便在原始任務(wù)以及附加任務(wù)上優(yōu)化模型。這種方法的體系結(jié)構(gòu)如下圖所示,其中C是輔助分類器。 添加輔助分類器允許我們使用預(yù)先訓(xùn)練的模型(例如,在ImageNet上訓(xùn)練的圖像分類器)。


    ACGAN和CGAN的代碼的區(qū)別如下,在辨別器D中增加adv層和aux層,用來計算Label:

    class Discriminator(nn.Module):def __init__(self):self.conv_blocks = ...self.adv_layer = nn.Sequential(nn.Linear(128 * ds_size ** 2, 1), nn.Sigmoid())self.aux_layer = nn.Sequential(nn.Linear(128 * ds_size ** 2, opt.n_classes), nn.Softmax())def forward(self, img):out = self.conv_blocks(img)out = out.view(out.shape[0], -1)validity = self.adv_layer(out)label = self.aux_layer(out)return validity, labelfor epoch in range(opt.n_epochs):for i, (imgs, labels) in enumerate(dataloader):# -----------------# Train Generator# -----------------# output the pred_label and add auxiliary_lossvalidity, pred_label = discriminator(gen_imgs)g_loss = 0.5 * (adversarial_loss(validity, valid) + auxiliary_loss(pred_label, gen_labels))# ---------------------# Train Discriminator# ---------------------# Loss for real imagesreal_pred, real_aux = discriminator(real_imgs)d_real_loss = (adversarial_loss(real_pred, valid) + auxiliary_loss(real_aux, labels)) / 2# Loss for fake imagesfake_pred, fake_aux = discriminator(gen_imgs.detach())d_fake_loss = (adversarial_loss(fake_pred, fake) + auxiliary_loss(fake_aux, gen_labels)) / 2# Total discriminator lossd_loss = (d_real_loss + d_fake_loss) / 2# Calculate discriminator accuracypred = np.concatenate([real_aux.data.cpu().numpy(), fake_aux.data.cpu().numpy()], axis=0)gt = np.concatenate([labels.data.cpu().numpy(), gen_labels.data.cpu().numpy()], axis=0)d_acc = np.mean(np.argmax(pred, axis=1) == gt)

    1.6 styleGAN(2018)

    StyleGAN也可以算作圖像生成領(lǐng)域的應(yīng)用,但是由于它主要改變網(wǎng)絡(luò)結(jié)構(gòu),因此我們將它歸類于第一章。

    StyleGAN提出了一個新的生成器結(jié)構(gòu)如下:


    不同于以往的GAN論文把zzz輸入給生成器的輸入層的做法,StyleGAN在生成器各層都注入噪音,且摒棄了輸入層, 轉(zhuǎn)而添加了一個從ZZZWWW的非線性映射網(wǎng)絡(luò),將輸入zzz用了8層全連接層做了個非線性變換,得到www

    圖中,ZZZWWW的維度都是512維, AAA是一個仿射變換,BBB是每個通道的高斯噪聲的系數(shù),而AdaIN則是:

    圖中, ys,i和yb,iy_{s,i}和y_{b,i}ys,i?yb,i?則是www經(jīng)過AAA變換之后得到的style:y=(ys,yb)y=(y_s,y_b)y=(ys?,yb?)(ys,i,yb,i)(y_{s,i},y_{b,i})(ys,i?,yb,i?)對的個數(shù)與每一層特征圖的通道數(shù)相同,對應(yīng)每一層歸一化所需的scale和shift。

    為進一步促使style局部化圖像轉(zhuǎn)換的控制效果,作者采用了mixing regularization。利用生成器中8層卷積的非線性變換,提前計算兩個圖像的變換結(jié)果w1,w2w_1,w_2w1?,w2? ,然后在生成過程中隨機取w1w_1w1? 或者w2w_2w2? 的值進行操作。結(jié)果如下,可以看到橫軸和縱軸上的原始圖像不同程度地影響了生成的圖像。

    2. GAN在圖像生成領(lǐng)域的應(yīng)用

    2.1 Pix2Pix(2017)

    Pix2Pix可以稱之為用CGAN做image translation的鼻祖,先看一下他的效果:


    訓(xùn)練大致過程如下:


    我們將CGAN的結(jié)構(gòu)放在下面以方便對比。可以看到,Pix2Pix采用CGAN的結(jié)構(gòu),將圖片xxx作為CGAN的條件(相當(dāng)于是一個”鞋“的標(biāo)簽),輸入到GGGDDD中。GGG的輸入是x,z{x,z}x,z(其中,xxx是需要轉(zhuǎn)換的圖片,zzz是隨機噪聲),輸出是生成的圖片G(x,z)G(x,z)G(x,z)DDD則需要分辨出x,G(x,z){x,G(x,z)}x,G(x,z)x,y{x,y}x,y


    Pix2Pix使用的生成器GGG用到的是Unet結(jié)構(gòu),輸入的輪廓圖xxx編碼再解碼成真是圖片,判別器D用到的是作者自己提出來的條件判別器PatchGAN。損失函數(shù)如下:

  • CGAN損失函數(shù):
  • 與ground truch的loss:
  • 最終損失:
  • 但是,Pix2Pix的一個限制在于網(wǎng)絡(luò)學(xué)習(xí)的是xxxyyy之間的一對一映射。這樣的一個明顯的缺點就是對數(shù)據(jù)集的限制:需要大量對應(yīng)的圖片,例如同一個地方的黑夜和白天的圖片。

    代碼:

    for epoch in range(opt.epoch, opt.n_epochs):for i, batch in enumerate(dataloader):# Model inputs, A is labelreal_A = Variable(batch["B"].type(Tensor))real_B = Variable(batch["A"].type(Tensor))# Adversarial ground truthsvalid = Variable(Tensor(np.ones((real_A.size(0), *patch))), requires_grad=False)fake = Variable(Tensor(np.zeros((real_A.size(0), *patch))), requires_grad=False)# ------------------# Train Generators# ------------------optimizer_G.zero_grad()# GAN lossfake_B = generator(real_A)pred_fake = discriminator(fake_B, real_A)loss_GAN = criterion_GAN(pred_fake, valid)# Pixel-wise lossloss_pixel = criterion_pixelwise(fake_B, real_B)# Total lossloss_G = loss_GAN + lambda_pixel * loss_pixelloss_G.backward()optimizer_G.step()# ---------------------# Train Discriminator# ---------------------# same process as CGAN

    2.2 cycleGAN(2017)

    相比于Pix2Pix需要兩個域中有相同數(shù)據(jù)的訓(xùn)練樣本。CycleGAN的創(chuàng)新點在于能夠在源域和目標(biāo)域之間,無須建立訓(xùn)練數(shù)據(jù)間一對一的映射,就可實現(xiàn)這種遷移,效果如下:


    CycleGAN由兩個判別器(DxD_xDx?DyD_yDy?)和兩個生成器(GGGFFF)組成,生成器GGGFFF分別是XXXYYYYYYXXX的映射,兩個判別器DxD_xDx?DyD_yDy?對轉(zhuǎn)換后的圖片進行判別。雙判別器的目的是為了建立一對一的映射,避免所有的XXX都被映射到同一個YYY,例如所有男人的圖像都映射到劉亦菲的圖像上。起到同樣作用的是cycle-consistency loss,用數(shù)據(jù)集中其他的圖來檢驗生成器,防止GGGFFF過擬合。


    CycleGAN的訓(xùn)練過程如下,兩張圖分別表示從XXX域到YYY域的圖像生成和從YYY域到XXX域的圖像生成。其中Input_A表示輸入的真實圖像,Generated_B表示由表示由Input_A轉(zhuǎn)換得到的圖像,Cyclic_A表示由Input_A轉(zhuǎn)換一圈得到的圖像。反之亦然。圖源。



    損失函數(shù)包含:

  • 對抗損失函數(shù)

    以及對偶的
  • Cycle Consistency 損失
  • 總損失
  • 代碼如下:

    # Losses criterion_GAN = torch.nn.MSELoss() criterion_cycle = torch.nn.L1Loss() criterion_identity = torch.nn.L1Loss()for epoch in range(opt.epoch, opt.n_epochs):for i, batch in enumerate(dataloader):# Set model inputreal_A = Variable(batch["A"].type(Tensor))real_B = Variable(batch["B"].type(Tensor))# Adversarial ground truthsvalid = Variable(Tensor(np.ones((real_A.size(0), *D_A.output_shape))), requires_grad=False)fake = Variable(Tensor(np.zeros((real_A.size(0), *D_A.output_shape))), requires_grad=False)# ------------------# Train Generators# ------------------G_AB.train()G_BA.train()optimizer_G.zero_grad()# Identity lossloss_id_A = criterion_identity(G_BA(real_A), real_A)loss_id_B = criterion_identity(G_AB(real_B), real_B)loss_identity = (loss_id_A + loss_id_B) / 2# GAN lossfake_B = G_AB(real_A)loss_GAN_AB = criterion_GAN(D_B(fake_B), valid)fake_A = G_BA(real_B)loss_GAN_BA = criterion_GAN(D_A(fake_A), valid)loss_GAN = (loss_GAN_AB + loss_GAN_BA) / 2# Cycle lossrecov_A = G_BA(fake_B)loss_cycle_A = criterion_cycle(recov_A, real_A)recov_B = G_AB(fake_A)loss_cycle_B = criterion_cycle(recov_B, real_B)loss_cycle = (loss_cycle_A + loss_cycle_B) / 2# Total lossloss_G = loss_GAN + opt.lambda_cyc * loss_cycle + opt.lambda_id * loss_identityloss_G.backward()optimizer_G.step()# -----------------------# Train Discriminator A# -----------------------optimizer_D_A.zero_grad()# Real lossloss_real = criterion_GAN(D_A(real_A), valid)# Fake loss (on batch of previously generated samples)fake_A_ = fake_A_buffer.push_and_pop(fake_A)loss_fake = criterion_GAN(D_A(fake_A_.detach()), fake)# Total lossloss_D_A = (loss_real + loss_fake) / 2loss_D_A.backward()optimizer_D_A.step()# -----------------------# Train Discriminator B# -----------------------optimizer_D_B.zero_grad()# Real lossloss_real = criterion_GAN(D_B(real_B), valid)# Fake loss (on batch of previously generated samples)fake_B_ = fake_B_buffer.push_and_pop(fake_B)loss_fake = criterion_GAN(D_B(fake_B_.detach()), fake)# Total lossloss_D_B = (loss_real + loss_fake) / 2loss_D_B.backward()optimizer_D_B.step()loss_D = (loss_D_A + loss_D_B) / 2

    2.3 starGAN(2018)

    Pix2Pix模型解決了paired數(shù)據(jù)的圖像翻譯問題;CycleGAN解決了Unpaired數(shù)據(jù)下的圖像翻譯問題,但它們都是單領(lǐng)域的轉(zhuǎn)換,而StarGAN則應(yīng)用于多領(lǐng)域,即在同一種模型下做多個圖像翻譯任務(wù),效果如下:


    如下圖所示,當(dāng)多領(lǐng)域轉(zhuǎn)換時,對于每一個領(lǐng)域轉(zhuǎn)換,如果都需要重新訓(xùn)練一個模型去解決,這樣的行為就太低效了,而StarGAN將多領(lǐng)域轉(zhuǎn)換用統(tǒng)一框架實現(xiàn)。


    由于StarGAN時在多數(shù)據(jù)集下訓(xùn)練,而數(shù)據(jù)集之間有可能出現(xiàn)雖然類別不相交,但內(nèi)容相交的情況。比如CelebA數(shù)據(jù)集合RaFD數(shù)據(jù)集,前者擁有膚色,年齡的類別。而后者擁有表情的類別。但前者的圖像很多也是有表情的,這就導(dǎo)致前一類的圖像在后一類的標(biāo)記是不可知的。

    為了解決這個問題,在模型輸入中加入了Mask,即如果來源于數(shù)據(jù)集B,那么將數(shù)據(jù)集A中的標(biāo)記全部設(shè)為0,示意圖如下:

    starGAN使用的損失函數(shù)如下:

  • 對抗損失
  • D分類損失,使用真實圖像在原始領(lǐng)域進行
  • G分類損失,使用生成圖像在目標(biāo)領(lǐng)域進行
  • 重建函數(shù),與CycleGAN類似
  • 總損失

    代碼如下。表示多領(lǐng)域的方法主要在于加入了sampled_c。
  • for epoch in range(opt.epoch, opt.n_epochs):for i, (imgs, labels) in enumerate(dataloader):# Sample labels as generator inputssampled_c = Variable(Tensor(np.random.randint(0, 2, (imgs.size(0), c_dim))))# Generate fake batch of imagesfake_imgs = generator(imgs, sampled_c)# ---------------------# Train Discriminator# ---------------------optimizer_D.zero_grad()# Real imagesreal_validity, pred_cls = discriminator(imgs)# Fake imagesfake_validity, _ = discriminator(fake_imgs.detach())# Gradient penaltygradient_penalty = compute_gradient_penalty(discriminator, imgs.data, fake_imgs.data)# Adversarial lossloss_D_adv = -torch.mean(real_validity) + torch.mean(fake_validity) + lambda_gp * gradient_penalty# Classification lossloss_D_cls = criterion_cls(pred_cls, labels)# Total lossloss_D = loss_D_adv + lambda_cls * loss_D_clsloss_D.backward()optimizer_D.step()optimizer_G.zero_grad()# Every n_critic times update generatorif i % opt.n_critic == 0:# -----------------# Train Generator# -----------------# Translate and reconstruct imagegen_imgs = generator(imgs, sampled_c)recov_imgs = generator(gen_imgs, labels)# Discriminator evaluates translated imagefake_validity, pred_cls = discriminator(gen_imgs)# Adversarial lossloss_G_adv = -torch.mean(fake_validity)# Classification lossloss_G_cls = criterion_cls(pred_cls, sampled_c)# Reconstruction lossloss_G_rec = criterion_cycle(recov_imgs, imgs)# Total lossloss_G = loss_G_adv + lambda_cls * loss_G_cls + lambda_rec * loss_G_recloss_G.backward()optimizer_G.step()

    2.4 SPADE(2019)

    SPADE又名GauGAN,可以根據(jù)用戶畫的簡單圖像得到合成的實際圖像,在合成時用戶還可以選擇合成圖像的風(fēng)格,得到非常多樣的合成結(jié)果,如下圖所示。

    SPADE通過語義分割圖生成原始圖像,作者發(fā)現(xiàn)將語義分割圖直接作為生成網(wǎng)絡(luò)的輸入進行計算時,這些生成網(wǎng)絡(luò)中常用的傳統(tǒng)BN層容易丟失輸入語義圖像中的信息, 因此提出了新的歸一化層Spatially-Adaptive Normalization(SAN)來解決這個問題。

    SAN是在BN的基礎(chǔ)上做了修改,修改內(nèi)容就在于γ和β計算的不同,如下圖所示。在BN中γγγβββ的計算是通過網(wǎng)絡(luò)訓(xùn)練得到的,而SAN中γ和β是通過語義圖像計算得到的。


    SAN的計算過程如下。在BN中,γγγβββ是向量一維的,其中每個值對應(yīng)輸入特征圖的每個通道。而在SAN中,γγγβββ是三維矩陣,除了通道維度外,還有寬和高維度,因此下式中γγγβββ下標(biāo)包含c,y,xc,y,xc,y,x三個符號,這也是spatially-adaptive的含義,翻譯過來就是在空間上是有差異的,或者叫自適應(yīng)的。而BN的γγγβββ的下標(biāo)只有ccc,也就是通道,這種不區(qū)分空間維度的計算方式就比較容易丟失輸入圖像的信息。


    公式中的均值μμμ和標(biāo)準(zhǔn)差σσσ的計算如下,這部分和BN中的計算一樣。

    在網(wǎng)絡(luò)結(jié)構(gòu)方面,下圖是SPADE算法中生成器的網(wǎng)絡(luò)結(jié)構(gòu)示意圖,生成器采用堆疊多個SPADE ResBlk實現(xiàn)(右圖),其中每個SPADE ResBlk的結(jié)構(gòu)如左圖所示,SAN層中的γγγβββ參數(shù)通過輸入的語義圖像計算得到。

    關(guān)于SPADE算法是如何實現(xiàn)多樣化輸出的。下圖是SPADE算法的整體示意圖,生成器的輸入是一個向量,這個向量可以是隨機值,這樣生成的圖像也是隨機的;同樣,這個向量也可以通過一個編碼網(wǎng)絡(luò)和一張風(fēng)格圖像計算得到,編碼網(wǎng)絡(luò)將輸入圖像編碼成向量,這個向量就包含輸入圖像的風(fēng)格,這樣就能得到多樣化風(fēng)格輸出的效果了。

    參考文獻:

  • An Introduction to Image Synthesis with Generative Adversarial Nets
  • DCGAN論文詳解
  • GAN在圖像生成應(yīng)用綜述(論文解讀)
  • 完整code
  • [GAN筆記] pix2pix
  • 生成對抗網(wǎng)絡(luò)系列(4)——pix2pix
  • 深度學(xué)習(xí)《VAE-GAN》
  • Understanding and Implementing CycleGAN in TensorFlow
  • CycleGAN原理以及代碼全解析
  • CycleGAN算法原理
  • StarGAN-多領(lǐng)域圖像翻譯
  • 論文閱讀-人臉生成_StyleGAN
  • SPADE(GauGAN)算法筆記
  • 總結(jié)

    以上是生活随笔為你收集整理的GAN综述及其在图像生成领域的应用(含原理、代码详解)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。