CUT - Contrastive Learning for Unpaired Image-to-Image Translation
Introduction
Contrastive Learning for Unpaired Image-to-Image Translation,以下簡稱 CUT 模型,是一種 Unsupervised img to img translation 模型,也就是非監督式的圖像轉換模型
目標是將被學習特徵風格的輸入圖(以下簡稱圖 x)的特徵遷移到指定圖(以下簡稱圖 y) 的結構、輪廓上,也就是 style transfer 風格遷移
而風格遷移模型
特徵獲得的方式,是透過 adversarial learning(對抗式機器學習)
遷移風格至指定內容則是透過 cycle-consistency
而 CUT 在 cycle-consistency 上多了使用 Contrastive Learning (對比學習)來幫助模型處理圖像的輸入與輸出之間的互相訊息最大化,簡單來說就是讓輸入圖與輸出圖的 cycle-consistency 是在內容上保持一致,而非外觀上保持一致
Unsupervised Learning
非監督學習是一種不需標記數據的學習方式,模型通過發現數據中的內在結構和模式來進行訓練
你可以想像自己在學習新事物,但老師沒有給你任何例子或提示,也沒有告訴你正確答案。你只能根據資料本身的規律來找出規律
舉個例子,想像你有一堆不同形狀和顏色的糖果,但你不知道它們的名字。無監督學習就像是你試著把它們分成一些類別,可能是把相似的放在一起,而不知道每個類別代表什麼。你只是根據它們的相似性自己找出一些規則,比如說形狀相似的可能是一類,顏色相似的可能是另一類。
簡而言之,無監督學習就是在沒有老師指導的情況下,從資料中找出規律和模式
Adversarial Learning
剛才提到,CUT 的特徵獲得的方式,是透過 adversarial learning
風格遷移模型通常使用對抗式機器學習(Adversarial Learning)的方法
由 Generator 和 Discriminator 兩個主要部分組成,
Generator 負責生成與風格轉換任務相關的圖像,
Discriminator 則試圖區分 Generator 生成的圖像和原本的輸入們之間的區別
因為這樣的相互對況關系,所以稱為對抗式機器學習(Adversarial Learning)
其中使用了 adversarial loss,目的是提升 Generator 的輸出圖與我們的輸入圖的各個部分特徵越加相似
Adversarial Loss
使用 adversarial loss 的目的是提升輸出圖與我們的輸入圖的各個部分越加相似
Encoder
Generator 中的 Encoder 是用於將輸入圖像轉換為潛在特徵表示,就像把輸入圖像轉化為抽象的、低維的表示方式,
打個比方說,Encoder 像是相機,它看到一張圖片,會把這張圖片中重要的資訊,比如形狀、紋理之類的,提取出來
接著,Encoder 把這些提取出來的重要特徵變成數據,這樣就可以更方便地傳遞和處理
最後,Encoder 把這些數據傳遞給 Generator,就像是將拍攝的照片的特徵交給一位畫家,這位畫家(Generator)根據這些特徵開始創作,畫出一幅新的畫(風格轉換後的圖像)
Cycle-consistency
而在 CUT 中,遷移風格至指定內容則是透過 cycle-consistency
Cycle consistency(循環一致性)是一種生成模型的約束條件,應用於生成對抗網絡(GANs)以及 CycleGAN(循環一致性生成對抗網絡),看得出來跟 Cycle consistency 很有關吧 XD
在生成模型中,Cycle consistency 的目標是確保模型生成的結果在經過轉換後,還是能 reconstruct 重構回到原始的輸入,也就是限制生成的範圍(reduce the space of possible mapping functions,減少其他非預期的可能性),通常應用於將一種領域的圖像轉換到另一種領域,也就是 style transfer 風格轉換
在 CUT 中,我們有圖 x 和圖 y,分別是欲學習的風格圖和欲套用於的結構字形圖,Cycle consistency 的目標就是學習兩個轉換:將圖 x 的風格遷移至圖 y 上,生成出一張擬似圖 z,再從圖 z 推回圖 x
這樣的約束有助於生成模型學習更加有意義和一致的轉換,避免不自然的轉換和圖像文字內容的損失
Contrastive Learning
為了使模型有效學習特定特徵,CUT 透過正樣本(Positive)與負樣本(Negative)進行對比學習,
模型透過正樣本獲得有用的特徵,也透過與負樣本的對比,使模型能更好地理解我們的目標特徵
透過 Contrastive Learning,模型學習如何在我們給定的特徵中區分正樣本和負樣本,使其可以強化模型對於目標特徵的辨識,同時提高對不同特徵的區分能力
於 CUT 模型中,正樣本是提取圖片 x 中與圖 y 有相同筆畫的相同位置的區塊特徵為正樣本,其他部分的特徵為負樣本,也透過依據不同大小的區塊圖像進行學習,令Encoder 內不同 Layer 輸出的特徵圖片大小不一,而以這些不同大小的特徵進行對比學習讓 CUT 模型學得更好
Method
為了達成這樣的風格遷移流程,模型中使用了 contrastive loss,讓他可以學習在解除 patches 的關聯後,再推回去將他們關聯在一起,也就是如何達成 Cycle consistency
讓我先從 Feature extraction 開始說明
CUT 特別之處是剛才提到的 adversarial loss 中 Generator 的 encoder ,在這裡 encoder 會在截取的局部中找尋共通點(commonality),而非隨意的學習特徵
譬如在我們專題中,截取這個文字的哪些部分,譬如這一撇、那一劃,兩邊的 encoder 都會這樣找,去尋找共通點
因此可以將相同之處中,圖 x 這一撇的特徵,學習後提交給 generator,讓他可以學習怎麼畫出這樣的一撇在圖 y 的這個字形結構中的這一撇
因此最終可以達到一個生成出的圖片 Z 可以被肉眼可見的看出有著與輸入圖 x 相似的風格
Multilayer perceptron MLP
這裡的 MLP 像是一個學習機器,可以用來處理各種不同的事情,比如分辨圖片裡的東西,MLP 裡面有很多小單元,我們可以把這些單元想像成小小的大腦細胞
它們接收一些資訊,然後思考一下,最後告訴我們一個結果,每個大腦細胞都有一些特殊的能力,可以學習不同的事情
MLP 好像是一個學生,一開始可能不太懂事情,但它可以通過練習不斷改進。它會看到一些例子,然後嘗試去理解和預測新的例子
最後他就學會了我們剛才告訴他的這些好多事情
Contrastive loss
這邊的 contrastive loss 是我們對比學習中運用的函數
透過利用 contrastive loss
原因是因為 generator 會不停生出擬似圖,讓他去跟 discriminator 比較,
所以這裡透過 contrastive loss,讓 generator 生出的擬似圖去和我們原始的輸入圖中被學習的相同位址去做比較
使正樣本在特徵空間中更加接近,同時使負樣本更遠離。
有助於我們的模型學習到有意義的特徵表示
Softmax Cross-Entropy
如剛才說的,我們從單一輸入的圖像中取多個不同位址的 patches 去進行多分類,用 softmax cross-entropy,是一種多分類方法
Softmax
運算方式是,透過猜測每張 patches 是正樣本的機率,Softmax 讓模型為每張 patches 分配一個“機率分數”
這些分數代表每張圖就是我們要的的部份的可能性,所有的機率分數加起來等於 1
Cross-Entropy 損失
如果我們的預測和實際正確的 patches 不一樣,Cross-Entropy 就是度量這種錯誤的方式
Cross-Entropy 告訴你你的預測有多差。當預測完美準確的時候,Cross-Entropy 就是 0
我們這裡利用的 Softmax Cross-Entropy
就是同時結合試圖預測哪張 patches 是正樣本,然後通過比較預測和真正的結果,看看我們預測有多準確
也透過不斷得出損失函數,不斷修正,讓我們學習特徵、遷移特徵越來越準確
以此不停地做對抗式訓練,讓 discriminator 漸漸辨識不出 generator 生出的擬似圖與原本的輸入圖的差異