一、GAN
1、應(yīng)用
GAN的應(yīng)用十分廣泛,如圖像生成、圖像轉(zhuǎn)換、風(fēng)格遷移、圖像修復(fù)等等。
2、簡介
生成式對抗網(wǎng)絡(luò)是近年來復(fù)雜分布上無監(jiān)督學(xué)習(xí)最具前景的方法之一。模型通過框架中(至少)兩個(gè)模塊:生成模型(Generative Model,G)和判別模型(Discriminative Model,D)的互相博弈學(xué)習(xí)產(chǎn)生相當(dāng)好的輸出。
- 判別模型:判斷一個(gè)實(shí)例是真實(shí)的還是由模型生成的
- 生成模型:生成一個(gè)假實(shí)例來騙過判別模型
兩個(gè)模型相互對抗,最后達(dá)到一個(gè)平衡(納什均衡),即生成模型生成的實(shí)例與真實(shí)的沒有區(qū)別,判別模型無法區(qū)分輸入數(shù)據(jù)是真實(shí)的還是由生成模型生成的。(G recovering the training data distribution and D equal to 1/2 everywhere)
3、?GAN的損失函數(shù)
- z:隨機(jī)噪聲
- :隨機(jī)噪聲z服從的概率分布
- :生成器,輸入為噪聲z,輸出為假圖像
- :真實(shí)數(shù)據(jù)服從的概率分布
- :判別器,輸入為圖像,輸出為該圖像為真實(shí)圖像的概率
上式可分為兩部分來理解:給定G,找到使V最大化的D;另一部分是給定D,找到使V最小化的G
第一部分:給定G,找到使V最大化的D
①部分,因?yàn)榕袆e器此時(shí)的輸入為x,是真實(shí)數(shù)據(jù),EX~Pdata??[logD(X)]值越大表示判別器認(rèn)為輸入x為真實(shí)數(shù)據(jù)的概率越大,D能力越強(qiáng),因此這一項(xiàng)的輸出越大(越接近于1)越好。
②部分,此時(shí)判別器的輸入是G(z),即輸入為假圖像,那么對于D(G(Z))來說這個(gè)值越小,表示判別器判定假圖像為真實(shí)數(shù)據(jù)的概率越小,同樣表示D能力越強(qiáng)。此時(shí)②為log(1-D(G(z))的期望,當(dāng)D越強(qiáng)時(shí),D(G(z))值越小,而Ez~pz?(z)?[log(1?D(G(Z)))]越大。(①和②都想使給定G,D效果最好,都需要最大化V)
第二部分:給定D,找到使V最小化的G
①部分,因?yàn)榻o定了D,①只與D有關(guān),所以這部分是常量。
②部分,此時(shí)判別器D的輸入為G(z),為假圖像,但是我們期望的是生成器的效果好,即盡可能的瞞過D,也就是期望D(G(z))盡可能大,越大表示D判定假圖像為真實(shí)數(shù)據(jù)的概率越大,也就表明生成器G生成的圖像效果好,可以成功的騙過D。D(G(z))越大,Ez~pz?(z)?[log(1?D(G(Z)))]越小,因此給定D ,找到最小化V的G會使生成器的效果最好。
4、GAN流程
黑點(diǎn)表示真實(shí)圖像的分布,綠點(diǎn)表示生成圖像的概率分布,藍(lán)點(diǎn)表示判別器預(yù)測x為真實(shí)數(shù)據(jù)的概率。
下圖是GAN網(wǎng)絡(luò)的偽代碼:
注意:訓(xùn)練過程中,訓(xùn)練k次判別器,訓(xùn)練一次生成器(交替訓(xùn)練);訓(xùn)練生成器的過程中,去掉了第一項(xiàng),因?yàn)楣潭薉,可省略。
在訓(xùn)練的時(shí)候,D(G(z))越大越接近于1,y越小,生成器生成的假圖越被判別器誤判為真圖。但訓(xùn)練剛開始時(shí),生成的圖像太假,太容易被判別器識破,D(G(z))接近0,log(1-D(G(z)))飽和無梯度,所以將最小化log(1-D(G(z)))變?yōu)樽畲蠡痩og(D(G(z)))
? ? ? ? ? ? ? ??
5、GAN的特點(diǎn)以及優(yōu)缺點(diǎn)
生成器G并不知道原始的數(shù)據(jù)分布Pg(x),它只是通過判別器的反饋(是否騙過判別器)來不斷地更新自己
特點(diǎn):
- 相比較傳統(tǒng)的模型,他存在兩個(gè)不同的網(wǎng)絡(luò),而不是單一的網(wǎng)絡(luò),并且訓(xùn)練方式采用的是對抗訓(xùn)練方式
- GAN中G的梯度更新信息來自判別器D,而不是來自數(shù)據(jù)樣本
優(yōu)點(diǎn):
- GAN是一種生成式模型,相比較其他生成模型(玻爾茲曼機(jī)和GSNs)只用到了
反向傳播
,而不需要復(fù)雜的馬爾科夫鏈 - 相比其他所有模型, GAN可以產(chǎn)生更加
清晰
,真實(shí)的樣本 - GAN采用的是一種
無監(jiān)督的學(xué)習(xí)方式訓(xùn)練
,可以被廣泛用在無監(jiān)督學(xué)習(xí)和半監(jiān)督學(xué)習(xí)領(lǐng)域
缺點(diǎn):
- 訓(xùn)練GAN需要達(dá)到納什均衡,有時(shí)候可以用梯度下降法做到,有時(shí)候做不到.我們還沒有找到很好的達(dá)到納什均衡的方法,所以
訓(xùn)練GAN是不穩(wěn)定的
- GAN不適合處理離散形式的數(shù)據(jù),比如文本
- GAN存在訓(xùn)練不穩(wěn)定、梯度消失、模式崩潰的問題
文本數(shù)據(jù)相比較圖片數(shù)據(jù)來說是離散的,因?yàn)閷τ谖谋緛碚f,通常需要將一個(gè)詞映射為一個(gè)高維的向量,最終預(yù)測的輸出是一個(gè)one-hot向量,假設(shè)softmax的輸出是(0.2, 0.3, 0.1,0.2,0.15,0.05)那么變?yōu)閛nehot是(0,1,0,0,0,0),如果softmax輸出是(0.2, 0.25, 0.2, 0.1,0.15,0.1 ),one-hot仍然是(0, 1, 0, 0, 0, 0),所以對于生成器來說,G輸出了不同的結(jié)果但是D給出了同樣的判別結(jié)果,并不能將梯度更新信息很好的傳遞到G中去,所以D最終輸出的判別沒有意義。
?
三、WGAN
1、簡介
WGAN全稱為Wasserstein Generative Adversarial Networks,旨在解決GAN難train的問題。
2、GAN為什么訓(xùn)練困難
- GAN網(wǎng)絡(luò)的損失函數(shù)
為了方便表述,對上述公式做調(diào)整:
?即把最后一項(xiàng)的G(z)用x來表示,x為生成器生成的分布。
現(xiàn)在期望求得生成器固定最大化判別器D:
- 首先,對于一個(gè)隨機(jī)的樣本,它可能是真實(shí)樣本也可能是生成的樣本,對于這個(gè)樣本的損失為:
- ?預(yù)求最大化的D,則對上式的D(x)求導(dǎo),并讓導(dǎo)函數(shù)為0,即:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
- ?化簡上式,得到最優(yōu)的D表達(dá)式為:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
若表示x完全服從生成分布,是假圖像,所以最優(yōu)判別器D給出的概率為0;反之,x完全服從真實(shí)分布,是真圖像,所以最優(yōu)判別器D給出的概率為1;若,表示x服從真實(shí)分布和服從生成分布的數(shù)據(jù)一樣多,因此最優(yōu)判別器D給出的概率為50%。
現(xiàn)已找到最大化的D,現(xiàn)要將其固定,尋找最小化的G
- 即求下式:
- ?將最大化的D即D?(x)帶入上式得:
- ?化簡得:式1
?化簡成上式,是為了和KL散度和JS散度相聯(lián)系(散度可以理解為距離的意思)
- KL散度
?上式是用期望來表示KL散度的,也可以用積分或者求和的形式來表示,如下:
?如圖,大致解釋一下KL散度含義:
- JS散度
?可以看出,JS散度是根據(jù)KL散度來定義的,它具有對稱性。
根據(jù)JS散度,可以將式1變換成如下式:
?GAN中使用的就是JS散度的形式。GAN訓(xùn)練困難很大程度是JS散度的原因。
結(jié)論:根據(jù)原始GAN定義的判別器loss,我們可以得到最優(yōu)判別器的形式;而在最優(yōu)判別器的下,我們可以把原始GAN定義的生成器loss等價(jià)變換為最小化真實(shí)分布與生成分布之間的JS散度。我們越訓(xùn)練判別器,它就越接近最優(yōu),最小化生成器的loss也就會越近似于最小化真實(shí)分布和生成分布之間的JS散度。
上述看似非常合理,只要我們不斷訓(xùn)練,真實(shí)分布和生成分布越來越接近,JS散度越來越小,直到兩個(gè)分布完全一致,此時(shí)JS散度為0.
但是JS散度并不會隨著真實(shí)分布和生成分布越來越近而使其越來越小,而是保持log2不變
JS散度就一直是常數(shù)log2,也就是在訓(xùn)練過程中l(wèi)oss一直不發(fā)生變化,這也意味著生成器的梯度一直為0,即生成器產(chǎn)生了梯度消失的現(xiàn)象。
- 為什么兩個(gè)分布不重疊,JS散度一直為log2?
證明:https://blog.csdn.net/Invokar/article/details/88917214
- 生成器梯度不再更新,為什么在訓(xùn)練GAN時(shí)還是得到一些比較好的結(jié)果呢?
3、Wasserstein
WGAN提出一種新的度量兩個(gè)分布距離的標(biāo)準(zhǔn)-Wasserstein Metric,也叫Earth-Mover distance
?是Pr和Pg組合起來的所有可能的聯(lián)合分布的集合,反過來說,
中每一個(gè)分布的邊緣分布都是Pr和Pg。對于每一個(gè)可能的聯(lián)合分布γ而言,可以從中采樣(x,y)~γ得到一個(gè)真實(shí)樣本x和一個(gè)生成樣本y,并計(jì)算出這對樣本的距離||x-y||,所以可以計(jì)算該聯(lián)合分布γ下樣本對距離的期望值E[||x-y||]。在所有可能的聯(lián)合分布中能夠?qū)@個(gè)期望值取到的下界
?就定義為Wasserstein距離。
直觀上可以把E[||x-y||]理解為在γ這個(gè)“路徑規(guī)劃”下把Pr這堆“沙土”挪到Pg“位置”所需的“消耗”,而W(Pr,Pg)就是“最優(yōu)路徑規(guī)劃”下的“最小消耗”。參考下例:
https://juejin.cn/post/7150940183218061348
結(jié)論:Wasserstein距離是平滑的,不是像JS散度是突變的過程,這樣在訓(xùn)練時(shí),即使兩個(gè)分布不重疊Wasserstein距離仍然可以提高梯度。
WGAN的實(shí)現(xiàn)
直接使用Wasserstein距離來定義生成器的損失是困難的,因?yàn)?img src="https://imgs.yssmx.com/Uploads/2023/12/760020-25.png" alt="gan生成對抗網(wǎng)絡(luò),生成對抗網(wǎng)絡(luò),人工智能,深度學(xué)習(xí)" referrerpolicy="no-referrer" />
是難以直接求解的,因此作者用了一個(gè)已有的定理將它變換如下:公式14
- ?Lipschitz連續(xù):在一個(gè)連續(xù)函數(shù)f上面額外施加了一個(gè)限制,要求存在一個(gè)常數(shù)K≥0使得定義域內(nèi)的任意兩個(gè)元素x1和x2都滿足 | f(x1)-f(x2) | <= K| x1-x2 |,此時(shí)稱函數(shù)f的Lipschitz常數(shù)為K。很顯然,lipschitz連續(xù)就限制了f的斜率的絕對值小于等于K,這個(gè)K稱為Libschitz常數(shù)。
?這樣,我們只需要找到一個(gè)lipschitz函數(shù),就可以計(jì)算Wasserstein距離了。
具體做法:用一組參數(shù)w來定義一系列可能的函數(shù)fw。把f用一個(gè)帶參數(shù)的w的神經(jīng)網(wǎng)絡(luò)來表示。由于神經(jīng)網(wǎng)絡(luò)的擬合能力足夠強(qiáng)大,這樣定義出來的一系列fw雖然無法囊括所有,但可以高度近似。
?總:可以構(gòu)造一個(gè)含參數(shù)w,最后一層不是非線性激活函數(shù)層的判別器網(wǎng)絡(luò)fw,在限制w不超過某個(gè)范圍的條件下,使得:公式15
?盡可能取到最大。此時(shí)L就會近似真實(shí)分布與生成分布之間的Wasserstein距離。注意原始GAN的判別器做的是真假二分類任務(wù),所以最后一層是sigmoid,但是現(xiàn)在WGAN中的判別器fw做的是近似擬合Wasserstein距離,屬于回歸任務(wù),所以要把最后一層的sigmoid拿掉。
接下來生成器要近似地最小化Wasserstein距離,可以最小化L,由于Wasserstein距離的優(yōu)良性質(zhì),我們不需要擔(dān)心生成器梯度消失的問題。再考慮到L的第一項(xiàng)與生成器無關(guān),就得到了WGAN的兩個(gè)loss。
公式15是公式17的反,可以指示訓(xùn)練進(jìn)程,其數(shù)值越小,表示真實(shí)分布與生成分布的Wasserstein距離越小,GAN訓(xùn)練得越好。
WGAN與原始GAN形式相比,只改了四點(diǎn):
- 判別器最后一層去掉sigmoid
- 生成器和判別器的loss不取log
- 每次更新判別器的參數(shù)之后把它們的絕對值截?cái)嗟讲怀^一個(gè)固定常數(shù)c
- 不要用基于動(dòng)量的優(yōu)化算法(包括momentum和Adam),推薦RMSProp,SGD也行
WGAN本作引入了Wasserstein距離,由于它相對KL散度與JS散度具有優(yōu)越的平滑特性,理論上可以解決梯度消失問題。接著通過數(shù)學(xué)變換將Wasserstein距離寫成可求解的形式,利用一個(gè)參數(shù)數(shù)值范圍受限的判別器神經(jīng)網(wǎng)絡(luò)來最大化這個(gè)形式,就可以近似Wasserstein距離。在此近似最優(yōu)判別器下優(yōu)化生成器使得Wasserstein距離縮小,就能有效拉近生成分布與真實(shí)分布。
二、CycleGAN
1、簡介
CycleGAN全稱:Unpaired Image-to-Image Translationusing Cycle-Consistent Adversarial Networks,即非成對圖像
轉(zhuǎn)換一致性網(wǎng)絡(luò)。這里的非成對圖像指的是訓(xùn)練樣本是不相關(guān)的,因?yàn)槌蓪Φ臉颖竞茈y獲取。
2、循環(huán)一致性對抗網(wǎng)絡(luò)
現(xiàn)有兩個(gè)域的圖像,分別為域X和域Y,例如域X表示夏季圖片,域Y表示冬季圖片,現(xiàn)期望兩個(gè)域的圖片互相轉(zhuǎn)換,即輸入域X的夏季圖片生成器輸出域Y的冬季圖片或者輸入域Y的冬季圖片生成器輸出域X的夏季圖片
域X的圖片經(jīng)生成器不斷生成圖片G(X),而D鑒別生成的圖片和域Y中的圖片,這樣就構(gòu)成了一個(gè)GAN網(wǎng)絡(luò),這樣域X中的圖片不斷向域Y轉(zhuǎn)換,但是會出現(xiàn)如下效果:
上圖確實(shí)是將域X中圖片轉(zhuǎn)換成了域Y中冬季圖片風(fēng)格,但是轉(zhuǎn)換后的圖片和原始圖片沒有任何關(guān)系,即GAN網(wǎng)絡(luò)只學(xué)到了把一張夏季圖片轉(zhuǎn)化為冬季圖片,但至于轉(zhuǎn)換后的冬季圖片和原始夏季圖片有沒有關(guān)系沒有學(xué)習(xí)到,這樣的話這個(gè)網(wǎng)絡(luò)肯定是不符合實(shí)際要求的。那么CycleGAN就提出了循環(huán)一致性網(wǎng)絡(luò),如下圖所示:
x表示域X中的圖像數(shù)據(jù),Y^表示x經(jīng)生成器G生成的圖片域,x^表示Y^中的圖片經(jīng)過生成器F生成的圖片數(shù)據(jù),DY表示判別器,用于判別圖片是來自域Y還是G(x)。
上述循環(huán)一致性大致過程為 x --> G(x) -->F(G(x))≈x^,即設(shè)置損失讓x和x^盡可能相似。
上述介紹完了從域X轉(zhuǎn)域Y的過程,那么域Y轉(zhuǎn)域X也是一樣的。整體:
3、CycleGAN損失函數(shù)
損失函數(shù)由三部分組成,如下:
四、AnoGAN
1、簡介
AnoGAN全稱:Unsupervised Anomaly Detection with Generative Adversarial Networks to Guide Marker Discovery,指使用生成對抗網(wǎng)絡(luò)實(shí)現(xiàn)異常檢測。這篇論文解決的是醫(yī)學(xué)影像中疾病的檢測
AnoGAN思想:通過GAN學(xué)習(xí)正常樣本的分布,然后通過某種手段將帶有缺陷的樣本映射到隱變量,再由隱變量重構(gòu)樣本;由于GAN只學(xué)到了正常樣本的分布,因此重構(gòu)圖像會在保留原有圖像特點(diǎn)的基礎(chǔ)上消除缺陷部分,最后通過重構(gòu)圖像與原圖像的殘差確定缺陷的位置
2、出發(fā)點(diǎn)
DCGAN(GAN)是將一個(gè)噪聲或者說一個(gè)潛在變量映射成一張圖片,在訓(xùn)練DCGAN時(shí),都是使用某一種數(shù)據(jù)進(jìn)行的,比如使用的數(shù)據(jù)都是人臉,那么這些數(shù)據(jù)都是正常數(shù)據(jù),那么弄一個(gè)潛在變量經(jīng)DCGAN后生成的圖片應(yīng)該也都是正常圖像。
AnoGAN的想法:能否將一張圖片M映射成某個(gè)潛在變量,但是是比較難做到的。但是可以在某個(gè)空間不斷的查找一個(gè)潛在變量,使得這個(gè)潛在變量生成的圖片與圖片M盡可能的接近
3、過程?
- 訓(xùn)練階段:僅使用正常的數(shù)據(jù)訓(xùn)練GAN。如我們使用手寫數(shù)字中的數(shù)字8作為本階段的數(shù)據(jù)進(jìn)行訓(xùn)練,那么8就是正常數(shù)據(jù)。訓(xùn)練結(jié)束后我們輸入一個(gè)向量z,生成網(wǎng)絡(luò)會將z變成8。【注意:訓(xùn)練階段已經(jīng)訓(xùn)練好GAN網(wǎng)絡(luò),后面的測試階段GAN網(wǎng)絡(luò)的權(quán)重是不再變換的】
- 測試階段:訓(xùn)練階段已經(jīng)訓(xùn)練好一個(gè)GAN網(wǎng)絡(luò),這一階段就是要利用訓(xùn)練好的網(wǎng)絡(luò)進(jìn)行缺陷檢測。如現(xiàn)在我們有一個(gè)數(shù)據(jù)6,此為缺陷數(shù)據(jù)?【訓(xùn)練時(shí)使用8進(jìn)行訓(xùn)練,這里的6即為缺陷數(shù)據(jù)】??,F(xiàn)在我們要做的就是搜索一個(gè)潛在變量并讓其生成的圖片與圖片6盡可能接近,具體實(shí)現(xiàn)如下:
? ①?首先我們會定義一個(gè)潛在變量z,然后經(jīng)過剛剛訓(xùn)練的好的生成網(wǎng)絡(luò),得到假圖像G(z),接著? ? ? ? ? ?G(z)和缺陷數(shù)據(jù)6計(jì)算損失
?②?這時(shí)候損失往往會比較大,我們不斷的更新z值,會使損失不斷的減少,在程序中我們可以設(shè)? ? ? ? ? 置更新z的次數(shù),如更新500次后停止,此時(shí)我們認(rèn)為將如今的潛在變量z送入生成網(wǎng)絡(luò)得到的? ? ? ? 假圖像已經(jīng)和圖片6非常像
?③?將z再次送入生成網(wǎng)絡(luò),得到G(z)?!?strong>注:由于潛在變量z送入的網(wǎng)絡(luò)是生成圖片8的,盡管通? ? ? ? ? 過搜索使G(z)和6盡可能相像,但還是存在一定差距,即它們的損失較大】
?④?最后我們就可以計(jì)算G(z)和圖片6的損失,并將這個(gè)損失作為判斷是否有缺陷的重要依據(jù)。因? ? ? ? ? 為如果此時(shí)測試階段傳入的不是缺陷數(shù)據(jù),而是8,此時(shí)用相同的方法搜索潛在變量z,然后將? ? ? ? 最終的z送入生成網(wǎng)絡(luò),得到G(z),然后計(jì)算G(z)與圖片8的損失,這時(shí)損失很小。
通過以上分析, 我們可以發(fā)現(xiàn)當(dāng)我們在測試階段傳入缺陷圖片時(shí)最終的損失大,傳入正常圖片時(shí)的損失小,這時(shí)候我們就可以設(shè)置一個(gè)合適的閾值來判斷圖像是否有缺陷了。
?4、損失計(jì)算
文中損失函數(shù)分為兩部分,分別為Residual Loss和Discrimination Loss:
- Residual loss
z表示潛在變量,G(z)表示生成的假圖像,x表示輸入的測試圖片。上式表示生成的假圖像與輸入圖片的之間的差距。
- Discrimination Loss
上式z表示潛在變量,G(z)表示生成的假圖像,x表示輸入的測試圖片。f()表示將通過判別器,然后取判別器某一層的輸出結(jié)果。?這里可以把判別器當(dāng)作一個(gè)特征提取網(wǎng)絡(luò),我們將生成的假圖片和測試圖片都輸入判別器,看它們提取到特征的差異。
求得R(z)和D(z)后,我們定義它們的線性組合作為最終的損失,如下:
五、EGBAD
1、簡介
EGBAD全稱:Efficient GAN-Based Anomaly Detection。
AnoGAN一個(gè)顯而易見的劣勢,即在測試階段需要花費(fèi)大量時(shí)間來搜索潛在變量z,這在很多應(yīng)用場景中是難以接受的。本文針對上述所說缺點(diǎn),介紹一種新的GAN網(wǎng)絡(luò)——EGBAD,其在訓(xùn)練過程中通過一個(gè)巧妙的編碼器實(shí)現(xiàn)對z的搜索,這樣在測試過程中就可以節(jié)約大量時(shí)間。
2、過程
AnoGAN分為訓(xùn)練和測試兩個(gè)階段,訓(xùn)練階段使用正常數(shù)據(jù)訓(xùn)練一個(gè)GAN網(wǎng)絡(luò),在測試階段,固定訓(xùn)練階段的網(wǎng)絡(luò)權(quán)重,不斷更新潛在變量z,使得由z生成的假圖像盡可能接近真實(shí)圖片。
EGBAD的提出就是為了解決AnoGAN時(shí)間消耗大的問題。具體做法:EGBAD也分為訓(xùn)練和測試兩個(gè)階段進(jìn)行。在訓(xùn)練階段,不僅要訓(xùn)練生成器和判別器,還會定義一個(gè)編碼器(encoder)結(jié)構(gòu)并對其訓(xùn)練,encoder主要用于將輸入圖像通過網(wǎng)絡(luò)轉(zhuǎn)變成一個(gè)潛在變量,最后再將潛在變量送入生成器,生成假圖像。EGBAD沒有在測試階段搜索潛在變量,而是直接通過一個(gè)encoder結(jié)構(gòu)將輸入圖像轉(zhuǎn)變成潛在變量,大大節(jié)省了時(shí)間成本。
3、EGBAD訓(xùn)練過程模型示意圖
可以看出判別器的輸入有兩個(gè),一個(gè)是生成器生成的假圖像x',另一個(gè)是編碼器生成的z'。
六、GANomaly
1、簡介
GANomaly全稱:Semi-Supervised Anomaly Detection via Adversarial Training。是實(shí)現(xiàn)缺陷檢測的。
2、GANomaly結(jié)構(gòu)
如上圖紅色的為Encoder結(jié)構(gòu),藍(lán)色的為Decoder結(jié)構(gòu)。Encoder主要是降維的作用,將一張張圖片數(shù)據(jù)壓縮成一個(gè)個(gè)潛在向量;Decoder就是升維作用,將一個(gè)個(gè)潛在向量重建成一張張圖片。
按照結(jié)構(gòu)來分,可以分為三個(gè)子結(jié)構(gòu):生成器網(wǎng)絡(luò)G,編碼器網(wǎng)絡(luò)E和判別器網(wǎng)絡(luò)D
七、f-AnoGAN
1、簡介
f-AnoGAN全稱:f-AnoGAN: Fast unsupervised anomaly detection with generative adversarial networks
2、過程
訓(xùn)練主要分兩步進(jìn)行,第一步是訓(xùn)練一個(gè)生成對抗網(wǎng)絡(luò),第二步利用第一步生成對抗網(wǎng)絡(luò)的權(quán)重,訓(xùn)練一個(gè)encoder編碼器
?論文給出了三種訓(xùn)練E的結(jié)構(gòu):ziz結(jié)構(gòu),izi結(jié)構(gòu)和izif結(jié)構(gòu)
八、StyleGAN
1、簡介
StyleGAN全稱:A Style-Based Generator Architecture for Generative Adversarial Networks
StyleGAN中的“style”是指數(shù)據(jù)集中人臉的主要屬性,比如人物的姿態(tài)等信息,而不是風(fēng)格轉(zhuǎn)換中的圖像風(fēng)格,這里Style是指人臉的風(fēng)格,包括了臉型上面的表情、人臉朝向、發(fā)型等等,還包括紋理細(xì)節(jié)上的人臉膚色、人臉光照等方方面面。
不同的參數(shù)可以控制人臉的不同“style”。StyleGAN用風(fēng)格(style)來影響人臉的姿態(tài)、身份特征等,用噪聲(noise)來影響頭發(fā)絲、皺紋、膚色等細(xì)節(jié)部分。
2、背景
- GAN所生成的圖像在分辨率和質(zhì)量上都得到了飛速發(fā)展,但是之前的很多研究工作仍然把生成器當(dāng)成黑箱子,也就是對生成器進(jìn)行圖像生成過程的理解,例如圖像多樣性中的隨機(jī)特征是如何控制的,潛在空間的性質(zhì)也是知之甚少。
- 受風(fēng)格遷移啟發(fā),StyleGAN重新設(shè)計(jì)了生成器的網(wǎng)絡(luò)結(jié)構(gòu),并試圖來控制圖像生成的過程:生成器從學(xué)習(xí)到的常量輸入開始,基于潛碼調(diào)整每個(gè)卷積層的圖像“風(fēng)格”,從而直接控制圖像特征;另外,結(jié)合直接注入網(wǎng)絡(luò)的噪聲,可以更改所生成圖像中的隨機(jī)屬性(例如雀斑、頭發(fā))。StyleGAN可以一定程度上實(shí)現(xiàn)無監(jiān)督式地屬性分離,進(jìn)行一些風(fēng)格混合或插值的操作。
3、StyleGAN模型架構(gòu)
StyleGAN的網(wǎng)絡(luò)結(jié)構(gòu)包含兩個(gè)部分,第一個(gè)是Mapping network,即下圖左部分,由隱藏變量z生成中間隱藏變量w的過程,這個(gè)w就是用來控制生成圖像的style,即風(fēng)格。第二個(gè)是Synthesis network,它的作用是生成圖像,創(chuàng)新之處在于給每個(gè)子網(wǎng)絡(luò)都輸入了A和B,A是由w轉(zhuǎn)換得到的仿射變換,用于控制生成圖像的風(fēng)格,B是轉(zhuǎn)換后的隨機(jī)噪聲,用于豐富生成圖像的細(xì)節(jié)。? ?
3.1 映射網(wǎng)絡(luò)Mapping Network?
Mapping Network 要做的事就是對隱藏空間(latent space)進(jìn)行解耦
latent code:為了更好的對數(shù)據(jù)進(jìn)行分類或者生成,需要對數(shù)據(jù)特征進(jìn)行表示,但是數(shù)據(jù)有很多特征,這些特征之間相互關(guān)聯(lián),耦合性較高,導(dǎo)致模型很難弄清楚它們之間的聯(lián)系,使得學(xué)習(xí)效率低下,因此需要尋找這些表面特征下隱藏的深層次的關(guān)系,將這些關(guān)系進(jìn)行解耦,得到的隱藏特征,即latent code。由latent code組成的空間就是latent space
StyleGAN的第一點(diǎn)改進(jìn)是,給Generator的輸入加上了由8個(gè)全連接層組成的Mapping Network,并且 Mapping Network 的輸出 W' 與輸入層(512×1)的大小相同。
?為什么需要將latent code z變成w?
因?yàn)閦是符合均勻分布或者高斯分布的隨機(jī)變量,所以變量之間的耦合性比較大。舉個(gè)例子,比如特征:頭發(fā)長度和男子氣概,如果按照z的分布來說,那么這兩個(gè)特征之間就會存在交纏緊密的聯(lián)系,頭發(fā)短了你的男子氣概會降低或者增加,但其實(shí)現(xiàn)實(shí)情況來說,短發(fā)男子、長發(fā)男子都可以有很強(qiáng)的男子氣概。所以我們需要將latent code z進(jìn)行解耦,才能更好的后續(xù)操作,來改變其不同特征。
?為什么加入Mapping Network?
添加Mapping Network的目標(biāo)是將輸入向量編碼為中間向量,并且中間向量后續(xù)會傳給生成網(wǎng)絡(luò)得到控制向量,使得該控制向量的不同元素能夠控制不同的視覺特征。為何要加 Mapping Network 呢?因?yàn)槿绻患舆@個(gè) Mapping Network 的話,后續(xù)得到的控制向量之間會存在特征糾纏的現(xiàn)象——比如說我們想調(diào)節(jié) 8*8 分辨率上的控制向量(假設(shè)它能控制人臉生成的角度),但是我們會發(fā)現(xiàn) 32*32 分辨率上的控制內(nèi)容(譬如膚色)也被改變了,這個(gè)就叫做特征糾纏。所以 Mapping Network 的作用就是為輸入向量的特征解纏提供一條學(xué)習(xí)的通路。
?
?為什么Mapping Network能夠?qū)W習(xí)到特征解纏?
如果僅使用輸入向量來控制視覺特征,能力比較有限,因?yàn)樗仨氉裱?xùn)練數(shù)據(jù)的概率密度。例如,如果黑頭發(fā)的人的圖像在數(shù)據(jù)集中更常見,那么更多的輸入值將會被映射到該特征上。因此,該模型無法將部分輸入(向量中的元素)映射到特征上,這就會造成特征糾纏。然而,通過使用另一個(gè)神經(jīng)網(wǎng)絡(luò),該模型可以生成一個(gè)不必遵循訓(xùn)練數(shù)據(jù)分布的向量,并且可以減少特征之間的相關(guān)性。
3.2 樣式模塊(AdaIN)
StyleGAN的第二點(diǎn)改進(jìn)是,將特征解纏后的中間變量W'變換為樣式控制向量,從而參與影響生成器的生成過程。
?生成器由于從4*4,變換到8*8,并最終變換到1024*1024,所以它由9個(gè)生成階段組成,而每個(gè)階段都會受兩個(gè)控制向量(A)對其施加影響,影響的方式都是采用AdaIN(自適應(yīng)實(shí)例歸一化)。因此,中間向量W'總共被變成18個(gè)控制向量傳給生成器。其中?AdaIN?的具體實(shí)現(xiàn)過程如上右圖所示。
為什么用IN而不用BN?
BN是對一個(gè)Batch樣本的特征統(tǒng)計(jì)進(jìn)行標(biāo)準(zhǔn)化,而不是對單個(gè)樣本進(jìn)行標(biāo)準(zhǔn)化。因此可以直觀地理解為將一批樣本標(biāo)準(zhǔn)化為以單一風(fēng)格為中心。但是我們希望是多種風(fēng)格圖像傳輸?shù)较嗤膬?nèi)容中,BN就不可取。
另一反面,IN可以將每個(gè)單獨(dú)實(shí)例的風(fēng)格標(biāo)準(zhǔn)化為目標(biāo)風(fēng)格,丟棄了原始風(fēng)格的信息,網(wǎng)絡(luò)的其他部分可以專注于匹配內(nèi)容的操作。
IN通過將特征統(tǒng)計(jì)量標(biāo)準(zhǔn)化來實(shí)現(xiàn)一種風(fēng)格的標(biāo)準(zhǔn)化
如何自適應(yīng)(實(shí)現(xiàn)任意風(fēng)格的轉(zhuǎn)換)?
給定輸入,以每個(gè)樣本為單位,計(jì)算在不同特征通道上的均值μ和方差σ,可以得到IN的公式如下
上面式子中γ和β是IN層的仿射參數(shù),在訓(xùn)練時(shí)由網(wǎng)絡(luò)來學(xué)習(xí)調(diào)節(jié)。IN可以將輸入圖像標(biāo)準(zhǔn)化為由仿射參數(shù) γ?和 β指定的風(fēng)格。當(dāng)輸入內(nèi)容圖像c和風(fēng)格圖像s的時(shí)候,使網(wǎng)絡(luò)實(shí)現(xiàn)任意風(fēng)格的轉(zhuǎn)換:
- step1: 將c輸入到encoder中得到特征f(c),將s輸入到encoder中得到特征f(s)
- step2: 根據(jù)均值和方差公式算出f(c)、f(s)在每個(gè)樣本上的每個(gè)特征通道上的μ和σ
- step3:對于IN(f(c))中的γ和β,不再讓網(wǎng)絡(luò)學(xué)習(xí),直接設(shè)γ為f(s)對應(yīng)的σ,設(shè)β為f(s)對應(yīng)的μ。這就是AdaIN的做法。
3.3 刪除最開始進(jìn)入4*4的輸入A,并用常量代替
StyleGAN 生成圖像的特征是由??′和 AdaIN 控制的,那么生成器的初始輸入可以被忽略,并用常量值替代。這樣做的理由是:
- 避免初始輸入取值不當(dāng)而生成不正常的照片
- 有助于減少特征糾纏
?
3.4 在AdaIN模塊之前向每個(gè)通道添加一個(gè)噪聲
?這里添加的噪聲是一個(gè)單通道的圖像級別的噪聲圖(每一個(gè)卷積層后添加一個(gè)噪聲圖,通道為1,B表示可學(xué)習(xí)的權(quán)重系數(shù))文章來源:http://www.zghlxwxcb.cn/news/detail-760020.html
人們臉上有許多小的特征,可以看做是隨機(jī)的,例如:雀斑、發(fā)髻線的準(zhǔn)確位置、皺紋、使圖像更逼真的特征以及各種增加輸出的變化。將這些小特征插入 GAN 圖像的常用方法是在輸入向量中添加隨機(jī)噪聲。為了控制噪聲僅影響圖片樣式上細(xì)微的變化,StyleGAN 采用類似于 AdaIN 機(jī)制的方式添加噪聲,即在 AdaIN 模塊之前向每個(gè)通道添加一個(gè)縮放過的噪聲,并稍微改變其操作的分辨率級別特征的視覺表達(dá)方式。加入噪聲后的生成人臉往往更加逼真與多樣。
?文章來源地址http://www.zghlxwxcb.cn/news/detail-760020.html
到了這里,關(guān)于GAN(Generative Adversarial Nets (生成對抗網(wǎng)絡(luò)))的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!