【深度學(xué)習(xí)】pix2pixGAN理論及代碼實現(xiàn)與理解-創(chuàng)新互聯(lián)

靈感:最近也是在看關(guān)于GAN方面的代碼,也是看到了很多篇博客,都寫的挺好的,讓我醍醐灌頂,理解了GAN的原理以及代碼實現(xiàn)。所以寫一下來記載一下,最后有其他好文章的鏈接。

創(chuàng)新互聯(lián)建站科技有限公司專業(yè)互聯(lián)網(wǎng)基礎(chǔ)服務(wù)商,為您提供四川綿陽服務(wù)器托管,高防物理服務(wù)器租用,成都IDC機房托管,成都主機托管等互聯(lián)網(wǎng)服務(wù)。

靈感來源:pix2pixGAN理論以及代碼實現(xiàn)

目錄

1.什么是pix2pix GAN

2.pix2pixGAN生成器的設(shè)計

3.pix2pixGAN判別器的設(shè)計

4.損失函數(shù)

5.代碼實現(xiàn)?

6.參考文獻

1.什么是pix2pix GAN

它實際上就是一個CGAN,條件GAN,不過是改變了一般GAN的辨別器的輸出。其他的都是輸出一個概率,而pix2pixGAN或者也可以是patchgan,它的最終輸出是一個矩陣,每一個塊代表一個patch的概率而已。關(guān)于patch這一塊的知識可以去其他地方補一下,文末也有入口。

圖片x作為此cGAN的條件,需要輸入到G和D中。G的輸入是x(x是需要轉(zhuǎn)換的圖片),輸出是生成的圖片G(x)。D則需要分辨出(x,G(x))和(x,y)

pix2pixGAN主要用于圖像之間的轉(zhuǎn)換,又稱圖像翻譯。

2.pix2pixGAN生成器的設(shè)計

對于圖像翻譯任務(wù)來說,輸入和輸出之間會共享很多信息。比如輪廓信息是共享的。如何解決共享問題?需要我們從損失函數(shù)的設(shè)計當(dāng)中去思考。

如果使用普通的卷積神經(jīng)網(wǎng)絡(luò),那么會導(dǎo)致每一層都承載保存著所有的信息。這樣神經(jīng)網(wǎng)絡(luò)很容易出錯(容易丟失一些信息)

所以,我們使用UNet模型作為生成器

3.pix2pixGAN判別器的設(shè)計

D要輸入成對的圖像。這類似于cGAN,如果G(x)和x是對應(yīng)的,對于生成器來說希望判別為1;

如果G(x)和x不是對應(yīng)的,對于生成器來說希望判別器判別為0

pix2pixGAN中的D被論文中被實現(xiàn)為patch_D.所謂patch,是指無論生成的圖片有多大,將其切分為多個固定大小的patch輸入進D去判斷。如上圖所示。

這樣設(shè)計的好處是:D的輸入變小,計算量小,訓(xùn)練速度快

4.損失函數(shù)

D網(wǎng)絡(luò)損失函數(shù):輸入真實的成對圖像希望判定為1;輸入生成圖像與原圖希望判定為0

G網(wǎng)絡(luò)損失函數(shù):輸入生成圖像與原圖像希望判定為1

對于圖像翻譯任務(wù)而言,G的輸入和輸出之間其實共享了很多信息。因而為了保證輸入圖像和輸出圖像之間的相似度,還加入了L1loss,公式如下所示:

5.代碼實現(xiàn)?

代碼實現(xiàn)的話有官方以及別人的實現(xiàn),但是我有點不懂。然后看到這個鏈接的代碼才懂。

全部代碼在這:pix2pixGAN理論以及代碼實現(xiàn)

我作為筆記記錄,寫一下我覺得關(guān)鍵的代碼理解。

for step,(annos,imgs) in enumerate(dataloader):
        imgs = imgs.to(device)   #imgs 輸入的圖像
        annos = annos.to(device) #標(biāo)簽,真實的應(yīng)該生成的圖片
        #定義判別器的損失計算以及優(yōu)化的過程
        d_optimizer.zero_grad() 
        disc_real_output = dis(annos,imgs)      #輸入真實成對圖片
        d_real_loss = loss_fn(disc_real_output,torch.ones_like(disc_real_output,
                                                             device=device)) 
        #上面是為了將我們輸入的真實圖像對都標(biāo)為1,希望他接近1,因為真實嘛
        d_real_loss.backward()   #求梯度
         
        gen_output = gen(annos)  #通過輸入圖像生成圖片
        disc_gen_output = dis(annos,gen_output.detach()) #將我們輸入的和生成的圖片輸入辨別器
        d_fack_loss = loss_fn(disc_gen_output,torch.zeros_like(disc_gen_output,
                                                              device=device))  #辨別器希望生成的和我們輸入的圖像最終的判斷為0,也就是假的嘛
        d_fack_loss.backward()
        
        disc_loss = d_real_loss+d_fack_loss#判別器的損失計算,由兩個之和
        d_optimizer.step() #梯度更新
        
        #定義生成器的損失計算以及優(yōu)化的過程
        g_optimizer.zero_grad()
        disc_gen_out = dis(annos,gen_output) #辨別器辨別輸入圖像和生成圖像的匹配度
        gen_loss_crossentropyloss = loss_fn(disc_gen_out,
                                            torch.ones_like(disc_gen_out,
                                                              device=device)) #生成器和辨別器相反,他希望生成的圖像和輸入的圖像匹配為真實,也就是造假嘛
        gen_l1_loss = torch.mean(torch.abs(gen_output-imgs))  #L1損失
        gen_loss = gen_loss_crossentropyloss +LAMBDA*gen_l1_loss
        gen_loss.backward() #反向傳播
        g_optimizer.step() #優(yōu)化
        
        #累計每一個批次的loss
        with torch.no_grad():
            D_epoch_loss +=disc_loss.item()
            G_epoch_loss +=gen_loss.item()

上面用到的loss_fn是BCE損失。因為我們的辨別器輸出值為概率嘛,0到1,所以算得上是二分類,可以使用BCE。
6.參考文獻

GAN系列之 pix2pixGAN 網(wǎng)絡(luò)原理介紹以及論文解讀icon-default.png?t=M85Bhttps://blog.csdn.net/m0_62128864/article/details/124026977

一文看懂PatchGAN_明月幾時有.的博客-博客_patchgan最近看到PatchGAN很是好奇原理是什么,發(fā)現(xiàn)網(wǎng)上很多介紹的并不清楚.故墻外墻內(nèi)來回幾次,大概是清楚了.PatchGAN其實指的是GAN的判別器,將判別器換成了全卷積網(wǎng)絡(luò).這么說并不嚴(yán)謹(jǐn),PatchGAN和普通GAN判別器是有區(qū)別的,普通的GAN判別器是將輸入映射成一個實數(shù),即輸入樣本為真樣本的概率.PatchGAN將輸入映射為NxN的patch(矩陣)X,XijX_{ij}Xij?的值代表...https://blog.csdn.net/weixin_35576881/article/details/88058040

pix2pix算法筆記_AI之路的博客-博客_pix2pix算法論文:Image-to-Image Translation with Conditional Adversarial Networks論文鏈接:https://arxiv.org/abs/1611.07004代碼鏈接:https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix這篇論文發(fā)表在CVPR2017,簡稱pix2pix,是將GAN應(yīng)用...https://blog.csdn.net/u014380165/article/details/98453672

Pix2Pix-基于GAN的圖像翻譯_張雨石的博客-博客_pix2pix算法語言翻譯是大家都知道的應(yīng)用。但圖像作為一種交流媒介,也有很多種表達方式,比如灰度圖、彩色圖、梯度圖甚至人的各種標(biāo)記等。在這些圖像之間的轉(zhuǎn)換稱之為圖像翻譯,是一個圖像生成任務(wù)。多年來,這些任務(wù)都需要用不同的模型去生成。在GAN出現(xiàn)之后,這些任務(wù)一下子都可以用同一種框架來解決。這個算法的名稱叫做Pix2Pix,基于對抗神經(jīng)網(wǎng)絡(luò)實現(xiàn)。https://blog.csdn.net/stdcoutzyx/article/details/78820728

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

新聞標(biāo)題:【深度學(xué)習(xí)】pix2pixGAN理論及代碼實現(xiàn)與理解-創(chuàng)新互聯(lián)
地址分享:http://muchs.cn/article18/dpgogp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、ChatGPT、自適應(yīng)網(wǎng)站、搜索引擎優(yōu)化、網(wǎng)站策劃虛擬主機

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

手機網(wǎng)站建設(shè)