YOLO V1學習筆記

YOLO V1學習筆記

1.YOLOV1的思路:

         YOLO的核心思想就是利用整張圖作爲網絡的輸入,直接在輸出層迴歸bounding box的位置和bounding box所屬的類別,把目標檢測的問題轉化成一個迴歸問題。

 

2.YOLO系列的特點:

    (1)速度快,能夠達到實時的要求,在Titan X的GPU上 能夠達到 45 幀每秒;

    (2)使用全圖作爲環境信息,背景錯誤(把背景錯認爲物體)比較少;

    (3)泛化能力強。

 

 

3.YOLOV1處理流程:

    (1)基本操作:

                1)YOLO將圖片分成7*7的單元網格,每個單元網格對應2個bounding box,故共有98個bounding box;

                2)YOLO中每一個目標只對應一箇中心點,該中心點只唯一出現在一個單元網格中,目標中心點落在的單元網格負責迴歸該目標;

    (2)訓練過程:

                1)輸入圖像爲448*448*3,經過類似GoogLenet(不相同)的網絡卷積後,得到7*7*30的特徵圖,7*7對應每一個單元網格,30個維度對應2個bbox的5個位置信息和置信度,以及20個類別信息;

                2)損失函數分爲三部分:座標偏移/置信度損失/分類損失。

    (3)測試過程:

                1)網絡訓練好後,輸入一張圖片,得到98個bbox的預測結果,其中包括置信度/分類和位置信息。

                2)分類概率顯然是一個條件概率,與前面的置信度相乘,得到真正Pr(Classi)*IoU,對所有98個bbox都進行這些操作,得到98個20*1的分類得分;

                3)再針對某一個目標的得分進行降序排列,將小於某個閾值的得分清零,再進行NMS操作得到對應的98個20*1的分類得分;

                4)對其中一個bbox的分類得分查找其最大的score,如果大於0標記bbox爲結果並輸出;沒有則放棄該bbox。由於置信度的存在,使得大部分的得分都是0,如果最大爲0,說明該bbox對應的單元網格不是任何目標的中心點。

 

4.網絡結構:

          YOLOV1的網絡結構借鑑了GoogLeNet(用1×1卷積層緊跟 3×3卷積層取代Goolenet的inception模塊),包括24個卷積層,2個全連接層;在該結構中輸入圖像的尺寸固定爲448*448,最終輸出的特徵圖大小爲7*7*30。

 

5.實現細節:

    (1)模型用ImageNet預訓練;

    (2)訓練中使用Dropout和數據增強防止過擬合;

    (3)激活函數除最後一層使用線性激活函數外,其他層使用leak RELU;

    (4)最終的預測特徵由類別概率/邊框的置信度和邊框的位置組合構成。其中類別概率共20個類別,置信度表示區域內包含物體的概率,由於有兩個邊框因此存在兩個置信度,邊框位置爲4*2共8個預測值,因此一共有30個預測值;

    (5)預測值座標的x,y用對應網格的offset歸一化到0-1之間,w,h用圖像的width和height歸一化到0-1之間。

    (6)一個區域內兩個框共用一個類別預測,在訓練時選取與物體IOU更大的框,在測試時選取置信度更高的框,另一個捨棄;因此整張圖最多檢測出49個目標;

    (7)FasterRCNN將背景作爲一個類別共21個類別,而YOLO將置信度和類別分開。

 

6.損失函數:

    (1)正負樣本區分原則:

              1)當一個真實物體的中心點落在了某個區域內,該區域負責檢測這個物體,具體做法是將與該真實物體有最大IOU的邊框設爲正樣本,這個區域的類別真值爲該真實物體的類別,該邊框的置信度真值爲1;

              2)除了上述被賦予正樣本的邊框,其餘邊框全部賦予負樣本,負樣本沒有類別損失和位置損失,只有置信度損失,其真值爲0。

    (2)損失函數構成:

              損失函數中包括五個部分:

                1)正樣本中心點座標的損失;

                2)正樣本寬高的損失;

                3)正樣本的置信度損失;

                4)負樣本的置信度損失;

                5)正樣本的類別損失。

              損失函數的設計目標就是讓座標損失/置信度損失/分類損失這三個方面達到很好的平衡,解決辦法是:

                1)更重視8維的座標預測,給這些損失前面賦予更大的損失權重, 在pascal VOC訓練中取5;

                2)對沒有目標的bbox的置信度損失,賦予小的損失權重,在pascal VOC訓練中取0.5;

                3)有目標的bbox的置信度損失和類別損失的損失權重正常取1。

                4)對不同大小的bbox預測中,相比於大bbox預測偏一點,小box預測偏一點更敏感。作者將box的width和height取平方根代替原本的height和width。small bbox的橫軸值較小,發生偏移時,反應到y軸上的損失比big box要大。

              在這個損失函數中:

              只有當某個網格中有目標的時候纔對分類誤差進行懲罰。

              只有當某個預測框對某個ground truth box負責的時候,纔會對box的座標誤差進行懲罰,而對哪個ground truth box負責就看其預測值和ground truth box的IOU是不是在那個單元格的所有box中最大。

              一個網格預測多個bounding box,在訓練時希望每個真實目標只有一個bounding box專門負責,具體做法是與gtbox(目標)的IOU最大的bounding box 負責該ground true box(目標)的預測,每個預測器會對特定大小/縱橫比/分類的gt box預測的越來越好;IOU最大者偏移會更少一些,可以更快速的學習到正確位置。

 

7.YOLOV1缺點:

    (1)小物體/靠的近的物體檢測效果不好;

    (2)新的/不常見的長寬比檢測效果不好;

    (3)邊框檢測精度不高;

    (4)大物體/小物體的位置損失權重相同,導致同等比例的定位誤差,會使小物體定位不準確;

 

8..參考資料:

    (1)YOLO V1的過程解讀

    (2)深刻解讀YOLO V1

    (3)《深度學習之pytorch物體檢測實戰》

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