主頁 >  其他 > YOLOv4結構以及用到的tricks與創新總結

YOLOv4結構以及用到的tricks與創新總結

2021-02-17 11:40:33 其他

YOLOv4結構以及用到的tricks與創新總結

?本文參考了幾位大佬的文章,然后作了下總結,(文中用到的圖大部分來源于他們的文章,還有各演算法對應的論文)文末參考鏈接附有這幾位大佬的博客地址,

?先放上YOLOv3和YOLOv4的結構圖,好有個大致的思路:

YOLOv3:

在這里插入圖片描述

YOLOv4:

在這里插入圖片描述
圖中的說明:
1. Concat:張量拼接,會擴充兩個張量的維度,例如2626256和2626512兩個張量拼接,結果是2626768,Concat和cfg檔案中的route功能一樣,
2. add:張量相加,張量直接相加,不會擴充維度,例如104104128和104104128相加,結果還是104104128,add和cfg檔案中的shortcut功能一樣,

講YOLOv4之前先來簡單說下YOLOv3:

YOLOv3改進之處:

1. 多尺度預測:引入FPN,結合了3個尺度進行特征融合,
2. 更好的基礎分類網路Darknet-53,類似ResNet引入了殘差結構,
3. Softmax層被替換成一個1x1的卷積層+logistic激活函式的結構,
分類損失采用binary cross-entropy loss(二分類交叉損失熵)
4. Tiny-YOLOv3主要區別就是:只結合2個尺度進行特征融合,

YOLOv4改進之處:

YOLOv4的特點是集大成者,用到了相當多的tricks,
文章將目前主流的目標檢測器框架進行拆分:input、backbone、neck 和 head.

總結一下YOLOv4框架:
Backbone:CSPDarknet53
Neck:SPP,FPN+PAN
Head:YOLOv3
YOLOv4 = CSPDarknet53 + SPP + (FPN+PAN) + YOLOv3

本文主要從以上4個部分對YoloV4的創新之處進行講解,讓大家一目了然,
(各部分有超鏈接直接點擊即可跳到文中相應位置)

  1. 輸入端:這里指的創新主要是訓練時對輸入端的改進,主要包括Mosaic資料增強、cmBN、SAT自對抗訓練
  2. BackBone主干網路:將各種新的方式結合起來,包括:CSPDarknet53、Mish激活函式、Dropblock
  3. Neck:目標檢測網路在BackBone和最后的輸出層之間往往會插入一些層,比如Yolov4中的SPP模塊、FPN+PAN結構
  4. 預測端:輸出層的錨框機制和Yolov3相同,主要改進的是訓練時的損失函式CIOU_Loss,以及預測框篩選的nms變為DIOU_nms

Mosaic資料增強(輸入端部分):

在這里插入圖片描述
?Yolov4中使用的Mosaic是參考2019年底提出的CutMix資料增強的方式,但CutMix只使用了兩張圖片進行拼接,而Mosaic資料增強則采用了4張圖片,隨機縮放、隨機裁剪、隨機排布的方式進行拼接,
使用原因:
?在平時專案訓練時,小目標的AP一般比中目標和大目標低很多,而Coco資料集中也包含大量的小目標,但比較麻煩的是小目標的分布并不均勻,所以為了平衡小、中、大目標的占比數量,
優點:
1.擴充了資料集:隨機使用4張圖片隨機拼接,且通過隨機縮放可以獲得很多小目標,讓網路的魯棒性更好,
2.減少GPU:因為使用Mosaic增強進行訓練時,4張圖片被整合成一張圖片,這樣一來可以使mini-batch大小并不用很大,這樣一個GPU就能達到比較好的效果,
?

CmBN交叉小批量標準化(輸入端部分):

在這里插入圖片描述
?上圖為BN的處理程序,BN是對當前mini-batch進行歸一化,
?CBN則是對當前及其前3個batch的結果進行歸一化,且利用了泰勒多項式對前3次統計資料進行了補償(因為每個batch都更新了一次引數,所以這4個batch的使用的是不同網路引數,所以這里才做補償),
?CmBN是CBN的改進,其區別在于其區別在于權重更新時間點不同,CBN是針對batch來說的,因為同一個batch內權重引數一樣,因此計算不需要進行補償,而CmBN是針對mini-batch來說的,其僅僅收集單個batch中的mini-batch之間的統計資料,(這里不太確定,應該是這樣吧?)
在這里插入圖片描述

SAT,Self-adversarial-training自對抗訓練(輸入端部分):

自對抗訓練(SAT)也是一種新的資料增強方法,它包括兩步,
1.利用原始影像生成對抗樣本,
2.通過在原有的模型訓練程序中注入對抗樣本,從而提升模型對于微小擾動的魯棒性,

Mish激活函式(backbone主干網路部分):

Mish:x * tanh(ln(1+e^x))
在這里插入圖片描述
?ReLU和Mish的對比,Mish的梯度更平滑,相比之下,Mish能更好地保持準確性,這可能是因為它能更好地傳播資訊,平滑的激活函式允許更好的資訊深入神經網路,從而得到更好的準確性和泛化,(具體的可以看mish論文)
作者只在Backbone中采用了Mish激活函式,網路后面仍然采用Leaky_relu激活函式,

CSPDarknet53(backbone主干網路部分):

在這里插入圖片描述
?我們先來看看CSP論文里的圖,它是對比了DenseNet和CSPDenseNet,
?Yolov4在Backbone部分的一個主要改進點就是在ResBlock部分采用了CSP,相比較于原始的ResBlock,CSP將輸入的特征圖按照channel進行了切割,只使用原特征圖的一半輸入到殘差網路中進行前向傳播,另一半在最后與殘差網路的輸出結果直接進行按channel拼接(concatenate),這樣做的好處在于:
1、輸入只有一半參與了計算,可以大大減少計算量和記憶體消耗;
2、反向傳播程序中,增加了一條完全獨立的梯度傳播路徑,梯度資訊不存在重復利用,如下圖所示:
?下圖為YOLOv4中的CSP塊:
在這里插入圖片描述
?可以看到一半經過殘差模塊的路徑,一半直接于殘差網路的輸出結果進行channel拼接cancat,

?下面對比一下darknet53(YOLOv3中采用),CSPdarknet53(YOLOv4中采用):
在這里插入圖片描述
在這里插入圖片描述

?說明一下:關于圖中各模塊的解釋看最上面的YOLOv4總結構圖,
?注意:YOLO V4使用時刪去了最后的池化層、全連接層以及Softmax層
?CSPdarknet53優點:

1.增強CNN的學習能力,使得在輕量化的同時保持準確性,
2.優點二:降低計算瓶頸
3.優點三:降低記憶體成本

Dropblock(backbone主干網路部分):

?dropout的主要問題就是隨機drop特征,這一點在FC層是有效的,但在卷積層是無效的效果并不好,因為卷積層的特征是空間相關的,當特征相關時,即使有dropout,資訊仍能傳送到下一層,導致過擬合,
DropBlock是dropout的一種結構化形式,在DropBlock中,特征在一個block中,例如一個feature map中的連續區域會一起被drop掉(因為連續的區域它們之間的資訊密切相關,洗掉連續的區域可以洗掉某些語意資訊),當DropBlock拋棄掉相關區域的特征時,為了擬合資料網路就不得不往別處尋找新的特征,(具體實作可以看dropblock論文)
在這里插入圖片描述

SPP模塊(Neck部分):

YOLOv4中的SPP是在backbone和prediction之間的neck部分,neck部分是為了更好地提取融合特征,提升模型性能,
在這里插入圖片描述
?作者在SPP模塊中,使用k={11,55,99,1313}的最大池化的方式,再將不同尺度的特征圖進行Concat操作(即channels堆疊),
?注意:這里最大池化采用padding操作,移動的步長為1,比如13×13的輸入特征圖,使用5×5大小的池化核池化,padding=2,因此池化后的特征圖仍然是13×13大小,
采用SPP模塊的方式,比單純的使用k*k最大池化的方式,更有效的增加主干特征的接收范圍,顯著的分離了最重要的背景關系特征,

FPN+PAN模塊(Neck部分):

?FPN其實就是不同尺度特征融合預測,PAN是借鑒影像分割領域的PANet的創新點,Alexey將其拆分應用到Yolov4中,進一步提高特征提取的能力,,
?FPN結構我在我的另一篇博客有講:FPN (feature pyramid network)特征金字塔網路,
?這里直接根據YOLOv4中的FPN分析,再來看看YOLOv4的圖:
在這里插入圖片描述
?可以看到經過幾次下采樣(CSPDarknet53中講到,每個CSP模塊前面的卷積核都是33大小,步長為2,相當于下采樣操作),三個紫色箭頭指向的地方,輸出分別是7676、3838、1919,
以及最后的Prediction中用于預測的三個特征圖①1919255、②3838255、③7676255,[注:255表示80類別(1+4+80)×3=255]
?我們將Neck部分用立體圖畫出來,更直觀的看下兩部分之間是如何通過FPN+PAN結構融合的,
?(左:特征正常傳遞路徑,中:FPN,右:引入了PAN(圖中有兩處用了PAN結構))
在這里插入圖片描述
?FPN層自頂向下傳達強語意特征,而PAN則自底向上傳達強定位特征(因為低級特征圖還沒有被下采樣那么多,所以保留的定位資訊肯定完整一點咯,而高層特征被下采樣多次,更多地體現出的是較為高級抽象的語意資訊咯),兩兩結合實屬牛掰,
?PAN這里還有一點需要注意:
?原本的PANet網路的PAN結構中,兩個特征圖結合是采用shortcut操作(即add相加),而Yolov4中則采用concat(route)操作(即channels堆疊),特征圖融合后的尺寸發生了變化,
在這里插入圖片描述

CIOU_LOSS+DIOU_NMS(預測端部分):

一般來說,目標檢測的LOSS = 分類LOSS + BBOX回歸LOSS,
一個好的BBOX回歸LOSS應該考慮三個重要幾何因素:重疊面積、中心點距離,長寬比,
近年BBOX回歸LOSS的發展

  1. Smooth L1 LOSS
  2. IOU LOSS(2016)
  3. GIOU LOSS(2019)
  4. DIOU LOSS(2020)
  5. CIOU LOSS(2020)

下面分別介紹這幾種IOU LOSS:

1.IOU LOSS(2016)

在這里插入圖片描述

在這里插入圖片描述
IOU很簡單就是交并比而已,
在這里插入圖片描述
但存在如上圖這兩種情況的問題:
問題1:無法優化兩個框不相交的情形,當IOU為0時無法衡量兩框之間的相對距離,此時LOSS不可導,
問題2:如圖狀態2、3他們的IOU值是相同的,但IOU無法區分兩者,

2.GIOU LOSS(2019)

在這里插入圖片描述

在這里插入圖片描述
GIOU雖然增加了衡量相交情況的方式,但是還是存在不足,
在這里插入圖片描述
如圖這種情況,它們的GIOU都是相同的,這時不就跟IOU一個樣,區分不了位置關系,

3.DIOU LOSS(2020)

針對IOU和GIOU的問題,DIOU綜合考慮了重疊面積,中心點距離,當目標框包裹預測框的時候,直接度量2個框的距離,因此DIOU_Loss收斂的更快,
在這里插入圖片描述

在這里插入圖片描述
但問題是DIOU沒有考慮到長寬比,如圖:
在這里插入圖片描述
如圖它們的中心點距離相同,所以DIOU也是相同的,

4.CIOU LOSS(2020)

DIOU LOSS在CIOU LOSS的基礎上增加了一項,將預測框和目標框的長寬比都考慮了進去:
在這里插入圖片描述
在這里插入圖片描述

再來綜合的看下各個Loss函式的不同點:
IOU_Loss:主要考慮檢測框和目標框重疊面積,
GIOU_Loss:在IOU的基礎上,解決邊界框不重合時的問題,
DIOU_Loss:在IOU和GIOU的基礎上,考慮邊界框中心點距離的資訊,
CIOU_Loss:在DIOU的基礎上,考慮邊界框寬高比的尺度資訊,
Yolov4中采用了CIOU_Loss的回歸方式,使得預測框回歸的速度和精度更高一些,

DIOU_NMS

為啥用CIOU LOSS 不用CIOU NMS呢?
?因為前面講到的CIOU_loss,是在DIOU_loss的基礎上,添加的影響因子,包含目標框ground truth的資訊,在訓練時用于回歸,但在測驗階段,我們是沒有ground truth的,所以不用CIOU LOSS新增加的項,即直接用DIOU LOSS,

?
?

EndEndEndEndEndEndEndEndEndEndEndEndEndEndEndEndEndEndEndEnd

??
??
?

參考鏈接:

  1. 深入淺出Yolo系列之Yolov3&Yolov4&Yolov5核心基礎知識完整講解
  2. Yolov4技巧學習
  3. Yolov4論文翻譯與決議(二)

有問題歡迎評論區指出,thanks!!!

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/260354.html

標籤:AI

上一篇:EM(expectation maximization)演算法的理解和證明

下一篇:K-Means聚類演算法(一)

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more