YOLOv1學習tips

Abstract部分


tips:

Region Proposal(候選區域)<YOLO之前的物體檢測方法>

目前主流的Object Detection框架分爲one stagetwo stage,其中two stage多出來的一個stage就是Regional Proposal(候選區域)
Faster R-CNN爲代表的two stage目標檢測方法爲例:
在這裏插入圖片描述
Input Image 經過CNN特徵提取首先來到Region Proposal Network(RPN),由RPN輸出的Classification並不是判定物體在COCO數據集上對應80類中的哪一類,而是輸出一個Binary的值p,可以理解爲 p[0,1]p\in[0, 1] ,假設人工設定一個threshold=0.5(閾值)則RPN做的事就是:當一個region(區域)的 p0.5p\geq0.5 ,則認爲這個region中可能是80類別中的某一類,具體是哪一類不清楚,即network只需要把這些可能含有物體的區域選取出來就可以了,這些被選取出來的regin叫做ROI(Region of Interets)RPN同時也會在feature map上框定這些ROI感興趣區域的大體位置,即輸出Bounding-box
所以RPN所作的事情就是把一張圖中不感興趣的區域忽視掉,只留下可能感興趣的區域,即在輸入RPN網絡的feature map上,所有可能包含80類物體的region區域的信息,其他region(非常多)我們可以直接不考慮了(不用輸入後續網絡)


1.Introduction部分

當前的物體檢測系統使用分類器來完成物體檢測任務。爲了檢測一個物體,這些物體檢測系統要在一張測試圖的不同位置和不同尺寸的bounding box上使用該物體的分類器去評估是否有該物體。如DPM系統,要使用一個滑窗(sliding window)在整張圖像上均勻滑動,用分類器評估是否有物體


tips:

Deformable Parts Models(DPM)

https://blog.csdn.net/qq_22625309/article/details/72493223


在DPM之後提出的其他方法,如R-CNN方法使用region proposal來生成整張圖像中可能包含待檢測物體的potential bounding boxes然後用分類器來評估這些boxes接着通過post-processing(後處理)來改善bounding boxes消除重複的檢測目標並基於整個場景中的其他物體重新對boxes進行打分。整個流程執行下來很慢,而且因爲這些環節都是分開訓練的,檢測性能很難進行優化。

YOLO(you only look once),將物體檢測任務當做迴歸問題regression problem來處理,直接通過整張圖片的所有像素得到bounding box的座標、box中包含物體的置信度和class probabilities。通過YOLO,每張圖像只需要輸入到神經網絡就能得出圖像中都有哪些物體和這些物體的位置。

YOLO優點:

  1. YOLO檢測物體非常快
  2. YOLO可以很好的避免背景錯誤,產生false positives
    不像其他物體檢測系統使用了滑窗或region proposal,分類器只能得到圖像的局部信息。YOLO在訓練和測試時都能夠看到一整張圖像的信息,因此YOLO在檢測物體時能很好的利用上下文信息,從而不容易在背景上預測出錯誤的物體信息。和Fast-R-CNN相比,YOLO的背景錯誤不到Fast-R-CNN的一半。
  3. YOLO可以學到物體的泛化特徵
    當YOLO在自然圖像上做訓練,在藝術作品上做測試時,YOLO表現的性能比DPM、R-CNN等之前的物體檢測系統要好很多。因爲YOLO可以學習到高度泛化的特徵,從而遷移到其他領域

YOLO缺點:

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

2.Unified Detection部分

我們將目標檢測的單獨集成到單個神經網絡中。 我們的網絡使用整個圖像的特徵來預測每個邊界框。 它還同時預測所有類的所有邊界框。 這意味着我們的網絡能夠在全球範圍內全面瞭解圖像中的全部圖像和圖像中的所有對象YOLO設計可實現端到端訓練和實時速度,同時保持較高的平均精度。
YOLO將輸入圖像劃分爲S*S的柵格每個grid負責檢測中心落在該grid中的物體,每個grid預測B個bounding boxes,以及這些bounding boxes的confidence scores,這個confidence scores反映模型對於這個grid的預測:該grid是否含有物體,以及這個box的座標預測的有多準公式定義如下
confidence=Pr(Object)IOUpredtruthconfidence = Pr(Object)*IOU_{pred}^{truth}
如果這個grid中不存在一個object,則confidence score爲0,否則confidence score爲predicted bounding boxground truth box之間的IoU(Intersection over Union)


tips:

ground truth

可以理解爲真實值https://www.zhihu.com/question/22464082

IoU(交併比)

在這裏插入圖片描述
IoU函數可評價對象檢測算法
在對象檢測算法中,我們希望能夠同時定位對象IoU函數:計算兩個邊框交集和並集之比
如上圖,實際邊框爲紅色,算法給出的邊框爲紫色,並集爲綠色,交集爲黃色
一般約定0.5爲閾值,判斷預測的邊框是否準確,IoU越高,邊界框越準確,所以這是衡量定位精確度的一種方式, 我們只需統計算法正確檢測和定位對象的次數的話可以選擇IoU


YOLO對每個bounding box與ground truth box有5個predictions:x, y, w, h, confidence
座標x, y代表了預測的bounding box的中心與grid邊界的相對值
座標w, h代表了預測的bounding box的width、height相對於整幅圖像width,height的比例。
confidence就是預測的bounding box和ground truth box的IOU值。
每一個grid還要預測C個conditional class probability(條件類別概率):Pr(Classi|Object)。即在一個grid包含一個Object的前提下,它屬於某個類的概率。我們只爲每個柵格預測一組(C個)類概率,而不考慮框B的數量
注意
conditional class probability信息是針對每個grid
confidence信息是針對每個bounding box

整個yolo算法的流程如圖2.
在這裏插入圖片描述圖2: 我們的YOLO系統將檢測模型化爲迴歸問題。 它將圖像劃分爲S×S網格,並且每個網格單元預測B個邊界框,對這些框的置信度以及C類概率。 這些預測值被編碼爲S×S×(B5+C)S×S×(B * 5 + C)張量。
爲了評估PASCAL VOC上的YOLO,我們使用S = 7,B = 2。PASCAL VOC有20個標記類,因此C = 20。我們的最終預測是7×7×30張量。

2.1Network Design部分

YOLO網絡借鑑了GoogLeNet分類網絡結構。不同的是,YOLO未使用inception module,而是使用1x1卷積層(此處1x1卷積層的存在是爲了跨通道信息整合)+3x3卷積層簡單替代。完整的網絡結構如圖3所示。
在這裏插入圖片描述
最終的輸出結果是一個7*7*30的張量


tips:

inception module

https://zhuanlan.zhihu.com/p/36806692
https://zhuanlan.zhihu.com/p/52802896
ps: 暫時還不怎麼明白 以後再細看


如下圖所示,圖片分成7x7個網格(grid cell),某個物體的中心落在這個網格中此網格就負責預測這個物體。圖中物體狗的中心點(紅色框)落入第5行、第2列的格子內,所以這個格子負責預測圖像中的物體狗。
在這裏插入圖片描述
最後一層輸出爲 7x7x30的維度。每個 1x1x30的維度對應原圖7x7個cell中的一個,1x1x30中含有類別預測和bounding box座標預測
在這裏插入圖片描述
每個網格(1*1*30維度對應原圖中的cell)要預測2個bounding box (圖中黃色實線框)的座標(x,y,w,h) ,其中:中心座標的(x,y)相對於對應的網格歸一化到0-1之間w,h用圖像的width和height歸一化到0-1之間每個bounding box除了要回歸自身的位置之外,還要附帶預測一個confidence值這個confidence代表了所預測的box中含有object的置信度和這個box預測的有多準兩重信息confidence=Pr(Object)IOUpredtruthconfidence = Pr(Object)*IOU_{pred}^{truth}
其中如果有ground true box(人工標記的物體)落在一個grid cell裏,第一項取1,否則取0。
第二項是預測的bounding box和實際的ground truth box之間的IOU值。即:每個bounding box要預測 x,y,w,h,confidence,共5個值 ,2個bounding box共10個值,對應 1*1*30維度特徵中的前10個。

每個網格還要預測類別信息,論文中共有 20 類。7 x 7 的網格,每個網格要預測 2 個 bounding box 和 20 個類別概率,輸出就是 7 x 7 x ( 5 x 2 + 20)。 (通用公式:S x S個網格,每個網格要預測 B 個bounding box 還要預測 C 個categories,輸出就是 S x S x ( 5 x B + C ) 的一個tensor。 注意:class信息是針對每個網格的,confidence信息是針對每個bounding box的)。

2.2Training部分

  1. 預訓練分類網絡:利用ImageNet 1000-class的分類任務數據集Pretrain卷積層使用上述網絡中的前20 個卷積層,加上一個 average-pooling layer,最後加一個全連接層,作爲 Pretrain 的網絡
  2. 訓練檢測網絡: 將Pretrain的結果的前20層卷積層應用到Detection中,並加入剩下的4個卷積層及2個全連接。同時爲了獲取更精細化的結果,將輸入圖像的分辨率由 224* 224 提升到 448* 448。
  3. 最後一層預測類概率和bounding box的座標,將所有的預測結果都歸一化到 0~1, 對最後一層使用線性激活函數,其餘層均使用 Leaky RELU 作爲激活函數。 Leaky RELU的公式如下:
    Φ(x)={x,ifx&gt;00.1x,otherwise\Phi(x) = \begin{cases}x,\quad if\quad x&gt;0\\ 0.1x,\quad otherwise\end{cases}
    leaky relu可以解決relu的梯度消失問題

tips:

激活函數

加入激活函數是用來加入非線性因素的,解決線性模型所不能解決的問題
https://zhuanlan.zhihu.com/p/32824193
https://zhuanlan.zhihu.com/p/25279356
深度學習中,使用relu存在梯度過大導致神經元“死亡”,怎麼理解? - 尹相楠的回答 - 知乎
https://www.zhihu.com/question/67151971/answer/434079498


損失函數
使用sum-squared error(和平方誤差) 因爲它容易優化,但是它並不完全符合我們最大化平均精度的目標。它的定位誤差與分類誤差相等,可能不是理想的。而且,在每個圖像中,許多網格單元不包含任何對象。這就把這些細胞的“置信度”分數推到零,往往超過了包含對象的細胞的梯度。這可能導致模型不穩定,導致訓練早期發散。
解決方案:增加邊界框座標預測的損失,並且減少了不包含對象的框的置信度預測的損失。我們使用兩個參數來實現這一點,λ\lambdacoordλ\lambdanoobj,前者賦值爲5, 後者賦值爲0.5,下圖爲損失函數設計圖
在這裏插入圖片描述
損失函數的設計目標就是讓座標(x,y,w,h),confidence,classification 這個三個方面達到很好的平衡。簡單的全部採用了sum-squared error loss來做這件事會有以下不足:

  1. 8維的localization error和20維的classification error同等重要顯然是不合理的
  2. 如果一個網格中沒有object(一幅圖中這種網格很多),那麼就會將這些網格中的box的confidence push到0,相比於較少的有object的網格,這種做法是overpowering的,這會導致網絡不穩定甚至發散

解決方法:

  1. 更重視8維的座標預測,給這些損失前面賦予更大的loss weight,在pascal VOC訓練中取5(上圖藍色框)。
  2. 對沒有object的bbox的confidence loss,賦予小的loss weight,在pascal VOC訓練中取0.5(上圖黃色框)。
  3. 有object的bbox的confidence loss (上圖紅色框) 和類別的loss (上圖紫色框)的loss weight正常取1。

對不同大小的bbox預測中,相比於大bbox預測偏一點,小box預測偏一點更不能忍受。而sum-square error loss中對同樣的偏移loss是一樣的。
解決方法:
box的width和height取平方根代替原本的height和width。 如下圖:small bbox的橫軸值較小,發生偏移時,反應到y軸上的loss(下圖綠色)比big box(下圖紅色)要大。
在這裏插入圖片描述

一個grid預測多個bounding box,在訓練時我們只需要每個object(ground true box)只有一個bounding box專門負責(即一個object 一個bbox)。具體做法是與ground true box(object)的IOU最大的bounding box 負責該ground true box(object)的預測
這會使得每個predictor可以專門的負責特定的物體檢測。隨着訓練的進行,每一個 predictor對特定的物體尺寸、長寬比的物體的類別的預測會越來越好。


tips:

準確率,召回率,mAP(mean average precision)解釋

https://blog.csdn.net/leviopku/article/details/80835929


爲了避免過度擬合,使用dropout和廣泛的數據擴充

  1. 在第一個連接層之後我們丟棄具有速率=0.5的層,防止層之間的co-adaptation(相互影響)
  2. 對於數據增強,引入隨機縮放和最多原始圖像大小的20%的translations。
  3. 隨機調整曝光和飽和度的圖像多達1.5倍的HSV顏色空間

tips:

droput解決過擬合問題

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

data augmentation數據增強

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


2.3 Inference部分

就像在訓練中,預測測試圖像的檢測只需要一個網絡評估。在PASCAL VOC上,網絡預測每個圖像的98個邊界盒和每個盒子的類概率。YOLO在測試時間非常快,因爲它只需要單個網絡評估,不像基於分類器的方法
當圖像中的object較大,或者處於 grid cells 邊界的object,可能在多個 cells 中被定位出來。可以用Non-Maximal Suppression(NMS,非極大值抑制) 進行去除重複檢測的物體,可以使最終的 mAP 提高,但相比較於 NMS 對於 DPM、R-
CNN 的提高並不算大。


tips:

Non-Maximal Suppression(NMS) 非極大值抑制

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

mAP

見上一個tips


2.4 Limitations of YOLO部分

  1. 每個 grid cell 只預測一個 類別的 Bounding Boxes,而且最後只取置信度最大的那個 Box。這就導致如果多個不同物體(或者同類物體的不同實體)的中心落在同一個網格中,會造成漏檢。即YOLO對相互靠的很近的物體(挨在一起且中點都落在同一個格子上的情況),還有很小的羣體 檢測效果不好,這是因爲一個網格中只預測了兩個框,並且只屬於一類
  2. 預測的 Box 對於尺度的變化比較敏感,在尺度上的泛化能力比較差。即測試圖像中,當同一類物體出現的不常見的長寬比和其他情況時泛化能力偏弱。
  3. 識別物體位置精準性差
  4. 召回率低

4 Experiments部分

Test的時候,每個grid預測的class信息 Pr(ClassiObject)Pr(Class_{i}|Object) 和bounding box預測的confidence信息 Pr(Object)IOUpredtruthPr(Object)∗IOU^{truth}_{pred} 相乘,就得到每個bounding box的class-specific confidence score。
Pr(ClassiObject)Pr(Object)IOUpredtruth=Pr(Classi)IOUpredtruthPr(Class_{i}|Object)*Pr(Object)∗IOU^{truth}_{pred}=Pr(Class_{i})*IOU^{truth}_{pred}

  1. 等式左邊第一項就是每個grid預測的類別信息,第二三項就是每個bounding box預測的confidence。這個乘積即encode了預測的box屬於某一類的概率,也有該box準確度的信息。
    在這裏插入圖片描述
  2. 對每一個網格的每一個bbox執行同樣操作: 7x7x2 = 98 bbox (每個bbox既有對應的class信息又有座標信息)
    在這裏插入圖片描述
  3. 得到每個bbox的class-specific confidence score以後,設置閾值,濾掉得分低的boxes
    在這裏插入圖片描述
  4. 在得到Bounding Box,Confidence, Class probability後利用非極大值抑制算法保留目標框

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

YOLOv1最大的開創性貢獻在於將物體檢測作爲一個迴歸問題進行求解,輸入圖像經過一次inference,便能得到圖像中所有物體的位置和其所屬類別及相應的置信概率。
而rcnn/fast rcnn/faster rcnn將檢測結果分爲兩部分求解:物體類別(分類問題),物體位置即bounding box(迴歸問題),所以YOLO的目標檢測速度很快。
YOLO仍然是一個速度換精度的算法,目標檢測的精度不如RCNN

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章