參考博文:http://www.mamicode.com/info-detail-2314392.html 和 https://www.zybuluo.com/rianusr/note/1417734
引言:如今基於深度學習的目標檢測已經逐漸成為自動駕駛,視頻監控,機械加工,智能機器人等領域的核心技術,而現存的大多數精度高的目標檢測算法,速度較慢,無法適應工業界對於目標檢測實時性的需求,這時YOLO算法橫空出世,以近乎極致的速度和出色的准確度贏得了大家的一致好評。基於此,我們選擇YOLO算法來實現目標檢測。YOLO算法目前已經經過了3個版本的迭代,在速度和精確度上獲得了巨大的提升,我們將從YOLOV1開始講起,直至目前最新的版本YOLOV3。
一、YOLO V1 一步檢測的開山之作
相對於傳統的分類問題,目標檢測顯然更符合現實需求,因為往往現實中不可能在某一個場景只有一個物體,因此目標檢測的需求變得更為復雜,不僅僅要求算法能夠檢驗出是什么物體,還需要確定這個物體在圖片哪里。在這一過程中,目標檢測經歷了一個高度的符合人類的直覺的過程。既需要識別出目標的位置,將圖片划分成小圖片扔進算法中去,當算法認為某物體在這個小區域上之時,那么檢測完成。那我們就認為這個物體在這個小圖片上了。而這個思路,正是比較早期的目標檢測思路,比如R-CNN。后來的Fast R-CNN,Faster R-CNN[16]雖有改進,比如不再是將圖片一塊塊的傳進CNN提取特征,而是整體放進CNN提取特征圖后,再做進一步處理,但依舊是整體流程分為 ‘區域提取’和‘目標分類’兩部分(two-stage),這樣做的一個特點是雖然確保了精度,但速度非常慢,於是以YOLO(You only look once)為主要代表的這種一步到位(one-stage)即端到端的目標檢測算法應運而生了。
1.1 YOLO v1基本思想
YOLO v1的核心思想在於將目標檢測作為回歸問題解決 ,YOLO v1首先會把原始圖片放縮到448×448的尺寸,放縮到這個尺寸是為了后面整除來的方便。然后將圖片划分成SxS個區域,注意這個區域的概念不同於上文提及將圖片划分成N個區域扔進算法的區域不同。上文提及的區域是將圖片進行剪裁,或者說把圖片的某個局部的像素輸入算法中,而這里的划分區域,只的是邏輯上的划分。
如果一個對象的中心落在某個單元格上,那么這個單元格負責預測這個物體。每個單元格需要預測B個邊界框(bbox)值(bbox值包括坐標和寬高),同時為每個bbox值預測一個置信度(confidence scores)。
此后以每個單元格為單位進行預測分析。
這個置信度並不只是該邊界框是待檢測目標的概率,而是該邊界框是待檢測目標的概率乘上該邊界框和真實位置的IoU(框之間的交集除以並集)的積。通過乘上這個交並比,反映出該邊界框預測位置的精度。如下式所示:
每個邊界框對應於5個輸出,分別是x,y,w,h和置信度。其中x,y代表邊界框的中心離開其所在網格單元格邊界的偏移。w,h代表邊界框真實寬高相對於整幅圖像的比例。x,y,w,h這幾個參數都已經被限制到了區間[0,1]上。除此以外,每個單元格還產生C個條件概率,。注意,我們不管B的大小,每個單元格只產生一組這樣的概率。
圖一:YOLO預測圖示
在test的非極大值抑制階段,對於每個邊界框,按照下式衡量該框是否應該予以保留。
這就是每個單元格的個體分類置信度得分(class-specific confidence scores),這即包含了預測的類別信息,也包含了對bbox值的准確度。 我們可以設置一個閾值,把低分的class-specific confidence scores濾掉,剩下的留給給非極大值抑制,得到最終的標定框。
在PASCAL VOC進行測試時,使用S=7, B=2。由於共有20類,故C=20。所以,網絡輸出大小為7×7×30
1.2網絡模型結構
圖二:網絡框架
該網絡結構包括 24 個卷積層,最后接 2 個全連接層。Draknet[13]網絡借鑒 GoogleNet 的思想,在每個1x1的卷積層之后再接一個3?3的卷積層的結構替代 GoogleNet 的Inception結構。論文中還提到了更快版本的 Yolo,只有 9 個卷積層,其他則保持一致。
1.3損失函數
YOLO v1全部使用了均方差(mean squared error)作為損失(loss)函數。由三部分組成:坐標誤差、IOU誤差和分類誤差。
考慮到每種loss的貢獻率,YOLO v1給坐標誤差(coordErr)設置權重λcoord=5。在計算IoU誤差時,包含物體的格子與不包含物體的格子,二者的IOU誤差對網絡loss的貢獻值是不同的。若采用相同的權值,那么不包含物體的格子的置信度值近似為0,變相放大了包含物體的格子的置信度誤差,在計算網絡參數梯度時的影響。為解決這個問題,YOLO 使用λnoobj=0.5修正(置信度誤差)iouErr。(此處的‘包含’是指存在一個物體,它的中心坐標落入到格子內)。
對於相等的誤差值,大物體誤差對檢測的影響應小於小物體誤差對檢測的影響。這是因為,相同的位置偏差占大物體的比例遠小於同等偏差占小物體的比例。YOLO將物體大小的信息項(w和h)進行求平方根來改進這個問題,但並不能完全解決這個問題。
綜上,YOLO v1在訓練過程中Loss計算如下式所示:
在激活函數上:
在最后一層使用的是標准的線性激活函數,其他的層都使用leaky rectified 線性激活函數。
1.4總結
YOLO v1作為一步檢測的開山之作,最大的特點就是速度快。其將物體檢測作為回歸問題進行求解,使用單個網絡完成整個檢測的方法,大大提升了同類目標檢測算法的速度,並且實現了召回率低,表現為背景誤檢率低的有點。YOLO v1可以獲取到圖像的整體信息,相比於region proposal等方法,有着更廣闊的“視野”。對其種類的物體,訓練后識別效果也十分優異,具有很強的泛化能力。但是YOLO v1的精准性和召回率相對於fast rcnn比較差。其對背景的誤判率比Fast RCNN的誤判率低很多。這說明了YOLO v1中把物體檢測的思路轉成回歸問題的思路有較好的准確率,但是對於bounding box的定位不是很好。
二、YOLOv2/YOLO9000 更准、更快、更強
YOLOv1對於bounding box的定位不是很好,在精度上比同類網絡還有一定的差距,所以YOLOv2對於速度和精度做了很大的優化,並且吸收了同類網絡的優點,一步步做出嘗試。
YOLO V2在V1基礎上做出改進后提出。其受到Faster RCNN方法的啟發,引入了anchor。同時使用了K-Means方法,對anchor數量進行了討論,在精度和速度之間做出折中。並且修改了網絡結構,去掉了全連接層,改成了全卷積結構。在訓練時引入了世界樹(WordTree)結構,將檢測和分類問題做成了一個統一的框架,並且提出了一種層次性聯合訓練方法,將ImageNet分類數據集和COCO檢測數據集同時對模型訓練。
2.1更准
YOLOv2對每批數據都做了一個歸一化預處理。通過在每一個卷積層后添加batch normalization,極大的改善了收斂速度同時減少了對其它正則方法的依賴(舍棄了dropout優化后依然沒有過擬合),使得mAP獲得了2%的提升。(mAP:平均精度均值(mean Average Precision))
YOLOv1在分辨率為224×224的圖片上進行預訓練,在正式訓練時將分辨率提升到448×448,這需要模型去適應新的分辨率。但是YOLOv2是直接使用448×448的輸入,隨着輸入分辨率的增加,模型提高了4%的mAP.
在預測框的數量上,由於YOLOv2將網絡的輸入分辨率調整到416×416,保證為多次卷積后,下采樣率為32,得到13×13的特征圖(feature map)。在這上面使用9種anchor boxes[7],得到13×13×9=1521個,這比YOLOv1大多了。
YOLOv1利用全連接層的數據完成邊框的預測,會導致丟失較多的空間信息,使定位不准。在YOLOv2中作者借鑒了Faster R-CNN中的anchor思想,來改善全連接層帶來的影響。Anchor是RPN(region proposal network)網絡在Faster R-CNN中的一個關鍵步驟,是在卷積特征圖上進行滑窗操作,每一個中心可以預測9種不同大小的候選框。
為了引入anchor boxes來預測候選框,作者在網絡中去掉了全連接層。並去掉了最后的一個池化層以確保輸出的卷積特征圖有更高的分辨率。然后,通過縮減網絡,讓圖片輸入分辨率為416 * 416,目的是為了讓后面產生的卷積特征圖寬高都為奇數,這樣就可以產生一個中心框(center cell)。作者觀察到,大物體通常占據了圖像的中間位置,可以只用中心的一個框來預測這些物體的位置,否則就要用中間的4個格子來進行預測,這個技巧可稍稍提升效率。最后,YOLOv2使用了卷積層降采樣(采樣因子為32),使得輸入卷積網絡的416 * 416圖片最終得到13 * 13的卷積特征圖(416/32=13)。
沒有anchor boxes的情況下,模型召回率(recall)為81%,mAP為69.5%;加入anchor boxes,模型召回率為88%,mAP為69.2%。這樣看來,准確率只有小幅度的下降,而召回率則提升了7%。
在使用anchor的時候作者遇到了兩個問題,第一個是anchor boxes的寬高維度往往是精選的先驗框(hand-picked priors)也就是說人工選定的先驗框。雖然在訓練過程中網絡也會學習調整框的寬高維度,最終得到准確的bounding boxes。但是,如果一開始就選擇了更好的、更有代表性的先驗框維度,那么網絡就更容易學到准確的預測位置。為了使網絡更易學到准確的預測位置,作者使用了K-means聚類方法類訓練bounding boxes,可以自動找到更好的框寬高維度。傳統的K-means聚類方法使用的是歐氏距離函數,也就意味着較大的框會比較小的框產生更多的誤差,聚類結果可能會偏離。為此,作者采用IOU得分作為評價標准,這樣的話,誤差就和框的尺度無關了,最終的距離函數為:
對數據集的聚類結果如下:
圖三:聚類數目與Avg IoU的關系(使用VOC2007和COCO數據集)
可以看出k=5在模型復雜度與召回率之間取一個折中值。
在使用anchor的時候,遇到的第二個問題是加入anchor box的模型不穩定。作者認為模型不穩定的原因來自於預測bbox的(x,y)。如下:
在Faster R-CNN的預測中,偏移因子,是沒有限制的,因此收斂會比較慢。故我們想讓每個模型預測目標附近的一個部分,論文對采用了和YOLOv1一樣的方法,直接預測中心點,並使用Sigmoid函數將偏移量限制在0到1之間(這里的尺度是針對網格框)。
計算公式如下:
bx,by,bw,bh,是預測的bbox的中心點坐標和寬高,中心點坐標的尺度是相對於網格。 如圖四:
圖四:各個參數的位置圖示
經過維度聚類和直接位置預測的操作,在原有的anchor boxes版本上又提升了5%的mAP。
YOLOv1在對於大目標檢測有很好的效果,但是對小目標檢測上,效果欠佳。為了改善這一問題,作者參考了Faster R-CNN和SSD的想法,在不同層次的特征圖上獲取不同分辨率的特征。作者將上層的(前面26×26)高分辨率的特征圖(feature map)直接連到13×13的feature map上。把26×26×512轉換為13×13×2048,並拼接住在一起使整體性能提升1%。
Multi-Scale Training和GoogleNet訓練時一樣,為了提高模型的魯棒性(robust),在訓練的時候使用多尺度[6]的輸入進行訓練。因為網絡的卷積層下采樣因子為32,故輸入尺寸選擇32的倍數288,352,…,544。
圖五:不同尺度訓練的精度與其他網絡的精度對比
2.2更快
大多數目標檢測的框架是建立在VGG-16上的,VGG-16在ImageNet上能達到90%的top-5(最后概率向量最大的前五名中出現了正確概率即為預測正確),但是單張圖片需要30.69 billion 浮點運算,YOLO2是依賴於DarkNet-19的結構,該模型在ImageNet上能達到91%的top-5,並且單張圖片只需要5.58 billion 浮點運算,大大的加快了運算速度。DarkNet的結構圖如下:
圖六:YOLOv2網絡結構
YOLOv2去掉YOLOv1的全連接層,同時去掉YOLO v1的最后一個池化層,增加特征的分辨率,修改網絡的輸入,保證特征圖有一個中心點,這樣可提高效率。並且是以每個anchor box來預測物體種類的。作者將分類和檢測分開訓練,在訓練分類時,以Darknet-19為模型在ImageNet上用隨機梯度下降法(Stochastic gradient descent)跑了160epochs,跑完了160 epochs后,把輸入尺寸從224×224上調為448×448,這時候學習率調到0.001,再跑了10 epochs, DarkNet達到了top-1准確率76.5%,top-5准確率93.3%。
在訓練檢測時,作者把分類網絡改成檢測網絡,去掉原先網絡的最后一個卷積層,取而代之的是使用3個3×3x1024的卷積層,並且每個新增的卷積層后面接1×1的卷積層,數量是我們要檢測的類的數量。
2.3更強
論文提出了一種聯合訓練的機制:使用識別數據集訓練模型識別相關部分,使用分類數據集訓練模型分類相關部分。
眾多周知,檢測數據集的標注要比分類數據集打標簽繁瑣的多,所以ImageNet分類數據集比VOC等檢測數據集高出幾個數量級。所以在YOLOv1中,邊界框的預測其實並不依賴於物體的標簽,YOLOv2實現了在分類和檢測數據集上的聯合訓練。對於檢測數據集,可以用來學習預測物體的邊界框、置信度以及為物體分類,而對於分類數據集可以僅用來學習分類,但是其可以大大擴充模型所能檢測的物體種類。作者選擇在COCO和ImageNet數據集上進行聯合訓練,遇到的第一問題是兩者的類別並不是完全互斥的,比如"Norfolk terrier"明顯屬於"dog",所以作者提出了一種層級分類方法(Hierarchical classification),根據各個類別之間的從屬關系(根據WordNet)建立一種樹結構WordTree,結合COCO和ImageNet建立的詞樹(WordTree)如下圖所示:
圖七:WordTree
WordTree中的根節點為"physical object",每個節點的子節點都屬於同一子類,可以對它們進行softmax處理。在給出某個類別的預測概率時,需要找到其所在的位置,遍歷這個路徑,然后計算路徑上各個節點的概率之積。
在訓練時,如果是檢測樣本,按照YOLOv2的loss計算誤差,而對於分類樣本,只計算分類誤差。在預測時,YOLOv2給出的置信度就是 ,同時會給出邊界框位置以及一個樹狀概率圖。在這個概率圖中找到概率最高的路徑,當達到某一個閾值時停止,就用當前節點表示預測的類別。
2.4總結
通過對YOLOv1網絡結構和訓練方法的改進,提出了YOLOv2/YOLO9000實時目標檢測系統。YOLOv2在YOLOv1的基礎上進行了一系列的改進,在快速的同時達到state of the art。同時,YOLOv2可以適應不同的輸入尺寸,根據需要調整檢測准確率和檢測速度(值得參考)。作者綜合了ImageNet數據集和COCO數據集,采用聯合訓練的方式訓練,使該系統可以識別超過9000種物品。除此之外,作者提出的WordTree可以綜合多種數據集的方法可以應用於其它計算機數覺任務中。但是對於重疊的分類,YOLOv2依然無法給出很好的解決方案。
三、Yolov3集大成之作
YOLOv3是到目前為止,速度和精度最均衡的目標檢測網絡。通過多種先進方法的融合,將YOLO系列的短板(速度很快,不擅長檢測小物體等)全部補齊。達到了令人驚艷的效果和拔群的速度。
圖八:YOLOv3與其他網絡的mAP與運行時間對比
3.1多標簽分類預測
在YOLO9000[14]之后,我們的系統使用維度聚類(dimension clusters )作為anchor boxes來預測邊界框,網絡為每個邊界框預測4個坐標。
在YOLOv3[15]中使用邏輯回歸預測每個邊界框(bounding box)的對象分數。 如果先前的邊界框比之前的任何其他邊界框重疊ground truth對象,則該值應該為1。如果以前的邊界框不是最好的,但是確實將ground truth對象重疊了一定的閾值以上,我們會忽略這個預測,按照進行。我們使用閾值0.5。與YOLOv2不同,我們的系統只為每個ground truth對象分配一個邊界框。如果先前的邊界框未分配給grounding box對象,則不會對坐標或類別預測造成損失。
在YOLOv3中,每個框使用多標簽分類來預測邊界框可能包含的類。該算法不使用softmax,因為它對於高性能沒有必要,因此YOLOv3使用獨立的邏輯分類器。在訓練過程中,我們使用二元交叉熵損失來進行類別預測。對於重疊的標簽,多標簽方法可以更好地模擬數據。
3.2跨尺度預測
YOLOv3采用多個尺度融合的方式做預測。原來的YOLO v2有一個層叫:passthrough layer,假設最后提取的feature map的size是13*13,那么這個層的作用就是將前面一層的26*26的feature map和本層的13*13的feature map進行連接,有點像ResNet。這樣的操作也是為了加強YOLO算法對小目標檢測的精確度。這個思想在YOLO v3中得到了進一步加強,在YOLO v3中采用類似FPN的上采樣(upsample)和融合做法(最后融合了3個scale,其他兩個scale的大小分別是26*26和52*52),在多個scale的feature map上做檢測,對於小目標的檢測效果提升還是比較明顯的。雖然在YOLO v3中每個網格預測3個邊界框,看起來比YOLO v2中每個grid cell預測5個邊界框要少,但因為YOLO v3采用了多個尺度的特征融合,所以邊界框的數量要比之前多很多。
3.3網絡結構改變
YOLO v3使用新的網絡來實現特征提取。在Darknet-19中添加殘差網絡的混合方式,使用連續的3×3和1×1卷積層,但現在也有一些shortcut連接,YOLO v3將其擴充為53層並稱之為Darknet-53。
圖九:Darknet-53網絡結構
這個新網絡比Darknet-19功能強大得多,而且比ResNet-101或ResNet-152更有效。
圖十:ImageNet結果
每個網絡都使用相同的設置進行訓練,並以256×256的單精度測試進行測試。運行時間是在Titan X上以256×256進行測量的。因此,Darknet-53可與state-of-the-art的分類器相媲美,但浮點運算更少,速度更快。Darknet-53比ResNet-101更好,速度更快1:5倍。 Darknet-53與ResNet-152具有相似的性能,速度提高2倍。
Darknet-53也可以實現每秒最高的測量浮點運算。這意味着網絡結構可以更好地利用GPU,從而使其評估效率更高,速度更快。
3.4總結
YOLO檢測算法進行目標檢測,取得了較高的檢測速度和檢測准確率。該算法不僅對於實物有着很好的效果,對於其他目標,如藝術作品等同樣具有很好的兼容性。YOLO算法相比其他算法更符合工業界對目標檢測算法實時性的要求,簡單易實現,對於嵌入式很友好。
YOLO系列不斷吸收目標檢測同類算法的優點,將其應用於自身,不斷進步,可謂成長中的算法。
四、 參考資料
[1] M. Everingham, L. Van Gool, C. K. Williams, J. Winn, and A. Zisserman. The pascal visual object classes (voc) challenge. International journal of computer vision, 88(2):303– 338, 2010. 6
[2] C.-Y. Fu, W. Liu, A. Ranga, A. Tyagi, and A. C. Berg. Dssd: Deconvolutional single shot detector. arXiv preprint arXiv:1701.06659, 2017. 3
[3] D. Gordon, A. Kembhavi, M. Rastegari, J. Redmon, D. Fox, and A. Farhadi. Iqa: Visual question answering in interactive environments. arXiv preprint arXiv:1712.03316, 2017. 1
[4] K. He, X. Zhang, S. Ren, and J. Sun. Deep residual learning for image recognition. In Proceedings of the IEEE conference on computer vision and pattern recognition, pages 770–778, 2016. 3
[5] J. Huang, V. Rathod, C. Sun, M. Zhu, A. Korattikara, A. Fathi, I. Fischer, Z. Wojna, Y. Song, S. Guadarrama, et al. Speed/accuracy trade-offs for modern convolutional object detectors. 3
[6] I. Krasin, T. Duerig, N. Alldrin, V. Ferrari, S. Abu-El-Haija, A. Kuznetsova, H. Rom, J. Uijlings, S. Popov, A. Veit, S. Belongie, V. Gomes, A. Gupta, C. Sun, G. Chechik, D. Cai, Z. Feng, D. Narayanan, and K. Murphy. Openimages: A public dataset for large-scale multi-label and multi-class image classification. Dataset available from https://github.com/openimages, 2017. 2
[7] T.-Y. Lin, P. Dollar, R. Girshick, K. He, B. Hariharan, and S. Belongie. Feature pyramid networks for object detection. In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, pages 2117–2125, 2017. 2, 3
[8] T.-Y. Lin, P. Goyal, R. Girshick, K. He, and P. Dollar. ′ Focal loss for dense object detection. arXiv preprint arXiv:1708.02002, 2017. 1, 3, 4
[9] T.-Y. Lin, M. Maire, S. Belongie, J. Hays, P. Perona, D. Ramanan, P. Dollar, and C. L. Zitnick. Microsoft coco: Com- ′ mon objects in context. In European conference on computer vision, pages 740–755. Springer, 2014. 2
[10] W. Liu, D. Anguelov, D. Erhan, C. Szegedy, S. Reed, C.- Y. Fu, and A. C. Berg. Ssd: Single shot multibox detector. In European conference on computer vision, pages 21–37. Springer, 2016. 3
[11] I. Newton. Philosophiae naturalis principia mathematica. William Dawson & Sons Ltd., London, 1687. 1
[12] J. Parham, J. Crall, C. Stewart, T. Berger-Wolf, and D. Rubenstein. Animal population censusing at scale with citizen science and photographic identification. 2017. 4
[13] J. Redmon. Darknet: Open source neural networks in c. http://pjreddie.com/darknet/, 2013–2016. 3
[14] J. Redmon and A. Farhadi. Yolo9000: Better, faster, stronger. In Computer Vision and Pattern Recognition (CVPR), 2017 IEEE Conference on, pages 6517–6525. IEEE, 2017. 1, 2, 3
[15] J. Redmon and A. Farhadi. Yolov3: An incremental improvement. arXiv, 2018. 4
[16] S. Ren, K. He, R. Girshick, and J. Sun. Faster r-cnn: Towards real-time object detection with region proposal networks. arXiv preprint arXiv:1506.01497, 2015.