Object Detection : One-stage Detector YOLO
現(xiàn)有的目標(biāo)檢測(cè)器主要分為兩種類(lèi)型:兩階段(two-stage)和單階段(one-stage)。這兩種檢測(cè)器的設(shè)計(jì)思想有很大的不同:兩階段檢測(cè)器主要將檢測(cè)問(wèn)題歸結(jié)為分類(lèi)問(wèn)題(classification),而單階段檢測(cè)器主要是將檢測(cè)問(wèn)題定義為回歸問(wèn)題(regression)。不僅如此,兩種檢測(cè)器在時(shí)間、性能上也有一定的差距。接下來(lái)我將會(huì)沿著單階段的主線(xiàn),根據(jù)時(shí)間順序,進(jìn)一步了解單階段檢測(cè)器的發(fā)展。
YOLO -> DenseBox -> SSD -> YOLO v2 -> Retina -> YOLO v3 -> CornerNet -> CenterNet -> AlignDet
You Only Look Once: Unified, Real-Time Object Detection
論文地址:1506.02640
1. YOLO的優(yōu)缺點(diǎn)(Pros and Cons)
【從摘要(Abstract)和介紹(Introduction)】
- 優(yōu)點(diǎn)
- 速度快(fast):采用回歸思想,無(wú)需產(chǎn)生區(qū)域提議(proposals),是一個(gè)端到端的模型
- 利用全局信息(global):輸入是整張圖片(entire image),而不是圖片其中的一部分(part)
- 泛化能力(generalization):在非自然圖片(natual image)如藝術(shù)作品領(lǐng)域(artwork),檢測(cè)結(jié)果(results)較好
- 缺點(diǎn)
- 準(zhǔn)確率不如兩階段檢測(cè)器(accuracy behind):體現(xiàn)在定位(localization)不夠準(zhǔn)確,小目標(biāo)(small object)檢測(cè)難
- YOLO在檢測(cè)框的預(yù)測(cè)上有較強(qiáng)的空間限制(strong spatial constraints):一個(gè)網(wǎng)格單元預(yù)測(cè)兩個(gè)檢測(cè)框,并且一個(gè)網(wǎng)格單元內(nèi)只能有一種類(lèi)別預(yù)測(cè)。這導(dǎo)致模型缺乏對(duì)相鄰的多個(gè)目標(biāo)檢測(cè)的能力,尤其是一大群小目標(biāo)(small objects that appear in groups)
- YOLO對(duì)新的或者不尋常(new or unusual)的縱橫比、設(shè)置(configurations)的泛化能力較弱:因?yàn)槟P褪菑臄?shù)據(jù)中學(xué)習(xí)如何預(yù)測(cè)檢測(cè)框,有一定的數(shù)據(jù)依賴(lài)性
- 損失函數(shù)的設(shè)計(jì)有缺陷:對(duì)于大檢測(cè)框與小檢測(cè)框的錯(cuò)誤一視同仁:對(duì)于某些小錯(cuò)誤,在小檢測(cè)框會(huì)對(duì)IOU有很大的影響,在大檢測(cè)框上相對(duì)影響小一些。
2. YOLO的設(shè)計(jì)思想(Design)
YOLO 使用全圖特征去預(yù)測(cè)檢測(cè)框(bounding boxes)及其類(lèi)別(classes)。與兩階段檢測(cè)器的區(qū)域提議(region proposals)不同的是,YOLO不預(yù)先產(chǎn)生可能包含目標(biāo)(objects)的區(qū)域(proposals),而是將一張圖片分割成S x S的網(wǎng)格(grid),每個(gè)網(wǎng)格單元(cell)都可能包含目標(biāo),換句話(huà)說(shuō),這些網(wǎng)格單元便是YOLO給出的可能包含目標(biāo)的區(qū)域。對(duì)于每個(gè)網(wǎng)格單元,如果目標(biāo)的中心(center)落在其中,該網(wǎng)格便負(fù)責(zé)對(duì)該目標(biāo)進(jìn)行檢測(cè)。
每個(gè)網(wǎng)格單元負(fù)責(zé)預(yù)測(cè)B個(gè)候選框及其對(duì)應(yīng)的B個(gè)置信度(confidence scores), 此處置信度指網(wǎng)格單元包含目標(biāo)及檢測(cè)框預(yù)測(cè)準(zhǔn)確的置信度(原文鏈接1),定義為Pr(Object)?IOUpredtruthPr(Object)*IOU_{pred}^{truth}Pr(Object)?IOUpredtruth?。
當(dāng)預(yù)測(cè)的檢測(cè)框(predicted boxes)中包含目標(biāo)時(shí),Pr(Object)=1Pr(Object)=1Pr(Object)=1,即置信度等于預(yù)測(cè)檢測(cè)框與真實(shí)標(biāo)注GT(ground truth)之間的IOU(intersection over union);當(dāng)預(yù)測(cè)的檢測(cè)框中不包含目標(biāo)時(shí),Pr(Object)=0Pr(Object)=0Pr(Object)=0,即置信度為0.
原文鏈接1: These confidence scores reflect how confident the model is that the box contains an object and also how accurate it thinks the box is that it predicts.
每個(gè)檢測(cè)框包含五個(gè)預(yù)測(cè)值:x,y,w,h,confidencex, y, w, h, confidencex,y,w,h,confidence。其中(x,y)(x, y)(x,y)是該檢測(cè)框與負(fù)責(zé)它的網(wǎng)格單元邊界的相對(duì)坐標(biāo)(relative coordinates / offset),w,hw, hw,h是該檢測(cè)框與原圖長(zhǎng)寬的相對(duì)值,即x,y,w,hx,y,w,hx,y,w,h都是在(0, 1)。confidenceconfidenceconfidence是上文提到的置信度。
每個(gè)網(wǎng)格單元除了預(yù)測(cè)B個(gè)候選框,還預(yù)測(cè)C個(gè)類(lèi)別條件概率(conditional class probabilities),定義為Pr(Classi∣Object)Pr(Class_i|Object)Pr(Classi?∣Object)。需要注意的是,雖然每個(gè)網(wǎng)格單元預(yù)測(cè)B個(gè)候選框,但是只預(yù)測(cè)一組C個(gè)類(lèi)別的條件概率。
在測(cè)試階段,通過(guò)將類(lèi)別條件概率與檢測(cè)框預(yù)測(cè)的置信度進(jìn)行乘積可以得到每個(gè)檢測(cè)框的類(lèi)別置信度(class-specific confidence scires),此處的置信度指該預(yù)測(cè)是該類(lèi)及檢測(cè)框合適的置信度(原文鏈接2)
原文鏈接2: These scores encode both the probability of that class appearing in the box and how well the predicted box fits the object.
在PASCAL VOC數(shù)據(jù)集上,作者設(shè)置S = 7, B = 2,C = 20,所以最后YOLO輸出的預(yù)測(cè)結(jié)果是 7x7x(2x5+20) = 7x7x30。
2.1 網(wǎng)絡(luò)的設(shè)計(jì)
論文中提出了兩種版本:YOLO (45 FPS)與 Fast YOLO (155 FPS)
- YOLO:24 layers + 2 FC
- Fast YOLO: 9 layers + 2 FC (fewer filters)
除了以上區(qū)別,訓(xùn)練、測(cè)試的所有參數(shù)YOLO和Fast YOLO是一致的。
作者對(duì)模型的訓(xùn)練模式:預(yù)訓(xùn)練(pretrain) + 微調(diào)(finetune)
- 預(yù)訓(xùn)練:取Figure 3中的前20層+1 平均池化(average pooling)+1全連接層(fully connected layer)
- 微調(diào):取預(yù)訓(xùn)練模型的前20層+4層卷積層(convolutional layers)+2 全連接層 (新添加的層是隨機(jī)初始化參數(shù)),有篇研究認(rèn)為這樣可以提升性能(詳見(jiàn)原文鏈接3)
原文鏈接3: Ren etal. show that adding both convolutional and connected layers to pretrained networks can improve performance.
因?yàn)槟繕?biāo)檢測(cè)任務(wù)需要更細(xì)粒度 (fine-grained)的視覺(jué)信息,所以作者將輸入的圖片尺寸從 224x224 增加到448x448。
對(duì)于激活函數(shù)(activation),YOLO最后一層(final layer)使用的是線(xiàn)性激活函數(shù),其他層使用的是Leaky ReLU(leaky rectified linear activation)
?(x)={x,if?x>00.1x,otherwise?\phi(x)=\left\{\begin{array}{ll} {x,} & {\text { if } x>0} \\ {0.1 x,} & {\text { otherwise }} \end{array}\right. ?(x)={x,0.1x,??if?x>0?otherwise??
對(duì)于損失函數(shù)(loss fucntion),YOLO使用易于優(yōu)化的平方和誤差(sum square error, SSE)。不過(guò)需要考慮的是:
- 賦予定位誤差(localization error)和分類(lèi)誤差(classification error)以不同的權(quán)重
- 增加包含目標(biāo)的預(yù)測(cè)檢測(cè)框坐標(biāo)的損失(coordination prediction loss),減少不包含目標(biāo)的預(yù)測(cè)檢測(cè)框置信度的損失:網(wǎng)格單元大多數(shù)不包含目標(biāo),這些單元預(yù)測(cè)的置信度為0,對(duì)模型的學(xué)習(xí)不會(huì)產(chǎn)生太大的幫助,即無(wú)效梯度(原文鏈接4),會(huì)導(dǎo)致模型的不穩(wěn)定(instablity)。
- 大檢測(cè)框(large boxes)與小檢測(cè)框(small boxes)的預(yù)測(cè)損失應(yīng)當(dāng)不一致:在小檢測(cè)框里的小改變(small deviation)應(yīng)當(dāng)比大檢測(cè)框里的小改變更重要(原文鏈接5)
原文鏈接4: Also, in every image many grid cells do not contain any object. This pushes the “confidence” scores of those cells towards zero, often overpowering the gradient from cell that do contain objects. This can lead to model instability, causing training to diverge early on.
原文鏈接5: Our error metric should reflect that small deviations in large boxes matter less than in small boxes. To partially address this we predict the square root of the bounding box width and height instead of the width and height directly.
作者通過(guò)引入兩個(gè)參數(shù)來(lái)解決優(yōu)化時(shí)遇到的前兩個(gè)問(wèn)題:λcoord=5,λnoobj=0.5\lambda_{coord}=5,\lambda_{noobj}=0.5λcoord?=5,λnoobj?=0.5,通過(guò)預(yù)測(cè)檢測(cè)框長(zhǎng)寬的平方根來(lái)進(jìn)一步減少第三個(gè)問(wèn)題對(duì)模型訓(xùn)練的影響 (partially address),即并沒(méi)完全解決這個(gè)問(wèn)題。
回到訓(xùn)練時(shí)預(yù)測(cè)的檢測(cè)框,YOLO規(guī)定每個(gè)網(wǎng)格單元產(chǎn)生的B個(gè)檢測(cè)框中與標(biāo)注(GT)之間的IOU最大的檢測(cè)框,將負(fù)責(zé)該目標(biāo)的檢測(cè)。這樣做的好處是可以使得檢測(cè)框的預(yù)測(cè)更加專(zhuān)業(yè)(specialization),能夠更好的預(yù)測(cè)特定大小(size),特定縱橫比(aspect ratio),特定類(lèi)別(class)的目標(biāo),從而提升召回率(原文鏈接6)。
原文鏈接6: We assign one predictor to be responsible for each object. We assign one predictor to be “responsible” for predicting an object based on which prediction has the highest current IOU with the ground truth. This leads to specialization between the bounding box predictors. Each predictor gets better at predicting certain sizes, aspect ratio, or classes of objects, improving overall recall.
所以,最終優(yōu)化的損失函數(shù)如下:
2.2 訓(xùn)練細(xì)節(jié)
- 數(shù)據(jù)集: Pascal VOC 2007 + 2012 train set && val set
- 迭代周期(epochs): 135 epochs
- 學(xué)習(xí)率(learning rate schedule) : 在第一個(gè)epoch,學(xué)習(xí)率從10?310^{-3}10?3緩緩提升到10?210^{-2}10?2,然后以10?210^{-2}10?2再訓(xùn)練74個(gè)epochs,接著用10?310^{-3}10?3訓(xùn)練30個(gè)epochs,最后用10?410^{-4}10?4訓(xùn)練30個(gè)epochs,一共135個(gè)epochs。一開(kāi)始如果以較高的學(xué)習(xí)率可能會(huì)導(dǎo)致模型因?yàn)椴环€(wěn)定的梯度(unstable gradient)出現(xiàn)偏離(diverges),所以在第一個(gè)epoch設(shè)置了學(xué)習(xí)率的熱身(warm-up)。
- 批大小(batch size):135
- 動(dòng)量(momentum):0.9
- 權(quán)重衰減(weight decay):0.0005
- dropout層放在第一個(gè)全連接層之后,用于避免層間協(xié)同適應(yīng)(co-adaptation)
- 數(shù)據(jù)增強(qiáng)(data augmentation):(1)隨機(jī)尺度(random scales) 和 平移(translation),平移的最大距離是原圖片尺寸的20%;(2)通過(guò)HSV顏色空間(color space)隨機(jī)調(diào)整曝光值(exposure)和飽和度(saturation),最大調(diào)整比例為1.5
2.3 預(yù)測(cè)細(xì)節(jié)
在Pascal VOC上,YOLO對(duì)于一張圖片預(yù)測(cè)98 (7x7x2) 個(gè)檢測(cè)框,并為每個(gè)檢測(cè)框產(chǎn)生一組類(lèi)別概率 (訓(xùn)練中是給每個(gè)網(wǎng)格單元生成一組類(lèi)別概率而不是為每個(gè)檢測(cè)框產(chǎn)生一組)
對(duì)于一些大目標(biāo)(large objects)或者靠近(near)多個(gè)網(wǎng)格單元邊界(border)的目標(biāo)會(huì)被多個(gè)網(wǎng)格單元定位(localize),從而產(chǎn)生重疊的檢測(cè)(multiple detections)。作者采用非極大值抑制(Non-maximal supression, NMS)的方法去解決這個(gè)問(wèn)題,可以提升(adds) 2~3% mAP。
3. 實(shí)驗(yàn)部分
- 與其他實(shí)時(shí)(real-time)、接近實(shí)時(shí)(less than real-time)檢測(cè)器的對(duì)比:
YOLO是當(dāng)時(shí)實(shí)時(shí)檢測(cè)器中性能最好的,甚至Fast YOLO的性能是其他實(shí)時(shí)檢測(cè)器的兩倍。但是與兩階段檢測(cè)器相比,還是有些許性能的差距。
- VOC 2007 錯(cuò)誤分析(error analysis)
論文中定義了五類(lèi)錯(cuò)誤:
Correct: correct class && IOU >.5
Localization: correct class && .1 < IOU < .5
Similar: class is similar, IOU > .1
Other: class is wrong, IOU > .1
Background: IOU < .1 for any object
從下圖不難發(fā)現(xiàn),YOLO在定位上(localization)上遜色于Fast R-CNN,但在假陽(yáng)性(False Positive,FP)樣本上的錯(cuò)誤更少,這意味著YOLO將背景類(lèi)識(shí)別成目標(biāo)的比例要低于Fast R-CNN。
- 結(jié)合Fast R-CNN 和 YOLO
從上文的VOC 2007 錯(cuò)誤分析,不難發(fā)現(xiàn)Fast R-CNN與YOLO可以進(jìn)行優(yōu)勢(shì)互補(bǔ)。分別訓(xùn)練兩個(gè)模型進(jìn)行預(yù)測(cè),對(duì)于二者預(yù)測(cè)相似的檢測(cè)框,根據(jù)YOLO給出的概率(probability)和兩個(gè)檢測(cè)框的交疊(overlap)對(duì)預(yù)測(cè)進(jìn)行改進(jìn)(boost)。也就是將兩個(gè)模型的結(jié)果進(jìn)行融合(combination),在速度上并沒(méi)有什么增益。
- Pascal VOC 2012的結(jié)果
- 泛化性:藝術(shù)作品中人物檢測(cè)
藝術(shù)作品(artwork)與自然圖片(natural image)在像素層面上(pixel level)上有很大的不同,但在目標(biāo)的大小(size)和形狀(shape)方面相似,這也是YOLO為何能做出預(yù)測(cè)的可能解釋。
4. 總結(jié)
YOLO是非常經(jīng)典的單階段檢測(cè)器,首先它采用回歸思想實(shí)現(xiàn)端到端訓(xùn)練的目標(biāo)檢測(cè)器,大大減少了模型的訓(xùn)練時(shí)間;其次,通過(guò)全圖的特征去預(yù)測(cè)檢測(cè)框和類(lèi)別,而不去產(chǎn)生區(qū)域提議,大大提升了模型的檢測(cè)速度。
下面推薦一篇解析YOLO不錯(cuò)的文章:
目標(biāo)檢測(cè)|YOLO原理與實(shí)現(xiàn)
總結(jié)
以上是生活随笔為你收集整理的Object Detection : One-stage Detector YOLO的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Scancode到Keycode的映射
- 下一篇: 栅格布局一般怎么用_Bootstrap每