天天看點

YOLOv1-darknet 内容解析

YOLOv1-darknet 内容解析

目錄

    • 1. 核心思想
    • 2. 特點
    • 3. 缺點
    • 4. 算法流程
    • 5. 詳細内容
    • 6. 主要參考

目标檢測分為二階段和一階段的方法,二階段方法主要有Fast R-CNN系列,Mask R-CNN等,主要方法是用算法生成一些列作為樣本的候選框,然後再使用卷積神經網絡進行樣本的分類;

YOLOv1-darknet 内容解析

一階段方法(End to End方法)主要有SSD系列,YOLO系列,這種方法是将目标邊框的定位問題轉化為回歸問題處理。

YOLOv1-darknet 内容解析

由于思想的不同,二階段檢測方法在檢測準确率和定位精度有優勢,一階段檢測方法在速度上占有優勢。

是以YOLO的核心思想是,直接在輸出層回歸bounding box的位置和bounding box所屬的類别(整張圖作為網絡的輸入,把 Object Detection 的問題轉化成一個 Regression 問題)。

  1. 速度快,因為沒有複雜的檢測流程,隻需要将圖像輸入到神經網絡就可以得到檢測結果,YOLO可以非常快的完成物體檢測任務。
  2. YOLO在訓練和測試時都能夠看到一整張圖像的資訊,是以YOLO在檢測物體時能很好的利用上下文資訊,進而不容易在背景上預測出錯誤的物體資訊。
  3. YOLO可以學到物體的泛化特征:當YOLO在自然圖像上做訓練,在藝術作品上做測試時,YOLO表現的性能比DPM、R-CNN等之前的物體檢測系統要好很多。因為YOLO可以學習到高度泛化的特征,進而遷移到其他領域。

  1. YOLO的物體檢測精度低于其他state-of-the-art的物體檢測系統。
  2. YOLO容易産生物體的定位錯誤。
  3. YOLO對小物體的檢測效果不好(尤其是密集的小物體,因為一個栅格隻能預測2個物體)。

YOLOv1-darknet 内容解析
  1. Resize成448 \(\times\) 448,圖檔分割得到7 \(\times\) 7 網格(cell)
  2. CNN提取特征和預測:卷積部分負責提特征。全連結部分負責預測:
    1. 7 \(\times\) 7 \(\times\) 2 = 98個bounding box的坐标(x,y,w,h,confidence)
    2. 7 \(\times\) 7 = 49個cell所屬20個物體的機率
  3. 過濾得到的bbox, 使用nms算法

網絡示意圖:

YOLOv1-darknet 内容解析
YOLOv1-darknet 内容解析

最後reshape層的計算:(5 = x,y,w,h,confidence)

\[filter = (BboxNum\times5+Class)

\]

這裡BboxNum = 2, Class = 20,是以filter是30。

網絡結構借鑒了 GoogLeNet 。24個卷積層,2個全連結層。(用1×1 reduction layers 緊跟 3×3 convolutional layers 取代Goolenet的 inception modules )

YOLOv1-darknet 内容解析

每個1 \(\times\) 1 \(\times\) 30 對應其中一個cell, 每個cell需要預測兩個bounding box的中心坐标(\(x_c\),\(y_c\),\(w\),\(h\)),其中\(x_c,y_c\)被歸一化到01之間,w,h通過圖像的width和height歸一化到01之間。 每個bounding box除了要回歸自身的位置之外,還要附帶預測一個confidence值。 這個confidence代表了所預測的box中含有object的置信度和這個box預測的有多準兩重資訊:

\[confidence=Pr(Object)\times IOU^{truth}_{pred}

第一項:$$Pr(Object)$$: 代表的是如果人工标注的框(ground truth box)落在一個gird cell中,則取1,否則取0。

第二項: $$IOU^{truth}_{pred}$$: 預測的bounding box和實際的ground truth box之間的IOU值。

YOLOv1-darknet 内容解析

這樣前10個框來源就清楚了,即:\(BboxNum \times 5\).

剩餘的20次元是用來對20個類進行預測,是以總共需要輸出是 $$7 \times 7 \times (5 \times 2 + 20)$$。

關鍵内容:損失函數的設計

YOLOv1-darknet 内容解析

說明:每行是一個cell對應的兩個bounding Box的相關資訊,一共有\(7\times7\)這麼多的行

YOLOv1-darknet 内容解析

對應類别計算方法,需要與confidence相乘,得到以下矩陣:

YOLOv1-darknet 内容解析

按照下圖所示步驟進行操作,這隻是示意其中一個類,每一行都要進行如下操作:

YOLOv1-darknet 内容解析

在所有做完nms之後選擇對應的框畫出來

YOLOv1-darknet 内容解析

得到以下效果:

YOLOv1-darknet 内容解析

總圖:

YOLOv1-darknet 内容解析

損失函數由三個方面組成,一個是定位損失(localization error),一個是置信度損失,一個是分類損失(classification error)。簡單的全部采用了sum-squared error loss來做這件事會有以下不足:

  1. 8維的localization error和20維的classification error同等重要是不合理的;(真實框的中心x坐标減去yolo實際預測框的中心x尖 )
  2. 如果一個網格中沒有object(一幅圖中這種網格很多),那麼就會将這些網格中的box的confidence逼近到0,相比于較少的有object的網格,這種做法是overpowering的,這會導緻網絡不穩定甚至發散。

如何解決,重新設計新的loss計算方案:

  1. 更重視8維的坐标預測,給這些損失前面賦予更大的loss weight, 記為\(\lambda_{coord}\),即坐标預測部分内容。(上圖藍色框)
  2. 對沒有object的bbox的confidence loss,賦予小的loss weight,記為 \(\lambda_{coord}\),在pascal VOC訓練中取0.5。(上圖橙色框)
  3. 有object的bbox的confidence loss (上圖紅色框) 和類别的loss (上圖紫色框)的loss weight正常取1。
  4. 對不同大小的bbox預測中,相比于大bbox預測偏一點,小box預測偏一點更不能忍受。而sum-square error loss中對同樣的偏移loss是一樣。 為了緩和這個問題,作者用了一個比較取巧的辦法,就是将box的width和height取平方根代替原本的height和width。 如下圖:small bbox的橫軸值較小,發生偏移時,反應到y軸上的loss(下圖綠色)比big box(下圖紅色)要大。
  5. YOLOv1-darknet 内容解析
  6. 一個網格預測多個bounding box,在訓練時我們希望每個object(ground true box)隻有一個bounding box專門負責(一個object 一個bbox)。具體做法是與ground true box(object)的IOU最大的bounding box 負責該ground true box(object)的預測。這種做法稱作bounding box predictor的specialization(專職化)。每個預測器會對特定(sizes,aspect ratio or classed of object)的ground true box預測的越來越好。(個人了解:IOU最大者偏移會更少一些,可以更快速的學習到正确位置)
  7. 測試階段,使用nms的時候,按照以下方式進行衡量是否保留改框:

    \[Pr(Class_i|Object)\times Pr(Object)\times IOU^{truth}_{pred}=Pr(Class_i)\times IOU^{truth}_{pred}

https://zhuanlan.zhihu.com/p/24916786

https://docs.google.com/presentation/d/1aeRvtKG21KHdD5lg6Hgyhx5rPq_ZOsGjG5rJ1HP7BbA/pub?start=false&loop=false&delayms=3000&slide=id.g137784ab86_4_1738

代碼改變世界

繼續閱讀