YOLO v3有哪些新特點?

2021-09-11 09:33:25 字數 4904 閱讀 9441

you only look once(你只需看一次),或者yolo,是目前比較快的目標物件檢測演算法之一。雖然它不再是最精確的目標物件檢測演算法,但是當您需要實時檢測時,它是乙個非常好的選擇,不會損失太多精確度。

2023年上半年,yolo的第三個版本問世,這篇文章旨在解釋yolo v3中引入的變化。這不是乙個解釋yolo是什麼的文章。 我假設您知道yolo v2是如何工作的。如果情況並非如此,我建議您檢視joseph redmon等人的**,了解yolo如何運作。

yolo v3: 更好,但沒有更快,更強

yolo v2紙的官方命名為「yolo9000:更好,更快,更強」,看起來像一種兒童喝的健康牛奶飲品,而不是目標物件檢測演算法。

yolo 9000曾經是最快的,也是最準確的演算法之一。然而,隨著retinanet這樣演算法的出現,它不再是精確度的。 然而,它仍然是最快的演算法之一。

為了提高精確度,yolo v3在速度方面做了妥協。 雖然早期版本在titan x上可以以45 fps執行,但當前版本的時鐘頻率約為30 fps。這與其darknet底層架構的複雜性增加有關。

darknet-53

yolo v2使用了自定義深度架構darknet-19,最初是19層網路,外加11層用於物件檢測。採用30層架構的yolo v2,在小物件檢測上經常遇到麻煩。這歸因於層對輸入進行了下取樣,導致細粒度特徵的丟失。為了解決這一問題,yolo v2使用了特性對映,連線了前一層的特徵對映以捕獲低階特徵。

然而,yolo v2的架構仍然缺少一些最重要的元素,這些是目前大多數最新演算法的主要元素。比如沒有剩餘塊,沒有跳連線,也沒有上取樣。而yolo v3包含所有這些。

首先,yolo v3使用了darknet的變體,最初在imagenet上訓練出53層網路。然後在其上堆疊了53層進行檢測任務,這樣yolo v3就擁有106層完全卷積的底層架構。這就是yolo v3相較於yolo v2速度慢的原因。下圖是yolo架構現在的樣子:

三種尺度的檢測

新架構值得誇耀的有殘差跳連線(residual skip connections)和上取樣。v3最突出的特點是它可以在三種不同的尺度上進行檢測。yolo是乙個全卷積網路,它的最終輸出是通過在特徵對映上應用1 x 1核生成的。在yolo v3中,通過在網路中三個不同位置的三種不同大小的特徵圖上應用1×1核來完成檢測

檢測核的形狀是1 × 1 ×(b ×(5 + c))。這裡b是特徵對映中每個單元可以**的邊界框的數量,「5」表示4個邊界框屬性和1個物件置信度,c是類別數目。在使用coco訓練的yolo v3中,b = 3且c = 80,因此核大小為1 x 1 x 255。由該核生成的特徵對映具有與先前特徵對映相同的高度和寬度,並且具有沿著如上所述的深度的檢測屬性。

源自: blog.*****space.com/how-to-impl…

在進一步討論之前,我要指出網路的步幅,即乙個層被定義為它對輸入進行下取樣的比率。在以下示例中,我假設我們有乙個大小為416 x 416的輸入影象。

yolo v3在三個尺度上進行**,分別對輸入影象進行32、16和8的尺寸下取樣

第一次檢測由第82層進行。對於前81層,影象由網路進行下取樣,使得第81層具有32的步幅。如果我們的影象大小為416×416,則得到的特徵對映為13×13的大小。這裡使用1 x 1檢測核,為我們提供13 x 13 x 255的檢測特徵對映。

接下來,來自第79層的特徵對映經歷幾個卷積層之後,2倍上取樣增加到26×26的維度。然後,該特徵對映與來自第61層的特徵對映做深度連線。再然後,組合的特徵對映再次經過幾個1×1卷積層以融合來自較早層(61)的特徵。通過第94層進行第二次檢測之後,產生26×26×255的檢測特徵對映。

再次重複類似的過程,其中來自層91的特徵對映在與來自層36的特徵對映做深度連線之前經歷少量卷積層。像之前一樣,接下來幾個1×1卷積層來融合來自先前層(36)的資訊。我們在第106層進行最後乙個3倍增,產生尺寸為52 x 52 x 255的特徵對映。

檢測較小的目標物件效果更好

不同層次的檢測有助於解決小物體的檢測問題,這是yolo v2的常見問題。上取樣圖層與先前圖層連線有助於保留細粒度特徵,這有利於檢測小物件。

13 x 13層負責檢測大型目標物件,而52 x 52層檢測較小的目標物件,26 x 26層檢測中等大小目標物件。

選擇錨點框

yolo v3總共使用了9個點框。每個尺度下三個。如果您在自己的資料集上訓練yolo,則應該使用k-means聚類來生成9個錨點。

然後,按照尺寸的降序排列錨點。為第乙個尺度分配三個最大的錨點,為第二個尺度分配下三個錨點,為第三個尺度分配最後三個錨點。

每個影象有更多邊界框

如果輸入影象大小相同,yolo v3比yolo v2**更多的邊界框。例如,原始解析度為416 x 416時,yolo v2**13 x 13 x 5 = 845個框。在每個網格單元,使用5個錨點檢測到5個框。

而yolo v3**3種不同尺度的方框。對於416 x 416的相同影象,**框的數量是10647。這意味著yolo v3是yolo v2**的盒子數量的10倍。您可以很容易想到為什麼它比yolo v2慢。在每個尺度上,每個網格可以使用3個錨來**3個框。由於有三個尺度,所以總共使用的錨點框數量為9個,每個尺度3個。

損失函式的變化

早些時候,yolo v2的損失功能看起來像這樣。

來自: pjreddie.com/media/files…

我知道這個公式很可難,但請注意最後三個式子。其中,第乙個懲罰負責**物件的邊界框的物件分數**(理想情況下這些分數應為1),第二個用於沒有物件的邊界框(理想分數應該為零),最後乙個懲罰**物件的邊界框的類**。

yolo v2中的最後三個項是平方誤差,而在yolo v3中,它們已經被交叉熵誤差項所取代。換句話說,現在通過邏輯回歸**yolo v3中的物件置信度和類別**

當我們訓練檢測器時,對於每個真正的框,我們分配乙個邊界框,其錨點與真正的框最大重疊。

不再用softmax分類

yolo v3現在對影象中檢測到的物件執行多標記分類。

在早期的yolo中,作者習慣於進行類別softmax,將具有最高得分的類別作為包含在邊界框中的目標物件的類別。這在yolo v3中得到了修改。

softmax分類依賴於類別是互斥的假設,簡單地說,如果乙個物件屬於乙個類別,那麼它就不屬於另乙個類別。這在coco資料集中工作正常。

但是,當我們在資料集中有personwomen之類的類別時,上述假設就失效了。這就是為什麼yolo的作者沒有採用softmax分類的原因。相反,使用邏輯回歸**每個類別分數,並且使用閾值來**物件的多個標籤。分數高於此閾值的類別將分配給該框。

基準測試

yolo v3與其他先進的探測器(如retinanet)表現相當,且在coco map 50基準測試中速度更快。它也比ssd及其的變體更好。以下是**中給出的效能對比。

yolo與retinanet在coco 50基準測試中的表現

但是,但是,但是,yolo在coco基準測試中失去了更高的iou值,用於拒絕檢測。我不打算解釋coco基準測試是如何工作的,因為它超出了本文範圍,但coco 50基準測試中的50是衡量**的邊界框與物體的真正框的對齊程度。這裡50對應於0.5 iou。如果**和真正框之間的iou小於0.5,則**被分類為誤定位並標記為假陽性。

在基準測試中,數值越高(例如,coco 75),框需要更完美地對齊,以免被評估指標拒絕。這是yolo被retinanet超越的地方,因為它的邊框不像retinanet那樣對齊。下面是乙個詳細的更多基準測試**。

retinanet在coco 75基準測試中的表現優於yolo

體驗一下

不同的尺度

python detect.py --scales 1 --images imgs/img3.jpg

複製**

在尺度為1的檢測中,我們看到有些大的物體被挑選,但漏檢測了幾輛車。

複製**

在尺度2上,我們沒有檢測到任何目標物件

複製**

在最大尺度3上,可以看到只檢測到了小目標物件,這些未在尺度為1時檢測到。

不同的輸入解析度

python detect.py --reso 320 --images imgs/imgs4.jpg

複製**

輸入影象解析度:320 x 320

複製**

輸入影象解析度:416 x 416

複製**

這裡,我們檢測到的椅子比以前少了一把

複製**

這裡,檢測器做了乙個錯誤的檢測:右邊的「人物」

從上面可以看到,較大的輸入解析度沒有多大幫助,但它們可能有助於檢測小物體的影象。另一方面,較大的輸入解析度會增加推斷時間。這是乙個超引數,需要根據應用進行調整。

您還可以試驗其他指標,例如批量大小、物件置信度和nms閾值。readme檔案中有詳細的說明。

進一步閱讀

yolov3的缺點 yolov3特點總結

p1,yolov3,簡單總結下比較特別的地方 1.bounding box 中心值x,y的 是通過乙個sigmoid 函式,來 在每乙個單元 cell 的相對位置。而不像普通那種 乙個相對於anchor的offset。然後bbox 損失是用的mse 一般都是用smooth l1 3.類別 沒有使用s...

yolov3系列 零 yolov3詳解

目標檢測演算法與efficientdet講解 論 文 翻譯 yolov3主頁 yolo系列的目標檢測演算法可以說是目標檢測史上的巨集篇巨作,v3演算法是在v1 v2基礎上形成的,先看下 yolov1 yolov2 下圖為yolov3的網路結構 dbl darknetconv2d bn leaky 是...

yolov3檢測人頭 基於yolo v3的人臉檢測

一 實驗環境的搭建 1.安裝環境配置 python 3.6 tensorflow gpu 1.6.0 keras pillow opencv python matplotlib numpy 沒有通過pip安裝 例如 pip install keras 2.啟動虛擬環境,並且安裝對應的實驗環境 3.模...