讀論文系列:Object Detection CVPR2016 YOLO

CVPR2016: You Only Look Once:Unified, Real-Time Object Detectiongit

轉載請註明做者:夢裏茶github

YOLO detection system

YOLO,You Only Look Once,摒棄了RCNN系列方法中的region proposal步驟,將detection問題轉爲一個迴歸問題網絡

網絡結構

  • 輸入圖片:resize到448x448ide

  • 整張圖片輸入卷積神經網絡(24層卷積+2層全鏈接,下面這張示意圖是Fast YOLO的)函數

CNN

  • 將圖片劃分爲SxS個格子,S=7
  • 輸出一個SxS大小的class probability map,爲圖片上每一個格子所屬的分類

Model

  • 輸出爲每一個格子輸出B個bounding box,每一個bounding box由x,y,w,h表示,爲每一個bounding box輸出一個confidence,即屬於前景的置信度

因而輸出能夠表示爲一個SxSx(B*(4+1)+C)的tensor,訓練只須要根據數據集準備好這樣的tensor進行regression就行學習

  • 對全部bounding box按照confidence作非極大抑制,獲得檢測結果

訓練

Loss

YOLO Loss Function

  • 前兩行爲定位loss,λcoord爲定位loss的權重,論文中取5
  • 第三行爲一個bounding box屬於前景時的置信度迴歸loss,
    • 當格子中有對象出現時,真實Ci爲1,
    • 1ijobj是一個條件表達式,當bounding box「負責(is responsible for)」圖中一個真實對象時爲1,不然爲0,
    • 所謂「負責」,指的是在當前這個格子的全部bounding box中,這個bounding box與真實的bounding box重疊率最大
  • 第四行爲一個bounding box屬於背景時的置信度迴歸loss,
    • 爲了不負樣本過多致使模型跑偏, λnoobj=0.5,
    • 1ijnoobj是一個條件表達式,爲1ijobj取反
    • 因而咱們能夠發現一個格子的兩個bounding box的分工:一個貢獻前景loss,一個貢獻背景loss ,不管是前景背景box,咱們都但願它們的confidence接近真實confidence,實際上,若是 λnoobj=1, 第四五行能夠合併爲一項求和,但因爲背景box太多,因此才單獨拆開加了權重約束
  • 第五行爲分類loss,1iobj是一個條件表達式,當有對象出如今這個格子中,取1,不然取0

YOLO裏最核心的東西就講完了,其實能夠把YOLO看做固定region proposal的Faster RCNN,因而能夠省掉Faster RCNN裏region proposal部分,分類和bounding box regression跟Faster RCNN是差很少的對象

細節

Leaky Relu

網絡中只有最後的全鏈接層用了線性的激活函數,其餘層用了leaky Relu:f(x)=max(x, 0.1x)blog

對比Relu和leaky Relu圖片

Relu

Leaky Relu

在x小於0的時候,用了0.1x,避免使用relu的時候有些單元永遠得不到激活(Dead ReLU Problem)get

Fast YOLO

卷積層更少,只有9層卷積+2層全鏈接,每層filters也更少,因而速度更快

實驗效果

  • 對比當前最好方法:

SOA

Fast YOLO速度最快,準確率不過高,但仍是比傳統方法好,YOLO則比較中庸,速度不慢,準確率也不過高,但也還行。

  • 再看看具體是在哪些類型的圖片上出錯的:

Error Analysis

主要是定位不許(畢竟沒有精細的region proposal),可是在背景上出錯較少(不容易把背景當成對象)

缺點

  • 固定的格子是一種很強的空間限制,7x7的格子決定了整張圖片最多預測98個對象,對於對象數量不少的圖片(好比鳥羣)無能爲力
  • 難以泛化到其餘形狀或角度的物體上
  • 損失函數沒有考慮不一樣尺寸物體的error權重,大box權重和小box權重同樣

Summary

Anyway,YOLO結構仍是挺優雅的,比Faster RCNN黑科技少多了,更重要的是,它是當時最快的深度學習檢測模型,也是很值得確定的。

相關文章
相關標籤/搜索