YOLO v3 網路結構分析

2021-09-23 01:53:24 字數 2311 閱讀 9587

最近在看tensorflow,沒有經過實踐的學習總感覺很心虛,因此打算做點什麼。所以,那就從yolo入手吧,將yolo v3改寫為tensorflow版本來進行練手。那第一步便是需要對yolo網路結構有一定的理解,不能像之前僅僅用yolo訓練資料然後檢測目標那樣浮於表面。

整個網路主要是由一系列的1x13x3的卷積層組成(每個卷積層後都會跟乙個bn層和乙個leakyrelu)層,作者說因為網路中有53個convolutional layers,所以叫做darknet-53。下圖就是darknet-53的結構圖,在其中標註了一些資訊方便理解。(卷積的strides預設為(1,1),padding預設為same,當strides為(2,2)時padding為valid)

網路輸入:原**中提到的大小320*320,416*416,608*608。這個大小必須是32的整數倍數,yolo_v3有5次下取樣,每次取樣步長為2,所以網路的最大步幅(步幅指層的輸入大小除以輸出)為2^5=32

如上圖所示為darknet-53殘差模組。darknet-53採用了resnet這種跳層連線方式,效能完全比resnet-152和resnet-101這兩種深層網路好,這裡作者並沒有給出原因,可能的原因:a.網路的基本單元的差異,b.網路層數越少,引數少。需要的計算量少。

使用殘差的結構的好處:(1)深度模型乙個關鍵的點就是能否正常收斂,殘差這種結構能保證網路結構在很深的情況下,仍能收斂,模型能訓練下去。(2)網路越深,表達的特徵越好,分類+檢測的效果都會提公升。(3)殘差中的1*1卷積,使用network in network的想法,大量的減少了每次卷積的channel,一方面減少了參數量(參數量越大,儲存的模型越大),另一方面在一定程度上減少了計算量

利用三個特徵層進行邊框的**,流程如下圖所示。注意:原darknet53中的尺寸是在分類訓練集上訓練的,所以輸入的影象尺寸是256x256,下圖是以yolo v3 416模型進行繪製的,所以輸入的尺寸是416x416,**的三個特徵層大小分別是52,26,13

在上圖中我們能夠很清晰的看到三個**層分別來自的什麼地方,以及concatenate層與哪個層進行拼接。注意convolutional是指conv2d+bn+leakyrelu,和darknet53圖中的一樣,而生成**結果的最後三層都只是conv2d。通過上圖就能更加容易地搭建出yolov3的網路框架了。

網路中作者進行了三次檢測,分別是在32倍降取樣(2^5),16倍降取樣(2^4),8倍降取樣(2^3)時進行檢測,這樣在多尺度的feature map上檢測跟ssd有點像。在網路中使用up-sample(上取樣)的原因:網路越深的特徵表達效果越好,比如在進行16倍降取樣檢測,如果直接使用第四次下取樣的特徵來檢測,這樣就使用了淺層特徵,這樣效果一般並不好。如果想使用32倍降取樣後的特徵,但深層特徵的大小太小,因此yolo_v3使用了步長為2的up-sample(上取樣),把32倍降取樣得到的feature map的大小提公升一倍,也就成了16倍降取樣。同理8倍取樣也是對16倍降取樣的特徵進行步長為2的上取樣,這樣就可以使用深層特徵進行detection。

yolo v3通過上取樣的方式很好的使16倍降取樣和8倍降取樣使用深層特徵,但進行4次下取樣和3次下取樣得到的淺層feature map大小是一樣的。yolo_v3想把這些淺層特徵也利用起來,就有了route層。把16倍降取樣得到的feature map和四次下取樣得到的層拼接在一起,在channel那個維度進行拼接。這樣拼接的好處:讓網路同時學習深層和淺層特徵,表達效果更好。8倍降取樣同樣也是這樣的操作,把三次下取樣的feature map拼接在一起。

網路輸出大小的確定:

note:對於其中的feature map部分,yolo在3個尺度上進行目標檢測,是不是挺像opencv的多尺度目標檢測思想啊!在opencv中,detectmultiscale()函式就是構造影象金字塔,在不同解析度影象上進行目標檢測,我想,借助於這個思想,可以對yolo進行部分更改,以加深或者裁減或者指定影象金字塔的數量或者解析度。

1.yolo_v3 原理以及訓練說明

2.yolo系列之yolo v3【深度解析】

YOLO v2網路結構分析

原 yolo9000 better,faster,stronger yolo2網路中第0 22層是darknet 19網路,後面第23層開始,是新增的檢測網路。說明 route層的作用是進行層的合併 在第27層 直接新增了乙個passthrough layer 得到26 26的細粒度的特徵,然後將2...

目標檢測 Yolov3網路詳解

現在來仔細理解下yolov3這個網路細節。目標檢測的經典網路有yolo和ssd,還有今天要記錄的yolov3。yolo 將一張圖劃分為眾多個小格仔,每個小格仔檢測到一種物體,並 兩個bounding box,問題是當小格仔內的物體眾多時,yolo很可能會漏檢。ssd 不太適合檢測小物體,vgg19限...

yolov4網路結構 目標檢測YOLO V4

一 yolo v4主要做了什麼?通俗的講,就是說這個yolo v4演算法是在原有yolo目標檢測架構的基礎上,採用了近些年cnn領域中最優秀的優化策略,從資料處理 主幹網路 網路訓練 啟用函式 損失函式等各個方面都有著不同程度的優化,雖沒有理論上的創新,但是會受到許許多多的工程師的歡迎,各種優化演算...