本文最初發表于 Towards Data Science 部落格,經原作者公司 PerceptiLabs 授權,YouMeLive翻譯并分享。
在圖像處理方面,機器學習實踐者們正在逐漸轉向借助生成對抗網路(Generative Adversarial Network,GAN)的力量。
實際受益于使用生成對抗網路的應用包括:從基于文本的描述生成藝術品和照片、放大圖像、跨域翻譯圖像 (例如,將白天的場景改為夜間)及許多其他應用。為實現這一效果,人們設計了許多增強的生成對抗網路架構,它們具有獨特的功能,可用于解決特定的圖像處理問題。
在本文中,我們選擇五種生成對抗網路進行深入討論,因為它們提供了廣泛的功能,從放大圖像到創建基于文本的全新圖像。
-
Conditional GAN
-
Stacked GAN
-
Information Maximizing GAN
-
Super Resolution GAN
-
Pix2Pix
如果你需要快速回顧生成對抗網路,請查閱博文《探索生成對抗網路》(Exploring Generative Adversarial Networks,https://blog.perceptilabs.com/exploring-generative-adversarial-networks-gans),這篇文章介紹了生成對抗網路如何訓練兩個神經網路:生成器和判別器,它們可以學習生成越來越逼真的圖像,同時提高其將圖像分類為真或假的能力。
Conditional GAN
Conditional GAN 面臨的挑戰之一是無法控制圖像生成類型。生成器只是簡單地從隨機噪聲開始,并反復創建圖像,希望這些圖像能隨著時間的推移趨向于表示訓練圖像。
Conditional GAN(cGAN),通過利用額外資訊,例如標簽數據(也就是類標簽)解決了這個問題。這樣還能使訓練更加穩定和快速,同時提高生成圖像的質量。舉例來說,cGAN 呈現的不同類型的蘑菇圖片及標簽,可以通過訓練來產生和識別那些準備采摘的蘑菇。該模型可作為工業機器人計算機視覺的基礎,通過編程實現蘑菇的搜尋與采摘。當不具備這些條件時,標準的生成對抗網路(有時也稱為無條件生成對抗網路)僅僅依賴于將來自潛在空間的數據映射到產生的圖像上。
cGAN 的實現方法有很多,有一種方法是將類標簽輸入判別器和生成器,從而對這兩者進行調節。下圖示例展示了一種標準的生成對抗網路生成手寫數字圖像,該網路通過增強標簽數據,只生成數字 8 和 0 的圖像。

圖 1:一種 cGAN,類標簽同時輸入到生成器和判別器,以控制輸出。
其中,可以對標簽進行獨熱編碼以去除序類型(ordinality),將標簽作為附加層輸入到判別器和生成器中,再將它們與各自的圖像輸入進行連接(即對生成器來說,與噪聲連接起來,對生成器來說,與訓練集連接起來)。因此,這兩個神經網路在訓練過程中都是以圖像類標簽為條件。
總結:當你需要控制生成的內容時(例如,生成訓練數據的子集),使用 cGAN。
Stacked GAN
要是我們能夠直接讓電腦畫幅圖,是不是很酷?這正是 Stacked GAN(StackGAN)背后的靈感所在,在論文《StackGAN:基于堆疊式生成對抗網路的文本到逼真圖像合成》(StackGAN:Text to Photo-realistic Image Synthesis with Stacked Generative Adversarial Networks) 中,作者對此進行了描述。
StackGAN 主要是一個兩階段的草圖細化過程,與畫家作畫的方法相似,即先畫出一般元素,然后再進行細化:
階段一,生成對抗網路:它以給定的文字描述為條件,勾畫出對象的原始形狀和基本顏色,并根據隨機噪聲矢量繪制出背景布局,得到低分辨率圖像。階段二,生成對抗網路:糾正階段一低分辨率圖像中的缺陷,通過再次閱讀文字說明來完善對象的細節,從而生成高分辨率的逼真圖像。
作者對其模型的架構作了如下概述:

圖 2:StackGAN 模型架構概述。
盡管使用普通的生成對抗網路也可以解決這一問題,但輸出的圖像可能缺少細節,且可能限制在較低的分辨率。StackGAN 的兩階段架構基于 cGAN 的思想來解決這一問題,就像作者在論文中說的那樣:通過對階段一結果和文本的再次調節,階段二生成對抗網路學習捕捉階段一生成對抗網路遺漏的文本資訊,并為對象繪制更多細節。模型分布支持通過粗對齊得到的低分辨率圖像與圖像分布支持得到了較好的交叉概率。而這正是階段二生成對抗網路能夠產生更好高分辨率圖像的根本原因。
要了解更多關于 StackGAN 的資訊,請查看作者的GitHub 倉庫(https://github.com/hanzhanggit/StackGAN),他提供了一些模型,以及鳥類和花卉的圖片。
總結:當你需要從完全不同的表示方式(例如,基于文本的描述)來生成圖像時,請使用 StackGAN。
Information Maximizing GAN
類似于 cGAN,Information Maximizing GAN(InfoGAN)利用額外的資訊對生成的內容進行更多的控制。通過這樣做,它可以學習分解圖像的各個方面,比如人的發型、物體或者情感,所有這些都是通過無監督訓練。然后,這些資訊可以用于控制生成圖像的某些方面。舉例來說,給定的人臉圖像中,有些人戴著眼鏡,InfoGAN 就可以被訓練成對眼鏡的像素進行拆分,然后用它來生成戴眼鏡的新人臉。
在 InfoGAN 中,一個或多個控制變量與噪聲一起被輸入到生成器中。生成器的訓練使用了一種稱為輔助模型的附加模型中包含的互資訊(mutual information)進行的,該模型與判別器擁有相同的權重,但預測用于生成圖像的控制變量的值。這種互資訊是通過對生成器生成的圖像的觀察獲得的。與判別器一起,輔助模型對生成器進行訓練,使 InfoGAN 既能學會生成 / 識別假圖像與真圖像,又能捕捉生成圖像的顯著屬性,從而學會改進圖像生成。
這個架構總結如下圖所示:

圖 3:InfoGAN 架構概要
要了解關于 InfoGAN 的更多資訊,請查看博文:《InfoGAN:生成對抗網路第三部分》(InfoGAN — Generative Adversarial Networks Part III**https://towardsdatascience.com/infogan-generative-adversarial-networks-part-iii-380c0c6712cd)
總結:當你需要將圖像的某些特征分離出來,以便合成到新生成的圖像中時,請使用 InfoGAN。
Super Resolution GAN
圖像增強領域正在不斷發展,與雙三次插值等傳統統計方法相比,它更依賴于機器學習算法。Super Resolution GAN(SRGAN)就是這樣一種機器學習方法,它可以將圖像提升到超高分辨率。
SRGAN 利用生成對抗網路的對抗性,與深度神經網路相結合,學習如何生成放大的圖像(最高可達到原始分辨率的四倍)。這些生成的超分辨率圖像準確性更好,且通常會獲得較高的平均意見分(mean opinion scores,MOS)。
在對 SRGAN 進行訓練時,首先將高分辨率的圖像下采樣到低分辨率的圖像,然后輸入到生成器中。然后,生成器嘗試將該圖像上采樣到超分辨率圖像。判別器用來比較生成的超分辨率圖像和原始高分辨率圖像。判別器的生成對抗網路損耗隨后反向傳播到判別器和生成器,如圖所示:

圖 4:SRGAN 架構。LR= 低分辨率圖像,HR= 高分辨率圖像,SR= 超分辨率圖像,X= 判別器的輸入,D(X)= 判別器對 HR 和 SR 的分類。
生成器使用了許多卷積神經網路(convolution neural networks,CNN)和ResNet,以及批歸一化層和激活函數 ParametricReLU。這些首先對圖像進行下采樣,然后再進行上采樣,生成超分辨率圖像。同樣,判別器使用一系列卷積神經網路,以及密集層、Leaky ReLU 和 sigmoid 激活,以確定圖像是原始的高分辨率圖像,還是由生成器輸出的超分辨率圖像。
要了解更多關于 SRGAN 的資訊,請參閱這篇博文《生成對抗網路:超分辨率生成對抗網路(SRGAN)》(GAN — Super Resolution GAN (SRGAN))。
總結:當你需要在恢復或保留細粒度、高保真細節的同時放大圖片,請使用 SRGAN。
Pix2Pix
正如我們在部落格中討論的《機器學習用于圖像處理和計算機視覺的五大方法》(Top Five Ways That Machine Learning is Being Used for Image Processing and Computer Vision*,*https://blog.perceptilabs.com/top-five-ways-that-machine-learning-is-being-used-for-image-processing-and-computer-vision#Object_Instance),對象分割是一種方法,將數字圖像中的像素組分割成片段,然后可以在一個或多個圖像中作為對象進行標記、定位,甚至跟蹤。
分割也可以用來將輸入圖像轉化為輸出圖像,以達到各種目的,如從標簽圖合成照片,從邊緣圖重建物體,及對黑白圖像進行著色。
分割可以使用 Pix2Pix 來完成,Pix2Pix 是一種 cGAN,用于圖像到圖像的翻譯,首先訓練一個PatchGAN判別器來對翻譯的圖像進行分類,判斷這些圖像的真假,然后用來訓練一個基于U-Net的生成器來產生越來越可信的翻譯。使用 cGAN 意味著該模型可以用于多種翻譯,而無條件生成對抗網路則需要額外的元素,如 L2 回歸,以調節不同類型翻譯的輸出。

圖 5:使用 Pix2Pix 進行著色的示例。此處顯示了鞋子的黑白圖畫(輸入)及其訓練數據(基準真相),以及 Pix2Pix 生成的圖像(輸出)。
下圖顯示了 Pix2Pix 中的判別器如何在對黑白圖像進行著色的情況下首先進行訓練。

圖 6:首先在 Pix2Pix 架構中對判別器進行訓練。
在此,將黑白圖像作為輸入提供給生成器,生成器會生成一個彩色版本(輸出)。判別器隨后進行兩次比較:第一次將輸入與目標圖像(即,代表基準真相的訓練數據)進行比較,第二次將輸入與輸出(即,生成的圖像)進行比較。然后,優化器根據兩次比較的分類誤差調整判別器的權重。
現在已經訓練好了判別器,就可以用來訓練生成器了。

圖 7:使用訓練好的判別器在 Pix2Pix GAN 中訓練生成器。
在這里,輸入的圖像被同時饋送到生成器和判別器中。(訓練好的)判別器將輸入圖像與生成器的輸出進行比較,并將輸出與目標圖像相比較。隨后,優化器調整生成器的權重,直到訓練到生成器可以在大多數時間對判別器進行欺騙。
要了解更多關于 Pix2Pix 的資訊,請參閱這篇文章《Pix2Pix:圖像到圖像的翻譯神經網路》(Pix2Pix – Image-to-Image Translation Neural Network)。此外,請務必查看這個GitHub 倉庫。
總結:當你需要將源圖像的某些方面翻譯成生成的圖像時,請使用 Pix2Pix GAN。
結語
生成對抗網路,更具體地說,是它們的判別器和生成器,可以用各種方式來構建,以解決廣泛的圖像處理問題。以下總結可以幫助你選擇適合你的應用的生成對抗網路。
-
cGAN:控制(如限制)生成對抗網路的分類應進行訓練。
-
StackGAN:將基于文本的描述用作創建圖像的命令。
-
Infogan:解析你想要生成的圖像的特定方面。
-
SRGAN:在保持細粒度的細節的同時,放大圖片。
-
pix2pix:對圖像進行分割和翻譯(例如,對圖像進行著色)。
作者介紹:
Martin Isaksson,PerceptiLabs 的聯合創始人兼 CEO,這是一家專注于讓機器學習變得簡單的創業公司。
原文鏈接:
https://towardsdatascience.com/five-gans-for-better-image-processing-fabab88b370b