【损失函数】生成任务感知损失小结
前言
隔了一個季度之后,再次更新。之前停更并非是意志松懈,主要是身體抱恙,疫情期間過度用眼導致眼疲勞,加上疫情穩定后打球崴腳臥床數周,拖著疲勞的眼睛僅能勉強應付網課和日常任務,無力去維持其他的用眼活動。那段時間也反思為什么以前在學校長時間用眼也沒有什么不適,細想發現眼睛日常通勤中得到了很好的休息,而在家幾乎沒有通勤時間。如今每天有意識地調節屏幕時間,眼疲勞得到了一定的緩解。說這么多,總結感悟就是身體是革命的本錢,管理好身體才能更好地做其他事情。
感知損失(Perceptual Loss)
在生成網絡中,為了使生成圖像與源圖像具有相同的特征,最先使用的主要是在像素層面上做正則化,即∣∣xsrc?xg∣∣l||{\bf x_{src}}-{\bf x_g}||_l∣∣xsrc??xg?∣∣l?,用L1或L2范數來對兩者的像素層信息進行約束。但像素級約束有很多局限性,比如兩張相同的圖像,某一張圖像的像素進行輕微的整體平移,兩者的像素差就會變得很大,而實際內容卻是相同的。
感知損失則是在深度特征層面對原圖和生成圖進行約束,深度特征通過神經網絡提取,而深度特征通常隨著網絡層數的加深而獲取到圖像更深層次的語義信息,通過懲罰深度特征差異的監督,生成圖像可以保留源圖像中較高層語義信息。
但是在不同的任務中,研究者們對感知損失或內容損失的使用是有所不同的,下文將對各種使用形式做出相應的梳理,并針對性地對筆者課題相關的使用進行展開式討論,由于筆者水平有限,如理解有誤還望評論指正。
感知損失計算公式
根據筆者的論文閱讀存量和搜集情況,目前主要分為以下三種形式。
形式1
lfeat?,j(y^,y)=1CjHjWj∣∣?j(y^)??j(y)∣∣22l_{feat}^{\phi,j}({\bf \hat y,y})=\frac{1}{C_jH_jW_j}||\phi_j({\bf \hat y})-\phi_j({\bf y})||_2^2 lfeat?,j?(y^?,y)=Cj?Hj?Wj?1?∣∣?j?(y^?)??j?(y)∣∣22? 其中y^,y{\bf \hat y,y}y^?,y分別表示生成圖像與源圖像,?\phi?表示預訓練的神經網絡,jjj表示該網絡的第j層,Cj×Hj×WjC_j \times H_j \times W_jCj?×Hj?×Wj?為第j層特征圖的形狀,這個公式中涉及的feature map有兩種選擇:
- 每個卷積模塊的激活值[1]
- 每個卷積模塊激活值前的特征[2]
這種形式的感知損失主要應用于超分辨、人臉屬性編輯等任務。下圖為文獻[1]中的參考圖像,風格遷移的內容本文不涉及,詳細內容請參考文獻[1]。
形式2
lfeat(x,x′)=∑i=1N1CjHjWj[∣∣?j(x)??j(x′)∣∣1]l_{feat}({\bf x,x'})=\sum_{i=1}^N\frac{1}{C_jH_jW_j}[||\phi_j({\bf x})-\phi_j({\bf x'})||_1] lfeat?(x,x′)=i=1∑N?Cj?Hj?Wj?1?[∣∣?j?(x)??j?(x′)∣∣1?] 其中x,x′{\bf x,x'}x,x′分別表示GT和生成圖像,?\phi?表示預訓練的神經網絡,jjj表示該網絡的第j層,Cj×Hj×WjC_j \times H_j \times W_jCj?×Hj?×Wj?為第j層特征圖的形狀,使用的是每個卷積模塊的激活值。
這種形式應用于pix2pix問題[3,4],跟形式1有所區別的是,它使用了多層深度特征,并且使用的是L1范數,而與形式1最大的區別是感知損失內的兩個對象,這里是GT和生成圖像。以pix2pix-HD[4]的實現細節為例,感知損失模型為ImageNet上預訓練的VGG19,使用的層數為conv1~5模塊的激活值,針對每個模塊的特征匹配還做了權重分配,代碼摘要如下:
pix2pix-HD[4]的生成器網絡框架圖如下圖,貼圖的目的主要是為了對pix2pix有一個感性的認識,論文作者在文獻中討論了感知損失的作用,感知損失可以輕微地提升生成質量,但并不起決定性作用,因為不用感知損失也可以得到較好的效果,效果對比圖如下,因此感知損失屬于錦上添花的操作。
形式3
lfeatD,l(x,x′)=12ClHlWl∣∣Dl(x)?Dl(x′)∣∣F2l_{feat}^{D,l}({\bf x,x'})=\frac{1}{2C_lH_lW_l}||D_l({\bf x})-D_l({\bf x'})||_F^2 lfeatD,l?(x,x′)=2Cl?Hl?Wl?1?∣∣Dl?(x)?Dl?(x′)∣∣F2? lperception(x,x′)=∑l=ijwllfeatD,l(x,x′)l_{perception}({\bf x,x'})=\sum_{l=i}^jw_{_l}l_{feat}^{D,l}({\bf x,x'}) lperception?(x,x′)=l=i∑j?wl??lfeatD,l?(x,x′) 其中x,x′{\bf x,x'}x,x′分別表示源和生成圖像,DDD表示判別器網絡,lll表示判別器的第lll層,Cj×Hj×WjC_j \times H_j \times W_jCj?×Hj?×Wj?為第j層特征圖的形狀。文獻[5,6]使用類似于這種形式的感知損失。
DIAT[5]是使用GAN的人臉屬性遷移任務,和前面兩種形式的使用方式不同,這里并不是使用預訓練的分類器來提取深度特征,使用的是判別器提取的中間隱層特征。文獻[5]中解釋,現成的預訓練分類器通常是在其他的訓練集上訓練的,并且不是為當前任務所量身定制的,因此可能不太適合于當前任務下的模型。
匹配深度特征的圖像
從公式上看,感知損失涉及兩張圖像,根據任務和任務涉及的數據不同,使用感知損失的任務可以分為兩種:
第一種形式
存在Ground Truth的任務有超分辨[1,2,8,10]、pix2pix[3,4,6],其中文獻[1,2,10]使用的是形式1的公式,即涉及某一層深度特征的匹配,而文獻[3,4,6,8]使用多層深度特征的匹配。
這種形式是以Ground Truth作為監督,讓生成圖像從深度特征層面向Ground Truth靠攏。對于pix2pix問題,由于輸入是分割圖,而Ground Truth和生成圖為實際圖像,所以匹配多層深度特征可以給生成模型提供更多的真實域信息;對于超分辨任務,目前搜集到的文獻大都采用一層深度特征,而文獻[8]則選擇了兩層,分別為第二層和第五層的池化層特征,涉及低層語義和深層語義,由于筆者對超分辨了解不多,這里就點到為止。
第二種形式
對于不存在Ground Truth的任務,如人臉屬性編輯[5]、人臉老化[9],妝容遷移[11],其中文獻[5]選擇了其判別器模型的3、4層;文獻[9,11]使用的公式是形式1。文獻[9]主要是使用年齡標簽進行跨域學習,使用一層感知損失,使用的是預訓練的AlexNet,下圖為其對不同層的嘗試,由于其模型設計具有一定局限性,只能在人臉內容和紋理風格上做折衷,該方法選擇的是conv5,其感知損失在總損失函數的權重極低,為5e-5.
而文獻[11]雖然有妝容的參考圖像,但不同于Ground Truth,因此其感知損失用于源圖和生成圖之間,采用的是ImageNet預訓練的VGG16,特征匹配層為con4,與文獻[9]一樣,感知損失的權重壓得很低,設置為0.005.
以上這類方法由于沒有Ground Truth,所以使用感知損失的目的主要是為了保留源圖的某些特征,僅起到重構作用,但由于這類任務主要是為了讓源圖發生特定的變化,因此感知損失不宜施加較強的約束。
形式1的展開
形式1的公式如下:
lfeat?,j(y^,y)=1CjHjWj∣∣?j(y^)??j(y)∣∣22l_{feat}^{\phi,j}({\bf \hat y,y})=\frac{1}{C_jH_jW_j}||\phi_j({\bf \hat y})-\phi_j({\bf y})||_2^2 lfeat?,j?(y^?,y)=Cj?Hj?Wj?1?∣∣?j?(y^?)??j?(y)∣∣22?
在文獻[1]中,作者復現了文獻[7]的想法,固定網絡參數優化輸入,即找到一張圖像能夠使得上述損失函數最小,效果圖如下所示。從這個逆向過程可以反映出深度特征蘊含的信息。
值得一提的是,在文獻[1]的風格遷移效果中(如下圖),可以看出轉換網絡是可以感知到圖像的語義內容的,例如第二列,湖面和沙灘雖然都按照背景進行處理,但是很好地感知到“人”的語義。作者解釋,VGG-16損失網絡具有對人和動物進行選擇的特征,因為這些對象存在于分類數據集中,并在分類數據集上進行訓練。從某種角度來說,提供感知語義的分類器保留了預訓練時的任務屬性。
激活值特征?
文獻[1]中使用的是每個卷積模塊中的激活值特征,即每個relu層的輸出特征。而在文獻[2]為超分辨方法,提出使用激活層之前的深度特征,作者列出兩個原因:
激活后的特征是非常稀疏的,特別是非常深的網絡,如下圖,稀疏的激活值將會提供較弱的監督并導致較差的性能。
其中VGG19-54中的“54”指的是特征從第4個卷積層(在第5個最大池化層之前)獲取,“22”與之類似。
使用激活后的特征會導致重構亮度不連續,相較于Ground Truth.
該圖展示了使用激活層前后特征的亮度值分布,可以看出使用激活層前的特征可以較精確地貼近GT的亮度分布,從右圖細節可以看出使用激活層前的特征可以生成更清晰的邊角和更豐富的紋理。
可能出現的問題
在搜集涉及感知損失的文獻中,超分辨任務的多篇文獻均提到使用感知損失會導致棋盤偽影(checkerboard artifacts),在文獻[8]中找到了相關問題的圖例,如下圖所示,其中ENet-P為僅使用感知損失的上采樣網絡,可以看出棋盤偽影的效果,但聯合其他損失得到的效果則改善了這一問題。由于筆者查閱超分辨的文獻較少,且沒有遇到這一問題,這里就點到為止。
總結
感知損失的本質就是讓兩張圖片在深度特征層面進行匹配,深度特征由神經網絡提取,至于選擇什么網絡模型提取特征、選取網絡中的哪幾層特征、讓哪兩張圖片進行匹配則需要根據具體情況具體分析。本文主要涉及了三種形式的感知損失計算公式、兩種匹配對象的選擇,通過閱讀文獻,可以初步得出以下結論:
- 匹配低層特征可以保留幾何、紋理等低級語義信息,匹配深層特征可以保留內容、風格等高級語義信息。
- 預訓練網絡提取的特征附帶預訓練時的任務屬性,會對生成模型產生影響,所以預訓練模型盡量選擇與生成任務相關的模型參數。
- 選擇特征匹配層不必局限于激活層,選擇激活層之前的特征進行匹配,可以為生成模型提供更強的監督信息。
- 對于具有Ground Truth的任務,深度特征匹配可以設置多層且較強的約束;對于沒有Ground Truth僅使用感知損失做重構的任務,深度特征匹配應設置單層且較弱的約束。
參考文獻
總結
以上是生活随笔為你收集整理的【损失函数】生成任务感知损失小结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Helm-chart学习-简单介绍与使用
- 下一篇: 读书笔记:《一分钟超强笔记本》