目標(biāo)檢測(cè)模型YOLO-V1損失函數(shù)詳解
?上期我們一起學(xué)習(xí)了
?YOLOV1算法的原理框架,如下:
目標(biāo)檢測(cè)算法YOLO-V1算法詳解
今天我們深入一步,一起學(xué)習(xí)下關(guān)于YOLO-V1算法的損失函數(shù)和優(yōu)缺點(diǎn)。
YOLO-V1損失函數(shù)
從上期我們知道,YOLO-V1算法最后輸出的檢測(cè)結(jié)果為7x7x30的形式,其中30個(gè)值分別包括兩個(gè)候選框的位置和有無(wú)包含物體的置信度以及網(wǎng)格中包含20個(gè)物體類別的概率。那么YOLO的損失就包括三部分:位置誤差,confidence誤差,分類誤差。
損失函數(shù)的設(shè)計(jì)目標(biāo)就是讓坐標(biāo)(x,y,w,h),confidence,classification這個(gè)三個(gè)方面達(dá)到很好的平衡。YOLO-V1算法中簡(jiǎn)單的全部采用了sum-squared error loss來(lái)做這件事,如下圖:

在上圖中,我們也能清晰的看出來(lái),整個(gè)算法的損失是由預(yù)測(cè)框的坐標(biāo)誤差,有無(wú)包含物體的置信度誤差以及網(wǎng)格預(yù)測(cè)類別的誤差三部分組成,三部分的損失都使用了均方誤差的方式來(lái)實(shí)現(xiàn)。
我們知道,如果8維的localization error,兩個(gè)置信度error和20維的classification error同等重要顯然是不合理的;還有如果一個(gè)網(wǎng)格中沒(méi)有object(一幅圖中這種網(wǎng)格很多),那么就會(huì)將這些網(wǎng)格中的box的confidence push到0,相比于較少的有object的網(wǎng)格,這種做法是overpowering的,這會(huì)導(dǎo)致網(wǎng)絡(luò)不穩(wěn)定甚至發(fā)散。這里算法中用了權(quán)重系數(shù)來(lái)進(jìn)行平衡,對(duì)于不同的損失用不同的權(quán)重,我們來(lái)逐個(gè)看:
位置損失
從上圖可以看出,坐標(biāo)損失也分為兩部分,坐標(biāo)中心誤差和位置寬高的誤差,其中表示第i個(gè)網(wǎng)格中的第j個(gè)預(yù)測(cè)框是否負(fù)責(zé)obj這個(gè)物體的預(yù)測(cè),只有當(dāng)某個(gè)box predictor對(duì)某個(gè)ground truth box負(fù)責(zé)的時(shí)候,才會(huì)對(duì)box的coordinate error進(jìn)行懲罰,而對(duì)哪個(gè)ground truth box負(fù)責(zé)就看其預(yù)測(cè)值和ground truth box的IoU是不是在那個(gè)網(wǎng)格的所有box中最大。
我們可以看到,對(duì)于中心點(diǎn)的損失直接用了均方誤差,但是對(duì)于寬高為什么用了平方根呢?這里是這樣的,我們先來(lái)看下圖:
上圖中,藍(lán)色為bounding box,紅色框?yàn)檎鎸?shí)標(biāo)注,如果W和h沒(méi)有平方根的話,那么bounding box跟兩個(gè)真實(shí)標(biāo)注的位置loss是相同的。但是從面積看來(lái)B框是A框的25倍,C框是B框的81/25倍。B框跟A框的大小偏差更大,所以不應(yīng)該有相同的loss。
如果W和h加上平方根,那么B對(duì)A的位置loss約為3.06,B對(duì)C的位置loss約為1.17,B對(duì)A的位置loss的值更大,這更加符合我們的實(shí)際判斷。所以,算法對(duì)位置損失中的寬高損失加上了平方根。
而公式中的為位置損失的權(quán)重系數(shù),在pascal VOC訓(xùn)練中取5。
置信度損失
這里分成了兩部分,一部分是包含物體時(shí)置信度的損失,一個(gè)是不包含物體時(shí)置信度的值。置信度的定義,我們上期學(xué)習(xí)過(guò),這里結(jié)合置信度損失再看一下:
其中前一項(xiàng)表示有無(wú)人工標(biāo)記的物體落入網(wǎng)格內(nèi),如果有,則為1,否則為0.第二項(xiàng)代表bounding box和真實(shí)標(biāo)記的box之間的IoU。值越大則box越接近真實(shí)位置。confidence是針對(duì)bounding box的,由于每個(gè)網(wǎng)格有兩個(gè)bounding box,所以每個(gè)網(wǎng)格會(huì)有兩個(gè)confidence與之相對(duì)應(yīng)。
從損失函數(shù)上看,當(dāng)網(wǎng)格i中的第j個(gè)預(yù)測(cè)框包含物體的時(shí)候,用上面的置信度損失,而不包含物體的時(shí)候,用下面的損失函數(shù)。對(duì)沒(méi)有object的box的confidence loss,賦予小的loss weight,記為在pascal VOC訓(xùn)練中取0.5。有object的box的confidence loss和類別的loss的loss weight正常取1。
類別損失
類別損失這里也用了均方誤差,實(shí)際上,感覺(jué)這里用交叉熵更好一些。其中表示有無(wú)object的中心點(diǎn)落到網(wǎng)格i中,如果網(wǎng)格中包含有物體object的中心的話,那么就負(fù)責(zé)預(yù)測(cè)該object的概率。
總體來(lái)說(shuō),對(duì)于不同的任務(wù)重要程度不同,所以也應(yīng)該給與不同的loss weight:
每個(gè)網(wǎng)格兩個(gè)預(yù)測(cè)框坐標(biāo)比較重要,給這些損失賦予更大的 loss weight,在pascal VOC中取值為5.對(duì)沒(méi)有 object的box的confidence loss,賦予較小的loss weight,在pascal VOC訓(xùn)練中取0.5.對(duì)有 object的box的confidence loss和類別的loss weight正常取值為1.
YOLO-V1的缺點(diǎn)
由于YOLOV1的框架設(shè)計(jì),該網(wǎng)絡(luò)存在以下缺點(diǎn):
每個(gè)網(wǎng)格只對(duì)應(yīng)兩個(gè) bounding box,當(dāng)物體的長(zhǎng)寬比不常見(也就是訓(xùn)練數(shù)據(jù)集覆蓋不到時(shí)),效果較差。原始圖片只劃分為 7x7的網(wǎng)格,當(dāng)兩個(gè)物體靠的很近時(shí),效果比較差。最終每個(gè)網(wǎng)格只對(duì)應(yīng)一個(gè)類別,容易出現(xiàn)漏檢(物體沒(méi)有被識(shí)別到)。 對(duì)于圖片中比較小的物體,效果比較差。這其實(shí)是所有目標(biāo)檢測(cè)算法的通病。
好了,至此,我們這兩期學(xué)習(xí)了YOLO-V1的結(jié)構(gòu)框架和損失函數(shù)。下期我們將一起學(xué)習(xí)YOLO-V2的框架,看看YOLO-V2對(duì)YOLO-V1做了哪些改進(jìn)。
?轉(zhuǎn)發(fā)在看也是一種支持?
