在目標(biāo)檢測(cè)算法中募壕,faster R-CNN達(dá)到了目前的最高mAP精度镰踏。雖然mAP使用的是一體化網(wǎng)絡(luò)念链,但是其訓(xùn)練過(guò)程卻沒(méi)有實(shí)現(xiàn)端到端,是通過(guò)多步訓(xùn)練的贝润,其仍然沒(méi)有能避免提取region proposal這一步绊茧。雖然faster R-CNN精度很高,但是其檢測(cè)速度卻不是很快打掘,難以達(dá)到實(shí)時(shí)檢測(cè)水平华畏,這使得它難以應(yīng)用到實(shí)際工程中。本文作者提出了一種真正的端到端網(wǎng)絡(luò)尊蚁,不僅檢測(cè)速度快亡笑,而且檢測(cè)的mAP精度高,泛化能力強(qiáng)横朋。
下面內(nèi)容主要轉(zhuǎn)載自<機(jī)器愛(ài)學(xué)習(xí)>YOLO v1深入理解
1仑乌、網(wǎng)絡(luò)結(jié)構(gòu)
YOLO使用的網(wǎng)絡(luò)基礎(chǔ)來(lái)源于GoogLeNet,只是將其中的inception module使用3x3和1x1的卷積代替了琴锭。網(wǎng)絡(luò)結(jié)構(gòu)如下:1.1 輸入與輸出
網(wǎng)絡(luò)的輸入采用的是448x448大小的圖片晰甚。而輸出則是一個(gè)7x7*30的向量,下面對(duì)這個(gè)輸出向量進(jìn)行詳細(xì)解釋决帖。
1.1.1 7x7網(wǎng)格
7x7表示輸入圖像被分成多少個(gè)網(wǎng)格厕九,最后每一塊都會(huì)輸出一個(gè)預(yù)測(cè)結(jié)果,因此是7x7個(gè)預(yù)測(cè)結(jié)果古瓤。而每個(gè)網(wǎng)格的預(yù)測(cè)結(jié)果又包括30個(gè)值止剖。
1.1.2 30維向量
在本文中每個(gè)網(wǎng)格的預(yù)測(cè)結(jié)果包括30個(gè)值腺阳,如圖:- 20個(gè)對(duì)象分類(lèi)概率落君。由于本文中數(shù)據(jù)集有20個(gè)不同的類(lèi)別,因此這里是20個(gè)類(lèi)別的概率亭引;
- 2個(gè)bounding box的置信度绎速。bounding box的置信度 = 該bbox存在對(duì)象的概率 * 該bbox與該對(duì)象實(shí)際bbox的IOU,即 Confidence = Pr(Object) * IOU焙蚓;
- 2個(gè)bounding box的位置纹冤。這里之所以是兩個(gè)bbox是因?yàn)槲闹性O(shè)置的每個(gè)網(wǎng)格中只預(yù)測(cè)兩個(gè)bounding box的輸出結(jié)果。位置信息包括bbox中心坐標(biāo)(x购公,y)和其寬高(width萌京,height)。
需要注意的是這里有兩個(gè)概率:confidence中提到的一個(gè)bbox中存在對(duì)象的概率和這個(gè)對(duì)象屬于某個(gè)類(lèi)別的概率宏浩。
因此最后輸出會(huì)有7x7 * ((bbox+confidence)*bbox_num + C)個(gè)結(jié)果知残,其中C表示類(lèi)別個(gè)數(shù)。雖然每個(gè)格子都有兩個(gè)bbox比庄,但是其實(shí)最后一個(gè)格子只輸出一個(gè)結(jié)果求妹,采用的非極大抑制選擇預(yù)測(cè)的比較好的那個(gè)乏盐。在本文中最后的輸出就是7x7 * ((4+1)* 2 + 20)
2、訓(xùn)練階段
在訓(xùn)練時(shí)先使用ImageNet 1000分類(lèi)預(yù)訓(xùn)練模型制恍,需要注意的是預(yù)訓(xùn)練時(shí)候輸入圖片的大小是224父能。而在檢測(cè)訓(xùn)練時(shí),又在模型中添加了4個(gè)卷積層和兩個(gè)全連接層净神,這幾層的權(quán)重都是隨機(jī)初始化的何吝,這樣能提高網(wǎng)絡(luò)的性能。最后的預(yù)測(cè)使用的是leaky ReLU鹃唯。
2.1 訓(xùn)練樣本構(gòu)造
在上面我們知道了YOLO網(wǎng)絡(luò)的輸出是什么樣子的岔霸。接下來(lái)我們看看如何準(zhǔn)備訓(xùn)練集。
(1)20個(gè)對(duì)象分類(lèi)的概率
對(duì)于輸入圖像中的每個(gè)對(duì)象俯渤,先找到其中心點(diǎn)呆细。比如圖8中的自行車(chē),其中心點(diǎn)在黃色圓點(diǎn)位置八匠,中心點(diǎn)落在黃色網(wǎng)格內(nèi)絮爷,所以這個(gè)黃色網(wǎng)格對(duì)應(yīng)的30維向量中,自行車(chē)的概率是1梨树,其它對(duì)象的概率是0坑夯。所有其它48個(gè)網(wǎng)格的30維向量中,該自行車(chē)的概率都是0抡四。這就是所謂的"中心點(diǎn)所在的網(wǎng)格對(duì)預(yù)測(cè)該對(duì)象負(fù)責(zé)"柜蜈。狗和汽車(chē)的分類(lèi)概率也是同樣的方法填寫(xiě)。
(2)2個(gè)bounding box的位置
訓(xùn)練樣本的bounding box位置應(yīng)該填寫(xiě)對(duì)象實(shí)際的bounding box指巡,但一個(gè)對(duì)象對(duì)應(yīng)了2個(gè)bounding box淑履,該填哪一個(gè)呢?上面討論過(guò)藻雪,需要根據(jù)網(wǎng)絡(luò)輸出的bounding box與對(duì)象實(shí)際bounding box的IOU來(lái)選擇秘噪,所以要在訓(xùn)練過(guò)程中動(dòng)態(tài)決定到底填哪一個(gè)bounding box。參考下面第③點(diǎn)勉耀。
(3)2個(gè)bounding box的置信度
上式中的IOU可以利用預(yù)測(cè)的bounding box與gt bounding box一起計(jì)算出IOU指煎。
然后看2個(gè)bounding box的IOU,哪個(gè)比較大(更接近對(duì)象實(shí)際的bounding box)便斥,就由哪個(gè)bounding box來(lái)負(fù)責(zé)預(yù)測(cè)該對(duì)象是否存在至壤,即該bounding box的Pr(Object)=1,同時(shí)對(duì)象真實(shí)bounding box的位置也就填入該bounding box枢纠。另一個(gè)不負(fù)責(zé)預(yù)測(cè)的bounding box的 Pr(Object)=0像街。
總的來(lái)說(shuō)就是,與對(duì)象實(shí)際bounding box最接近的那個(gè)bounding box,其 confidence = IOU宅广,該網(wǎng)格的其他bounding box的confidence = 0葫掉。
舉個(gè)例子,比如上圖中自行車(chē)的中心點(diǎn)位于4行3列網(wǎng)格中跟狱,所以輸出tensor中4行3列位置的30維向量如下圖所示俭厚。簡(jiǎn)單說(shuō)這張圖片的GT就是第4行第3列的網(wǎng)格處有一輛自行車(chē),它的中心點(diǎn)在這個(gè)網(wǎng)格內(nèi)驶臊,它的位置邊框是bounding box1所填寫(xiě)的自行車(chē)實(shí)際邊框挪挤。
注意,圖中將自行車(chē)的位置放在bounding box1关翎,但實(shí)際上是在訓(xùn)練過(guò)程中等網(wǎng)絡(luò)輸出以后扛门,比較兩個(gè)bounding box與自行車(chē)實(shí)際位置的IOU,自行車(chē)的位置(實(shí)際bounding box)放置在IOU比較大的那個(gè)bounding box(圖中假設(shè)是bounding box1)纵寝,且該bounding box的置信度設(shè)為1论寨。
2.2 損失函數(shù)
YOLO的損失函數(shù)如下:
上面公式中1可以理解成指示函數(shù){0,1}:
- 1iobj意思是網(wǎng)格i中存在對(duì)象;
- 1ijobj意思是網(wǎng)格i的第j個(gè)bounding box中存在對(duì)象;
- 1ijnoobj意思是網(wǎng)格i的第j個(gè)bounding box中不存在對(duì)象爽茴。
總的來(lái)說(shuō)葬凳,就是用網(wǎng)絡(luò)輸出與樣本標(biāo)簽的各項(xiàng)內(nèi)容的誤差平方和作為一個(gè)樣本的整體誤差。 損失函數(shù)中的幾個(gè)項(xiàng)是與輸出的30維向量中的內(nèi)容相對(duì)應(yīng)的室奏。
(1)分類(lèi)誤差
公式第5行火焰, 1iobj值為1即存在對(duì)象時(shí)才計(jì)算誤差。
(2)bounding box的位置誤差
公式第1行和第2行胧沫。
a) 都帶有1ijobj意味著只有"負(fù)責(zé)"(IOU比較大)預(yù)測(cè)的那個(gè)bounding box的數(shù)據(jù)才會(huì)計(jì)入誤差昌简。
b)第2行寬度和高度先取了平方根,因?yàn)槿绻苯尤〔钪档脑捜拊梗蟮膶?duì)象對(duì)差值的敏感度較低纯赎,小的對(duì)象對(duì)差值的敏感度較高,所以取平方根可以降低這種敏感度的差異窖逗,使得較大的對(duì)象和較小的對(duì)象在尺寸誤差上有相似的權(quán)重址否。
c)乘以λcoord調(diào)節(jié)bounding box位置誤差的權(quán)重(相對(duì)分類(lèi)誤差和置信度誤差)餐蔬。YOLO設(shè)置 λcoord=5碎紊,即調(diào)高位置誤差的權(quán)重。
(3)bounding box置信度誤差
公式第3行和第4行樊诺。
a)第3行是存在對(duì)象的bounding box的置信度誤差仗考。帶有1ijobj意味著只有"負(fù)責(zé)"(IOU比較大)預(yù)測(cè)的那個(gè)bounding box的置信度才會(huì)計(jì)入誤差。
b)第4行是不存在對(duì)象的bounding box的置信度誤差词爬。因?yàn)椴淮嬖趯?duì)象的bounding box應(yīng)該老老實(shí)實(shí)的說(shuō)"我這里沒(méi)有對(duì)象"秃嗜,也就是輸出盡量低的置信度。如果它不恰當(dāng)?shù)妮敵鲚^高的置信度,會(huì)與真正"負(fù)責(zé)"該對(duì)象預(yù)測(cè)的那個(gè)bounding box產(chǎn)生混淆锅锨。其實(shí)就像對(duì)象分類(lèi)一樣叽赊,正確的對(duì)象概率最好是1,所有其它對(duì)象的概率最好是0必搞。
c)第4行會(huì)乘以 λnoobj調(diào)節(jié)不存在對(duì)象的bounding box的置信度的權(quán)重(相對(duì)其它誤差)必指。YOLO設(shè)置λnoobj=0.5,即調(diào)低不存在對(duì)象的bounding box的置信度誤差的權(quán)重恕洲。
3塔橡、預(yù)測(cè)
訓(xùn)練好的YOLO網(wǎng)絡(luò),輸入一張圖片霜第,將輸出一個(gè) 7730 的張量(tensor)來(lái)表示圖片中所有網(wǎng)格包含的對(duì)象(概率)以及該對(duì)象可能的2個(gè)位置(bounding box)和可信程度(置信度)葛家。 為了從中提取出最有可能的那些對(duì)象和位置,YOLO采用NMS(Non-maximal suppression泌类,非極大值抑制)算法癞谒。
3.1 NMS(非極大值抑制)
NMS方法并不復(fù)雜,其核心思想是:選擇得分最高的作為輸出刃榨,與該輸出重疊的去掉扯俱,不斷重復(fù)這一過(guò)程直到所有備選處理完。
YOLO的NMS計(jì)算方法如下:
網(wǎng)絡(luò)輸出的7*7*30的張量喇澡,在每一個(gè)網(wǎng)格中迅栅,對(duì)象Ci位于第j個(gè)bounding box的得分:
它代表著某個(gè)對(duì)象 Ci存在于第j個(gè)bounding box的可能性。
每個(gè)網(wǎng)格有:20個(gè)對(duì)象的概率*2個(gè)bounding box的置信度晴玖,共40個(gè)得分(候選對(duì)象)读存。49個(gè)網(wǎng)格共1960個(gè)得分。Andrew Ng建議每種對(duì)象分別進(jìn)行NMS呕屎,那么每種對(duì)象有 1960/20=98 個(gè)得分让簿。
NMS步驟如下:
- 1)設(shè)置一個(gè)Score的閾值,低于該閾值的候選對(duì)象排除掉(將該Score設(shè)為0)秀睛;
- 2)遍歷每一個(gè)對(duì)象類(lèi)別尔当;
- 2.1)遍歷該對(duì)象的98個(gè)得分;
2.1.1)找到Score最大的那個(gè)對(duì)象及其bounding box蹂安,添加到輸出列表椭迎;
2.1.2)對(duì)每個(gè)Score不為0的候選對(duì)象,計(jì)算其與上面2.1.1輸出對(duì)象的bounding box的IOU田盈;
2.1.3)根據(jù)預(yù)先設(shè)置的IOU閾值畜号,所有高于該閾值(重疊度較高)的候選對(duì)象排除掉(將Score設(shè)為0);
2.1.4)如果所有bounding box要么在輸出列表中允瞧,要么Score=0简软,則該對(duì)象類(lèi)別的NMS完成蛮拔,返回步驟2處理下一種對(duì)象;
3)輸出列表即為預(yù)測(cè)的對(duì)象痹升。
小結(jié)
YOLO以速度見(jiàn)長(zhǎng)建炫,處理速度可以達(dá)到45fps,其快速版本(網(wǎng)絡(luò)較刑鄱辍)甚至可以達(dá)到155fps踱卵。這得益于其識(shí)別和定位合二為一的網(wǎng)絡(luò)設(shè)計(jì),而且這種統(tǒng)一的設(shè)計(jì)也使得訓(xùn)練和預(yù)測(cè)可以端到端的進(jìn)行据过,非常簡(jiǎn)便惋砂。
不足之處是(1)小對(duì)象檢測(cè)效果不太好(尤其是一些聚集在一起的小對(duì)象),(2)對(duì)邊框的預(yù)測(cè)準(zhǔn)確度不是很高绳锅,總體預(yù)測(cè)精度略低于Fast RCNN西饵。主要是因?yàn)榫W(wǎng)格設(shè)置比較稀疏,而且每個(gè)網(wǎng)格只預(yù)測(cè)兩個(gè)邊框鳞芙,另外Pooling層會(huì)丟失一些細(xì)節(jié)信息眷柔,對(duì)定位存在影響。 (3)模型的loss函數(shù)對(duì)待小bounding box和大bounding box是一樣的原朝,而實(shí)際上小bounding box的IOU error的影響是要遠(yuǎn)大于大bounding box 的IOU error影響的驯嘱。
參考:
You Only Look Once: Unified, Real-Time Object Detection.
<機(jī)器愛(ài)學(xué)習(xí)>YOLO v1深入理解