這篇綜述是我統計信號處理的作業,在這里分享一下,將介紹計算機視覺中的目標檢測任務,論述自深度學習以來目標檢測的常見方法,着重講yolo算法,並且將yolo算法與其他的one-stage以及two-stage方法進行比較。
目錄
- 1.介紹
- 2.YOLO
- 2.1 YOLOv1
- 2.2 YOLOv2
- 2.3 YOLOv3
- 3.其他方法
- RCNN
- FastRCNN
- FasterRCNN
- SSD
- RetinaNet
- 4.實驗結果比較
- 5.總結
- 參考文獻
1. 介紹
目標檢測在現實中的應用很廣泛,我們需要檢測數字圖像中的物體位置以及類別,它需要我們構建一個模型,模型的輸入一張圖片,模型的輸出需要圈出圖片中所有物體的位置以及物體所屬的類別,見圖1。在深度學習浪潮到來之前,目標檢測精度的進步十分緩慢,靠傳統依靠手工特征的方法來提高精度已是相當困難的事。而ImageNet分類大賽出現的卷積神經網絡(CNN)——AlexNet[1]所展現的強大性能,吸引着學者們將CNN遷移到了其他的任務,這也包括着目標檢測任務,近年來,出現了很多目標檢測的方法,這里將介紹YOLO[2]-[4],RCNN[5]-[7],SSD[8],RetinaNet[9]系列的方法,其中YOLO,SSD,RetinaNet都是one-stage方法,原始RCNN事multi-stage方法,它的延伸FastRCNN以及FasterRCNN則是two-stage方法。RCNN系列方法是先生成候選框,然后根據候選框來進行坐標回歸預測,而YOLO,SSD,RetinaNet則是直接進行回歸生成坐標回歸,沒有經過候選框這一步。

2.YOLO
這一節將開始詳細地敘述YOLO三部曲,先介紹YOLOv1,更好更簡單地了解YOLO的原理和思想,然后分別介紹YOLOv2以及YOLOv3,看看這兩個模型是使用那些技巧來提升性能。
2.1 YOLOv1
流程:首先YOLOv1會把圖像看成一個sxs的柵格,這里的s是等於7,每個柵格預測2個bounding boxes以及柵格含有對象的置信度,同時每個柵格還是預測柵格所屬的對象類別,然后通過一些處理方式得到最后的結果,這個處理方式后面會講到。

架構:然后,我們來看看YOLOv1的架構,YOLOv1由24層卷積層,4個最大池化層和2個全連接層組成,常規操作,我們關注最后的輸出是7x7x30,這里是7x7代表輸入圖像的7x7柵格,一一對應,30的前十個代表2個bounding boxes的坐標以及對象的置信度,后20個代表VOC數據集的20個類別。

標簽定義:YOLOv1是一個監督式的網絡,有監督那就有標簽,來看看標簽是怎樣定義,首先看狗,它被一個框框起來了,這個框就是真實的標簽,框對應的中心在哪個柵格,就代表當前柵格是狗所在的柵格,這個柵格里就會記錄狗的標簽信息,自行車和小車和狗類似。

損失函數:首先,這個λ是bounding box坐標損失的權重,外層求和是多少個柵格,內層求和是每個柵格的B個Boxes,這個像一的符號,它代表當前box中是否含有真實標簽對象,坐標預測我們只計算有對象的柵格,其他的柵格不進行計算,這個Ci代表當前柵格含有對象的概率,不光要計算含有對象的,也要計算沒有含有對象的,最后的類別,只計算含有對象的柵格,沒有包含對象的不考慮。根據這個損失進行反向傳播,一步步優化YOLOv1模型。

交並比(IOU): 這是一個評價兩個bounding box相互重合程度的指標,這個指標等於兩個bounding box的交集面積除以它們並集的面積。當兩個bounding box沒有任何交集時,IoU為0,即IoU的最小取值,當兩個bounding box完全重合時,IoU為1,即IoU的最大取值,所以IoU的取值范圍是[0,1]。

推斷:給定一張圖,運行YOLO后,總共有98個bounding box輸出出來,可以通過非極大值抑制算法得到最后可靠的結果。大致分兩步,第一步根據閾值去除那些置信度低的bounding box,然后進入一個循環,首先挑選出最大置信度的bounding box作為預測輸出,然后去除那些與這個最大置信度的bounding box的IoU超過0.5的bounding box,因為我們可以看到一個對象有很多bounding box,它們很多是相交的,這樣一個對象的bounding box就確定好了,然后,我們再進入循環,找出下一個對象的bounding box,最后直到沒有剩余的bounding box,循環結束。
2.2 YOLOv2
從三個方面開始介紹YOLOv2,Better,Faster,Stronger。
Better:批歸一化,高分辨分類器,錨盒,維度聚類,細粒度特征以及多尺度訓練。
批歸一化[14](Batch Normalization)的效果則是將數據分布映射到相對緊湊的分布,讓網絡可以更快以及更好地學習,避免過擬合,使用批歸一化這一操作提升了2%mAP。

YOLOv2采用了高分辨率的分類器,在YOLOv1中,將在imagenet預訓練好的網絡遷移到目標檢測網絡中,而訓練imagenet數據集的輸入的大小和目標檢測網絡的輸入尺寸是不一致的,這意味目標檢測網絡需要同時取學習目標檢測而且還要去適應新的分辨率輸入,所以YOLOv2使用目標檢測輸入的分辨率微調了分類網絡,然后遷移到目標檢測網絡中去,這樣,目標檢測網絡就可以專攻學習目標檢測了,通過這一技巧,使mAP上升了4%。
在YOLOv1中,最后是使用全連接層來生成bounding box的坐標,然而使用全連接的缺點在於丟失了特征圖的空間信息,造成定位不准,作者借鑒了Faster Rcnn中錨框的思想,利用錨框直接在卷積特征圖滑窗采樣,因為卷積不需要Reshape,所以很好的保留的空間信息,最終使特征圖的每個特征點和原圖的每個柵格一一對應。另外,與YOLOv1不同的是,YOLOv2是預測的是坐標相對於柵格左頂點的偏移量,通過變換公式得到最后的預測坐標。既然錨框是手動精選的先驗框,設想能否一開始就選擇了更好的、更有代表性的先驗Boxes維度,那么網絡就應該更容易學到准確的預測位置。所以作者通過K-means聚類算法將數據集中的ground truth進行了聚類。最后對模型復雜度和召回率的平衡,選擇5個聚類中心,挑選了5個最具代表性的bounding box。一起提升了5%mAP。


細粒度特征對於檢測小物體是有很大的影響,隨着圖像尺寸的一步步縮小,圖片中的某些小物體的特征是會由於特征圖的不斷縮小而發生信息丟失,作者通過引入了一個Passthrough Layer,把淺層特征圖連接到深層特征圖,也就是圖中這個26x26x512的特征圖通過隔行隔列采樣,變換成13x13x2048的特征圖,然后和13x13x1024的特征圖進行按通道concat,通過這一操作,可以使mAP提升一個百分點。

然后使為了讓YOLOv2對不同尺寸圖片的具有魯棒性,引入了多尺寸的訓練,每10batch,選擇新的圖像尺寸對網絡進行訓練,最后使精度提升了2個百分點。

通過一系列的改進,YOLOv2相比於YOLOv1,一下子提高了15個點。

Faster:YOLOv2簡化了網絡,只使用了19卷積層和5個池化層(Darknet-19),不僅通過一系列的改進使精度高了,速度方面依然比YOLOv1還要快。

Stronger:強大之處體現在YOLO9000,YOLO9000是在YOLOv2的基礎上提出的一種可以檢測超過9000個類別的模型,其主要貢獻點在於提出了一種分類和檢測的聯合訓練策略。對於檢測數據集,可以用來學習預測物體的邊界框、置信度以及為物體分類,而對於分類數據集可以僅用來學習分類,但是其可以大大擴充模型所能檢測的物體種類。但是遇到的一個問題是兩個數據集的類別不是完全互斥的,比如ImageNet光狗的品種就有100多種,它們與COCO數據集中狗的類別產生沖突,兩者是包含關系,針對這一問題,作者提出了一種層級分類方法,主要思路是根據各個類別之間的從屬關系建立一種樹結構,也就是WordTree。
論文中給出了COCO數據集和ImageNet數據集聯合生成的樹結構,藍色的是COCO數據集的類別,橘色的是imageNet的類別,圖15給出一個例子,比如imagenet有這兩種不同類型的小獵狗,它們輸入小獵狗這一分支,也屬於獵狗分支,還屬於COCO數據集中狗這一分支,還屬於犬類這一分支。這就是wordtree的構造形式。


每個節點的子節點都屬於同一子類,所以可以對它們分類型進行softmax處理。這樣就解決了原始分類的沖突問題。在訓練時,如果是檢測樣本,按照YOLOv2的loss計算誤差,而對於分類樣本,只計算分類誤差。在預測時,YOLOv2給出的置信度是根結點的置信度 ,同時會給出邊界框位置以及一個樹狀概率圖。在這個概率圖中找到概率最高的路徑,當達到某一個閾值時停止,就用當前節點表示預測的類別。

2.3 YOLOv3
YOLOv3給出的是一個科技報告,在保持實時性的基礎上,對YOLOv2進行了幾點改進,主要有三點:采用邏輯回歸預測置信度和進行分類,從三個尺度上預測b-box的坐標以及特征提取器發生變化。
邏輯回歸的使用:在YOLOv2中,每個cell是直接通過網絡回歸預測b-box坐標和置信度的,YOLOv3則將置信度和坐標分開預測,坐標預測還是通過網絡進行預測,而置信度則是單獨通過邏輯回歸進行預測。在分類上,沒有使用softmax多分類,作者也指出softmax最終對性能也沒有提升,而且softmax假設是每個box只有一個類,這對遷移到更大有多種類別標簽的數據集是沒有好處的,所以作者使用多個邏輯回歸來預測分類,使用二元交叉熵計算分類損失。
特征提取器:YOLOv3重新訓練了一個新的特征提取器——DarkNet-53,使用了殘差網絡,相比最先進的特征提取器,性能相當,但浮點數運算更少,速度更快,下采樣沒有使用池化操作,而是通過卷積步長來實現。圖18是DarkNet-53的結構圖。

多尺度預測坐標:作者借由FPN的思想,引用中間層的輸出與后層輸出進行融合,進行三個尺度預測,每個尺度的每個cell預測3個坐標,以上面為例,下采樣32倍,最后一起的輸出是8x8x1024,通過卷積層和邏輯回歸得到8x8x255(255=3x(5+80),5是坐標加置信度,80是coco類別),這就是第一個尺度的預測輸出,第二個尺度是8x8x1024通過上采樣與卷積通過縮放變成16x16x512,然后與上一個stage的16x16x512進行concat,然后通過相似的方式生成16x16x255,類似的操作得到,得到32x32x255。
3.其他方法
R-CNN:將深度學習應用到目標檢測的開創性工作之一,處理過程如圖19所示,具體有四步,第一步是使用選擇性搜索對輸入圖像提取不同尺寸不同形狀大小的候選區域,第二步是選取一個預訓練好的深度學習分類模型,將輸出層截取掉,將候選區域形變為網絡輸入需要的固定形狀,得到每個候選區域的特征圖。第三步是將特征圖與類別標簽聯合,通過多個SVM分類器來進行分類。第四步是將特征圖與位置標簽聯合,通過線性回歸模型預測真實邊界框。

FastRCNN:RCNN是很慢的,每個候選區域都要通過前向傳播,許多候選區域是相互重疊的,FastRCNN還是通過選擇性搜索得到候選框,但FastRCNN是將輸入圖像直接通過預訓練模型,將候選框映射到特征圖中進行提取感興趣區域,然后不同大小的區域通過RoI Pooling層得到相同大小的特征向量,最后通過兩個全連接層得到類別和邊界框的預測。具體如下圖20所示。

FasterRCNN:FastRCNN需要通過選擇性搜索得到許多候選框,才能得到較准確的精度,FasterRCNN針對這一問題,提出將選擇性搜索替換成區域候選網絡(RPN),通過網絡自動學習提取好的候選區域,從而可以減少候選區域的數目,提高速度並保證了精度。具體做法是將特征提取的網絡輸出通過一個填充為1的3x3的卷積層變換為通道為512的特征圖,這樣特征圖的每個單元都有512維的特征向量,以每個單元為中心,生成9個不同的錨盒(3個大小,3個不同高寬比)並標注它們,使用單元的特征向量預測錨框的二元類別(foreground-background)以及位置坐標,最后使用非極大值抑制去除相似重復的目標邊界框。RPN的大致流程如圖20所示。

SSD:SSD全稱是單發多框檢測,它的具體流程如圖21所示。首先還是通過截斷全連接層的VGG網絡提取特征,得到Conv6特征圖,其中VGG中間層Conv4_3的特征圖后面會用到,然后將Conv特征圖不斷地減半,得到了5個不同大小的特征圖,這樣,分別在Conv4_3的特征圖以及這5個特征圖生成錨盒,預測類別與邊界框,方法與FasterRCNN類似,對於寬高大的特征圖,感受野小,錨框多,適合檢測小的物體,而對於寬高小的特征圖,感受野大,錨框少,則適合檢測大的物體,所以SSD還是一種多尺度的目標檢測網絡。

RetinaNet:上面介紹了one-stage的檢測器(SSD,YOLO)以及two-stage的檢測器(RCNN系列),但往往two-stage的檢測器性能要強於one-stage,但速度要慢,RetinaNet這篇文章就指出one-stage性能差的一個重要原因是由b-box的foreground-background類別不平衡問題引起的。Two-stage方法會篩選b-box(RPN減少了background的數目)並且訓練過程會設置foreground-background的比例,類別不平衡的問題要輕許多,而one-stage的方法則是直接回歸最后的邊界框預測,對於一個二分類器來講,某一個類別數目過大,會導致分類器偏向數目大的類別(也就是忽略了重要有物體的foreground,偏向圖像的背景),這個問題會導致目標檢測的精度很低。針對這一問題,這篇文章提出了Focal Loss,通過簡單的loss函數改變,來解決類別不平衡的問題。公式如圖22所示。由標准的交叉熵損失修改而成。α_t和γ參數減少了好分類的樣本的損失,並讓分類器更集中解決更困難樣本。

4.實驗結果比較
目標檢測算法一般是在VOC[10]和COCO[11]數據集中進行測試的,下表1給出上述算法在這兩個數據集中的測試結果。限於篇幅,還有很多方法沒有講,特別是更先進的two-stage算法,同時期的two-stage 方法是要比one-stage方法在性能上是要強的,這里只介紹最基本的two-stage方法。

5.總結
對於目標檢測這一任務而言,如果更關注性能指標,則可以參考two-stage系列的方法,而如果更關注實時性的要求,則可以關注one-stage的方法,這篇報告特別講述了one-stage的YOLO算法,YOLO是以實時性為基礎的快速目標檢測算法,這種方法很快,也有許多工作,面向GPU和CPU實時性的目標檢測算法都有人做出來,YOLO的含義也很有意思,YOLO——you only look once,其實還有一種說法,you only live once,別猶豫了,用起來吧。
如有發現錯誤,還請指出,十分感謝!轉載請注明本文地址,謝謝!
參考文獻
[1] Krizhevsky A , Sutskever I , Hinton G . ImageNet Classification with Deep Convolutional Neural Networks[J]. Advances in neural information processing systems, 2012, 25(2).
[2] Redmon J , Divvala S , Girshick R , et al. You Only Look Once: Unified, Real-Time Object Detection[J]. 2015.
[3] Redmon J , Farhadi A . [IEEE 2017 IEEE Conference on Computer Vision and Pattern Recognition (CVPR) - Honolulu, HI (2017.7.21-2017.7.26)] 2017 IEEE Conference on Computer Vision and Pattern Recognition (CVPR) - YOLO9000: Better, Faster, Stronger[C]// IEEE Conference on Computer Vision & Pattern Recognition. IEEE, 2017:6517-6525.
[4] Redmon, J., and Farhadi, A.: 2016, arXiv e-prints, arXiv:1612.08242.
[5] Girshick R , Donahue J , Darrell T , et al. Region-Based Convolutional Networks for Accurate Object Detection and Segmentation[J]. IEEE Transactions on Pattern Analysis & Machine Intelligence, 2015, 38(1):142-158.
[6] Girshick R . Fast R-CNN[J]. Computer Science, 2015.
[7] Ren S , He K , Girshick R , et al. Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks[J]. 2015.
[8] Liu W , Anguelov D , Erhan D , et al. SSD: Single Shot MultiBox Detector[J]. 2015.
[9] Lin T Y , Goyal P , Girshick R , et al. Focal Loss for Dense Object Detection[J]. IEEE Transactions on Pattern Analysis & Machine Intelligence, 2017, PP(99):2999-3007.
[10] Everingham M , Eslami S M A , Van Gool L , et al. ThePascalVisual Object Classes Challenge: A Retrospective[J]. International Journal of Computer Vision, 2015, 111(1):98-136.
[11] Lin T Y , Maire M , Belongie S , et al. Microsoft COCO: Common Objects in Context[J]. 2014.
[12] http://cs231n.stanford.edu/slides/2018/cs231n_2018_lecture11.pdf
[13] https://blog.csdn.net/iamoldpan/article/details/78799857
[14] Ioffe S , Szegedy C . Batch normalization: accelerating deep network training by reducing internal covariate shift[C]// International Conference on International Conference on Machine Learning. JMLR.org, 2015.
[15] https://towardsdatascience.com/training-object-detection-yolov2-from-scratch-using-cyclic-learning-rates-b3364f7e4755
[16] http://ethereon.github.io/netscope/#/gist/d08a41711e48cf111e330827b1279c31
