由于傳統(tǒng)的L1,L2 loss是針對于像素級的損失計(jì)算,且L2 loss與人眼感知的圖像質(zhì)量并不匹配,單一使用L1或L2 loss對于超分等任務(wù)來說恢復(fù)出來的圖像往往細(xì)節(jié)表現(xiàn)都不好。
現(xiàn)在的研究中,L2 loss逐步被人眼感知loss所取代。人眼感知loss也被稱為perceptual loss(感知損失),它與MSE(L2損失)采用圖像像素進(jìn)行求差的不同之處在于所計(jì)算的空間不再是圖像空間。
研究者們常使用VGG等網(wǎng)絡(luò)的特征,令φ來表示損失網(wǎng)絡(luò),Cj表示網(wǎng)絡(luò)的第j層,CjHjWj表示第j層的特征圖的大小,感知損失的定義如下:可以看出,它有與L2 loss同樣的形式,只是計(jì)算的空間被轉(zhuǎn)換到了特征空間。
?
本篇文章首次提出感知損失,分別在圖像風(fēng)格轉(zhuǎn)化和單張圖像超分上進(jìn)行實(shí)驗(yàn)和對比,證明了感知損失的有效性。
下面針對單張圖像的超分進(jìn)行解釋說明。
感知損失通過一個(gè)固定的網(wǎng)絡(luò)(VGG16,VGG19..),分別用prediction 和 groundtruth作為VGG16輸入, 得到對應(yīng)的輸出特征,pre-vgg,gt-vgg。
然后讓pre-vgg和gt-vgg構(gòu)造損失(L2-Loss)。使預(yù)測結(jié)果和真實(shí)值之間的深層信息(感知信息)不斷接近。
相比于普通的L2-Loss,使用感知損失可以更好的增強(qiáng)輸出的細(xì)節(jié)信息。
構(gòu)建感知損失準(zhǔn)備:
1.預(yù)訓(xùn)練好的VGG網(wǎng)絡(luò),只需要prediction階段(前向即可)。
2.送入prediction和ground truth分別通過VGG前向,并得到pre-vgg,gt-vgg。
3.計(jì)算pre-vgg和gt-vgg的L2損失。 注:往往pre-loss(感知損失)為正則項(xiàng),需要配合其他損失函數(shù)進(jìn)行指導(dǎo),可以通過自定參數(shù)調(diào)節(jié)感知損失的懲罰(調(diào)節(jié))力度。
在提取特征時(shí),通常不會只使用一層的特征,而是使用網(wǎng)絡(luò)中淺層,中層,深層特征,進(jìn)行組合。 比圖vgg16會使用 3 ,5,7層進(jìn)行組合,并對輸出特征進(jìn)行累加。
原論文中,針對單張圖像超分問題。 作者并不鼓勵(lì)輸出圖像?y=fW(x)的像素與目標(biāo)圖像y的像素完全匹配,而是鼓勵(lì)它們具有與損失網(wǎng)絡(luò)φ計(jì)算的相似的特征表示。
設(shè)φj (x)為處理圖像x時(shí)網(wǎng)絡(luò)φ的第j層的激活情況;如果j是一個(gè)卷積層,那么φj (x)將是形狀Cj×Hj×Wj的特征圖。特征重建的損失是特征表示之間的(平方,歸一化)歐氏距離:
如下圖所示,找到一個(gè)使早期層特征重建損失最小的圖像?y往往會產(chǎn)生視覺上與y無法區(qū)分的圖像。 當(dāng)從更高的層次重建時(shí),圖像內(nèi)容和整體空間結(jié)構(gòu)被保留,但顏色、紋理和精確的形狀沒有被保留。使用特征重建損失進(jìn)行訓(xùn)練,我們的圖像轉(zhuǎn)換網(wǎng)絡(luò)鼓勵(lì)輸出圖像?y在感知上與目標(biāo)圖像y相似,但并不迫使它們精確匹配。
?
?上面所述毆打簡而言之一句話:針對于單張圖像的超分問題,選擇淺層(論文說是relu2_2)的特征圖進(jìn)行損失計(jì)算,而對于風(fēng)格轉(zhuǎn)化任務(wù),選擇深層特征或深層結(jié)合淺層的特征圖來計(jì)算損失。
下圖是實(shí)驗(yàn)結(jié)果:
代碼:
2023.2.16?
在使用vgg作為模型推導(dǎo)的感知損失時(shí),突然發(fā)現(xiàn)一個(gè)問題,都說一般選擇淺層和深層的網(wǎng)絡(luò)作為損失函數(shù)的計(jì)算層,比如這里我取第三層卷積和第13層卷積,可是第三層卷積有64個(gè)通道,第13層卷積后有256個(gè)通道,這么多通道要怎么計(jì)算損失呢?是求均值嗎?后面看了別人的代碼是這樣處理的。這里直接上整體代碼。關(guān)鍵一行是:np.mean() 也就是說應(yīng)該是64個(gè)通道求均值了。
還有一點(diǎn)特別要注意,看到很多人分享的代碼都是定義relu層為損失計(jì)算層,我親自測試過發(fā)現(xiàn),relu后特征可視化會變的偏向黑色,甚至在剛開始訓(xùn)練的時(shí)候就是全黑的,全黑的圖像和半黑的GT圖計(jì)算損失,損失可能會變成0.0000000007這樣的,所以選擇層的時(shí)候一定要選擇卷積后的層,而不是relu后的層,目前選擇卷積后的層[0,14,24] 特征可視化和損失函數(shù)均正常。
更新一下感知損失的結(jié)果,在訓(xùn)練接近擬合后,打印出預(yù)測和GT的特征圖,已經(jīng)非常相似了,損失函數(shù)也到達(dá)0.000001這樣了,特征圖如下:(左邊的是預(yù)測的結(jié)果,右邊是GT)
?測試了一下發(fā)現(xiàn)沒有明顯的漲點(diǎn),但是感知損失理論上也不會明顯的漲點(diǎn),感知損失的主要作用還是增強(qiáng)圖像的細(xì)節(jié),雖然這次測試也沒有看到細(xì)節(jié)的增強(qiáng),但是原因應(yīng)該是模型還沒有擬合完全,后續(xù)更新結(jié)果。
更新。。
上面說的應(yīng)該選擇卷積層作為特征圖,是自己分析的結(jié)論,實(shí)驗(yàn)結(jié)果發(fā)現(xiàn)是可行的,但是原論文中說明的是relu2_2層,然后原論文還說應(yīng)該選擇L2loss做為感知損失的計(jì)算函數(shù),可是有其他研究表明L1loss+L2loss的效果更好,至于選擇哪個(gè)loss 選擇 哪個(gè)層 這個(gè)還是親身實(shí)踐去試一試吧,下面貼一些第一次實(shí)驗(yàn)的結(jié)果。
?上面三張從上到下分別是GT,不加感知損失的結(jié)果,加入感知損失(3,14,27卷積層累加)的結(jié)果。
在psnr上沒有明顯的變化,對于細(xì)節(jié)來說,仔細(xì)看是可以看到感知損失的細(xì)節(jié)強(qiáng)化效果(噪聲減小了,對應(yīng)gt來說細(xì)節(jié)也有所強(qiáng)化)。
2.28繼續(xù)更新感知損失,這次使用L1來計(jì)算感知損失,且加入不同比列來增強(qiáng)或抑制感知損失與原始損失的比例,細(xì)節(jié)效果明顯得到提高,效果如下:
?文章來源地址http://www.zghlxwxcb.cn/news/detail-419547.html
左圖是未加入感知損失的推理結(jié)果,右圖為加入感知損失的結(jié)果,細(xì)節(jié)提升十分明顯。
?文章來源:http://www.zghlxwxcb.cn/news/detail-419547.html
?
到了這里,關(guān)于Perceptual Loss(感知損失)&Perceptual Losses for Real-Time Style Transferand Super-Resolution論文解讀的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!