总结 | 计算机视觉领域最常见几中损失函数
英文地址:https://machinelearningmastery.com/loss-and-loss-functions-for-training-deep-learning-neural-networks/
中文地址:https://www.sohu.com/a/380362034_823210
代碼地址:https://github.com/sowmyay/medium/blob/master/CV-LossFunctions.ipynb
導(dǎo)讀
損失函數(shù)在模型的性能中起著關(guān)鍵作用。選擇正確的損失函數(shù),可以幫助模型學(xué)習(xí)如何將注意力集中在數(shù)據(jù)中的正確特征集合上,從而獲得最優(yōu)和更快的收斂。
計(jì)算機(jī)視覺是計(jì)算機(jī)科學(xué)的一個(gè)領(lǐng)域,主要研究從數(shù)字圖像中自動(dòng)提取信息。近年來(lái),我們?cè)?網(wǎng)絡(luò)架構(gòu)、 激活函數(shù)、 損失函數(shù)等計(jì)算機(jī)視覺領(lǐng)域看到了許多創(chuàng)新。
損失函數(shù)在模型的性能中起著關(guān)鍵作用。選擇正確的損失函數(shù),可以幫助你的模型學(xué)習(xí)如何將注意力集中在數(shù)據(jù)中的正確特征集合上,從而獲得最優(yōu)和更快的收斂。
這篇文章的主要目的是總結(jié)一些重要的損失函數(shù)在計(jì)算機(jī)視覺中的使用。你可以在這里:找到這里討論的所有損失函數(shù)的PyTorch實(shí)現(xiàn)。
https://github.com/sowmyay/medium/blob/master/CV-LossFunctions.ipynb
Pixel-wise損失函數(shù)
顧名思義,這種損失函數(shù)計(jì)算預(yù)測(cè)圖像和目標(biāo)圖像的像素間損失。損失函數(shù),如 MSE或L2損失、MAE或L1損失、交叉熵?fù)p失等,大部分都可以應(yīng)用于在目標(biāo)變量的每一對(duì)像素之間進(jìn)行預(yù)測(cè)。
由于這些損失函數(shù)分別對(duì)每個(gè)像素向量的類預(yù)測(cè)進(jìn)行評(píng)估,然后對(duì)所有像素進(jìn)行平均,因此它們斷言圖像中的每個(gè)像素都具有相同的學(xué)習(xí)能力。這在圖像的語(yǔ)義分割中特別有用,因?yàn)槟P托枰獙W(xué)習(xí)像素級(jí)的密集預(yù)測(cè)。
在U-Net等模型中也使用了這些損失函數(shù)的變體,在用于圖像分割時(shí)采用加權(quán)的像素級(jí)交叉熵?fù)p失來(lái)處理 類間不平衡問題。類不平衡是像素級(jí)分類任務(wù)中常見的問題。當(dāng)圖像數(shù)據(jù)中的各種類不平衡時(shí),就會(huì)出現(xiàn)這種情況。由于像素方面的損失是所有像素?fù)p失的平均值,因此訓(xùn)練會(huì)被分布最多的類來(lái)主導(dǎo)。
Perceptual損失函數(shù)
Johnson et al(2016),Perceptual損失函數(shù)用于比較看起來(lái)相似的兩個(gè)不同的圖像,就像相同的照片,但移動(dòng)了一個(gè)像素或相同的圖像使用了不同的分辨率。在這種情況下,雖然圖像非常相似,pixel-wise損失函數(shù)將輸出一個(gè)大的誤差值。而Perceptual損失函數(shù)比較圖像之間的高級(jí)感知和語(yǔ)義差異。
考慮一個(gè)圖像分類網(wǎng)絡(luò)如VGG,已經(jīng)在ImageNet的數(shù)以百萬(wàn)計(jì)的圖像數(shù)據(jù)集上訓(xùn)練過(guò),第一層的網(wǎng)絡(luò)往往提取底層的特征(如線,邊緣或顏色漸變)而最后的卷積層應(yīng)對(duì)更復(fù)雜的概念(如特定的形狀和模式)。根據(jù)Johnson等人的觀點(diǎn),這些在前幾層捕獲的低層次特征對(duì)于比較非常相似的圖像非常有用。
例如,假設(shè)你構(gòu)建了一個(gè)網(wǎng)絡(luò)來(lái)從輸入圖像重構(gòu)一個(gè)超分辨圖像。在訓(xùn)練期間,你的目標(biāo)圖像將是輸入圖像的超分辨率版本。你的目標(biāo)是比較網(wǎng)絡(luò)的輸出圖像和目標(biāo)圖像。為此,我們將這些圖像通過(guò)一個(gè)預(yù)先訓(xùn)練好的VGG網(wǎng)絡(luò)傳遞,并提取VGG中前幾個(gè)塊的輸出值,從而提取圖像的底層特征信息。這些低級(jí)的特征張量可以通過(guò)簡(jiǎn)單的像素級(jí)損失來(lái)進(jìn)行比較。
- 用于圖像分類的預(yù)訓(xùn)練的損失網(wǎng)絡(luò)
- Perceptual損失的數(shù)學(xué)表示
其中,Vj(Y)V_j(Y)Vj?(Y)表示VGG網(wǎng)絡(luò)第j層在處理圖像Y時(shí)的激活情況,其形狀為(Cj,Hj,Wj)(C_j, H_j, W_j)(Cj?,Hj?,Wj?)。我們使用L2損失的平方,根據(jù)圖像的形狀歸一化,比較了ground truth圖像Y和預(yù)測(cè)圖像Y^\hat YY^的激活情況。
內(nèi)容-風(fēng)格損失函數(shù)
風(fēng)格轉(zhuǎn)換是將圖像的語(yǔ)義內(nèi)容轉(zhuǎn)換成不同風(fēng)格的過(guò)程。風(fēng)格轉(zhuǎn)換模型的目標(biāo)是,給定一個(gè)內(nèi)容圖像?和一個(gè)風(fēng)格圖像(S),生成包含C的內(nèi)容和S的風(fēng)格的輸出圖像。
在這里,我們將討論content-style損失函數(shù)的最簡(jiǎn)單實(shí)現(xiàn)之一,該函數(shù)用于訓(xùn)練這種風(fēng)格的轉(zhuǎn)換模型。后來(lái)的研究中使用了許多內(nèi)容-風(fēng)格損失函數(shù)的變體。下一節(jié)將討論一個(gè)這樣的損失函數(shù),稱為“紋理?yè)p失”。
已經(jīng)發(fā)現(xiàn),CNNs在較高的層次上捕獲內(nèi)容的信息,而較低的層次更關(guān)注單個(gè)像素值。因此,我們使用一個(gè)或多個(gè)CNN頂層,計(jì)算原始內(nèi)容圖像?和預(yù)測(cè)輸出§ 的激活圖。
同樣,通過(guò)計(jì)算預(yù)測(cè)圖像§和風(fēng)格圖像(S)的下一級(jí)特征圖的L2距離,可以計(jì)算出風(fēng)格損失,得到的損失函數(shù)定義為:
alpha和beta是超參數(shù)。
注意:只有減少樣式和內(nèi)容損失的優(yōu)化會(huì)導(dǎo)致高像素化和噪聲輸出。為了解決這個(gè)問題,我們引入了total variation loss來(lái)保證生成的圖像的空間連續(xù)性和平滑性。
紋理?yè)p失函數(shù)
Gatys et al (2016)首次引入的用于圖像風(fēng)格轉(zhuǎn)換的風(fēng)格損失組件。紋理?yè)p失是一種引入的損失函數(shù),是對(duì)感知損失的改進(jìn),特別適用于捕獲圖像的風(fēng)格。Gatys et al發(fā)現(xiàn),我們可以通過(guò)查看激活或特征圖(來(lái)自VGG網(wǎng)絡(luò))內(nèi)的值的空間相關(guān)性來(lái)提取圖像的風(fēng)格表示。這是通過(guò)計(jì)算 Gram矩陣 來(lái)實(shí)現(xiàn)的:
Gram矩陣(對(duì)于VGG網(wǎng)絡(luò)的l層)是向量化特征映射FiF_iFi?和FjF_jFj?(在l層)的內(nèi)積,它捕捉了特征在圖像不同部分同時(shí)出現(xiàn)的趨勢(shì)。
紋理?yè)p失的數(shù)學(xué)表示
這里,Gl和Al分別是模型輸出的l層和目標(biāo)圖像的l層的風(fēng)格樣式表示。Nl是層l中不同特征映射的數(shù)量,Ml是層l(i)中特征映射的容量(也就是通道的寬和高)。最后,El是圖層l的紋理?yè)p失。
網(wǎng)絡(luò)的紋理?yè)p失是所有紋理?yè)p失的加權(quán)和,表示為:
這里 a是原始圖像, x是預(yù)測(cè)圖像。
注意:雖然這里的數(shù)學(xué)看起來(lái)有點(diǎn)復(fù)雜,但請(qǐng)理解紋理?yè)p失只是應(yīng)用在特征圖的gram矩陣上的感知損失。
拓?fù)涓兄獡p失函數(shù)
Mosinska等人(2017)介紹了最近文獻(xiàn)中另一個(gè)有趣的損失函數(shù),即拓?fù)涓兄獡p耗函數(shù)。這可以被認(rèn)為是感知損失的延伸,應(yīng)用于分割mask預(yù)測(cè)。
Mosinska等人認(rèn)為,在圖像分割問題中使用的像素級(jí)損失,如交叉熵?fù)p失,只依賴于局部測(cè)度,而不考慮拓?fù)浣Y(jié)構(gòu)的特征,如連接組件或孔的數(shù)量。因此,傳統(tǒng)的分割模型如U-Net往往會(huì)對(duì)薄的結(jié)構(gòu)進(jìn)行錯(cuò)誤的分類。這是因?yàn)閷?duì)薄層像素的錯(cuò)誤分類在像素?fù)p失方面的代價(jià)很低。作為對(duì)像素?fù)p失的改進(jìn),他們建議引入一個(gè)懲罰項(xiàng),該懲罰項(xiàng)基于VGG-19網(wǎng)絡(luò)生成的特征圖(類似于感知損失),以考慮拓?fù)湫畔ⅰ?/p>
?使用像素級(jí)丟失檢測(cè)神經(jīng)元膜后獲得的分割,(d)利用拓?fù)鋼p耗檢測(cè)細(xì)胞膜后得到的分割
這種方法在從衛(wèi)星圖像中進(jìn)行道路分割時(shí)也特別有用,例如,樹木的遮擋。
拓?fù)涓兄獡p失的數(shù)學(xué)表示
這里,在RHS上,l(m,n)表示VGG19網(wǎng)絡(luò)第n層的第m個(gè)feature map。Mu是衡量像素?fù)p失和拓?fù)鋼p失相對(duì)重要性的標(biāo)量。
對(duì)比損失/三元組損失
在Siamese網(wǎng)絡(luò)中,我們通過(guò)網(wǎng)絡(luò)傳遞一個(gè)圖像A,并將其轉(zhuǎn)換成一個(gè)更小的表示,稱為嵌入。現(xiàn)在,在不更新網(wǎng)絡(luò)的任何權(quán)值或偏差的情況下,我們對(duì)不同的圖像B重復(fù)這個(gè)過(guò)程并提取其嵌入。如果圖像B與圖像A中的人是同一個(gè)人,那么它們相應(yīng)的嵌入必須非常相似。如果它們屬于不同的人,那么它們相應(yīng)的嵌入一定是非常不同的。
為了訓(xùn)練這樣一個(gè)網(wǎng)絡(luò),他們引入了 三元組損失函數(shù)。考慮一個(gè)三元組:[anchor, positive, negative] 。三元組損失定義為:
定義距離度量d=L2范數(shù)
計(jì)算anchor圖像與positive圖像的嵌入距離=d(a, p)
計(jì)算anchor圖像嵌入到negative圖像的距離=d(a, n)
三元組損失= d(a, p) - d(a, n) + offset
這里, xa -> anchor, xp -> positive,xn -> negative
注:為了快速收斂,必須選取正確的三元組進(jìn)行損失計(jì)算。FaceNet的論文討論了實(shí)現(xiàn)這一目標(biāo)的兩種方法——離線三元組生成和在線三元組生成。關(guān)于這個(gè)話題的詳細(xì)討論我們將留到以后討論。
GAN損失
由Ian Goodfellow等人(https://arxiv.org/abs/1406.2661)(2014)首先提出的生成式對(duì)抗網(wǎng)絡(luò)是目前最流行的圖像生成任務(wù)解決方案。GANs的靈感來(lái)自博弈論,并使用一個(gè)對(duì)抗的方案,使它可以用無(wú)監(jiān)督的方式訓(xùn)練。
GANs可以被看作是一個(gè)兩個(gè)人的游戲,我們讓生成器(比如產(chǎn)生一個(gè)超分辨率的圖像)與另一個(gè)網(wǎng)絡(luò) —— 判別器進(jìn)行較量。判別器的任務(wù)是評(píng)估一個(gè)圖像是來(lái)自原始數(shù)據(jù)集(真實(shí)圖像)還是來(lái)自另一個(gè)網(wǎng)絡(luò)(假圖像)。判別器模型像任何其他深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)一樣k可以被更新,生成器使用判別器作為損失函數(shù),這意味著生成器的損失函數(shù)是隱式的,是在訓(xùn)練過(guò)程中學(xué)習(xí)的。對(duì)于典型的機(jī)器學(xué)習(xí)模型,收斂可以看作是在訓(xùn)練數(shù)據(jù)集上讓所選損失函數(shù)最小化。在GAN中,收斂標(biāo)志著雙人博弈的結(jié)束,是尋求生成器和判別器損失之間的平衡。
對(duì)于GAN來(lái)說(shuō),生成器和判別器是兩個(gè)參與者,它們輪流更新各自的模型權(quán)值。在這里,我們將總結(jié)一些用于GAN網(wǎng)絡(luò)的損失函數(shù)
1. Min-Max損失函數(shù)
然而,在實(shí)踐中發(fā)現(xiàn),這種生成器的損失函數(shù)會(huì)飽和。也就是說(shuō),如果它不能像判別器學(xué)習(xí)得那么快,判別器贏了,游戲就結(jié)束了,模型就不能得到有效的訓(xùn)練。
2. 不飽和的GAN損失
不飽和GAN損失是一種改進(jìn)的生成器損失,以克服飽和的問題,使用了一個(gè)微妙的變化。該生成器不是最小化所生成圖像的負(fù)判別器概率的對(duì)數(shù),而是最大化所生成圖像的判別器概率的對(duì)數(shù)。
3. 最小均方GAN損失
由Xudong Mao, et al (2016)提出,當(dāng)生成的圖像與真實(shí)圖像非常不同時(shí),這種損失函數(shù)特別有用,因?yàn)榇藭r(shí)會(huì)導(dǎo)致梯度非常小或梯度消失,進(jìn)而導(dǎo)致模型很少或沒有更新。
4. Wasserstein GAN損失
Martin Arjovsky等人(2017)。他們觀察到,傳統(tǒng)GAN的目的是最小化真實(shí)圖像和生成圖像的實(shí)際概率分布和預(yù)測(cè)概率分布之間的距離,即所謂的Kullback-Leibler (KL)散度。相反,他們建議在Earth-Mover’s distance上對(duì)問題進(jìn)行建模,該模型根據(jù)將一個(gè)分布轉(zhuǎn)換成另一個(gè)分布的成本來(lái)計(jì)算兩個(gè)概率分布之間的距離。
使用Wasserstein損失的GAN涉及到將判別器的概念改變?yōu)橐粋€(gè)更改評(píng)估器,比生成器模型更新得更頻繁(例如,更新頻率是生成器模型的五倍)。評(píng)估器用實(shí)際的數(shù)字而不是預(yù)測(cè)概率來(lái)給圖像打分。它還要求模型的權(quán)重保持較小。該得分的計(jì)算使得真假圖像的得分之間的距離最大程度地分離。Wasserstein的損失的好處是,它提供了一個(gè)有用幾乎無(wú)處不在的梯度,允許模型的繼續(xù)訓(xùn)練。
5. 循環(huán)一致性損失
圖像到圖像的轉(zhuǎn)換是一個(gè)圖像合成的任務(wù),需要對(duì)給定的圖像進(jìn)行有控制的修改,生成一個(gè)新的圖像。例如,把馬轉(zhuǎn)換成斑馬(或反過(guò)來(lái)),把繪畫轉(zhuǎn)換成照片(或反過(guò)來(lái)),等等。
juno - yan Zhu et al (2018)介紹,訓(xùn)練用于圖像到圖像轉(zhuǎn)換的模型通常需要大量成對(duì)的樣本數(shù)據(jù)集,這些樣本很難找到。CycleGAN是一種不需要配對(duì)實(shí)例的自動(dòng)訓(xùn)練技術(shù)。這些模型以一種無(wú)監(jiān)督的方式進(jìn)行訓(xùn)練,使用來(lái)自源和目標(biāo)域的圖像集合,這些圖像不需要以任何方式關(guān)聯(lián)。
CycleGAN是GAN體系結(jié)構(gòu)的擴(kuò)展,它同時(shí)訓(xùn)練兩個(gè)生成器模型和兩個(gè)判別器模型。一個(gè)生成器從第一個(gè)域獲取圖像作為第二個(gè)域的輸入和輸出圖像,另一個(gè)生成器從第二個(gè)域獲取圖像作為輸入并生成第一個(gè)域的圖像。然后使用判別器模型來(lái)確定生成的圖像是否可信,并相應(yīng)地更新生成器模型。
循環(huán)一致性是指第一個(gè)生成器輸出的圖像可以用作第二個(gè)生成器的輸入,而第二個(gè)生成器的輸出應(yīng)該與原始圖像匹配。反之亦然。
CycleGAN通過(guò)增加額外的損失來(lái)測(cè)量第二個(gè)生成器生成的輸出與原始圖像之間的差異,從而趨向于循環(huán)一致性。該損失作為正則化項(xiàng)用于生成模型,指導(dǎo)新領(lǐng)域的圖像生成過(guò)程向圖像轉(zhuǎn)換方向發(fā)展。
總結(jié)
以上是生活随笔為你收集整理的总结 | 计算机视觉领域最常见几中损失函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ElasticSearch权威指南学习(
- 下一篇: Laravel上传文件(单文件,多文件)