目標檢測:YOLOV1


目錄

  1. YOLO V1簡介
  2. 核心思想
  3. 算法流程
  4. 優缺點分析

arxiv: http://arxiv.org/abs/1506.02640

github: https://github.com/pjreddie/darknet

blog: https://pjreddie.com/publications/yolo/

github: https://github.com/gliese581gg/YOLO_tensorflow

github: https://github.com/tommy-qichang/yolo.torch

github: https://github.com/frischzenger/yolo-windows

早期的目標檢測方法通常是通過提取圖像的一些 robust 的特征(如 Haar、SIFT、HOG 等),使用 DPM (Deformable Parts Model)模型,用滑動窗口(silding window)的方式來預測具有較高 score 的 bounding box。這種方式非常耗時,而且精度又不怎么高。

后來出現了object proposal方法(其中selective search為這類方法的典型代表),相比於sliding window這中窮舉的方式,減少了大量的計算,同時在性能上也有很大的提高。利用 selective search的結果,結合卷積神經網絡的R-CNN出現后,Object detection 的性能有了一個質的飛越。基於 R-CNN 發展出來的 SPPnet、Fast R-CNN、Faster R-CNN 等方法,證明了 "Proposal + Classification" 的方法在 Objection Detection 上的有效性。但是依然沒有實現端到端的輸出。

一、YOLO V1簡介

YOLO(You Only Look Once: Unified, Real-Time Object Detection),是Joseph Redmon和Ali Farhadi等人於2015年提出的基於單個神經網絡的目標檢測系統。

相比於 R-CNN 系列的方法,YOLO提供了另外一種思路,將 Object Detection 的問題轉化成一個 Regression 問題。給定輸入圖像,直接在圖像的多個位置上回歸出目標的bounding box以及其分類類別。YOLO是一個可以一次性預測多個Box位置和類別的卷積神經網絡,能夠實現端到端的目標檢測和識別,其最大的優勢就是速度快。事實上,目標檢測的本質就是回歸,因此一個實現回歸功能的CNN並不需要復雜的設計過程。YOLO沒有選擇滑動窗口(silding window)或提取proposal的方式訓練網絡,而是直接選用整圖訓練模型。這樣做的好處在於可以更好的區分目標和背景區域,相比之下,采用proposal訓練方式的Fast-R-CNN常常把背景區域誤檢為特定目標。

二、核心思想

  1. YOLO的核心思想就是利用整張圖作為網絡的輸入,直接在輸出層回歸bounding box的位置和bounding box所屬的類別。
  2. faster RCNN中也直接用整張圖作為輸入,但是faster-RCNN整體還是采用了RCNN那種proposal+classifier的思想,只不過是將提取proposal的步驟放在CNN中實現了,而YOLO則采用直接回歸的思路。

YOLO檢測網絡包括24個卷積層和2個全連接層。(全連接層,計算速度和參數較多,比較難應用於工業種)

其中,卷積層用來提取圖像特征,全連接層用來預測圖像位置和類別概率值。

YOLO網絡借鑒了GoogLeNet分類網絡結構。不同的是,YOLO未使用inception module,而是使用1x1卷積層(此處1x1卷積層的存在是為了跨通道信息整合)+3x3卷積層簡單替代。

三、算法流程

  1. 將圖像resize到448 * 448作為神經網絡的輸入

    直接將輸入圖像的大小resize為448 * 448,不管輸入圖像的原始尺寸,這樣就應該注意在進行檢測的時候輸入不同長寬比的圖像檢測結果可能不一樣,因為resize以后圖像產生很大的變形。盡量維持訓練數據與檢測數據圖像的尺寸相似。

  2. 運行神經網絡,得到一些bounding box坐標、box中包含物體的置信度和class probabilities

    YOLO將輸入圖像划分為S*S的柵格(作者的是7*7,一共49個box),每個柵格負責檢測中心落在該柵格中的物體。每一個柵格預測B個bounding boxes,以及這些bounding boxes的confidence scores。 這個 confidence scores反映了模型對於這個柵格的預測:該柵格是否含有物體,以及這個box的坐標預測的有多准。

    公式定義如下:

    解釋公式:如果這個柵格中不存在一個 object,則confidence score應該為0;否則的話,confidence score則為 predicted bounding box與 ground truth box之間的 IOU(intersection over union)。

    YOLO對每個bounding box有5個predictions:x, y, w, h, and confidence:坐標x,y代表了預測的bounding box的中心與柵格邊界的相對值。 坐標w,h代表了預測的bounding box的width、height相對於整幅圖像width,height的比例。 confidence就是預測的bounding box和ground truth box的IOU值。

    每一個柵格還要預測C個 conditional class probability(條件類別概率):Pr(Classi|Object)。即在一個柵格包含一個Object的前提下,它屬於某個類的概率。 我們只為每個柵格預測一組(C個)類概率,而不考慮框B的數量。

    注意:

    conditional class probability信息是針對每個網格的。 confidence信息是針對每個bounding box的。

    在測試階段,將每個柵格的conditional class probabilities與每個 bounding box的 confidence相乘,這樣既可得到每個bounding box的具體類別的confidence score。這乘積既包含了bounding box中預測的class的 probability信息,也反映了bounding box是否含有Object和bounding box坐標的准確度。

  3. 進行非極大值抑制,篩選出得分最高的Boxes

    簡單說,就是最后選出多個框以后,只留最大的,其它的都為0.

    損失函數:YOLO v1全部使用了均方差(mean squared error)作為損失(loss)函數。由三部分組成:坐標誤差、IOU誤差和分類誤差。

    S:柵格的個數;

    B:每個柵格預測框的個數,這里是2(用於備用,取值更好的);

    C:目標類別id;

    坐標誤差(coordErr) 設置權重λcoord=5;

    λnoobj = 0.5。

    輸出張量總數:7*7(2*5+classNum),如下圖所示:

    考慮到每種loss的貢獻率,YOLO v1給坐標誤差(coordErr)設置權重λcoord=5。在計算IoU誤差時,包含物體的格子與不包含物體的格子,二者的IOU誤差對網絡loss的貢獻值是不同的。若采用相同的權值,那么不包含物體的格子的置信度值近似為0,變相放大了包含物體的格子的置信度誤差,在計算網絡參數梯度時的影響。為解決這個問題,YOLO 使用λnoobj=0.5修正(置信度誤差)iouErr。(此處的'包含'是指存在一個物體,它的中心坐標落入到格子內)。

    損失函數的設計目標就是讓坐標(x,y,w,h),confidence,classification 這個三個方面達到很好的平衡。

    簡單的全部采用了sum-squared error loss來做這件事會有以下不足:

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

    b) 如果一些柵格中沒有object(一幅圖中這種柵格很多),那么就會將這些柵格中的bounding box的confidence 置為0,相比於較少的有object的柵格,這些不包含物體的柵格對梯度更新的貢獻會遠大於包含物體的柵格對梯度更新的貢獻,這會導致網絡不穩定甚至發散。

    解決方案如下:

    更重視8維的坐標預測,給這些損失前面賦予更大的loss weight, 記為 λcoord ,在pascal VOC訓練中取5。對沒有object的bbox的confidence loss,賦予小的loss weight,記為 λnoobj ,在pascal VOC訓練中取0.5。有object的bbox的confidence loss 和類別的loss 的loss weight正常取1.

四、優缺點分析

4.1 當時的優點

  1. 具有開創意義,合並選框和檢測
  2. YOLO執行速度很快(相比於其他檢測系統,論文的最大亮點),因為它是一個端對端的網絡(pipeline);
  3. YOLO在預測中對整張圖的全局合理性把握得更好,因為YOLO在訓練和測試中使用的是整張圖片,這表明它在某種程度上編碼了圖片的類別和圖片內容信息。作者在論文中提到,YOLO比Fast RCNN減少了將近一半的背景錯誤。這里的background error我理解為出現bounding box,里面沒有所謂的前景物體;
  4. YOLO能夠提取到目標通用的特征,作者用自然圖片訓練,用藝術圖片測試,效果比DPM和R-CNN效果要好很多。

4.2YOLO 的缺點

  1. YOLOv1在精確度上落后於當前最好的檢測系統,主要來源於坐標定位的不准確,因為這些坐標預測都是從標簽bounding box數據中以一種新的寬高比率統計抽象出來,這個過程很容易出現定位不准確。
  2. 大的bounding box和小的bounding box對相同的小錯誤的敏感度相同。這與直覺邏輯不合,因為直覺告訴我們對於相同的小錯誤,小的bounding box應該更加敏感。雖然作者試圖在損失函數中使用平方根來克服這個缺點,但是只能部分解決。
  3. YOLOv1對密集物體,重疊面積大的物體不好預測,作者在論文中提到,每個格子負責預測一個物體,但是如果一個格子內有兩個或者多個物體,就必然會丟失物體。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM