YOLOv3之一些細節

2021-10-06 11:43:27 字數 2025 閱讀 5785

yolov3裡有很多細節需要注意,下面就把那裡面的一些細節總結一下。

先驗邊框,也可以叫建議框,錨框(anchorbox),是對coco資料集的真實框kmeans聚類獲得,對目標物體的真實框具有代表性。在yolov3中,3個不同深度的網路輸出52*52,26*26,13*13這三種不同尺寸的特徵圖,一共9個建議框,將這9個建議框分為3組,每組建議框和每種特徵圖一一對應。這裡借鑑了ssd網路的思想:不同深度網路檢測不同大小的物體。52*52的特徵圖大,感受野小,因此對小物體更敏感。13*13特徵圖小,感受野大,因此對大物體更敏感。

"anchor box是對coco資料集聚類獲得"

anchors_group_kmeans =

yolov3會為每個邊界框**4個值:tx、ty、tw和th,目標中心的所在網格與影象左上角的偏移是(cx, cy),它對應的建議框的寬和高為pw、ph。那麼**值將會由以下式子給出:

以原圖大小為416*416的網路為例,若特徵圖大小為13*13,則將原圖劃分為13*13個正方形網格,每個網格邊長為32。每個網格與特徵圖上的點一一對應,因此,可以通過特徵圖上點的索引得到每個網格在原圖上的位置,特徵圖索引*32就是cx和cy。

σ (t

x)\sigma(t_)

σ(tx​)

就是中心點相對網格左上角的偏移率,其中txt_

tx​是網路的輸出,經過sigmoid壓縮到(0-1)之間。bx=

σ(tx

)∗32+

cx∗32

b_ = \sigma (t_)*32 + c_*32

bx​=σ(

tx​)

∗32+

cx​∗

32,32為對應的每個網格的畫素,如果特徵圖為26*26,則每個網格邊長16畫素,如果特徵圖為52*52,每個網格邊長8畫素。訓練時可採用損失mseloss(),而非bcewithlogits(),即直接輸出,不用sigmoid啟用,這樣效果更佳。

b wb_

bw​是目標框的寬, pwp_

pw​是建議框的寬,etw

e^}et

w​就是目標框的寬相對於建議框寬的偏移率,而網路輸出的twt_

tw​實際上是偏移率的對數。因此,在做標籤的時候,就需要求出真實框相對於建議框的偏移率並取對數,以對數值作為標籤。

計算iou有很多種方式,比如小框比大框,交集比小框,交集比並集等。

在做標籤時,採用小框比大框的方式。這是因為目標框和建議框同中心點,因此採用小框比大框比較合適。

在偵測時,採用交集比最小框的方式,這是因為偵測時各個**框比較容易出現大框套小框的情況,因此採用交集比並集。

採用多標籤分類方法,而不是多分類,因此,不再使用softmax,而使用sigmoid+二分類交叉熵,pytorch中用bcewithlogits()函式。

每個框都會使用多標籤分類來**邊框中可能包含的類。我們不再使用softmax,因為我們發現它無助於提公升模型的效能,取而代之的是單獨的邏輯分類器。在訓練過程中,我們用二元交叉熵損失來評價類別**。

當我們把yolov3用在更複雜的資料集時,比如open images資料集[7],上述操作就會有很大的幫助。open images中包含了大量重疊的標籤(如女性和人),如果使用softmax,它會強加乙個假設,即每個框只有乙個類別,然而事實常常不是如此。相比之下,多標籤分類方法能更好地擬合這些資料。

yolov3中變動最大的就是網路模型(darknet53)

網路結構

YOLO V3的一些細節

yolo的基本思想是通過多層cnn bounding box的中心 x,y 座標及其長寬,當然也少不了類別資訊,參考 1 yolo v3的結構 基本原理是什麼樣?有哪些重要的引數 概念?yolo v3的優點是什麼?下文著重講解。根據yolo v3原創 2 的內容,yolo v3使用了乙個含有53個卷...

YOLOv3 從入門到部署 (一)YOLOv3概述

這是目標檢測領域常用的兩個資料集。voc和coco的區別主要在於影象標註的格式不一樣。voc將目標的標籤資訊以某種格式儲存在.xml格式的檔案中,而coco則是儲存在.txt檔案中。因此有時候voc和coco不是指資料集,而是指資料集標註格式。我們完全沒有必要去研究每種標註格式的細節,網路也有大量的...

yolov3中資料讀入(一)

yolov3的訓練 從 detector.c de train detector 函式開始,函式如下 void train detector char datacfg,char cfgfile,char weightfile,int gpus,int ngpus,int clear,int dont...