無需成對示例、無監督訓練,CycleGAN生成影像簡直不要太簡單
作者 | Jason Brownlee
譯者 | Freesia,Rachel
編輯 | 夕顏
出品 | AI科技大本營(ID: rgznai100)
【導讀】影像到影像的轉換技術一般需要大量的成對資料,然而要收集這些資料異常耗時耗力。因此本文主要介紹了無需成對示例便能實現影像轉換的 CycleGAN 影像轉換技術。文章分為五部分,分別概述了:影像轉換的問題;CycleGAN 的非成對影像轉換原理;CycleGAN 的架構模型;CycleGAN 的應用以及注意事項。
影像到影像的轉換涉及到生成給定影像的新的合成版本,並進行特定的修改,例如將夏季景觀轉換為冬季。
訓練影像到影像的轉換模型通常需要一個大的成對資料集。這些資料集準備起來既困難又昂貴,而且在某些情況下是不可行的,比如已故許久的藝術家的畫作照片。
CycleGAN 是一種無需成對示例便可自動進行影像到影像轉換的技術。這些模型是採用一批無需關聯的來自源域和目標域的影像,以一種無監督的方式訓練的。
這一簡單的技術非常強大,在一系列應用領域中取得了令人印象深刻的視覺效果,最著名的便是將馬的照片轉換成斑馬(或相反)。
在這篇文章中,你將瞭解非成對的 CycleGAN 影像到影像的轉換技術。
讀完這篇文章,你將瞭解到:
- 影像到影像翻譯涉及到對影像的受控修改,需要大量成對影像的資料集,這些資料集很複雜,準備起來很麻煩,有時甚至不存在。
- CycleGAN 是一種透過 GAN 架構訓練的無監督影像翻譯模型的技術,採用來自 GAN 兩個不同領域的非成對的影像集合。
- CycleGAN 已經有了一系列應用,包括季節轉換、物體變形、風格轉換和將照片轉化為畫作。
在我關於 GANs 的新書中,我將透過 29 步的教程和完整的原始碼教你如何開發 DCGAN,有條件 GANs,Pix2Pix,CycleGANs 等更多深度學習模型。
我們這就開始吧。
概覽:
這一教程分為五部分,分別為
- 影像到影像轉換的問題
- CycleGAN 的非成對影像轉換
- 何為 CycleGAN 架構模型
- CycleGAN 的應用
- CycleGAN 的操作建議
影像到影像轉換的問題
影像到影像的轉換是一個影像合成任務,它要求生成一個對給定影像受控修改後的新影像。
影像到影像的轉換是一種視覺圖形問題,其目的是使用對齊影像對的訓練集,學習輸入影像和輸出影像之間的對映。
— Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks, 2017. ()
影像到影像轉換的示例包括:
- 將夏季景觀轉換為冬季景觀(或相反)。
- 把畫作轉換成照片(或相反)。
- 把馬轉換成斑馬(或相反)。
傳統意義上,訓練影像到影像的轉換模型需要一個由成對示例組成的資料集。這個大型資料集要包含一張輸入圖片 X (如夏季景觀),以及帶有預期修改的可作為輸出預期影像 Y 的照片(如冬季景觀)。
訓練時資料集必須要成對這一要求是其侷限性所在。這些資料集具有挑戰性,準備成本也很高,例如不同條件下不同場景的照片。
在許多情況下,資料集根本不存在,比如名畫和它們對應的照片。
然而,獲取成對的訓練資料是困難和昂貴的。[…]為圖形任務(如藝術風格化)獲取輸入-輸出對可能更加困難,因為所需的輸出非常複雜,通常需要藝術創作。對於許多工,例如物體變形(例如,斑馬<->馬),所需的輸出甚至沒有很好的定義。
— Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks, 2017. ()
因此,我們需要一種不需要成對示例的影像到影像翻譯系統訓練技術。具體來說,這種技術可以使用任意兩個不相關影像的集合,並從每個集合中提取一般特徵,並用於影像轉換過程。
例如,首先應用大量夏季景觀照片集合和大量場景和位置都不相關的冬季景觀照片集合,要求能夠將特定的照片從一組轉換到另一組。
這就是所謂的非成對的影像到影像的轉換問題。
CycleGAN 非成對影像轉換
CycleGAN 是一種成功的非成對影像到影像的轉換方法。
CycleGAN 是一種利用生成對抗網路,或者說 GAN 模型架構訓練影像到影像轉換模型的方法。
我們提出了一種方法,可以學習[捕獲]一個影像集的特性,並找出如何在沒有任何成對訓練示例的情況下,將這些特徵轉換為另一個影像集。
— Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks, 2017.()
GAN 架構是一種訓練影像合成模型的方法,它由兩個模型組成:發生器模型和判別器模型。生成器將來自潛在空間的一個點作為輸入,並從域中生成新的可信影像,判別器將影像作為輸入,並預測它是真的(來自資料集)還是假的(生成的)。在遊戲中訓練這兩個模型,這樣生成器可以不斷更新以更好地 “欺騙” 判別器,判別器也會不斷更新以更好地檢測生成的影像。
CycleGAN 是 GAN 架構的一個分支,它可以同時進行兩個生成器模型和兩個判別器模型訓練。
一個生成器從第一個域獲取影像作為第二個域的輸入和輸出影像,另一個生成器從第二個域獲取影像作為輸入影像並從第一個域生成影像。然後使用判別器模型確定生成的影像的合理性,並相應地更新生成器模型。
僅此擴充套件就足以在每個域中生成可信的影像,但不足以生成輸入影像的轉換影像。
單獨的對抗性損耗不能保證習得的函式可以將單個輸入 xi 對映到期望的輸出 yi 。
— Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks, 2017.()
CycleGAN 對架構的擴充套件之處在於使用了迴圈一致性。第一個生成器輸出的影像可以用作第二個生成器的輸入影像,第二個生成器的輸出影像應與原始影像匹配。相反地,第二個生成器的輸出影像可以作為第一個生成器的輸入影像,結果應該與第二個生成器的輸入影像相匹配。
迴圈一致性是機器翻譯的一個概念,指從英語翻譯成法語的短語同樣可以從法語翻譯回英語,語意不變。反之亦然。
我們遵循翻譯應該具有“迴圈一致性”的性質,即如果我們把一句話從英語翻譯成法語,然後再把它從法語翻譯成英語,就應該得到原來的句子。
— Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks, 2017.()
CycleGAN 透過增加額外的損耗來測量第二個生成器生成的輸出影像與原始影像之間的差異,來強化迴圈一致性,反之亦然。這是對生成模型的規範化,這引導著新領域中的影像生成過程走向影像轉換過程。
何為 CycleGAN 架構模型?
初識 CycleGAN,其架構似乎很複雜。
讓我們花點時間來逐步瞭解所有涉及的模型及其輸入和輸出。
來考慮一下我們在完成從夏天到冬天及從冬天到夏天的影像轉換中需要關注的問題。
我們有兩組不成對的影像,這意味著它們是在不同時間不同地點的照片;冬季和夏季的影像中沒有完全相同的場景。
- 集合1:夏季景觀影像。
- 集合2:冬季景觀影像。
我們將開發一個包含兩個 GANs 的架構,每個 GANs 都有一個判別器和一個生成器模型,這意味著架構中總共有四個模型。
第一個 GAN 可以根據夏天的影像生成冬天的影像,第二個 GAN 會根據冬天的影像生成夏天的影像。
- GAN 1: 把夏季影像(集合1)轉換成冬季影像(集合2)。
- GAN 2: 將冬季影像(集合2)轉換成夏季影像(集合1)。
每個 GAN 都有一個有條件的生成器模型,該模型將合成給定的輸入影像。每個 GAN 都有一個判別器模型來預測生成的影像來自目標影像集合的可能性。GAN 的判別器和生成器模型就像標準 GAN 模型一樣,在正常的對抗損耗下訓練。
我們可以將 GAN 1 的生成器和判別器模型總結如下:
- 生成器模型 1:
- 輸入:選取夏季影像 ( 集合1 ).
- 輸出: 生成冬季影像 ( 集合2 ).
- 判別器模型 1:
- 輸入: 從集合 2 選取冬季影像,從生成器 1 輸出。
- 輸出: 影像來自集合 2 的可能性。
同樣,我們可以將 GAN2 的生成器和判別器模型總結如下:
- 生成器模型 2:
- 輸入:選取冬季影像 ( 集合2 ).
- 輸出:生成夏季影像 ( 集合1 ).
- 判別器模型 2:
- 輸入: 從集合 1 選取夏季影像,從生成器 2 輸出。
- 輸出: 影像來自集合 1 的可能性。
到目前為止,這些模型足以在目標域中生成可信的影像,但不能轉換輸入影像。
每個 GAN 也根據迴圈一致性損耗進行更新。這是為了強化目標域中由輸入影像轉換而來的合成影像。
迴圈一致性損耗將輸入照片與 Cycle GAN 的生成照片進行比較,並計算兩者之間的差異,例如使用 L1 範數或畫素值的絕對差之和。
有兩種方法計算迴圈一致性損耗,並用於更新每個訓練迭代的生成器模型。
第一個 GAN (GAN 1) 將獲取夏季景觀的影像,生成冬季景觀的影像,該影像作為第二個 GAN (GAN 2) 的輸入,又將生成夏季景觀的影像。迴圈一致性損耗計算了 GAN 1 的影像輸入和 GAN 2 的影像輸出之間的差異,並相應地更新了生成模型,以減少影像中的差異。
這是一個迴圈一致性損耗的正向迴圈。同樣的過程在生成器 2 到生成器 1 的反向迴圈一致性損耗時會逆轉過來,還會將冬季原始照片與冬季生成照片進行比較。
- 正向迴圈一致性損耗:
- 向 GAN 1 中輸入夏季影像(集合 1 )
- 從 GAN 1 中輸出冬季影像
- 從 GAN 1 向 GAN 2 輸入冬季影像
- 從 GAN 2 中輸出夏季影像
- 將夏季影像(集合 1 )與 GAN 2 中的夏季影像作對比
- 反向迴圈一致性損耗:
- 向 GAN 2 中輸入冬季影像(集合 2 )
- 從 GAN 2 中輸出夏季影像
- 從 GAN 2 向 GAN 1 輸入夏季影像
- 從 GAN 1中輸出冬季影像
- 將冬季影像(集合 2 )與 GAN 1 中的冬季影像作對比
CycleGAN 的應用
CycleGAN 有許多有趣的應用。本部分中介紹了五類具體的應用,以展示 CycleGAN 這一技術的應用能力。
風格轉換
風格轉換指學習一個領域的藝術風格並將該藝術風格應用到其他領域,一般是將繪畫的藝術風格遷移到照片上。
下圖展示了使用 CycleGAN 學習莫奈、梵高、塞尚、浮世繪的繪畫風格,並將其遷移到風景照上的結果。
物體變形
物體變形指將物體從一個類別轉換到另一個類別,例如將狗轉換為貓。在下面的示例中, CycleGAN 實現了斑馬和馬的照片間的相互轉換。由於馬和斑馬除了在皮膚顏色上有所差異外,其大小和身體結構都很相似,因此這種轉換是有意義的。
在下面的示例中,CycleGAN 將圖片中的蘋果和橘子進行了相互的轉換。與上一個示例的相同之處在於,蘋果和橘子的大小和結構相似,因此這一轉換同樣合理。
季節轉換
季節轉換指將在某一季節拍攝的照片轉換為另一個季節的照片,例如將夏季的照片轉換為冬季。在下面的示例中, CycleGAN 實現了冬天和夏天拍攝的風景照之間的相互轉換。
使用繪畫生成照片
使用繪畫生成照片指使用給定的繪畫合成像照片一樣逼真的圖片,一般使用著名畫家的畫作或著名的風景畫進行生成。在下面的示例中, CycleGAN 將莫奈的一些名畫合成為了類似照片的圖片。
影像增強
影像增強指透過某種方式對原圖片質量進行提升。下面的示例透過增加景深對近距離拍攝的花卉照片進行了增強。
使用 CycleGAN 的注意事項
CycleGAN 的論文給出了一些使用 CycleGAN 時需要注意的內容。
在 CycleGAN 中,生成器的使用基於 Justin Johnson 在2016年發表的關於風格遷移的論文,論文名稱為:
“Perceptual Losses for Real-Time Style Transfer and Super-Resolution”()。
CycleGAN 的生成器使用深度卷積 GAN 進行構建,該結構使用了多個殘差塊。鑑別器使用PatchGAN 進行構建, PatchGAN 的具體內容可參考 Phillip Isola 等人在2016年發表的論文:
“Image-to-Image Translation with Conditional Adversarial Networks”()。
鑑別器的作用為判斷當前 n*n 的 patch 為真或假。我們在整個圖片上卷積地使用這個鑑別器,並求所有結果的平均值作為 D 的最終輸出。
在鑑別器中使用 PatchGAN 的目的是對輸入圖片中大小為 70*70 的 patch 進行判斷,檢視是否屬於當前領域或是一個生成的圖片。模型對每一個 patch 的計算結果求均值,並作為最終輸出。
CycleGAN 中的對抗損失的構建基於一個最小二乘損失函式,該函式的具體內容可參考 Xudong Mao 等人在2016年發表的論文“Least Squares Generative Adversarial Networks”。
本文提出了最小二乘生成對抗網路(LSGANs),該網路的鑑別器使用了使用最小二乘損失函式。其原理為,最小二乘函式對距離正確一側較遠的樣本施加懲罰,以使假樣本向決策邊界移動。
——“Least Squares Generative Adversarial Networks”,2016
另外, CycleGAN 增加了一個大小為50的生成圖片緩衝器而不是直接將生成圖片輸出,該緩衝器用於對鑑別器模型進行更新,具體可參考 Ashish Shrivastava 在2016年發表的論文:
“Learning from Simulated and Unsupervised Images through Adversarial Training”()。
本文介紹了一個提升對抗訓練穩定性的方法,該方法透過使用經過加工的圖片訓練鑑別器,而不再使用原始圖片。
——“Learning from Simulated and Unsupervised Images through Adversarial Training”,2016
CycleGAN 的訓練使用了 Adam 隨機梯度下降,首先使用較小的學習速率進行100個 epoch 的學習,之後再進行100個 epoch 的學習並使學習率逐漸衰減,在每一個圖片處理完成後對模型進行更新。
CycleGAN 的更多細節可參考論文附錄中關於每個資料集的說明,該說明對模型的架構進行了詳細解釋。
擴充閱讀
本部分提供了一些相關文章,可作為參考。
論文
- Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks, 2017.()
- Perceptual Losses for Real-Time Style Transfer and Super-Resolution, 2016.()
- Image-to-Image Translation with Conditional Adversarial Networks, 2016.()
- Least squares generative adversarial networks, 2016.()
- Learning from Simulated and Unsupervised Images through Adversarial Training, 2016.()
文章
- Understanding and Implementing CycleGAN in TensorFlow
()
- CycleGAN Project (official), GitHub
- ()
- CycleGAN Project Page (official)
()
原文連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946223/viewspace-2654839/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 我用這個 AI 工具生成單元測試,簡直不要太爽!AI
- python 無監督生成模型Python模型
- 無需訓練,這個新方法實現了生成影像尺寸、解析度自由
- LUSE: 無監督資料預訓練短文字編碼模型模型
- 無監督學習才不是“不要你管”
- 機器學習——監督學習&無監督學習機器學習
- MotionClone:無需訓練,一鍵克隆影片運動
- 有監督學習和無監督學習
- 谷歌開源Neural Tangents:簡單快速訓練無限寬度神經網路谷歌神經網路
- 零基礎也能用ChatGPT寫程式碼,簡直不要太爽ChatGPT
- 一圖看懂監督學習、無監督學習和半監督學習
- 一文全面瞭解火山語音無監督預訓練技術的落地實踐
- 什麼是有監督學習和無監督學習
- 無監督學習之降維
- InfoGAN:一種無監督生成方法 | 經典論文復現
- 【ML吳恩達】3 有監督學習和無監督學習吳恩達
- 程式設計師被狂虐的17種姿勢,簡直不要太過分!程式設計師
- 一文簡述多種無監督聚類演算法的Python實現聚類演算法Python
- Facebook最新研究:無需額外訓練AI,即可加速NLP任務AI
- 簡單內網穿透-利用樹莓派-低成本建站 無需公網ip內網穿透樹莓派
- 2016深度學習重大進展:從無監督學習到生成對抗網路深度學習
- 【機器學習基礎】無監督學習(1)——PCA機器學習PCA
- 無監督文字自動摘要野生技術
- 監督學習,無監督學習常用演算法集合總結,引用scikit-learn庫(監督篇)演算法
- 別再煉丹了!谷歌大腦提出“權重無關”神經網路,無需調參訓練谷歌神經網路
- 監督學習or無監督學習?這個問題必須搞清楚
- AOP的簡單示例
- jsoncpp簡單示例JSON
- 無需複雜的數學描述,通過簡單程式碼理解卷積模組卷積
- 【機器學習基礎】半監督學習簡介機器學習
- httpd-2.4新特性簡單安裝(無php、無mysql)httpdPHPMySql
- 大神Karpathy:我給大模型「SQL隱碼攻擊」攻擊,簡直不要太輕鬆大模型SQL
- 【機器學習基礎】無監督學習(3)——AutoEncoder機器學習
- 機器學習個人筆記(三)之無監督學習機器學習筆記
- 機器學習7-模型儲存&無監督學習機器學習模型
- 英偉達新研究:“狗生貓,貓生萬物”的多模態無監督影像轉換
- ViewPager最簡單的無限輪播Viewpager
- 無需表格製作CSS選單CSS