YOLOV4學習系列(一) 初識YOLOV4

前言

四月下旬,YOLOV4騰空出世,作者是Alexeyab。因爲之前一直有對他的github 代碼(https://github.com/AlexeyAB/darknet)有研究,也學習和借鑑了不少好的方法(當然裏面也有效果一般和不太認同的地方)。所以初以爲YOLOV4就是一個YOLOV3 optimal版本,這幾天真正看了下YOLOV4,並把它在自己數據集上跑起來後 才知道V4和V3的確有較大的一些改變。

網絡結構

V3的backbone是darknet53,實際卷積層數是52層,它主要有CBL+Res1+Res2+Res8+Res8+Res4組成,CBL是Conv+Bn+Leaky-relu的統稱,每個CBL包含一個Conv;每個ResX包含1+2*X個卷積層,所以這個主幹分類網絡(特徵提取器)的卷積層數目=1+(1+2*1)+(1+2*2)+(1+2*8)+(1+2*8)+(1+2*4)= 1+3+5+17+17+9=52層。

這裏要搞清楚的一個概念是整個yolo3網絡層結構一共有106層,這裏麪包括Conv+Res+yolo+upsample+其它類型層。此外除了backbone的52個卷積層外,後面在三個yolo層輸出前的處理中也分別有7個卷積層(這個部分叫neck)。V3網絡層結構末尾層次信息截圖如下所示。

V4的backbone是基於V3 darknet53基礎上引入了CSP(Cross Stage Paritial)模塊來把RESX模塊取代掉。CSP模塊是2019年誕生的網絡模塊,比Resnet有更強的學習能力,每個CSPX包含3+2*X個卷積層,因此整個主幹網絡backbone一共包含2+(3+2*1)+2+(3+2*2)+2+(3+2*8)+2+(3+2*8)+2+(3+2*4)+1=72。 從這裏可以看到V4的主幹網絡要比V3的整整多了20個卷積層。

V4 backbone後面的Neck部分也變得更加複雜了, 添加了SPP, FPN+PAN結構等。我們以608x608網絡size爲例來分別看看V3和V4的網絡層次不同地方。

V3: 608x608->304x304->152x152->76x76->38x38->19x19->yolo1->upsample->38x38->yolo2->upsample->76x76->yolo3

V4:608x608->304x304->152x152->76x76->38x38->19x19->upsample->38x38->upsample->76x76->yolo1->38x38->yolo2->19x19->yolo3

從上面兩種網絡層次結構看,V4的neck部分的確添加了很多層。 正因爲backbone和neck層數的增加,所以V4一共有161層了,如下截圖所示:

最後就是YOLO層的處理了,即Head部分,V4和V3差不多的,只是V4使用了DIOU_nms而已。

結論

YOLOV4的網絡結構比V3變得的更復雜了,主要體現在backbone和neck部分。 目前正在基於自己數據集訓練中,速度很慢啊,至於效果怎麼樣,後面再來分享。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章