【YOLO系列】YoloV1目標檢測模型

    前面博文介紹了目標檢測的概況,以及【RCNN系列】的目標檢測模型,這個系列介紹【YOLO系列】的目標檢測模型。本篇文章介紹YoloV1網絡模型的概況。

    YoloV1論文:https://arxiv.org/pdf/1506.02640

    YoloV1論文翻譯:https://zhuanlan.zhihu.com/p/35416826

一、概述

    Yolo(You Only Look Once),你只需要看一次,通過這個任性的名字,就可以稍微區分出其與【RCNN】系列的最重要的不同之處,YOLO是end-to-end模式,並且是真正意義上的 Real-Time Object Detection。(YoloV1 mAP:63%,fps:45;Faster RCNN mAP:73%,fps:7)

【傳統檢測方法】基於區域提名的,大致分爲三個步驟:先使用不同的方法(滑動窗口、選擇搜索、區域提案)提取區域的特徵圖,然後再使用分類器進行識別,最後迴歸預測。例如:R-CNN、SPPNet、Fast R-CNN、Faster R-CNN。

【改進檢測方法】基於端到端的(end to end),無需候選區域。

二、網絡模型 

YoloV1

    YOLO使用了24個級聯卷積層和最後2個全連接層,交替的1×1卷積層降低了前面層的特徵空間。在ImageNet分類任務上使用分辨率的一半(224×224輸入圖像)對卷積層進行預訓練,然後將分辨率加倍進行目標檢測。

2.1 Yolo實現思路:

1、將一副圖片分成SxS個網格(Grid Cell);

2、每個網格要預測B個bounding box,每個box除了要回歸自身的位置之外,還要附帶預測一個Confidence:

                                           C = Pr(Object)*IoU \frac{truth}{pred}

      Confidence由兩部分乘積所得,Pr(Object)表示該bounding box是否含有object,Iou(truth/pred)表示預測與真實框的交併比。

3、每個網格要預測針對20個類別的條件概率(同一個網格B個bboxes共享一個條件概率)

        訓練:                        Pr(Class_i | Object)

        測試:                       Pr(Class_i | Object) * Pr(Object)*IoU\frac{truth}{pred}=Pr(Class_i)*IoU\frac{truth}{pred}    

4、在Pascal VOC中,YOLO檢測系統的圖像輸入爲448×448,S=7,B=2,一共有20個class(C=20),輸出就是7×7×30的一個tensor。如上圖所示,7*7*30中的30包含2個boundingbox預測的(x,y,w,h,c) + 20個類別。

2.2 Yolo實現細節

1、yolov1返回什麼

【YOLO返回】返回S*S*(B*5 + C) = 7 * 7 (2* 5 + 20)tensor, 該7*7*30的tensor包含了 中心、寬高偏移以及置信度,和每個類別得分。

 

2、yolov1如何預測

【YOLO預測】預測目標的偏移和得分。 此處預測的(x, y )(w, h)和【RCNN】系列一樣預測是偏移,而yolo還會進一步將該偏移進行歸一化處理,也就是輸出的(x, y)是相對於相對應網格的偏移得到的歸一化數據,輸出的(w, h)是相對於整張圖片寬高歸一化得到的數據。

                                                   x = \frac{x'}{w''}*S - x''; y = \frac{y'}{h''}*S-y''   

                                                   w = \frac{w'}{w''}; h = \frac{h'}{h''}

    在此,規格寬高(w'', h'')就是整體圖片打寬和高,規則中心(x'', y'')就是((0,0),(0,1),...(7,7)) ,如上圖規格中心則爲(4,2)

3、yolov1如何篩選

【橫向篩選】:在不同的bbox裏面都預測到某個目標,依據Confidence,即IOU。

    如上圖所示:

        首先:將所有bbox(7*7*2=98個)中對於一個類別得分小於閾值的得分設置爲0;

        其次:將所有更新後得分的bbox排序,按照得分從高到底,選擇該類別中得分最高的設置爲bbox_max;

        然後:將其餘bbox類別的區域與bbox_max區域做IOU計算,如果得分大於閾值,則設置該bbox得分爲0;【NMS】

        然後:選擇滿足第1步的次得分高值重複進行2、3步的步驟,直至計算結束。

        最後:針對下一個類別進行1、2、3、4的步驟。

      【總結】:這個流程就會篩選出不同bbox對於同一個目標的預測情況,篩選出一個最好的。

【縱向篩選】:在同一個bbox裏面預測到多個目標,依據P(Class),即分類得分。

        找到20個類別裏面得分最高的,也就是該bbox可能的類別。

4、yolov1損失計算

【損失】yolov1的損失包括3個環節,5部分。

   第一環節:bbox的中心和寬高:

           \lambda_{coord} \sum_{i=0}^{S^2} \sum_{j=0}^{B}1_{ij}^{obj}[(x_i - \hat{x_i})^{2}+(y_i - \hat{y_i})^{2}]                           當有目標時中心的損失函數

               \lambda_{coord} \sum_{i=0}^{S^2} \sum_{j=0}^{B}1_{ij}^{obj}[(\sqrt{w_i }-\sqrt{\hat{w_i}})^{2}+(\sqrt{h_i }-\sqrt{\hat{h_i}})^{2}]     當有目標時寬高的損失函數,添加根號防止小物體變

                                                                                                           化影響不明顯

    第二環節:bbox置信度:

                         \sum_{i=0}^{S^2} \sum_{j=0}^{B}1_{ij}^{obj}(C_i - \hat{C_i})^{2}                                            當有目標時置信度損失

                      \lambda _{noobj}\sum_{i=0}^{S^2} \sum_{j=0}^{B}1_{ij}^{obj}(C_i - \hat{C_i})^{2}                                    當沒有目標時置信度損失

     第三環節:類別:

                     \sum_{i=0}^{S^2}1_{i}^{obj}\sum_{c\epsilon Classes}^{ }(p_i(c)-\hat{p_i}(c))^{2}                                 預測類別損失

【注意】

    1、local損失和classify損失同樣重要不合理,因此添加了 λcoord,設置爲5;

    2、對於不含有目標的bbox的置信度Confidence未將其權重設置爲0,而是採用了λnoobj​,設置爲0.5,因爲大多數bbox都不含有目標,如果單純的將未含有bbox的confidence設置爲0,則會造成不平衡;對於含有目標的bbox,對應的權重爲1;

    3、對於w和h的損失進行開根號處理,是因爲不同大小的物體的偏離情況,小物體情況更嚴重點,如果不開根號,則loss一致,而開根號可以緩和這種不同尺寸物體偏離情況。

三、創新與挑戰

1、創新

  • YOLO速度非常快。YOLO的基礎版本以每秒45幀的速度運行,而快速版本運行速度超過150fps。
  • YOLO是在整個圖像上進行推斷的。與基於滑動窗口和候選框的技術不同,YOLO在訓練期間和測試時都會顧及到整個圖像,所以它隱式地包含了關於類的上下文信息以及它們的外觀。
  • YOLO能學習到目標的泛化表徵。把在自然圖像上進行訓練的模型,用在藝術圖像進行測試時,YOLO大幅優於DPM和R-CNN等頂級的檢測方法。由於YOLO具有高度泛化能力,因此在應用於新領域或碰到意外的輸入時不太可能出故障。

2、挑戰

  • 輸入模型的尺度固定,因爲輸出層包含全連接層。
  • 性能比較差,相對於當時最先進的目標檢測技術。
  • 定位精度不夠高,相對於區域提案網絡來說,定位不夠理想。

總結:yolov1是在15年發明出來的,相對於當時最先進的目標檢測模型Faster rcnn的mAP 73%的檢測精度,其mAP 63%確實不夠出色,但是對於與rcnn的mAP 53%要更優秀,主要是yolo將rcnn 兩步走的模式併爲一步走,端到端的模式,可謂一個大的改變,端到端的模式導致了訓練、推斷時間大幅度的降低,是一個真正意思上的可以達到實時檢測(Faster rcnn fps 7, yolov1 fps 45)的模型。yolov1是【Yolo】系列的第一個版本,真正的改變了傳統目標檢測的思想,原來可以不用先提取區域再進行分類,原來目標檢測可以這樣玩,而這還只是yolo的開始。

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