目標(biāo)檢測(cè)YOLO系列——YOLO v2

YOLO v1:You Only Look Once: Unified, Real-Time Object Detection
YOLO v2:YOLO9000:Better,F(xiàn)aster,Stronger
YOLO v3:YOLOv3: An Incremental Improvement

在yolo v1的基礎(chǔ)上作者提出了一種聯(lián)合訓(xùn)練的方法將目標(biāo)檢測(cè)數(shù)據(jù)集與分類數(shù)據(jù)集結(jié)合,使得YOLOv2網(wǎng)絡(luò)能夠識(shí)別9000種物體,升級(jí)為YOLO9000。

YOLOv2改進(jìn)

1.Better

1.1 批規(guī)范化(Batch Normalization)

Batch Normalization的作用是提高了網(wǎng)絡(luò)模型的魯棒性,緩解了Covariant Shift問(wèn)題,有一定的正則化(regularization)作用,在這里也不例外。通過(guò)在YOLO所有的卷積層中加入Batch Normalization,可以使得mAP提高2%,并且dropout的部分也可以丟掉。

1.2 高分辨率分類器(High Resolution Classifier)

從AlexNet開(kāi)始,大多數(shù)的分類器都在分辨率小于256 \times 256的圖像上執(zhí)行分類。YOLO一代在訓(xùn)練分類網(wǎng)絡(luò)的時(shí)候用的是224\times224分辨率,檢測(cè)網(wǎng)絡(luò)的時(shí)候用的是448\times448分辨率,這就意味著網(wǎng)絡(luò)需要同時(shí)切換到目標(biāo)檢測(cè)并且適應(yīng)新的分辨率。在YOLO二代中,直接使用448\times448的分辨率微調(diào)(fine tune)了網(wǎng)絡(luò),訓(xùn)練了10個(gè)epoch??梢允沟胢AP提高大概4%。

1.3 使用Anchor Box

原來(lái)的YOLO是利用全連接層直接預(yù)測(cè)bounding box的坐標(biāo),而YOLOv2借鑒了Faster R-CNN的思想,引入anchor。首先將原網(wǎng)絡(luò)的全連接層和最后一個(gè)pooling層去掉,使得最后的卷積層可以有更高分辨率的特征;然后縮減網(wǎng)絡(luò),用416\times416大小的輸入代替原來(lái)448\times448。這樣做的原因在于希望得到的特征圖都有奇數(shù)大小的寬和高,奇數(shù)大小的寬和高會(huì)使得每個(gè)特征圖在劃分cell的時(shí)候就只有一個(gè)center cell(比如可以劃分成7\times79\times9個(gè)cell,center cell只有一個(gè),如果劃分成8\times810\times10的,center cell就有4個(gè))。為什么希望只有一個(gè)center cell呢?因?yàn)榇蟮膐bject一般會(huì)占據(jù)圖像的中心,所以希望用一個(gè)center cell去預(yù)測(cè),而不是4個(gè)center cell去預(yù)測(cè)。網(wǎng)絡(luò)最終將416\times416的輸入變成13\times13大小的feature map輸出,也就是縮小比例為32。

原來(lái)的YOLO算法將輸入圖像分成7\times7的網(wǎng)格,每個(gè)網(wǎng)格預(yù)測(cè)兩個(gè)bounding box,因此一共只有98個(gè)box,但是在YOLOv2通過(guò)引入anchor boxes,預(yù)測(cè)的box數(shù)量超過(guò)了1千(以輸出feature map大小為13\times13為例,每個(gè)grid cell有9個(gè)anchor box的話,一共就是13\times13\times9=1521個(gè),當(dāng)然由后面第4點(diǎn)可知,最終每個(gè)grid cell選擇5個(gè)anchor box)。在Faster RCNN在輸入大小為1000\times600時(shí)的boxes數(shù)量大概是6000,在SSD300中boxes數(shù)量是8732。顯然增加box數(shù)量是為了提高object的定位準(zhǔn)確率。實(shí)驗(yàn)證明:雖然加入anchor使得MAP值下降了一點(diǎn)(69.5降到69.2),但是提高了recall(81%提高到88%)。

1.4 通過(guò)K-means來(lái)學(xué)習(xí)出anchor box

在Faster R-CNN中anchor box的大小和比例是按經(jīng)驗(yàn)設(shè)定的,然后網(wǎng)絡(luò)會(huì)在訓(xùn)練過(guò)程中調(diào)整anchor box的尺寸。但是如果一開(kāi)始就能選擇到合適尺寸的anchor box,那肯定可以幫助網(wǎng)絡(luò)越好地預(yù)測(cè)detection。所以作者采用k-means的方式對(duì)訓(xùn)練集的bounding boxes做聚類,試圖找到合適的anchor box。如果采用標(biāo)準(zhǔn)的k-means(即用歐式距離來(lái)衡量差異),在box的尺寸比較大的時(shí)候其誤差也更大,而我們希望的是誤差和box的尺寸沒(méi)有太大關(guān)系。所以通過(guò)IOU定義了如下的距離函數(shù),使得誤差和box的大小無(wú)關(guān),K-means主要用與預(yù)測(cè)anchor box的長(zhǎng)跟寬。:

d(box, centroids) = 1 – IOU(box, centroids)

聚類結(jié)果如圖,左圖代表Avg IOU與聚類數(shù)目K的關(guān)系,在權(quán)衡Avg IOU和模型復(fù)雜度以后,作者選擇了K=5。右圖代表了VOC和COCO數(shù)據(jù)集的box的聚類結(jié)果??梢钥闯鼍垲愃玫降腶nchor box與手動(dòng)選擇相比,更傾向于選擇高瘦的anchor box。

從表1可以看出,使用聚類算法得到的anchor box在其數(shù)量為5時(shí)就可以得到與手動(dòng)選擇的anchor box數(shù)量為9時(shí)幾乎相同的Avg IOU,而在聚類算法得到anchor box數(shù)量為9時(shí),它的Avg IOU是優(yōu)于手動(dòng)選擇的(67.2> 60.9)。這也證明了聚類算法的得到的anchor box更好。

image

1.5 Directed Location Prediction

用Anchor Box的方法,會(huì)讓model變得不穩(wěn)定,尤其是在最開(kāi)始的幾次迭代的時(shí)候。而不穩(wěn)定的因素主要來(lái)自于預(yù)測(cè)bounding box坐標(biāo)(x, y)的時(shí)候。理解它的產(chǎn)生原因,我們需要先看一下faster RCNN的預(yù)測(cè)檢測(cè)框的方法。

如下圖所示,在faster RCNN中,box主要分為Ground True Box(人工標(biāo)定的真正的檢測(cè)框),Anchor Box和網(wǎng)絡(luò)預(yù)測(cè)出的Predict Box。

image

faster RCNN預(yù)測(cè)的是Ground True/Predict Box與Anchor Box的偏移量,因此有如下公式:

x,y,w,h分別表示box的中心坐標(biāo)和寬高,x,x_a,x?分別表示 predicted box, anchor box和ground truth的x坐標(biāo)值 (y,w,h同理)。t_i表示predict box相對(duì)于anchor box的偏移,t_i^*表示ground true box相對(duì)于anchor box的偏移,學(xué)習(xí)目標(biāo)自然就是讓前者接近后者的值。

對(duì)應(yīng)的,關(guān)于檢測(cè)框中心點(diǎn)坐標(biāo)則通過(guò)如下公式計(jì)算:(!!感覺(jué)應(yīng)該是+號(hào),才符合faster rcnn)

這樣會(huì)帶來(lái)一個(gè)問(wèn)題,即當(dāng)t_x/t_y較大時(shí)(>=1),檢測(cè)框可能跳到圖像上的任意位置。因此YOLO的作者在此基礎(chǔ)上做出了如下改進(jìn)來(lái)限制檢測(cè)框的跳動(dòng):

image

在這里作者并沒(méi)有采用直接預(yù)測(cè)offset的方法,還是沿用了YOLO算法中直接預(yù)測(cè)相對(duì)于grid cell的坐標(biāo)位置的方式。前面提到網(wǎng)絡(luò)在最后一個(gè)卷積層輸出13\times13大小的feature map,然后每個(gè)cell預(yù)測(cè)5個(gè)bounding box,然后每個(gè)bounding box預(yù)測(cè)5個(gè)值:t_x,t_y,t_w,t_h和t_o(這里的t_o類似YOLOv1中的confidence)。看上圖,t_x和t_y經(jīng)過(guò)sigmoid函數(shù)處理后范圍在0到1之間,這樣的歸一化處理也使得模型訓(xùn)練更加穩(wěn)定;c_x和c_y表示一個(gè)cell和圖像左上角的橫縱距離;p_w和p_h表示bounding box的寬高,這樣b_x和b_y就是c_x和c_y這個(gè)cell附近的anchor來(lái)預(yù)測(cè)t_x和t_y得到的結(jié)果。黑色虛線框是bounding box,藍(lán)色矩形框就是預(yù)測(cè)的結(jié)果。

其中b_x,b_y,b_w,b_h,σ 分別代表predict box的中心坐標(biāo)x,y和它的長(zhǎng)和寬,還有目標(biāo)為物體b的概率。

image

1.6 細(xì)分類特征(Fine-Grained Features)

Faster F-CNN、SSD都使用不同尺寸的Feature Map來(lái)取得不同范圍的分辨率,而YOLOv2采取了不同的方法,YOLOv2加上了一個(gè)跳躍層(Passthrough Layer)來(lái)獲取之前的26*26分辨率的層的特征。這個(gè)Passthrough layer能夠把高分辨率特征與低分辨率特征連結(jié)(concatenate)起來(lái),這種方式看起來(lái)與ResNet很像,但是略有不同,因?yàn)镽esNet采用的是summation,而YOLOv2的Fine-Grained Features采用的是concatenate。

1.7 多尺寸訓(xùn)練(Multi-ScaleTraining)

作者希望YOLO v2能魯棒地運(yùn)行于不同尺寸的圖片之上,所以把這一想法用于訓(xùn)練model中。 區(qū)別于之前的補(bǔ)全圖片尺寸的方法,YOLO v2每迭代幾次都會(huì)改變網(wǎng)絡(luò)參數(shù)。每10個(gè)Batch,網(wǎng)絡(luò)會(huì)隨機(jī)地選擇一個(gè)新的圖片尺寸,由于使用了下采樣參數(shù)是32,所以不同的尺寸大小也選擇為32的倍數(shù){320,352…..608},最小320\times320,最大608\times608,網(wǎng)絡(luò)會(huì)自動(dòng)改變尺寸,并繼續(xù)訓(xùn)練的過(guò)程。 這一方法使得網(wǎng)絡(luò)在輸入圖片尺寸比較小的時(shí)候跑的比較快,輸入圖片尺寸比較大的時(shí)候精度高,下圖為YOLOv2和其他的目標(biāo)檢測(cè)網(wǎng)絡(luò)的對(duì)比。

image

2.Faster

2.1 網(wǎng)絡(luò)結(jié)構(gòu)

YOLO使用的是GoogleNet架構(gòu),比VGG-16快,YOLO完成一次前向過(guò)程只用8.52 billion 運(yùn)算,而VGG-16要30.69billion,但是YOLO精度稍低于VGG-16。因此作者在YOLOv2中設(shè)計(jì)了一種新的網(wǎng)絡(luò)結(jié)構(gòu)叫Darknet-19。網(wǎng)絡(luò)結(jié)構(gòu)如表格所示,與VGG相似,大量使用3\times3,1\times1的卷積核,并在每次Pooling之后增加一倍Channels的數(shù)量。YOLO v2中還用到了Batch Normalization技術(shù)。 最終的model–Darknet19,有19個(gè)卷積層和5個(gè)maxpooling層,處理一張圖片只需要5.58 billion次運(yùn)算。

image

3.Stronger

3.1 Hierarchical classification

WordNet是一種有向圖,這是因?yàn)檎Z(yǔ)言模型很復(fù)雜,有很多同義詞,所以不可以用樹(shù)狀結(jié)構(gòu)表示。(例如,在訓(xùn)練的過(guò)程中,當(dāng)網(wǎng)絡(luò)遇到一個(gè)來(lái)自檢測(cè)數(shù)據(jù)集的圖片與標(biāo)記信息,那么就把這些數(shù)據(jù)用完整的YOLO v2 loss功能反向傳播這個(gè)圖片。當(dāng)網(wǎng)絡(luò)遇到一個(gè)來(lái)自分類數(shù)據(jù)集的圖片和分類標(biāo)記信息,只用整個(gè)結(jié)構(gòu)中分類部分的loss功能反向傳播這個(gè)圖片。 但是檢測(cè)數(shù)據(jù)集只有粗粒度的標(biāo)記信息,像“貓“、“ 狗”之類,而分類數(shù)據(jù)集的標(biāo)簽信息則更細(xì)粒度,更豐富。比如狗這一類就包括”哈士奇“”牛頭?!啊苯鹈贰暗鹊?。所以如果想同時(shí)在監(jiān)測(cè)數(shù)據(jù)集與分類數(shù)據(jù)集上進(jìn)行訓(xùn)練,那么就要用一種一致性的方法融合這些標(biāo)簽信息。 )假設(shè)一個(gè)圖片可以有多個(gè)分類信息,并假定分類信息必須是相互獨(dú)立的規(guī)則可以被忽略。但是分類模型中不需要考慮所有的同義詞,因此作者在這里從WordNet結(jié)構(gòu)中提取出包含ImageNet類別的多層級(jí)WordTree結(jié)構(gòu)。

作者希望根據(jù)ImageNet中包含的概念來(lái)建立一個(gè)分層樹(shù),為了建立這個(gè)分層樹(shù),首先檢查ImagenNet中出現(xiàn)的名詞,再在WordNet中找到這些名詞,再找到這些名詞到達(dá)他們根節(jié)點(diǎn)的路徑(在這里設(shè)為所有的根節(jié)點(diǎn)為實(shí)體對(duì)象(physical object))。在WordNet中,大多數(shù)同義詞只有一個(gè)路徑,所以首先把這條路徑中的詞全部都加到分層樹(shù)中。接著迭代地檢查剩下的名詞,并盡可能少的把他們添加到分層樹(shù)上,添加的原則是取最短路徑加入到樹(shù)中。

為了計(jì)算某一結(jié)點(diǎn)的絕對(duì)概率,只需要對(duì)這一結(jié)點(diǎn)到根節(jié)點(diǎn)的整條路徑的所有概率進(jìn)行相乘。所以比如你想知道一個(gè)圖片是否是Norfolk terrier的概率,則進(jìn)行如下計(jì)算:

3.2 Dataset combination with WordTree

為了驗(yàn)證這一個(gè)方法,在WordTree上訓(xùn)練Darknet19的model,使用1000類的ImageNet進(jìn)行訓(xùn)練,為了建立WordtTree 1K,把所有中間詞匯加入到WordTree上,把標(biāo)簽空間從1000擴(kuò)大到了1369。在訓(xùn)練過(guò)程中,如果有一個(gè)圖片的標(biāo)簽是”Norfolk terrier“,那么這個(gè)圖片還會(huì)獲得”狗“(dog)以及“哺乳動(dòng)物”(mammal)等標(biāo)簽??傊F(xiàn)在一張圖片是多標(biāo)記的,標(biāo)記之間不需要相互獨(dú)立。

這里解釋一下標(biāo)簽是怎么擴(kuò)充的,比如一張圖片是“Norfolk terrior”,那么根據(jù)WordTree的最短路徑,這張圖片還會(huì)獲得“dog”和“mammal”的標(biāo)簽,即現(xiàn)在的標(biāo)簽向量元素為1的位置不唯一。比如原數(shù)據(jù)標(biāo)簽為(0,0,0,0,0,1,0,0,0,0),那么擴(kuò)充后的數(shù)據(jù)標(biāo)簽則為(0,0,0,0,0,1,0,0,0,0,1,1)。之前的ImageNet分類是使用一個(gè)大的softmax進(jìn)行分類。而現(xiàn)在,WordTree只需要對(duì)同一級(jí)別下的詞匯類別進(jìn)行softmax分類。如圖所示:

image

如Figure5所示,之前的ImageNet分類是使用一個(gè)大softmax進(jìn)行分類。而現(xiàn)在,WordTree只需要對(duì)同一概念下的同義詞進(jìn)行softmax分類。 使用相同的訓(xùn)練參數(shù),這種分層結(jié)構(gòu)的Darknet19達(dá)到71.9%top-1精度和90.4%top-5精確度,精度只有微小的下降。 這種方法的好處:在對(duì)未知或者新的物體進(jìn)行分類時(shí),性能降低的很優(yōu)雅(gracefully)。比如看到一個(gè)狗的照片,但不知道是哪種種類的狗,那么就高置信度(confidence)預(yù)測(cè)是”狗“,而其他狗的種類的同義詞如”哈士奇“”牛頭?!啊苯鹈暗冗@些則低置信度。

3.3 Joint classification and detection

在使用WordTree混合了COCO與ImageNet數(shù)據(jù)集后,混合數(shù)據(jù)集對(duì)應(yīng)的WordTree包含9418類。由于ImageNet數(shù)據(jù)集跟COCO比太大了,產(chǎn)生了樣本傾斜的問(wèn)題,因此作者將COCO過(guò)采樣,使得COCO與ImageNet的比例為1: 4。
YOLO9000的訓(xùn)練基于YOLO v2的構(gòu)架,但是使用3“priors”來(lái)限制輸出的大小。當(dāng)網(wǎng)絡(luò)遇到檢測(cè)數(shù)據(jù)集中的圖片時(shí)則正常地反方向傳播,當(dāng)遇到分類數(shù)據(jù)集圖片的時(shí)候,只使用分類的loss功能進(jìn)行反向傳播。

參考鏈接
https://cloud.tencent.com/developer/article/1064556
https://blog.csdn.net/hysteric314/article/details/53909408
https://blog.csdn.net/Chunfengyanyulove/article/details/80860870
https://blog.csdn.net/zhazhiqiang/article/details/82669863

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容