文章《You Only Look Once: Unified, Real-Time Object Detection》提出方法下面簡(jiǎn)稱YOLO。
目前择份,基于深度學(xué)習(xí)算法的一系列目標(biāo)檢測(cè)算法大致可以分為兩大流派:
1.兩步走(two-stage)算法:先產(chǎn)生候選區(qū)域然后再進(jìn)行CNN分類(RCNN系列)胡桨,
2.一步走(one-stage)算法:直接對(duì)輸入圖像應(yīng)用算法并輸出類別和相應(yīng)的定位(YOLO系列)
之前的R-CNN系列雖然準(zhǔn)確率比較高官帘,但是即使是發(fā)展到Faster R-CNN,檢測(cè)一張圖片如下圖所示也要7fps(原文為5fps)昧谊,為了使得檢測(cè)的工作能夠用到實(shí)時(shí)的場(chǎng)景中刽虹,提出了YOLO。
YOLO的檢測(cè)思想不同于R-CNN系列的思想呢诬,它將目標(biāo)檢測(cè)作為回歸任務(wù)來解決涌哲。
下面來看看YOLO的整體結(jié)構(gòu):
由上兩圖所示,網(wǎng)絡(luò)是根據(jù)GoogLeNet改進(jìn)的尚镰,輸入圖片為448*448大小阀圾,輸出為,現(xiàn)在看來這樣寫輸出維度很奇怪狗唉,下面來看一下輸出是怎么定義的初烘。
將圖片分為個(gè)單元格(原文中S=7),之后的輸出是以單元格為單位進(jìn)行的:
1.如果一個(gè)object的中心落在某個(gè)單元格上分俯,那么這個(gè)單元格負(fù)責(zé)預(yù)測(cè)這個(gè)物體肾筐。
2.每個(gè)單元格需要預(yù)測(cè)B個(gè)bbox值(bbox值包括坐標(biāo)和寬高,原文中B=2)缸剪,同時(shí)為每個(gè)bbox值預(yù)測(cè)一個(gè)置信度(confidence scores)吗铐。也就是每個(gè)單元格需要預(yù)測(cè)B×(4+1)個(gè)值。
3.每個(gè)單元格需要預(yù)測(cè)C(物體種類個(gè)數(shù)杏节,原文C=20唬渗,這個(gè)與使用的數(shù)據(jù)庫有關(guān))個(gè)條件概率值.
所以讥此,最后網(wǎng)絡(luò)的輸出維度為,這里雖然每個(gè)單元格負(fù)責(zé)預(yù)測(cè)一種物體(這也是這篇文章的問題谣妻,當(dāng)有小物體時(shí)可能會(huì)有問題),但是每個(gè)單元格可以預(yù)測(cè)多個(gè)bbox值(這里可以認(rèn)為有多個(gè)不同形狀的bbox卒稳,為了更準(zhǔn)確的定位出物體蹋半,如下圖所示)。
因?yàn)檫@里是當(dāng)作回歸問題來解決的充坑,所以所有的輸出包括坐標(biāo)和寬高最好都定義在0到1之間减江。網(wǎng)上看見一張比較詳細(xì)的圖如下。
來看一下每個(gè)單元格預(yù)測(cè)的B個(gè)(x,y,w,h,confidence)的向量和C的條件概率中捻爷,每個(gè)參數(shù)的含義(假設(shè)圖片寬為高為辈灼,將圖片分為):
1.(x,y)是bbox的中心相對(duì)于單元格的offset
對(duì)于下圖中藍(lán)色框的那個(gè)單元格(坐標(biāo)為),假設(shè)它預(yù)測(cè)的輸出是紅色框的bbox,設(shè)bbox的中心坐標(biāo)為,那么最終預(yù)測(cè)出來的(x,y)是經(jīng)過歸一化處理的也榄,表示的是中心相對(duì)于單元格的offset巡莹,計(jì)算公式如下:
2.(w,h)是bbox相對(duì)于整個(gè)圖片的比例
預(yù)測(cè)的bbox的寬高為,(w,h)表示的是bbox的是相對(duì)于整張圖片的占比甜紫,計(jì)算公式如下:
3.confidence
這個(gè)置信度是由兩部分組成降宅,一是格子內(nèi)是否有目標(biāo),二是bbox的準(zhǔn)確度囚霸。定義置信度為腰根。
這里,如果格子內(nèi)有物體拓型,則额嘿,此時(shí)置信度等于IoU。如果格子內(nèi)沒有物體劣挫,則册养,此時(shí)置信度為0
4.C類的條件概率
條件概率定義為,表示該單元格存在物體且屬于第i類的概率压固。
在測(cè)試的時(shí)候每個(gè)單元格預(yù)測(cè)最終輸出的概率定義為捕儒,如下兩圖所示(兩幅圖不一樣,代表一個(gè)框會(huì)輸出B列概率值)
最后將 列的結(jié)果送入NMS邓夕,最后即可得到最終的輸出框結(jié)果
最后來看一下訓(xùn)練YOLO使用的損失函數(shù)定義(本想自己用latex打的刘莹,后來有個(gè)符號(hào)一直打不出來,使用網(wǎng)友的圖如下)
這里強(qiáng)調(diào)兩點(diǎn):
1.每個(gè)圖片的每個(gè)單元格不一定都包含object焚刚,如果沒有object点弯,那么confidence就會(huì)變成0,這樣在優(yōu)化模型的時(shí)候可能會(huì)讓梯度跨越太大矿咕,模型不穩(wěn)定跑飛了抢肛。為了平衡這一點(diǎn)狼钮,在損失函數(shù)中,設(shè)置兩個(gè)參數(shù)和捡絮,其中控制bbox預(yù)測(cè)位置的損失熬芜,控制單個(gè)格內(nèi)沒有目標(biāo)的損失。
2.對(duì)于大的物體福稳,小的偏差對(duì)于小的物體影響較大涎拉,為了減少這個(gè)影響,所以對(duì)bbox的寬高都開根號(hào)的圆。
參考
1.https://docs.google.com/presentation/d/1aeRvtKG21KHdD5lg6Hgyhx5rPq_ZOsGjG5rJ1HP7BbA/pub?start=false&loop=false&delayms=3000&slide=id.g137784ab86_4_1822
2.https://blog.csdn.net/u011974639/article/details/78208773