YOLO v1論文翻譯和解讀
Abstract 摘要
本文提出了一種新的物體檢測方法YOLO。YOLO之前的物體檢測方法主要是通過region proposal產生大量的可能包含待檢測物體的 potential bounding box,再用分類器去判斷每個 bounding box裡是否包含有物體,以及物體所屬類別的 probability或者 confidence,如R-CNN,Fast-R-CNN,Faster-R-CNN等。YOLO不同於這些物體檢測方法,它將物體檢測任務當做一個regression問題來處理,使用一個神經網路,直接從一整張影象來預測出bounding box 的座標、box中包含物體的置信度和物體的probabilities。因為YOLO的物體檢測流程是在一個神經網路裡完成的,所以可以end to end來優化物體檢測效能。YOLO檢測物體的速度很快,標準版本的YOLO在Titan X 的 GPU 上能達到45 FPS。網路較小的版本Fast YOLO在保持mAP是之前的其他實時物體檢測器的兩倍的同時,檢測速度可以達到155 FPS。相較於其他的state-of-the-art 物體檢測系統,YOLO在物體定位時更容易出錯,但是在背景上預測出不存在的物體(false positives)的情況會少一些。而且,YOLO比DPM、R-CNN等物體檢測系統能夠學到更加抽象的物體的特徵,這使得YOLO可以從真實影象領域遷移到其他領域,如藝術。
1,Introduction(介紹)
人們瞥檢視像,立即知道影象中的物體,它們在哪裡以及它們如何相互作用。 人類的視覺系統是快速和準確的,使我們能夠執行復雜的任務,例如駕駛時幾乎沒有意識的想法。 快速,準確的目標檢測演算法可以讓計算機在沒有專門感測器的情況下駕駛汽車,使輔助裝置能夠向人類使用者傳達實時的場景資訊,並釋放通用目標響應式機器人系統的潛力。
當前的物體檢測系統使用分類器來完成物體檢測任務。為了檢測一個物體,這些物體檢測系統要在一張測試圖的不同位置和不同尺寸的bounding box上使用該物體的分類器去評估是否有該物體。如DPM系統,要使用一個滑窗(sliding window)在整張影象上均勻滑動,用分類器評估是否有物體。
在DPM之後提出的其他方法,如R-CNN方法使用region proposal來生成整張影象中可能包含待檢測物體的potential bounding boxes,然後用分類器來評估這些boxes,接著通過post-processing來改善bounding boxes,消除重複的檢測目標,並基於整個場景中的其他物體重新對boxes進行打分。整個流程執行下來很慢,而且因為這些環節都是分開訓練的,檢測效能很難進行優化。
本文提出的YOLO(you only look once),將物體檢測任務當做迴歸問題(regression problem)來處理,直接通過整張圖片的所有畫素得到bounding box的座標、box中包含物體的置信度和class probabilities。通過YOLO,每張影象只需要輸入到神經網路就能得出影象中都有哪些物體和這些物體的位置。
YOLO非常簡單:參見圖1.單個卷積網路可同時預測多個邊界框和這些盒的類概率.YOLO訓練全影象並直接優化檢測效能。 這種統一的模型與傳統的物體檢測方法相比有許多優點。
圖1:YOLO檢測系統。 用YOLO處理影象簡單而直接。 我們的系統(1)將輸入影象的大小調整為448×448,(2)在影象上執行單個卷積網路,以及(3)通過模型的置信度對結果檢測進行閾值。
YOLO模型相對於之前的物體檢測方法有多個優點:
1、YOLO檢測物體非常快。
因為沒有複雜的檢測流程,只需要將影象輸入到神經網路就可以得到檢測結果,YOLO可以非常快的完成物體檢測任務。標準版本的YOLO在Titan X 的 GPU 上能達到45 FPS。更快的Fast YOLO檢測速度可以達到155 FPS。而且,YOLO的mAP是之前其他實時物體檢測系統的兩倍以上。
2、YOLO可以很好的避免背景錯誤,產生false positives。
不像其他物體檢測系統使用了滑窗或region proposal,分類器只能得到影象的區域性資訊。YOLO在訓練和測試時都能夠看到一整張影象的資訊,因此YOLO在檢測物體時能很好的利用上下文資訊,從而不容易在背景上預測出錯誤的物體資訊。和Fast-R-CNN相比,YOLO的背景錯誤不到Fast-R-CNN的一半。
3、YOLO可以學到物體的泛化特徵。
當YOLO在自然影象上做訓練,在藝術作品上做測試時,YOLO表現的效能比DPM、R-CNN等之前的物體檢測系統要好很多。因為YOLO可以學習到高度泛化的特徵,從而遷移到其他領域。
儘管YOLO有這些優點,它也有一些缺點:
1、YOLO的物體檢測精度低於其他state-of-the-art的物體檢測系統。
2、YOLO容易產生物體的定位錯誤。
3、YOLO對小物體的檢測效果不好(尤其是密集的小物體,因為一個柵格只能預測2個物體)。
2,Unified Detection
我們將目標檢測的單獨整合到單個神經網路中。 我們的網路使用整個影象的特徵來預測每個邊界框。 它還同時預測所有類的所有邊界框。 這意味著我們的網路能夠在全球範圍內全面瞭解影象中的全部影象和影象中的所有物件YOLO設計可實現端到端訓練和實時速度,同時保持較高的平均精度。
YOLO將輸入影象劃分為S*S的柵格,每個柵格負責檢測中心落在該柵格中的物體。
每一個柵格預測B個bounding boxes,以及這些bounding boxes的confidence scores。這個 confidence scores反映了模型對於這個柵格的預測:該柵格是否含有物體,以及這個box的座標預測的有多準。公式定義如下:
如果這個柵格中不存在一個object,則confidencescore應該為0。否則的話,confidence score則為predicted bounding box與 ground truth box之間的 IOU(intersection over union)。
YOLO對每個bounding box有5個predictions:x, y, w, h,
and confidence。
座標x,y代表了預測的bounding box的中心與柵格邊界的相對值。
座標w,h代表了預測的bounding box的width、height相對於整幅影象width,height的比例。
confidence就是預測的bounding box和ground truth box的IOU值。 每一個柵格還要預測C個conditional class probability(條件類別概率):Pr(Classi|Object)。即在一個柵格包含一個Object的前提下,它屬於某個類的概率。我們只為每個柵格預測一組(C個)類概率,而不考慮框B的數量。整個yolo演算法的流程如圖2.
圖2: 我們的YOLO系統將檢測模型化為迴歸問題。 它將影象劃分為S×S網格,並且每個網格單元預測B個邊界框,對這些框的置信度以及C類概率。 這些預測值被編碼為S×S×(B * 5 + C)張量。為了評估PASCAL VOC上的YOLO,我們使用S = 7,B = 2。PASCAL VOC有20個標記類,因此C = 20。我們的最終預測是7×7×30張量。
2.1 Network Design
我們將此模型作為卷積神經網路實施並在PASCAL VOC檢測資料集上進行評估。 網路的初始卷積層從影象中提取特徵,而全連線的層預測輸出概率和座標。
YOLO網路借鑑了GoogLeNet分類網路結構。不同的是,YOLO未使用inception module,而是使用1x1卷積層(此處1x1卷積層的存在是為了跨通道資訊整合)+3x3卷積層簡單替代。完整的網路結構如圖3所示。
最終的輸出結果是一個7*7*30的張量。
2.2 訓練
首先利用ImageNet 1000-class的分類任務資料集Pretrain卷積層。使用上述網路中的前20 個卷積層,加上一個 average-pooling layer,最後加一個全連線層,作為 Pretrain 的網路。訓練大約一週的時間,使得在ImageNet 2012的驗證資料集Top-5的精度達到 88%,這個結果跟 GoogleNet 的效果相當。
將Pretrain的結果的前20層卷積層應用到Detection中,並加入剩下的4個卷積層及2個全連線。同時為了獲取更精細化的結果,將輸入影象的解析度由 224* 224 提升到 448* 448。
將所有的預測結果都歸一化到 0~1, 使用 Leaky RELU 作為啟用函式。 Leaky RELU的公式如下:
Leaky RELU可以解決RELU的梯度消失問題。
損失函式的設計目標就是讓座標(x,y,w,h),confidence,classification 這個三個方面達到很好的平衡。
簡單的全部採用了sum-squared error loss來做這件事會有以下不足:
a) 8維的localization error和20維的classification error同等重要顯然是不合理的。
b) 如果一些柵格中沒有object(一幅圖中這種柵格很多),那麼就會將這些柵格中的bounding box的confidence 置為0,相比於較少的有object的柵格,這些不包含物體的柵格對梯度更新的貢獻會遠大於包含物體的柵格對梯度更新的貢獻,這會導致網路不穩定甚至發散。 為了解決這些問題,YOLO的損失函式的定義如下:
還有一張網上的詳細的對損失函式的解釋圖
更重視8維的座標預測,給這些損失前面賦予更大的loss weight, 記為 λcoord ,在pascal VOC訓練中取5。(上圖藍色框)
對沒有object的bbox的confidence loss,賦予小的loss weight,記為 λnoobj ,在pascal VOC訓練中取0.5。(上圖橙色框)
有object的bbox的confidence loss (上圖紅色框) 和類別的loss (上圖紫色框)的loss weight正常取1。
對不同大小的bbox預測中,相比於大bbox預測偏一點,小box預測偏相同的尺寸對IOU的影響更大。而sum-square error loss中對同樣的偏移loss是一樣。
為了緩和這個問題,作者用了一個巧妙的辦法,就是將box的width和height取平方根代替原本的height和width。 如下圖:small bbox的橫軸值較小,發生偏移時,反應到y軸上的loss(下圖綠色)比big box(下圖紅色)要大。
在 YOLO中,每個柵格預測多個bounding box,但在網路模型的訓練中,希望每一個物體最後由一個bounding box predictor來負責預測。
因此,當前哪一個predictor預測的bounding box與ground truth box的IOU最大,這個 predictor就負責 predict object。
這會使得每個predictor可以專門的負責特定的物體檢測。隨著訓練的進行,每一個 predictor對特定的物體尺寸、長寬比的物體的類別的預測會越來越好。
2.3 Inference
就像在訓練中一樣,影象的檢測只需要一個網路評估。 在PASCAL VOC上,網路預測每個影象的98個邊界框和每個框的類概率。 YOLO在測試時間速度非常快,因為它只需要一個網路預測,而不像基於分類器的方法。
2.4 Limitations of YOLO
- 每個 grid cell 只預測一個 類別的 Bounding Boxes,而且最後只取置信度最大的那個 Box。這就導致如果多個不同物體(或者同類物體的不同實體)的中心落在同一個網格中,會造成漏檢。
- 預測的 Box 對於尺度的變化比較敏感,在尺度上的泛化能力比較差。
- 識別物體位置精準性差
- 召回率低
3. 和其他的目標檢測演算法的對比
下表給出了YOLO與其他物體檢測方法,在檢測速度和準確性方面的比較結果(使用VOC 2007資料集)。
論文中,作者還給出了YOLO與Fast RCNN在各方面的識別誤差比例,如下圖。YOLO對背景內容的誤判率(4.75%)比fast rcnn的誤判率(13.6%)低很多。但是YOLO的定位準確率較差,佔總誤差比例的19.0%,而fast rcnn僅為8.6%。
YOLO演算法的優點如下:
1,速度快,YOLO將物體檢測作為迴歸問題進行求解,整個檢測網路pipeline簡單。在titan x GPU上,在保證檢測準確率的前提下(63.4% mAP,VOC 2007 test set),可以達到45fps的檢測速度。
2,背景誤檢率低。YOLO在訓練和推理過程中能‘看到’整張影象的整體資訊,而基於region proposal的物體檢測方法(如rcnn/fast rcnn),在檢測過程中,只‘看到’候選框內的區域性影象資訊。因此,若當影象背景(非物體)中的部分資料被包含在候選框中送入檢測網路進行檢測時,容易被誤檢測成物體。測試證明,YOLO對於背景影象的誤檢率低於fast rcnn誤檢率的一半。
3,通用性強。YOLO對於藝術類作品中的物體檢測同樣適用。它對非自然影象物體的檢測率遠遠高於DPM和RCNN系列檢測方法。
4 測試
Test的時候,每個網格預測的class資訊和bounding box預測的confidence資訊 相乘,就得到每個bounding box的class-specific confidence score。
1. 等式左邊第一項就是每個網格預測的類別資訊,第二三項就是每個bounding box預測的confidence。這個乘積即encode了預測的box屬於某一類的概率,也有該box準確度的資訊。
2. 對每一個網格的每一個bbox執行同樣操作: 7x7x2 = 98 bbox (每個bbox既有對應的class資訊又有座標資訊)
3. 得到每個bbox的class-specific confidence score以後,設定閾值,濾掉得分低的boxes,對保留的boxes進行NMS處理,就得到最終的檢測結果。
5 NMS(非極大值抑制)
在得到Bounding Box,Confidence, Class probability後利用非極大值抑制演算法保留目標框。
6 思考
- YOLOv1最大的開創性貢獻在於將物體檢測作為一個迴歸問題進行求解,輸入影象經過一次inference,便能得到影象中所有物體的位置和其所屬類別及相應的置信概率。而rcnn/fast rcnn/faster rcnn將檢測結果分為兩部分求解:物體類別(分類問題),物體位置即bounding box(迴歸問題),所以YOLO的目標檢測速度很快。
- YOLO仍然是一個速度換精度的演算法,目標檢測的精度不如RCNN