目標檢測:YOLO(You Only Look Once)

RCNN系列檢測器奠定了檢測模型two stage的網絡結構,首先通過一系列方法(傳統的selective search 即 RCNN,RPN結構即fasterRCNN)產生足夠的區域候選,然後通過分類網絡判別區域候選是否爲目標並同時迴歸出目標的位置。這種two stage的網絡存在一些明顯的弊端

  • 速度瓶頸,由於第一階段產生的區域候選一般超多,通常幾千上萬個,因此後續的分類迴歸的速度無法做到很快。
  • 訓練麻煩,通常爲交替訓練的模型,網絡結構不夠優雅。
  • 無法考慮全局信息,由於是先產生區域候選,然後進行特徵提取,無法在進行分類迴歸時考慮全局的信息。因此其對於背景的誤Recall也較高(誤檢多)

YOLO作爲one stage 檢測模型的開端,爲了解決上述的two stage的典型弊端而生,主要想法就是對於原圖進行區域劃分,不再進行Region Proposal環節,每個區域就負責迴歸對應的目標的位置及類別就好,效果也很顯著,在GPU機器能夠實現45fps,Fast YOLO能夠實現155fps,另外對背景的誤判率也顯著低於RCNN系列。同時有個很有意思的點,YOLO因爲能夠考慮到圖像全局信息,在模型的遷移和泛化效果上要好於其他檢測網絡

網絡框架

  • Resize成448*448,圖片分割得到7*7網格(cell)
  • CNN提取特徵和預測:卷積部分負責提特徵。全連接部分負責預測:a) 7*7*2=98個bounding box(bbox) 的坐xcenter,ycenter,w,h 和是否有物體的confidence 。 b) 7*7=49個cell所屬20個物體的概率。
  • 過濾bbox(通過nms)

Yolo V1網絡設計很是簡潔,首先將輸入圖片劃分爲S*S個珊格,然後每個格子迴歸出B個檢測框,每個檢測框包含5個值(x,y,w,h,conf),區別於Rcnn系列,x,y爲目標中心點相對於珊格邊界的偏移比例,w,h爲目標寬高相對於輸入圖像的比例,conf爲預測目標與所有GT的IOU。同時每個珊格迴歸出其包含類別i的概率。將目標檢測問題轉換爲完全的迴歸問題。對於每張圖來說,只需要迴歸出S*S*(B*5+C)的tensor即可。在Pascal VOC測試集上,S默認爲7,B爲2。

網絡訓練

YOLO將輸入圖像分成SxS個格子(如下圖的7x7個網格grid cell,每個格子負責檢測‘落入’該格子的物體。若某個物體的中心位置的座標落入到某個格子,那麼這個格子就負責檢測出這個物體。如下圖所示,圖中物體狗的中心點(紅色原點)落入第5行、第2列的格子內,所以這個格子負責預測圖像中的物體狗。

每個格子輸出B個bounding box(包含物體的矩形區域)信息,以及C個物體屬於某種類別的概率信息(屬於狗對應的那類置爲1

最後一層輸出爲 (7*7)*30的維度。每個 1*1*30的維度對應原圖7*7個cell中的一個,1*1*30中含有類別預測和bbox座標預測。總得來講就是讓網格負責類別信息,bounding box主要負責座標信息(部分負責類別信息:confidence也算類別信息)。具體如下:

每個網格(1*1*30維度對應原圖中的cell)要預測2個bounding box (圖中黃色實線框),Bounding box信息包含5個數據值,分別爲(xcenter,ycenter,w,h)confidence,其中x,y是指當前格子預測得到的物體的bounding box的中心位置的座標。w,h是bounding box的寬度和高度。注意:實際訓練過程中,w和h的值使用圖像的寬度和高度進行歸一化到[0,1]區間內;x,y是bounding box中心位置相對於當前格子位置的偏移值,並且被歸一化到[0,1]。

confidence代表了所預測的box中含有object的置信度和這個box預測的有多準兩重信息:

 

       其中如果有ground true box(人工標記的物體)落在一個grid cell裏,第一項取1,否則取0。 第二項是預測的bounding box和實際的ground truth box之間的IOU值(以像素爲單位,用真實區域的像素面積歸一化到[0,1]區間)。

      綜上,每個bounding box要預測xcenter,ycenter,w,h,confidence共5個值,2個bounding box共10個值,對應1*1*30維度特徵中的前10個。

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

訓練策略

  • ImageNet Pretrain Backbone
  • 由於包含一些小目標,因此將網絡輸入從224 提升到 448
  • 平衡背景前景對於分類及座標迴歸的影響,由於非目標區域一般是多於目標區域的,會將conf拉向0,這會減弱前景對於loss的貢獻,因此yolo通過放大前景對於loss的權重進行一定均衡。前背景權重分別爲5,0.5.
  • 首層fc後加入dropout、同時加入隨機的線性變換和裁剪及調整HSV的飽和度和亮度進行argument用以減弱overfitting。
  • 由於部分大的目標可能佔據多個珊格,因此加入了nms處理,提升2-3%map。

損失函數設計

Backbone是典型的Inception model。Loss計算方式,多類loss混加,即對於x,y,w,h的迴歸loss + 檢測框包含目標的概率的conf + grid cell 包含目標類別的分類loss雖然每個grid cell具有多個檢測框結果,但是隻通過最高IOU的框計算conf,也就是“Responsible”機制。

損失函數的設計目標就是讓座標(x,y,w,h),confidence,classification這個三個方面達到很好的平衡。簡單的全部採用了sum-squared error loss均方和誤差作爲loss函數來優化模型參數,即網絡輸出的S*S*(B*5 + C)維向量與真實圖像的對應S*S*(B*5 + C)維向量的均方和誤差。如下式所示:

 

其中,coordError、iouError和classError分別代表預測數據與標定數據之間的座標誤差、IOU誤差和分類誤差。

a) 8維的localization error和20維的classification error同等重要顯然是不合理的;

b) 如果一個網格中沒有object(一幅圖中這種網格很多),那麼就會將這些網格中的box的confidence push到0,相比於較少的有object的網格,這種做法是overpowering的,這會導致網絡不穩定甚至發散。解決方案如下:

對不同大小的bbox預測中,相比於大bbox預測偏一點,小box預測偏一點更不能忍受。而sum-square error loss中對同樣的偏移loss是一樣。 爲了緩和這個問題,作者用了一個比較取巧的辦法,就是將box的width和height取平方根代替原本的height和width。 如下圖:small bbox的橫軸值較小,發生偏移時,反應到y軸上的loss(下圖綠色)比big box(下圖紅色)要大。

注:小框的loss要比大框的loss大很多。

一個網格預測多個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最大者偏移會更少一些,可以更快速的學習到正確位置)

特別注意:

1、YOLO方法模型訓練依賴於物體識別標註數據,因此,對於非常規的物體形狀或比例,YOLO的檢測效果並不理想。
2、YOLO採用了多個下采樣層,網絡學到的物體特徵並不精細,因此也會影響檢測效果。

 3、YOLO loss函數中,大物體IOU誤差和小物體IOU誤差對網絡訓練中loss貢獻值接近(雖然採用求平方根方式,但沒有根本解決問題)。因此,對於小物體,小的IOU誤差也會對網絡優化過程造成很大的影響,從而降低了物體檢測的定位準確性。

網絡測試

對每一個網格的每一個bbox執行同樣操作: 7x7x2 = 98 bbox (每個bbox既有對應的class信息又有座標信息)

得到每個bbox的class-specific confidence score以後,設置閾值,濾掉得分低的boxes,對保留的boxes進行NMS處理,就得到最終的檢測結果。

區別與two stage的檢測網絡,YOLO除了速度快外最爲典型的優勢就是能夠感知上下文信息,感受野通常爲全圖,因此其泛化能力會更好,同時會大量降低對於背景的錯誤Recall。如下圖,YOLO對背景內容的誤判率(4.75%)比fast rcnn的誤判率(13.6%)低很多。但是YOLO的定位準確率較差,佔總誤差比例的19.0%,而fast rcnn僅爲8.6%。

優點

1、YOLO比Faster R-CNN的速度提高了一倍以上,但是MAP略有下降

2、能夠感知上下文信息,感受野通常爲全圖,因此其泛化能力會更好,同時YOLO在訓練和推理過程中能‘看到’整張圖像的整體信息,使得誤檢率降低(不易檢測到背景);

3、泛化能力要明顯優於two stage網絡

 

缺點:

  1. 易漏檢:比較致命的傷在於珊格劃分的方式,所以一張圖最多隻能迴歸出S*S個目標,因此對於小目標及密集目標效果肯定會差每個grid 只預測一個類別的 Bounding Boxes,而且最後只取置信度最大的那個Box。這就導致如果多個不同物體(或者同類物體的不同實體)的中心落在同一個網格中,會造成漏檢;
  2. 定位精度低:另外相比於先Proposal 超多的框然後NMS合併,這種方式在與邊緣準確率就完全依賴迴歸效果了,預測的 Box 對於尺度的變化比較敏感,因此邊界不會特別準確,在尺度上的泛化能力比較差(由於損失函數的問題,定位誤差是影響檢測效果的主要原因,尤其是對小物體的處理上,還有待加強);
  3. 測試圖像中,當同一類物體出現的不常見的長寬比和其他情況時泛化能力偏弱。

 

改進

爲提高物體定位精準性和召回率,YOLO作者提出了YOLO9000,提高訓練圖像的分辨率,引入了faster rcnn中anchor box的思想,對各網絡結構及各層的設計進行了改進,輸出層使用卷積層替代YOLO的全連接層,相比YOLO,YOLO9000在識別種類、精度、速度、和定位準確性等方面都有大大提升。

 

問題

在訓練過程中,網格所預測的兩個黃色的bounding boxes是怎樣生成的?

YOLO中兩個bbox是人爲選定的(2個不同 長寬比)的box,Faster RCNN也是人爲選定的(9個 不同長寬比和scale),YOLOv2是統計分析ground true box的特點得到的(5個)。YOLO是直接回歸真實座標,而Faster是迴歸偏移量。

 

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

參考資料:

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

 

發佈了208 篇原創文章 · 獲贊 892 · 訪問量 129萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章