YOLO v2的論文對(duì)loss的描述較少痢掠,因此許多細(xì)節(jié)值得我們深究驱犹。
首先,我們知道在YOLO v1中足画,對(duì)于訓(xùn)練圖片中的ground truth雄驹,若其中心點(diǎn)落在某個(gè)cell內(nèi),那么該cell內(nèi)對(duì)應(yīng)的兩個(gè)預(yù)測(cè)框負(fù)責(zé)預(yù)測(cè)它淹辞。然后訓(xùn)練時(shí)医舆,圖片經(jīng)過網(wǎng)絡(luò)產(chǎn)生兩個(gè)預(yù)測(cè)框,我們只選擇與ground truth的IOU值最大的預(yù)測(cè)框負(fù)責(zé)預(yù)測(cè)目標(biāo)象缀。所以我們的預(yù)測(cè)框只有兩種——負(fù)責(zé)預(yù)測(cè)目標(biāo)和不預(yù)測(cè)目標(biāo)蔬将。
在YOLO v2中,有一些不同:
(1)對(duì)于訓(xùn)練圖片中的ground truth央星,和v1一樣若其中心點(diǎn)落在某個(gè)cell內(nèi)霞怀,那么該cell內(nèi)的5個(gè)先驗(yàn)框所對(duì)應(yīng)的邊界框負(fù)責(zé)預(yù)測(cè)它。和v1不同的是莉给,因?yàn)関2有了5個(gè)不同的先驗(yàn)框毙石,我們不再和網(wǎng)絡(luò)輸出的預(yù)測(cè)框計(jì)算IOU值,而是用先驗(yàn)框與ground truth計(jì)算IOU值颓遏,(計(jì)算IOU值時(shí)不考慮坐標(biāo)徐矩,只考慮形狀,所以先將先驗(yàn)框與ground truth的中心點(diǎn)都偏移到原點(diǎn)州泊,然后計(jì)算出對(duì)應(yīng)的IOU值)丧蘸,最大的先驗(yàn)框?qū)?yīng)的預(yù)測(cè)框ground truth匹配,而剩余的4個(gè)先驗(yàn)框?qū)?yīng)的預(yù)測(cè)框不與該ground truth匹配遥皂。
(2)然后應(yīng)該明確哪些預(yù)測(cè)框需要計(jì)算損失,v1只有兩種預(yù)測(cè)框刽漂,但是v2有三種演训。首先,對(duì)于網(wǎng)絡(luò)輸出的所有預(yù)測(cè)框贝咙,每個(gè)預(yù)測(cè)框都與各個(gè)ground truth計(jì)算IOU值样悟,在這些IOU值中取最大值就是Max IOU。然后根據(jù)Max IOU和是否匹配ground truth可以把預(yù)測(cè)框分為三類并計(jì)算損失庭猩。
1.如果某一個(gè)預(yù)測(cè)框的Max IOU小于0.6(說明它預(yù)測(cè)背景)且不匹配ground truth, 則這個(gè)預(yù)測(cè)框計(jì)算置信度損失窟她。
2.如果某一個(gè)預(yù)測(cè)框的Max IOU大于0.6,但是不和ground truth匹配蔼水,我們忽略其損失震糖。
3.如果某一個(gè)預(yù)測(cè)框匹配ground truth。那么我們就要對(duì)這個(gè)預(yù)測(cè)框計(jì)算坐標(biāo)趴腋、置信度和類別概率損失吊说。
關(guān)于第二點(diǎn)论咏,因?yàn)閥olov2的一個(gè)ground truth只對(duì)應(yīng)一個(gè)先驗(yàn)框,對(duì)于那些沒有與ground truth匹配的先驗(yàn)框(與預(yù)測(cè)框?qū)?yīng)),盡管Max_IOU高于閾值也要忽略颁井,不計(jì)算任何誤差厅贪。這點(diǎn)在yolov3論文中也有相關(guān)說明:yolov2中一個(gè)ground truth只會(huì)與一個(gè)先驗(yàn)框匹配(IOU值最好的),對(duì)于那些IOU值超過一定閾值的先驗(yàn)框雅宾,其預(yù)測(cè)結(jié)果就忽略了养涮。
這里我的理解是:因?yàn)橛?xùn)練時(shí)網(wǎng)絡(luò)輸出13×13×5個(gè)預(yù)測(cè)框,但只有幾個(gè)預(yù)測(cè)框需要預(yù)測(cè)眉抬,其他預(yù)測(cè)框都不進(jìn)行預(yù)測(cè)单寂,導(dǎo)致這些不預(yù)測(cè)物體的預(yù)測(cè)框的置信度損失偏大,即正負(fù)樣本不均衡吐辙。所以宣决,v2直接去掉那些預(yù)測(cè)結(jié)果較好(IOU>0.6)但不匹配ground truth的預(yù)測(cè)框,減少負(fù)樣本昏苏。SSD論文中有提到這個(gè)問題尊沸,SSD的處理方法是,將一個(gè)ground truth分配給多個(gè)先驗(yàn)框贤惯,并把它們作為正樣本洼专。對(duì)于不匹配ground truth的預(yù)測(cè)框,作為負(fù)樣本孵构,然后將這些輸出的預(yù)測(cè)框按置信度排序屁商,根據(jù)一定比例(1:3)選取置信度高的預(yù)測(cè)框,有效地解決正負(fù)樣本不平衡的問題颈墅。
(3)關(guān)于匹配ground truth的預(yù)測(cè)框的置信度誤差蜡镶。YOLO v2中有一個(gè)控制參數(shù)rescore,如果rescore取1恤筛,那么target取1官还,和yolo v1一樣。如果rescore取0毒坛,target取預(yù)測(cè)框與ground truth的IOU值望伦。
代碼:
if rescore_confidence:
objects_loss = (object_scale * detectors_mask *K.square(best_ious - pred_confidence))
else:
objects_loss = (object_scale * detectors_mask * K.square(1 - pred_confidence))
具體公式
其他
1.在計(jì)算box的坐標(biāo)誤差時(shí),YOLOv1中采用的是平方根以降低boxes的大小對(duì)誤差的影響煎殷,而YOLOv2是直接計(jì)算屯伞,但是根據(jù)ground truth的大小對(duì)權(quán)重系數(shù)進(jìn)行修正:coord_scale * (2-truth.w*truth.h),這樣對(duì)于尺度較小的box其權(quán)重會(huì)更大一些豪直,起到和YOLOv1計(jì)算平方根相似的效果劣摇。
2.最后一項(xiàng)之前的公式的第二項(xiàng)對(duì)應(yīng),只在12800次迭代前加上顶伞,目的應(yīng)該是為了使預(yù)測(cè)框快速學(xué)習(xí)到先驗(yàn)框的形狀饵撑。
Reference:
https://blog.csdn.net/lwplwf/article/details/82895409
http://www.reibang.com/p/032b1eecb335
https://zhuanlan.zhihu.com/p/35325884