一 為什么讀這篇
舊文重讀,大名鼎鼎的YOLO,目標(biāo)檢測(cè)一階段法的代表。在做水印項(xiàng)目時(shí)第一個(gè)用到的網(wǎng)絡(luò),當(dāng)時(shí)也沒(méi)見(jiàn)過(guò)其他網(wǎng)絡(luò),再對(duì)Faster R-CNN系列有了認(rèn)識(shí)后,通過(guò)這次重讀重新梳理一下YOLO系列。
二 截止閱讀時(shí)這篇論文的引用次數(shù)
2018.2.13 3298次。差不多是Faster R-CNN的一半。
三 相關(guān)背景介紹
15年6月首次掛在arXiv上,和Faster R-CNN幾乎同一時(shí)間出現(xiàn)。好像也投了15年的NIPS,不過(guò)沒(méi)中,但是中了16年的CVPR。一作Joseph Redmon是個(gè)相當(dāng)逗比的大神,記得當(dāng)時(shí)看他GitHub上的commit,寫(xiě)得相當(dāng)獨(dú)特(xx我要在你晚上熟睡時(shí)murder你。。)個(gè)人網(wǎng)站上料也很多。為了搞YOLO,用純C手?jǐn)]一個(gè)DarkNet框架出來(lái)。6,7年前也玩kaggle,不過(guò)名次不是很高,拿了3個(gè)銀牌。一直在華盛頓大學(xué)。二作Santosh Divvala和四作Ali Farhadi也是華盛頓大學(xué)的,同時(shí)隸屬于微軟人工智能實(shí)驗(yàn)室,另外YOLO的v1-v3都是Joseph和四作一起合作的(因?yàn)樗淖魇撬习?。。)。三作是Ross Girshick,rbg大神不用多說(shuō)了,沒(méi)想到Y(jié)OLO v1居然也有他的身影。
四 關(guān)鍵詞
YOLO
one-stage
五 論文的主要貢獻(xiàn)
1 提出當(dāng)時(shí)速度最快的,準(zhǔn)確率也OK的目標(biāo)檢測(cè)網(wǎng)絡(luò)
2 一階段法目標(biāo)檢測(cè)的代表
六 詳細(xì)解讀
1 介紹
之前目標(biāo)檢測(cè)的工作都是通過(guò)重新使用分類器來(lái)執(zhí)行檢測(cè),而本文將目標(biāo)檢測(cè)定義為回歸問(wèn)題,通過(guò)空間上分離的bbox及相關(guān)的類概率來(lái)定義。使用一個(gè)網(wǎng)絡(luò)來(lái)直接預(yù)測(cè)bbox和類概率。檢測(cè)速度相當(dāng)快,可達(dá)45FPS,而小網(wǎng)絡(luò)Fast YOLO甚至高達(dá)155FPS。
像R-CNN這樣復(fù)雜的pipeline既慢又難優(yōu)化,因?yàn)槊總€(gè)獨(dú)立的部分必須分開(kāi)來(lái)訓(xùn)練。

YOLO相比傳統(tǒng)方法有如下幾個(gè)優(yōu)勢(shì):
a. YOLO相當(dāng)快
因?yàn)閷z測(cè)定義為回歸問(wèn)題,因此不需要復(fù)雜的pipeline。
b. YOLO在做預(yù)測(cè)時(shí)是基于對(duì)圖像的全局理解
不像滑窗或基于候選區(qū)域的方法,YOLO在訓(xùn)練和測(cè)試時(shí)看到的都是整個(gè)圖像,所以它隱式地編碼了上下文信息。
c. YOLO學(xué)習(xí)到了目標(biāo)的泛化表示
當(dāng)用自然圖像訓(xùn)練,藝術(shù)品預(yù)測(cè)時(shí),效果也比其他方法好。
缺點(diǎn)在于很難精準(zhǔn)地定位某些目標(biāo),特別是小目標(biāo)。
2 統(tǒng)一檢測(cè)
YOLO將輸入圖像分為的格網(wǎng),如果一個(gè)目標(biāo)的中心點(diǎn)落在了一個(gè)格子上,則這個(gè)格子負(fù)責(zé)響應(yīng)檢測(cè)的目標(biāo)。每個(gè)格子預(yù)測(cè)
個(gè)bbox及其置信度。將置信度定義為
。如果格子上沒(méi)有目標(biāo),則置信度為0,否則置信度為IOU。每個(gè)bbox由5個(gè)預(yù)測(cè)值組成:
和置信度。
坐標(biāo)表示相對(duì)于格子的中心,預(yù)測(cè)的寬高相對(duì)于整個(gè)圖像。同時(shí)每個(gè)格子也預(yù)測(cè)
個(gè)類概率的置信度:
,這些概率以包含目標(biāo)的格子為條件。只預(yù)測(cè)每個(gè)格子的一組類概率,而不用管bbox
的數(shù)量(兩者是分開(kāi)的)。
在測(cè)試時(shí),將條件類概率與預(yù)測(cè)的單個(gè)bbox的置信度相乘:
這樣就得到每個(gè)box與類相關(guān)的置信度。它們反應(yīng)了類出現(xiàn)在box中的概率以及預(yù)測(cè)box與目標(biāo)的擬合程度。
在VOC上的測(cè)試,參數(shù)做如下設(shè)置:,最終的預(yù)測(cè)為
的張量。

2.1 網(wǎng)絡(luò)設(shè)計(jì)
卷積層提取特征,全連接層預(yù)測(cè)輸出概率和坐標(biāo)。受GoogLeNet啟發(fā),有24個(gè)卷積層,2個(gè)全連接層。不同的是將Inception塊簡(jiǎn)化為3 x 3卷積層后跟著1 x 1降維層,整體如圖3所示。

另外也訓(xùn)練了一個(gè)更快的YOLO,網(wǎng)絡(luò)更輕量點(diǎn)(9個(gè)卷積層,更少的filters)
2.2 訓(xùn)練
在ImageNet上訓(xùn)練了將近一周得到分類top-5準(zhǔn)確率為88%的預(yù)訓(xùn)練模型,網(wǎng)絡(luò)是圖3的前20個(gè)卷積層加平均池化層加全連接層。執(zhí)行檢測(cè)時(shí)又加了隨機(jī)初始化的4個(gè)卷積層和2個(gè)全連接層。因?yàn)闄z測(cè)通常需要細(xì)粒度的視覺(jué)信息,因此將網(wǎng)絡(luò)的輸入分辨率從224 x 224增大到 448 x 448。
最后一層同時(shí)預(yù)測(cè)類概率和bbox坐標(biāo)。用原圖的寬高規(guī)范化了bbox的寬高,以使它們位于0到1之間。將bbox x和y的坐標(biāo)參數(shù)化為指定網(wǎng)格單元位置的偏移,因此它們也在0和1之間。
除了最后一層用線性激活外其余層都用leaky ReLU:
模型用平方和損失進(jìn)行優(yōu)化,因?yàn)槠淙菀變?yōu)化,不過(guò)對(duì)于最大化平均準(zhǔn)確率的目標(biāo)來(lái)說(shuō)并不很完美。它將定位誤差與分類誤差相等地加權(quán),這可能并不是十分理想。此外在每張圖像上,許多網(wǎng)格單元不包含任何目標(biāo),這將使這些網(wǎng)格單元的置信度推向零,從而壓制了包含目標(biāo)的網(wǎng)格單元的梯度,這會(huì)導(dǎo)致模型不穩(wěn)定,在很早的時(shí)候就出現(xiàn)訓(xùn)練發(fā)散。
為了解決這個(gè)問(wèn)題,增加了bbox坐標(biāo)預(yù)測(cè)的損失,減少了不包含目標(biāo)box的置信度預(yù)測(cè)的損失,用和
這兩個(gè)參數(shù)來(lái)完成。設(shè)置第一個(gè)為5,第二個(gè)為0.5。
平方和損失對(duì)于大box和小box也是用相等的權(quán)重。而損失度量應(yīng)該反映出大box的小偏差比小box的小,為了部分解決這個(gè)問(wèn)題,去預(yù)測(cè)bbox的寬和高的平方根,而不是直接預(yù)測(cè)寬和高。
YOLO在每個(gè)網(wǎng)格單元預(yù)測(cè)多個(gè)bbox。在訓(xùn)練時(shí)僅僅想要一個(gè)bbox負(fù)責(zé)響應(yīng)每個(gè)目標(biāo)。根據(jù)哪個(gè)預(yù)測(cè)具有當(dāng)前最高IOU,將其分配為響應(yīng)預(yù)測(cè)目標(biāo),這將導(dǎo)致bbox預(yù)測(cè)之間的特化。每個(gè)預(yù)測(cè)都能更好地預(yù)測(cè)某些大小,縱橫比或目標(biāo)類別,從而提高整體的召回率。整個(gè)損失函數(shù)如下所示:

其中表示如果目標(biāo)出現(xiàn)在網(wǎng)格單元
,
表示在網(wǎng)格單元
的第
個(gè)bbox響應(yīng)那個(gè)預(yù)測(cè)。
需要注意的是,僅當(dāng)目標(biāo)存在于該網(wǎng)格單元時(shí),損失函數(shù)才懲罰分類錯(cuò)誤。也僅當(dāng)預(yù)測(cè)響應(yīng)真實(shí)box時(shí)懲罰bbox的坐標(biāo)誤差(如網(wǎng)格單元中具有最高IOU的預(yù)測(cè))。
訓(xùn)練135個(gè)epoch,batch size為64,動(dòng)量為0.9,decay為0.0005。第一個(gè)epoch學(xué)習(xí)率從緩慢上升到
(如果剛開(kāi)始學(xué)習(xí)率過(guò)大會(huì)導(dǎo)致不收斂),之后用
訓(xùn)練75個(gè)epoch,
訓(xùn)練30個(gè)epoch,
訓(xùn)練最后40個(gè)epoch(學(xué)習(xí)率調(diào)度有意思了,完全就是CLR的思路)。
為了避免過(guò)擬合,使用dropout和數(shù)據(jù)增強(qiáng)。在第一個(gè)全連接層后接上0.5丟失率的dropout層。對(duì)于數(shù)據(jù)增強(qiáng),引入了高達(dá)原始圖像大小20%的隨機(jī)縮放和平移。 并在HSV顏色空間中用1.5的因子隨機(jī)調(diào)整圖像的曝光和飽和度。
2.3 預(yù)測(cè)
對(duì)于VOC,每張圖預(yù)測(cè)98個(gè)bbox(7 x 7 x 2)。網(wǎng)格的設(shè)計(jì)使bbox預(yù)測(cè)強(qiáng)制實(shí)現(xiàn)了空間多樣性。通常很清楚一個(gè)目標(biāo)落入哪個(gè)網(wǎng)格單元,并且網(wǎng)絡(luò)僅為每個(gè)目標(biāo)預(yù)測(cè)一個(gè)box。 然鵝,一些大目標(biāo)或多個(gè)網(wǎng)格單元邊界附近的目標(biāo)可以通過(guò)多個(gè)單元很好地定位。非極大值抑制(NMS)用來(lái)解決這種多個(gè)預(yù)測(cè)的問(wèn)題,NMS提升了2-3%的mAP。
2.4 YOLO的限制
YOLO對(duì)bbox的預(yù)測(cè)有很強(qiáng)的空間約束,因?yàn)?strong>每個(gè)網(wǎng)格單元只預(yù)測(cè)兩個(gè)box,并且只能有一個(gè)類,這個(gè)約束限制了模型可以預(yù)測(cè)的附近目標(biāo)的數(shù)量。模型也很難處理一組小目標(biāo),例如成群的鳥(niǎo)類。
因?yàn)槟P褪菑臄?shù)據(jù)中學(xué)習(xí)預(yù)測(cè)bbox,因此很難泛化到具有新的或不一致縱橫比的目標(biāo)。
使用相對(duì)粗糙的特征來(lái)預(yù)測(cè)bbox,因?yàn)榧軜?gòu)有多個(gè)下采樣層。
最后,損失函數(shù)對(duì)待小bbox和大bbox的錯(cuò)誤是一致的。大box中的小錯(cuò)誤通常是可以接受的,而小box中的小錯(cuò)誤對(duì)IOU的影響要大得多。YOLO主要的錯(cuò)誤源就是定位不準(zhǔn)。
3 與其他檢測(cè)系統(tǒng)的比較
Deformable parts models(DPM)
10年提出,二作是rbg,基于滑動(dòng)窗口方法,各組件分離。
R-CNN
YOLO和R-CNN也有一些相似點(diǎn)。在每個(gè)網(wǎng)格單元提出潛在的bbox,并使用卷積特征對(duì)這些box進(jìn)行評(píng)分。然而,YOLO對(duì)網(wǎng)格單元的候選設(shè)置了空間限制,這有助于減輕同一目標(biāo)的多次預(yù)測(cè)。YOLO提出更少的bbox,98個(gè),而用Selective Search的R-CNN有2000個(gè)。
Other Fast Detectors
還是比Fast R-CNN和Faster R-CNN快。
Deep MultiBox
OverFeat
MultiGrasp
4 實(shí)驗(yàn)
4.1 與其他實(shí)時(shí)系統(tǒng)的比較
反正YOLO最快就對(duì)了。
作者也用VGG16訓(xùn)練了YOLO,準(zhǔn)確率更高不過(guò)速度明顯慢于YOLO。
VGG16的Faster R-CNN比YOLO高10個(gè)mAP,不過(guò)慢6倍。
4.2 VOC2007錯(cuò)誤分析

定位錯(cuò)誤在YOLO中占大頭。Fast R-CNN有更少的定位錯(cuò)誤,不過(guò)有更多的背景錯(cuò)誤。
4.3 結(jié)合Fast R-CNN和YOLO
YOLO比Fast R-CNN有更少的背景錯(cuò)誤,用YOLO消除Fast R-CNN中的背景錯(cuò)誤會(huì)有一個(gè)明顯的性能提升。說(shuō)白了就是做ensemble。見(jiàn)表2的結(jié)果。

4.4 VOC2012結(jié)果

4.5 泛化能力:藝術(shù)品上的人像檢測(cè)


藝術(shù)品和自然圖像在像素級(jí)別上非常不同,不過(guò)它們?cè)谀繕?biāo)的大小和形狀方面相似,因此YOLO仍可以很好的預(yù)測(cè)出來(lái)。
5 真實(shí)場(chǎng)景的實(shí)時(shí)檢測(cè)
用攝像機(jī)的結(jié)果進(jìn)行檢測(cè)。
6 總結(jié)
YOLO是一個(gè)構(gòu)建簡(jiǎn)單的,可以直接在全圖上訓(xùn)練的模型。和基于分類的方法有所不同,YOLO直接響應(yīng)檢測(cè)性能的損失函數(shù),同時(shí)整個(gè)模型被聯(lián)合訓(xùn)練。
七 讀后感
本文寫(xiě)的還是非??谡Z(yǔ)化,如沐春風(fēng)。相關(guān)工作這一節(jié)明面上省了,不過(guò)用和其他檢測(cè)系統(tǒng)的比較來(lái)代替。感覺(jué)YOLO重點(diǎn)還是玩損失函數(shù)這一塊,針對(duì)各種特點(diǎn),針對(duì)性的設(shè)置損失函數(shù),網(wǎng)絡(luò)結(jié)構(gòu)沒(méi)什么好講的。
大神還是非常有個(gè)性的,YOLO v2寫(xiě)的真隨性,根本沒(méi)按論文的標(biāo)準(zhǔn)段落來(lái)。
素質(zhì)四連
要解決什么問(wèn)題
實(shí)時(shí)目標(biāo)檢測(cè)
用了什么方法解決
將檢測(cè)視為回歸問(wèn)題,不需要復(fù)雜的pipeline,用統(tǒng)一的網(wǎng)絡(luò)來(lái)預(yù)測(cè),魔改損失函數(shù)
效果如何
當(dāng)時(shí)背景下可用目標(biāo)檢測(cè)系統(tǒng)中最快的一個(gè)。
還存在什么問(wèn)題
對(duì)小目標(biāo)捉急,對(duì)成群出現(xiàn)的目標(biāo)捉急,定位錯(cuò)誤占大頭,每個(gè)網(wǎng)格單元只預(yù)測(cè)兩個(gè)box,并且只能有一個(gè)類,詳見(jiàn)2.4節(jié)作者自己總結(jié)的。