1. 程式人生 > >一種告訴你圖片裡馬冬梅,冬馬梅分別在哪裡的演算法,YOLO演算法2016論文筆記

一種告訴你圖片裡馬冬梅,冬馬梅分別在哪裡的演算法,YOLO演算法2016論文筆記


寫在最前面

作者Joseph Redmon是我曾經的男神。作為當時學深度學習時亮到我的文章(他的官網也是“亮”到了我),我決定第一篇論文筆記就寫這篇YOLO演算法論文。對於一張影象,其中的物體可能很多,如何識別其中物體是什麼,在哪裡,就要看這篇代表作品了。


論文名

You Only Look Once: Unified, Real-Time Object Detection

作者官網

https://pjreddie.com/

論文地址

https://pjreddie.com/media/files/papers/yolo_1.pdf

摘要渣譯

我們提出了一種用於目標檢測的新型演算法YOLO。以往的研究工作是在目標檢測工作中重新使用(訓練完成的)分類器進行檢測。而我們將目標檢測視為一個分離邊界框和組合類概率的迴歸問題。在一次評估中,一個單獨的神經網路能直接從完整的影象中預測邊界框和類概率。由於整個檢測通道是一個單獨的網路,可以直接從檢測效能上進行端到端優化。

我們整個架構運作非常快。Base YOLO模型以每秒45幀的速度實時處理影象。該網路的一個小版本Fast YOLO處理速度達到了驚人的155幀每秒,同時mAP概念摘出1 仍然達到了其他實時檢測器的兩倍。與最先進的檢測系統相比,YOLO產生更多的定位誤差,但不太可能出現背景上的false positive概念摘出2。 最後,YOLO學習了非常一般物件的表示。 當從自然影象推廣到其他領域(如藝術品)時,它優於其他檢測方法,包括DPM和R-CNN。

前言

YOLO怎麼運作?

The YOLO Detection System.
Processing images with YOLO is simple and straightforward.
(1) resizes the input image to 448×448
(2) runs a single convolutional net-work on the image
(3) Non-max suppression概念摘出3

在這裡插入圖片描述
也就是壓縮影象大小,運行卷積神經網路,非極大值抑制。
嗯,從圖片上看當時的YOLO還是個萌新方法,狗和馬的識別準確度只有0.30哈哈哈

研究現狀

Current detection systems repurpose classifiers to perform detection. To detect an object, these systems take a classifier for that object and evaluate it at various locations and scales in a test image.
Systems like deformable parts models (DPM) use a sliding window approach where the classifier is run at evenly spaced locations over the entire image.
More recent approaches like R-CNN use region proposal methods to first generate potential bounding boxes in an image and then run a classifier on these proposed boxes.

也就是DPM等間距地(evenly spaced)用滑窗(sliding window),而R-CNN生成可能的邊界框(potential bounding boxes),然後呼叫分類器。

YOLO優勢

(1)YOLO is extremely fast.
(2)YOLO reasons globally about the image when making predictions.
(3)YOLO learns generalizable representations of objects.

更快,更全域性,更易推廣。
對於第二點:
YOLO makes less than half the number of background errors compared to Fast R-CNN.
YOLO全域性分析,而DPM和R-CNN更區域性分析,更容易把背景識別成馬冬梅。

正文

網路構建

YOLO的精華之處就在於對影象的處理,進而提取出tensor進行網路的構建。
首先將一張圖片分成S×S個區域(grid)。
在這裡插入圖片描述
之後每個區域設定B個邊界框(bounding boxes)。每個邊界框有5個屬性x,y,w,h,and confiden-ce,分別是中心點x,y還有框的長寬w,h,置信度概念摘出4confidence。如果我們希望識別C類目標,那麼對於一張圖片可以提取成一個S×S×(5×B+C)的tensor。
當時我讀到這裡感覺 Σ(*゚д゚ノ)ノ CNN還能這麼用!!!

文中舉例,將上圖分為7×7個區域,每區域兩個邊界框,目標種類20種,那麼就可以形成一個7×7×30的tensor。網路的初始卷積層從影象中提取特徵,而完全連線的層預測輸出概率和座標。
網路結構如圖:
在這裡插入圖片描述

網路訓練

在ImageNet 1000級競賽資料集上預先訓練網路卷積層,大約一週。網路最後一層預測類概率和邊界框座標,高低長寬(x,y,h,w)設定0-1之間,即相對區域中心點的偏移量和相對區域長寬的長度百分比。使用線性啟用函式(a linear activation function)處理最終層。

在每個影象中,許多區域都不包含任何物件。這將這些單元格的“置信度”分數推向零,通常會壓制包含物件的單元格的漸變。 這可能導致模型不穩定,導致訓練早期出現分歧。為了解決這個問題,增加了邊界框座標預測的損失,減少了不包含物件的框的置信度預測損失。作者使用了λ去表示這個損失。

求和誤差也同樣可以加大大邊界框和小邊界框中的誤差。 我們的誤差度量應該反映出大邊界框中的小偏差小於小邊界框。 為了解決這個問題,直接預測邊界框寬度和高度的平方根而不是寬度和高度.YOLO預測每個網格單元的多個邊界框。在訓練時間,作者只希望一個邊界框預測器負責每個物件。 根據哪個預測在真實背景下具有最高當前IOU,將一個預測器指定為“負責”以預測物件。 這導致邊界框預測變數之間的特化。 每個預測變數都能更好地預測某些大小,寬高比或物件類別,從而提高整體召回率。

多部分損失函式:
位置損失,大小損失,有目標的置信度損失,沒目標的置信度損失,有目標的型別損失求和。
在這裡插入圖片描述
訓練學習率:
Our learning rate schedule is as follows: For the first epochs we slowly raise the learning rate from 103 to 102.If we start at a high learning rate our model often diverges due to unstable gradients. We continue training with 10 for 75 epochs, then 103for 30 epochs, and finally 104for 30 epochs. To avoid overfitting we use dropout and extensive data augmentation. 沒看這篇文章前,我寫了第一篇論文,裡面是以這個為創新點的,哎,丟人。不過他的結論確實驗證了我當時實驗的問題,為什麼直接高學習率有時會效果很差

損失率:
dropout = 0.5

資料增強:
For data augmentation we introduce random scaling and translations of up to 20% of the original image size. We also randomly adjust the exposure and saturation of the image by up to a factor of 1.5 in the HSV color space.

網路訓練集:
http://host.robots.ox.ac.uk/pascal/VOC/

推論

1.YOLO is extremely fast at test time since it only requires a single network evaluation, unlike classifier-based methods.
2.While not critical to performance as it is for R-CNN or DPM, non-maximal suppression adds 2-3% in mAP.
模型快和非極大抑制作用的推論。

限制

1.YOLO imposes strong spatial constraints on bounding box predictions.This spatial constraint limits the number of nearby objects that our model can predict.
2.A small error in a large box is generally benign but a small error in a small box has a much greater effect on IOU.Our main source of error is incorrect localizations.
相鄰的目標在檢測數量上的限制和小邊界框中出錯問題的嚴重性。

後文

後續內容是對比其他演算法的記錄,和在具體資料集上測試的結果。
對比的現有演算法很多,可以看一下分析。
測試用了VOC2007,VOC2012,一些畫作,野外實時監測。測試貼出了和其他演算法對比的結果。
在這裡插入圖片描述
有的種類(plant)都低,有的種類(cat)都高,Fast R-CNN+YOLO的使用也很有意思。

YOLO makes far fewer background mistakes than Fast R-CNN. By using YOLO to eliminate background detections from Fast R-CNN we get a significant boost in performance. For every bounding box that R-CNN predicts we check to see if YOLO predicts a similar box. If it does, we give that prediction a boost based on the probability predicted by YOLO and the overlap between the two boxes.

概念摘出

這一部分是給萌新看的,在我的論文筆記中,每一個概念前三次出現我會給出解釋,之後就沒了。

1.mean average precision mAP
先說AP,它是average precision的意思,每次一張圖片,我們對圖中馬冬梅的識別概率是precision,一堆圖片的準確度當然就要求平均--average precision。那麼我們不僅識別馬冬梅,還有冬馬梅,梅馬冬這麼多類要識別,是不是應該再平均一下,也就是mean average precision。

2.false positive FP
說它就必須要說它的小夥伴們。

True Positive True Negative
False Positive False Negative
True Positive 真陽性 神經網路說你有病,你實際真有病,這是真陽性
False Positive 假陽性 神經網路說你有病,但你實際沒病,這是假陽性
True Negative 真陰性 神經網路說你沒病,你實際就沒病,這是真陰性
False Negative 假陰性 神經網路說你沒病,但實際很不幸,這是假陰性

論文常見的是:
True Positive Rate(真正率 , TPR)或靈敏度(sensitivity)
TPR = TP /(TP + FN)
也就是 診斷出有病且真有病(TP) 在 所有有病的人(TP+FN) 的比重。

True Negative Rate(真負率 , TNR)或特指度(specificity)
TNR = TN /(TN + FP)
也就是 診斷出沒病且真沒病(TN) 在 所有沒病的人(TN+FP) 的比重。
本文就用這兩個東西畫了個圖。
在這裡插入圖片描述

3.non-max suppression 非極大值抑制
我們的神經網路為了識別馬冬梅和冬馬梅識別了好多框,裡面一部分是馬冬梅的框,一部分是冬馬梅的框,但我們只保留每個目標概率最高的那個框。這個過程就是一種Non-max suppression
在這裡插入圖片描述
詳見:https://www.cnblogs.com/makefile/p/nms.html

4.confidence scores or confidence level or confidence 置信度
百度百科說:在統計學中,一個概率樣本的置信區間是對這個樣本的某個總體引數的區間估計。置信區間展現的是這個引數的真實值有一定概率落在測量結果的周圍的程度。置信區間給出的是被測量引數的測量值的可信程度,即前面所要求的“一定概率”。這個概率被稱為置信水平。

程式復現

先鴿著,等我弄好Linux下的百度雲盤,再把訓練資料集下下來,再編好程式,訓練個一段時間,我會在這裡更新連結的,復現會另開新帖並提示的。


寫在最後面

最後讓我們看一下Joseph Redmon的主頁吧!
在這裡插入圖片描述
真的不是我瀏覽器的問題,他圖就是這麼畫的,這真是很好地體現出了摘要中的Our unified architecture is extremely fast.只要我足夠快,座標系就追不上我。
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
真是灑脫的作風233╮(╯_╰)╭