*參考文章:
原論文地址:https://pjreddie.com/media/files/papers/yolo_1.pdf
深度學(xué)習(xí)檢測方法梳理:http://www.cnblogs.com/venus024/p/5590044.html
YOLO:實(shí)時(shí)快速目標(biāo)檢測:https://zhuanlan.zhihu.com/p/25045711
Faster-RCNN詳解:http://blog.csdn.net/u013832707/article/details/53641055
寫在前面(當(dāng)然paper中是沒有的)
在YOLO出現(xiàn)之前還有一些常用的 Object Detection
網(wǎng)絡(luò):RCNN
-> Fast R-CNN
-> Faster R-CNN
,具體不同請參考博客
RCNN
解決的是,“為什么不用CNN
做classification
呢?”
Fast R-CNN
解決的是,“為什么不一起輸出bounding bo
x和label
呢?”
Faster R-CNN
解決的是,“為什么還要用selective search
呢?”
Abstract
我們提出了一種新的
object detection
方法,先前的object detection
工作使用了執(zhí)行檢測的分類器。相反,我們將object detection
作為回歸問題,以在空間上分離的bounding boxes
和相關(guān)的 class probabilities
進(jìn)行框架化。單個(gè)神經(jīng)網(wǎng)絡(luò)在一次評估中直接從完整圖像預(yù)測邊界框和類概率。由于整個(gè)檢測流水線是單個(gè)網(wǎng)絡(luò),因此可以直接在檢測性能上進(jìn)行端對端優(yōu)化。
1. Introduction
人類只需要瞄一眼圖片就能夠知道圖片中的信息,因?yàn)槿祟惖囊曈X系統(tǒng)非常的快和準(zhǔn)確,讓我們實(shí)現(xiàn)復(fù)雜的任務(wù),例如不怎么費(fèi)力的開車。用于object detection
的快速和準(zhǔn)確的算法將允許計(jì)算機(jī)無需專門的傳感器來驅(qū)動汽車,使輔助設(shè)備能夠?qū)?shí)時(shí)場景信息傳達(dá)給人類用戶。
現(xiàn)在的檢測系統(tǒng)重新使用了分類器來實(shí)現(xiàn)檢測。為了檢測一個(gè)對象,這些系統(tǒng)對該對象進(jìn)行分類,并在測試圖像中的各種位置和比例下進(jìn)行評估。諸如可變形部件模型(DPM
)的系統(tǒng)使用滑動窗口方法,其中分類器在整個(gè)圖像上以均勻間隔的位置運(yùn)行.
更先進(jìn)的一點(diǎn)的方法(例如R-CNN
)使用region proposal
的方法在一張圖片上產(chǎn)生bounding boxes
,然后在這些boxes上執(zhí)行分類。分類后,后處理用于微調(diào)bounding boxes
,和消除重復(fù)檢測,并根據(jù)場景中的其他對象重新確定框。這些復(fù)雜的途徑難以優(yōu)化,因?yàn)槊總€(gè)單獨(dú)的組件必須分開訓(xùn)練。
我們把object detection
視作一個(gè)單獨(dú)的回歸問題,直接從圖像像素到bounding boxes
坐標(biāo)和類概率。使用我們的系統(tǒng),您只需要看一眼就知道圖片上有什么并且在哪里。(作者豪情萬丈_)
YOLO是非常簡單的:如上圖。一個(gè)單個(gè)卷積神經(jīng)網(wǎng)絡(luò)能夠同時(shí)預(yù)測多個(gè)bounding boxes
以及他們的概率。YOLO在完整的圖像上訓(xùn)練,能夠直接優(yōu)化檢測性能。這種統(tǒng)一的模型比傳統(tǒng)的object detection
方法有幾個(gè)好處。
- 快,非常快。我們的基礎(chǔ)版在
Titan X GPU
上可以達(dá)到45幀/s; 快速版可以達(dá)到150幀/s。因此,YOLO可以實(shí)現(xiàn)實(shí)時(shí)檢測。 - YOLO采用全圖信息來進(jìn)行預(yù)測。與滑動窗口方法和
region proposal-based
方法不同,YOLO在訓(xùn)練和預(yù)測過程中可以利用全圖信息。Fast R-CNN
檢測方法會錯(cuò)誤的將背景中的斑塊檢測為目標(biāo),原因在于Fast R-CNN在檢測中無法看到全局圖像。相對于Fast R-CNN
,YOLO背景預(yù)測錯(cuò)誤率低一半。
訓(xùn)練YOLO,然后采用藝術(shù)圖像來預(yù)測。YOLO比其它目標(biāo)檢測方法(DPM
和R-CNN
)準(zhǔn)確率高很多。
但是,YOLO的準(zhǔn)確率沒有最好的檢測系統(tǒng)準(zhǔn)確率高。YOLO可以快速識別圖像中的目標(biāo),但是準(zhǔn)確定位目標(biāo)(特別是小目標(biāo))有點(diǎn)困難,我們將在實(shí)驗(yàn)中進(jìn)行權(quán)衡。
2. Unified Detection(統(tǒng)一檢測)
我們將object detection
的單獨(dú)組件統(tǒng)一為單個(gè)神經(jīng)網(wǎng)絡(luò).我們的網(wǎng)絡(luò)使用整個(gè)圖像的特征來預(yù)測每個(gè)bounding boxes
。他同時(shí)還可以預(yù)測所有的類的bounding boxes
。YOLO的設(shè)計(jì)可實(shí)現(xiàn)端到端訓(xùn)練和實(shí)時(shí)檢測,同時(shí)保持較高的平均精度。
(重點(diǎn)來了)
系統(tǒng)將輸入的圖片劃分為S X S個(gè)小格子,如果物體的中心( 這里說的物體的中點(diǎn)應(yīng)該是指ground truth box中的物體的中心 )落入到某一個(gè)小格中,則對應(yīng)的小格負(fù)責(zé)檢測這個(gè)物體。
每個(gè)小格子預(yù)測B個(gè)bounding boxes
以及對應(yīng)的置信度(confidence scores
),這些置信度反映了box包含物體的信心以及準(zhǔn)確度(自己體會)。我們定義置信度為Pr(Object) ? IOUtruthpred.如果box中不存在物體,那么confidence scores
為0
(即意味著Pr(Object) =0),否則,我們希望預(yù)測的置信值和ground truth的intersection over union (IOU)相同(即意味著Pr(Object) =1)。
每個(gè)bounding box
由五個(gè)預(yù)測值組成:x,y,w,h
和confidence
。(x,y)
坐標(biāo)表示相對于網(wǎng)格單元邊界的框的中心。(w,h)
為與全圖信息相關(guān)的box的寬和高。confidence
代表了predicted box
和任何 ground truth box
的IOU。
每個(gè)網(wǎng)格單元還預(yù)測 C 條件類概率Pr(Classi|Object),這些概率適用于包含對象的網(wǎng)格單元格,概率值C代表了格子包含一個(gè)目標(biāo)的概率,每個(gè)小格子只預(yù)測一組類概率,而不考慮框B的數(shù)量。在測試時(shí),每個(gè)box通過類別概率和box置信度相乘來得到特定類別置信度:
這個(gè)分?jǐn)?shù)代表該類別出現(xiàn)在box中的概率和box和目標(biāo)的合適度
2.1 Network Design(網(wǎng)絡(luò)結(jié)構(gòu))
模型采用卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)。開始的卷積層提取圖像特征,全連接層預(yù)測輸出概率。模型結(jié)構(gòu)類似于GoogleNet,如下圖所示。我們還訓(xùn)練了YOLO的快速版本(fast YOLO)。Fast YOLO模型卷積層和filter更少。最終輸出為7×7×30的tensor。
每個(gè)grid有30維,這30維中,8維是回歸box的坐標(biāo),2維是box的confidence,還有20維是類別。 其中坐標(biāo)的x,y用對應(yīng)網(wǎng)格的offset歸一化到0-1之間,w,h用圖像的width和height歸一化到0-1之間。
2.2 Training
采用ImageNet 1000-class 數(shù)據(jù)集來預(yù)訓(xùn)練卷積層。預(yù)訓(xùn)練階段,采用圖2-2網(wǎng)絡(luò)中的前20卷積層,外加
average pooling
層和全連接層。模型訓(xùn)練了一周,獲得了top-5 accuracy為0.88(ImageNet2012 validation set),與GoogleNet模型準(zhǔn)確率相當(dāng)。將模型轉(zhuǎn)換為檢測模型。作者向預(yù)訓(xùn)練模型中加入了4個(gè)卷積層和兩層全連接層,提高了模型輸入分辨率(224×224-->448×448)
最終層預(yù)測類概率和
bounding boxes
坐標(biāo)。 通過圖像寬度和高度將邊界框?qū)挾群透叨葰w一化,使得它們落在0和1之間。我們將邊界框x和y坐標(biāo)參數(shù)化為特定網(wǎng)格單元位置的偏移,使得它們也在0和1之間 。頂層采用linear activation,其它層使用 leaky rectified linear。
- 使用
sum-squared error
,因?yàn)楹苋菀變?yōu)化,但它不完全符合我們的最大化平均精度的目標(biāo)。預(yù)測概率的維數(shù)比預(yù)測bounding box
的維數(shù)要高,把他們同等對待是不理想的。此外,在每個(gè)圖像中,許多網(wǎng)格單元不包含任何對象。 這將這些網(wǎng)格單元的“置信度”為零,通常壓倒包含對象的網(wǎng)格的梯度。 這可能導(dǎo)致模型不穩(wěn)定,導(dǎo)致訓(xùn)練早期發(fā)散。為了彌補(bǔ)這一點(diǎn),采用一個(gè)辦法就是加權(quán),賦予不同的權(quán)值,對于Pr(object)=0的格子令 λ_noobj = 0.5,對于Pr(object)=1的格子令 λ_coord = 5. - 對不同大小的
bounding box
預(yù)測中,相比于大box預(yù)測偏一點(diǎn),小box預(yù)測偏一點(diǎn)肯定更不能被忍受的。而sum-square error loss
中對同樣的偏移loss是一樣。因此預(yù)測邊界框?qū)挾群透叨鹊钠椒礁皇菍挾群透叨龋?em>因?yàn)槠椒礁瘮?shù)的圖像隨著x的增大會變得平緩).
- loss function
loss function
由五部分組成:(其中1iobji表示如果對象出現(xiàn)在單元格 i 中,表示如果對象出現(xiàn)在單元格i中,1iobjij表示網(wǎng)絡(luò)單元格 i 中的第 j 個(gè) bounding box
預(yù)測器對于該預(yù)測的
object
是 responsible
的)
Note
- 只有當(dāng)某個(gè)網(wǎng)格中有object的時(shí)候才對classification error進(jìn)行懲罰。
- 只有當(dāng)某個(gè)box predictor對某個(gè)ground truth box負(fù)責(zé)的時(shí)候,才會對box的coordinate error進(jìn)行懲罰,而對哪個(gè)ground truth box負(fù)責(zé)就看其預(yù)測值和ground truth box的IoU是不是在那個(gè)cell的所有box中最大。
2.3 Inference
對于PASCAL VOC數(shù)據(jù)集,模型需要對每張圖片預(yù)測98個(gè)bounding box和對應(yīng)的類別。對于大部分目標(biāo)只包含一個(gè)box;其它有些面積大的目標(biāo)包含了多個(gè)boxes,采用了Non-maximal suppression(非最大值抑制)來提高準(zhǔn)確率。
2.4 Limitations
- YOLO的每一個(gè)網(wǎng)格只預(yù)測兩個(gè)boxes,一種類別。這導(dǎo)致模型對相鄰目標(biāo)預(yù)測準(zhǔn)確率下降。因此,YOLO對成隊(duì)列的目標(biāo)(如 一群鳥)識別準(zhǔn)確率較低。
- YOLO是從數(shù)據(jù)中學(xué)習(xí)預(yù)測
bounding boxes
,因此,對新的或者不常見角度的目標(biāo)無法識別。 - YOLO的loss函數(shù)對
small bounding boxes
和large bounding boxes
的error
平等對待,影響了模型識別準(zhǔn)確率。因?yàn)閷τ谛〉?code>bounding boxes,small error
影響更大。
3. Comparison to Other Detection Systems && Experiments
挖個(gè)坑以后補(bǔ)上 _
使用訓(xùn)練好的模型進(jìn)行object detection
(基于linux)
- 安裝Darknet
git clone https://github.com/pjreddie/darknet.git
cd darknet
make
- 下載所需的權(quán)重文件
cd darknet/
wget http://pjreddie.com/media/files/yolo.weights
- 測試,可以是data文件夾下的圖,也可以是自己的圖
./darknet detect cfg/yolo.cfg yolo.weights data/test.jpg
才發(fā)現(xiàn)有一個(gè)ppt:強(qiáng)烈推薦
未明白的問題:歡迎各位解答或者批評指正
- 通過圖像寬度和高度將邊界框?qū)挾群透叨葰w一化,使得它們落在0和1之間。
但是是怎么將邊界框x和y坐標(biāo)歸一化呢,在好像并沒有具體的解釋或者沒太懂作者的解釋。