1 YOLO創(chuàng)新點(diǎn): 端到端訓(xùn)練及推斷 + 改革區(qū)域建議框式目標(biāo)檢測(cè)框架 + 實(shí)時(shí)目標(biāo)檢測(cè) 1.1 創(chuàng)新點(diǎn)(1) 改革了區(qū)域建議框式檢測(cè)框架: RCNN系列均需要生成建議框,在建議框上進(jìn)行分類與回歸,但建議框之間有重疊,這會(huì)帶來(lái)很多重復(fù)工作。YOLO將全圖劃分為SXS的格子,每個(gè)格子負(fù)責(zé)中心在該格子的目標(biāo)檢測(cè),采用一次性預(yù)測(cè)所有格子所含目標(biāo)的bbox、定位置信度以及所有類別概率向量來(lái)將問(wèn)題一次性解決(one-shot)。 1.2 Inference過(guò)程YOLO網(wǎng)絡(luò)結(jié)構(gòu)由24個(gè)卷積層與2個(gè)全連接層構(gòu)成,網(wǎng)絡(luò)入口為448x448(v2為416x416),圖片進(jìn)入網(wǎng)絡(luò)先經(jīng)過(guò)resize,網(wǎng)絡(luò)的輸出結(jié)果為一個(gè)張量,維度為: 其中,S為劃分網(wǎng)格數(shù),B為每個(gè)網(wǎng)格負(fù)責(zé)目標(biāo)個(gè)數(shù),C為類別個(gè)數(shù)。該表達(dá)式含義為:
(1) 每個(gè)小格會(huì)對(duì)應(yīng)B個(gè)邊界框,邊界框的寬高范圍為全圖,表示以該小格為中心尋找物體的邊界框位置。 (2) 每個(gè)邊界框?qū)?yīng)一個(gè)分值,代表該處是否有物體及定位準(zhǔn)確度:
(3) 每個(gè)小格會(huì)對(duì)應(yīng)C個(gè)概率值,找出最大概率對(duì)應(yīng)的類別,并認(rèn)為小格中包含該物體或者該物體的一部分。 1.3 分格思想實(shí)現(xiàn)方法一直困惑的問(wèn)題是:分格思想在代碼實(shí)現(xiàn)中究竟如何體現(xiàn)的呢?
最后一個(gè)全連接層輸出特征個(gè)數(shù)為1715,而detction層將該1715的特征向量整個(gè)為一個(gè),的張量。其中,即為原圖中的小格。為什么side位置的輸出會(huì)對(duì)應(yīng)到原圖中小格的位置呢?因?yàn)橛?xùn)練過(guò)程中會(huì)使用對(duì)應(yīng)位置的GT監(jiān)督網(wǎng)絡(luò)收斂,測(cè)試過(guò)程中每個(gè)小格自然對(duì)應(yīng)原圖小格上目標(biāo)的檢測(cè)。 預(yù)測(cè)處理過(guò)程數(shù)據(jù)的歸一化在訓(xùn)練yolo前需要先準(zhǔn)備數(shù)據(jù),其中有一步為:
中有個(gè)convert函數(shù)
GT邊界框轉(zhuǎn)換為(xc, yc, w, h)的表示方式,wc, yc, w, h被歸一化到0~1之間。 1.4 YOLO缺點(diǎn)1) 對(duì)小物體及鄰近特征檢測(cè)效果差:當(dāng)一個(gè)小格中出現(xiàn)多于兩個(gè)小物體或者一個(gè)小格中出現(xiàn)多個(gè)不同物體時(shí)效果欠佳。原因:B表示每個(gè)小格預(yù)測(cè)邊界框數(shù),而YOLO默認(rèn)同格子里所有邊界框?yàn)橥N類物體。 (2) 圖片進(jìn)入網(wǎng)絡(luò)前會(huì)先進(jìn)行resize為448 x 448,降低檢測(cè)速度(it takes about 10ms in 25ms),如果直接訓(xùn)練對(duì)應(yīng)尺寸會(huì)有加速空間。 (3) 基礎(chǔ)網(wǎng)絡(luò)計(jì)算量較大,yolov2使用darknet-19進(jìn)行加速。 1.5 實(shí)驗(yàn)結(jié)論(1) 速度更快(實(shí)時(shí)):yolo(24 convs) -> 45 fps,fast_yolo(9 convs) -> 150 fps (2) 全圖為范圍進(jìn)行檢測(cè)(而非在建議框內(nèi)檢測(cè)),帶來(lái)更大的context信息,使得相對(duì)于Fast-RCNN誤檢率更低,但定位精度欠佳。 1.6 YOLO損失函數(shù)Yolo損失函數(shù)的理解學(xué)習(xí)于潛伏在代碼中 ![]()
(1) 整個(gè)損失函數(shù)針對(duì)邊界框損失(圖中1, 2, 3部分)與格子(4部分)主體進(jìn)行討論。 (2) 部分1為邊界框位置與大小的損失函數(shù),式中對(duì)寬高都進(jìn)行開(kāi)根是為了使用大小差別比較大的邊界框差別減小。例如,一個(gè)同樣將一個(gè)100x100的目標(biāo)與一個(gè)10x10的目標(biāo)都預(yù)測(cè)大了10個(gè)像素,預(yù)測(cè)框?yàn)?10 x 110與20 x 20。顯然第一種情況我們還可以失道接受,但第二種情況相當(dāng)于把邊界框預(yù)測(cè)大了一倍,但如果不使用根號(hào)函數(shù),那么損失相同,都為200。但把寬高都增加根號(hào)時(shí): 顯然,對(duì)小框預(yù)測(cè)偏差10個(gè)像素帶來(lái)了更高的損失。通過(guò)增加根號(hào),使得預(yù)測(cè)相同偏差與更小的框產(chǎn)生更大的損失。但根據(jù)YOLOv2的實(shí)驗(yàn)證明,還有更好的方法解決這個(gè)問(wèn)題。
(3) 若有物體落入邊界框中,則計(jì)算預(yù)測(cè)邊界框含有物體的置信度和真實(shí)物體與邊界框IoU的損失,我們希望兩差值越小損失越低。 (4) 若沒(méi)有任何物體中心落入邊界框中,則為0,此時(shí)我們希望預(yù)測(cè)含有物體的置信度越小越好。然而,大部分邊界框都沒(méi)有物體,積少成多,造成loss的第3部分與第4部分的不平衡,因此,作才在loss的三部分增加權(quán)重 。 (5) 對(duì)于每個(gè)格子而言,作者設(shè)計(jì)只能包含同種物體。若格子中包含物體,我們希望希望預(yù)測(cè)正確的類別的概率越接近于1越好,而錯(cuò)誤類別的概率越接近于0越好。loss第4部分中,若中c為正確類別,則值為1,若非正確類別,則值為0。 2 YOLOv2yolov1基礎(chǔ)上的延續(xù),新的基礎(chǔ)網(wǎng)絡(luò),多尺度訓(xùn)練,全卷積網(wǎng)絡(luò),F(xiàn)aster-RCNN的anchor機(jī)制,更多的訓(xùn)練技巧等等改進(jìn)使得yolov2速度與精度都大幅提升,改進(jìn)效果如下圖: 2.1 BatchNormBatchnorm是2015年以后普遍比較流行的訓(xùn)練技巧,在每一層之后加入BN層可以將整個(gè)batch數(shù)據(jù)歸一化到均值為0,方差為1的空間中,即將所有層數(shù)據(jù)規(guī)范化,防止梯度消失與梯度爆炸,如: 加入BN層訓(xùn)練之后效果就是網(wǎng)絡(luò)收斂更快,并且效果更好。YOLOv2在加入BN層之后mAP上升2%。 關(guān)于BN作用
2.2 預(yù)訓(xùn)練尺寸yolov1也在Image-Net預(yù)訓(xùn)練模型上進(jìn)行fine-tune,但是預(yù)訓(xùn)練時(shí)網(wǎng)絡(luò)入口為224 x 224,而fine-tune時(shí)為448 x 448,這會(huì)帶來(lái)預(yù)訓(xùn)練網(wǎng)絡(luò)與實(shí)際訓(xùn)練網(wǎng)絡(luò)識(shí)別圖像尺寸的不兼容。yolov2直接使用448 x 448的網(wǎng)絡(luò)入口進(jìn)行預(yù)訓(xùn)練,然后在檢測(cè)任務(wù)上進(jìn)行訓(xùn)練,效果得到3.7%的提升。 2.3 更細(xì)網(wǎng)絡(luò)劃分yolov2為了提升小物體檢測(cè)效果,減少網(wǎng)絡(luò)中pooling層數(shù)目,使最終特征圖尺寸更大,如輸入為416 x 416,則輸出為13 x 13 x 125,其中13 x 13為最終特征圖,即原圖分格的個(gè)數(shù),125為每個(gè)格子中的邊界框構(gòu)成(5 x (classes + 5))。需要注意的是,特征圖尺寸取決于原圖尺寸,但特征圖尺寸必須為奇數(shù),以此保存中間有一個(gè)位置能看到原圖中心處的目標(biāo)。 2.4 全卷積網(wǎng)絡(luò)為了使網(wǎng)絡(luò)能夠接受多種尺寸的輸入圖像,yolov2除去了v1網(wǎng)絡(luò)結(jié)構(gòu)中的全連層,因?yàn)槿B接層必須要求輸入輸出固定長(zhǎng)度特征向量。將整個(gè)網(wǎng)絡(luò)變成一個(gè)全卷積網(wǎng)絡(luò),能夠?qū)Χ喾N尺寸輸入進(jìn)行檢測(cè)。同時(shí),全卷積網(wǎng)絡(luò)相對(duì)于全連接層能夠更好的保留目標(biāo)的空間位置信息。 2.5 新基礎(chǔ)網(wǎng)絡(luò)下圖為不同基礎(chǔ)網(wǎng)絡(luò)結(jié)構(gòu)做分類任務(wù)所對(duì)就的計(jì)算量,橫坐標(biāo)為做一次前向分類任務(wù)所需要的操作數(shù)目??梢钥闯鲎髡咚褂玫膁arknet-19作為基礎(chǔ)預(yù)訓(xùn)練網(wǎng)絡(luò)(共19個(gè)卷積層),能在保持高精度的情況下快速運(yùn)算。而SSD使用的VGG-16作為基礎(chǔ)網(wǎng)絡(luò),VGG-16雖然精度與darknet-19相當(dāng),但運(yùn)算速度慢。關(guān)于darknet-19基礎(chǔ)網(wǎng)絡(luò)速度 2.6 anchor機(jī)制yolov2為了提高精度與召回率,使用Faster-RCNN中的anchor機(jī)制。以下為我對(duì)anchor機(jī)制使用的理解:在每個(gè)網(wǎng)格設(shè)置k個(gè)參考anchor,訓(xùn)練以GT anchor作為基準(zhǔn)計(jì)算分類與回歸損失。測(cè)試時(shí)直接在每個(gè)格子上預(yù)測(cè)k個(gè)anchor box,每個(gè)anchor box為相對(duì)于參考anchor的offset與w,h的refine。這樣把原來(lái)每個(gè)格子中邊界框位置的全圖回歸(yolov1)轉(zhuǎn)換為對(duì)參考anchor位置的精修(yolov2)。 2.7 新邊界框預(yù)測(cè)方式這部分沒(méi)有看太懂,先占個(gè)坑,等以后明白了再來(lái)補(bǔ),感覺(jué)應(yīng)該是在彌補(bǔ)大小邊界框回歸誤差損失的問(wèn)題吧。這里發(fā)現(xiàn)有篇博文對(duì)這部分講得挺仔細(xì)的。 2.8 殘差層融合低級(jí)特征為了使用網(wǎng)絡(luò)能夠更好檢測(cè)小物體,作者使用了resnet跳級(jí)層結(jié)構(gòu),網(wǎng)絡(luò)末端的高級(jí)特征層與前一層或者前幾層的低級(jí)細(xì)粒度特征結(jié)合起來(lái),增加網(wǎng)絡(luò)對(duì)小物體的檢測(cè)效果,使用該方法能夠?qū)AP提高1%。 2.9 多尺寸訓(xùn)練yolov2網(wǎng)絡(luò)結(jié)構(gòu)為全卷積網(wǎng)絡(luò)FCN,可以適于不同尺寸圖片作為輸入,但要滿足模型在測(cè)試時(shí)能夠?qū)Χ喑叨容斎雸D像都有很好效果,作者訓(xùn)練過(guò)程中每10個(gè)epoch都會(huì)對(duì)網(wǎng)絡(luò)進(jìn)行新的輸入尺寸的訓(xùn)練。需要注意的是,因?yàn)槿矸e網(wǎng)絡(luò)總共對(duì)輸入圖像進(jìn)行了5次下采樣(步長(zhǎng)為2的卷積或者池化層), 所以最終特征圖為原圖的1/32。所以在訓(xùn)練或者測(cè)試時(shí),網(wǎng)絡(luò)輸入必須為32的位數(shù)。并且最終特征圖尺寸即為原圖劃分網(wǎng)絡(luò)的方式。 |
|
來(lái)自: 學(xué)海無(wú)涯GL > 《深度學(xué)習(xí)》