網(wǎng)絡(luò)結(jié)構(gòu)圖
Yolov4的結(jié)構(gòu)和Yolov3相比徽级,多了CSP結(jié)構(gòu)贸桶,PAN結(jié)構(gòu)皇帮。
Yolov4的5個(gè)基本組件:
1.CBM: Yolov4網(wǎng)絡(luò)結(jié)構(gòu)中最小的組件粹淋,由Conv+Bn+Mish激活函數(shù)三者組成
2.CBL:由Conv+Bn+Leaky_relu激活函數(shù)三者組成。
3.Res unit: 借鑒Resnet網(wǎng)絡(luò)中的殘差結(jié)構(gòu)匙头,讓網(wǎng)絡(luò)可以構(gòu)建的更深漫谷。
4.CSPX:借鑒CSPNet網(wǎng)絡(luò)結(jié)構(gòu),由三個(gè)卷積層和 X個(gè)Res unit模塊Concate組成蹂析。
5.SPP: 采用1x1,5x5,9x9,13x13的最大池化的方式舔示,進(jìn)行多尺度融合。
其他基礎(chǔ)操作:
1.Concat: 張量拼接识窿,維度會(huì)擴(kuò)充斩郎。
2.Add:張量相加,不會(huì)擴(kuò)充維度喻频。
便于分析缩宜,將Yolov4 的整體結(jié)構(gòu)拆分四大板塊:
(1)輸入端:訓(xùn)練時(shí)對(duì)輸入端的改進(jìn),主要包括Mosaic數(shù)據(jù)增強(qiáng)甥温,cmBN锻煌,SAT自對(duì)抗訓(xùn)練。
(2)BackBone主干網(wǎng)絡(luò):將各種新的方式結(jié)合起來姻蚓,包括:CSPDarknet53宋梧,Mish激活函數(shù),Dropblock狰挡。
(3)Neck:目標(biāo)檢測(cè)網(wǎng)絡(luò)在BackBone和最后的輸出層之間往往會(huì)插入一些層捂龄,比如Yolov4的SPP模塊,F(xiàn)PN+PAN結(jié)構(gòu)加叁。
(4)Prediction:輸出層的錨框機(jī)制和Yolov3相同倦沧,主要改進(jìn)的是訓(xùn)練時(shí)的損失函數(shù)CIOU_Loss,以及預(yù)測(cè)框篩選的nms變?yōu)镈IOU_nms。
輸入端的創(chuàng)新
(1)Mosaic數(shù)據(jù)增強(qiáng)它匕。
Yolov4中使用的Mosaic是參考2019年提出的CutMix數(shù)據(jù)增強(qiáng)的方式展融,但CutMix只使用了兩張圖片進(jìn)行拼接,而Mosaic數(shù)據(jù)增強(qiáng)則采用了4張圖片豫柬,隨機(jī)縮放告希,隨機(jī)裁剪,隨機(jī)排布的方式進(jìn)行拼接烧给。
優(yōu)點(diǎn):
豐富數(shù)據(jù)集:隨機(jī)使用4張圖片燕偶,隨機(jī)縮放,在隨機(jī)分布進(jìn)行拼接础嫡,大大豐富了檢測(cè)數(shù)據(jù)集杭跪。特別是隨機(jī)縮放增加了很多小目標(biāo),讓網(wǎng)絡(luò)的魯棒性更好驰吓。
減少GPU:可能會(huì)有人說涧尿,隨機(jī)縮放,普通的數(shù)據(jù)增強(qiáng)也可以做檬贰,但作者考慮到很多人可能只有一個(gè)GPU姑廉。
因此Mosaic增強(qiáng)訓(xùn)練時(shí),可以直接計(jì)算4張圖片的數(shù)據(jù)翁涤,使得Mini-batch大小并不需要很大桥言,一個(gè)GPU就可以達(dá)到比較好的效果。
此外葵礼,發(fā)現(xiàn)另一研究者的訓(xùn)練方式也值得借鑒号阿,采用的數(shù)據(jù)增強(qiáng)和Mosaic比較類似,也是使用4張圖片(不是隨機(jī)分布)鸳粉,但訓(xùn)練計(jì)算loss時(shí)扔涧,采用“缺啥補(bǔ)啥”的思路:
如果上一個(gè)iteration中,小物體產(chǎn)生的loss不足(比如小于某一個(gè)閾值)届谈,則下一個(gè)iteration就用拼接圖枯夜;否則就用正常圖片訓(xùn)練。
BackBone創(chuàng)新
(1)CSPDarknet53
CSPDarknet53是在Yolov3主干網(wǎng)絡(luò)Darknet53的基礎(chǔ)上艰山,借鑒2019年的CSPNet的經(jīng)驗(yàn)湖雹,產(chǎn)生的Backbone結(jié)構(gòu),其中包含了5個(gè)CSP模塊曙搬。
Backbone中卷積層的數(shù)量:
每個(gè)CSPX中包含3+2 × X個(gè)卷積層摔吏,因此整個(gè)主干網(wǎng)絡(luò)Backbone中一共包含
2+(3+2×1)+2+(3+2×2)+2+(3+2×8)+2+(3+2×8)+2+(3+2×4)+1=72。
每個(gè)CSP模塊前面的卷積核大小都是3x3纵装,步長(zhǎng)為2征讲,因此可以起到下采樣的作用。
因?yàn)锽ackbone有5個(gè)CSP模塊搂擦,輸入圖像是608 x 608稳诚,所以特征圖的變化規(guī)律是:608->304->152->76->38->19
經(jīng)過5次CSP模塊后得到19*19大小的特征圖。
而且作者只在Backbone中采用Mish激活函數(shù)瀑踢,網(wǎng)絡(luò)后面任然采用Leaky_relu激活函數(shù)扳还。
Mish=x * tanh(ln(1+e^x))
CSPNet的作者認(rèn)為推理計(jì)算過高的問題是由于網(wǎng)絡(luò)優(yōu)化中的梯度信息重復(fù)導(dǎo)致的。
因此采用CSP模塊先將基礎(chǔ)層的特征映射劃分為兩部分橱夭,然后通過跨階段層次結(jié)構(gòu)將他們合并氨距,在減少計(jì)算量的同時(shí)可以保證準(zhǔn)確率。
因此Yolov4在主干網(wǎng)絡(luò)Backbone采用CSPDarknet53網(wǎng)絡(luò)結(jié)構(gòu)棘劣,主要是有三個(gè)方面的優(yōu)點(diǎn):
1.增強(qiáng)CNN的學(xué)習(xí)能力俏让,使得在輕量化的同時(shí)保持準(zhǔn)確性。
2.降低計(jì)算瓶頸。
3.降低內(nèi)存成本首昔。
Dropblock
Yolov4中使用的Dropblock寡喝,其實(shí)和常見網(wǎng)絡(luò)中的Dropout功能類似,也是一種緩解過擬合的一種正則化方式勒奇。
傳統(tǒng)的Dropout很簡(jiǎn)單:隨機(jī)刪除減少神經(jīng)元的數(shù)量预鬓,使網(wǎng)絡(luò)變得更簡(jiǎn)單。
而Dropblock和Dropout相似赊颠,比如下圖:
中間Dropout的方式會(huì)隨機(jī)的刪減丟棄一些信息格二,但Dropblock的研究者認(rèn)為,卷積層對(duì)于這種隨機(jī)丟棄并不敏感竣蹦。因?yàn)榫矸e層通常是三層連用:卷積+激活+池化層顶猜,池化層本身就是對(duì)相鄰單元起作用。
而且即使隨機(jī)丟棄痘括,卷積層仍然可以從相鄰的激活單元學(xué)習(xí)到相同的信息长窄。因此,在全連接層上效果很好的Dropout在卷積層上效果并不好远寸。
所以右圖Dropblock則干脆整個(gè)局部區(qū)域進(jìn)行刪減丟棄抄淑。
這種方式其實(shí)是借鑒2017年的Cutout數(shù)據(jù)增強(qiáng)的方式,cutout是將輸入圖像的部分區(qū)域清零驰后,而Dropblock則是將Cutout應(yīng)用到每一個(gè)特征圖肆资。而且并不是用固定的歸零比率,而是在訓(xùn)練時(shí)以一個(gè)小的比率開始灶芝,隨著訓(xùn)練過程線性的增加這個(gè)比率郑原。
Dropblock與Cutout數(shù)據(jù)增強(qiáng)對(duì)訓(xùn)練效果進(jìn)行對(duì)比驗(yàn)證時(shí),發(fā)現(xiàn)幾個(gè)優(yōu)點(diǎn):
1.Dropblock的效果優(yōu)于Cutout夜涕。
2.cutout只能作用于輸入層犯犁,而Dropblock則是將Cutout應(yīng)用到網(wǎng)絡(luò)中的每一個(gè)特征圖上。
3.Dropblock可以定制各種組合女器,在訓(xùn)練的不同階段可以修改刪減的概率酸役,從空間層面和時(shí)間層面,和cutout相比都有更精細(xì)的改進(jìn)驾胆。
Neck創(chuàng)新
在目標(biāo)檢測(cè)領(lǐng)域涣澡,為了更好的提取融合特征,通常在Backbone和輸出層丧诺,會(huì)插入一些層入桂,這個(gè)部分稱為Neck。
Yolov4的Neck結(jié)構(gòu)主要采用了SPP模塊驳阎,F(xiàn)PN+PAN的方式抗愁。
(1)SPP模塊
SPP模塊在Backbone的主干網(wǎng)絡(luò)之后:
作者在SPP模塊中馁蒂,使用k={1x1,5x5,9x9,13x13}的最大池化的方式,再將不同尺度的特征圖進(jìn)行Concat操作蜘腌。
注意:這里最大池化層采用padding操作沫屡,移動(dòng)的步長(zhǎng)為1,比如13x13的輸入特征圖逢捺,使用5x5大小的池化核池化谁鳍,padding=2,因此池化后的特征圖任然是13x13大小劫瞳。
(2)FPN+PAN
PAN結(jié)構(gòu)是借鑒2018年圖像分割領(lǐng)域PANet的創(chuàng)新點(diǎn)
看下Yolov3和Yolov4中是如何設(shè)計(jì)的。
可以看到經(jīng)過幾次下采樣绷柒,三個(gè)紫色箭頭指向的地方志于,輸出分別是76x76,38x38,19x19。
以及最后的Prediction中用于預(yù)測(cè)的三個(gè)特征圖①19×19×255废睦、②38×38×255伺绽、③76×76×255 [注:255表示80類別(1+4+80)x3=255]
我們將Neck部分用立體圖畫出來,更直觀的看下兩部分之間是如何通過FPN結(jié)構(gòu)融合的嗜湃。
如圖所示奈应,F(xiàn)PN是自頂向下的,將高層的特征信息通過上采樣的方式進(jìn)行傳遞融合购披,得到進(jìn)行預(yù)測(cè)的特征圖杖挣。
Yolov4各個(gè)網(wǎng)絡(luò)結(jié)構(gòu)
而Yolov4中Neck這部分處了使用FPN外,還在此基礎(chǔ)上使用了PAN結(jié)構(gòu)刚陡。
前面CSPDarknet53中講到惩妇,每個(gè)CSP模塊前面的卷積核都是3x3大小,想當(dāng)于下采樣操作筐乳。
因此可以看到三個(gè)紫色箭頭處的特征圖是76x76歌殃,38x38,19x19。
以及最后Prediction中用于預(yù)測(cè)的三個(gè)特征圖:①76×76×255蝙云,②38×38×255氓皱,③19×19×255。
我們也看下Neck部分的立體圖像勃刨,看下兩部分是如何通過FPN+PAN結(jié)構(gòu)進(jìn)行融合的波材。
和Yolov3的FPN層不同,Yolov4在FPN層的后面還添加了一個(gè)自底向上的特征金字塔朵你。
其中包含兩個(gè)PAN結(jié)構(gòu)各聘。
這樣結(jié)合操作,F(xiàn)PN層自頂向下傳達(dá)強(qiáng)語義特征抡医,而特征金字塔則自底向上傳達(dá)強(qiáng)定位特征躲因,兩兩聯(lián)手早敬,從不同的主干層對(duì)不同的檢測(cè)層進(jìn)行特征聚合。
不過這里需要注意幾點(diǎn):
注意一:
Yolov3的FPN層輸出的三個(gè)大小不一的特征圖①②③直接進(jìn)行預(yù)測(cè)大脉。
但Yolov4的FPN層搞监,只使用最后的一個(gè)76x76的特征圖①,而經(jīng)過兩次PAN結(jié)構(gòu)镰矿,輸出預(yù)測(cè)的特征圖②和③琐驴。
注意二:
原本的PANet網(wǎng)絡(luò)的PAN結(jié)構(gòu)中,兩個(gè)特征圖結(jié)合是采用shortcut操作秤标,而Yolov4中則采用concat 操作绝淡,特征圖融合后的尺寸發(fā)生了變化。
Prediction創(chuàng)新
(1)CIOU_loss
目標(biāo)檢測(cè)任務(wù)的損失函數(shù)一般由Classificition Loss(分類損失函數(shù))和Bounding Box Regeression Loss(回歸損失函數(shù))兩部分構(gòu)成苍姜。
Bounding Box Regeression的Loss近些年的發(fā)展過程是:Smooth L1 Loss-> IoU Loss(2016)-> GIoU Loss(2019)-> DIoU Loss(2020)->CIoU Loss(2020)
從最常用的IOU_Loss開始牢酵,進(jìn)行對(duì)比拆解分析,看下Yolov4為啥要選擇CIOU_Loss衙猪。
-------------------------------------------------------IOU_loss------------------------------
可以看到IOU的loss其實(shí)很簡(jiǎn)單馍乙,主要是交集/并集,但其實(shí)也存在兩個(gè)問題垫释。
問題一:即狀態(tài)1的情況丝格,當(dāng)預(yù)測(cè)框和目標(biāo)框不相交時(shí),IOU=0棵譬,無法反應(yīng)兩個(gè)框距離的遠(yuǎn)近显蝌,此時(shí)損失函數(shù)不可導(dǎo),IOU_Loss無法優(yōu)化兩個(gè)框不相交的情況茫船。
問題二:即狀態(tài)2和狀態(tài)3的情況琅束,當(dāng)兩個(gè)預(yù)測(cè)框大小相同,兩個(gè)IOU也相同算谈,IOU_Loss無法區(qū)分兩者相交情況的不同涩禀。
因此2019年出現(xiàn)了GIOU_Loss來進(jìn)行改進(jìn)。
-------------------------------------------------------GIOU-------------------------------------
GIOU指的是假設(shè)現(xiàn)在有兩個(gè)任意的bbox A和B然眼,我們要找到一個(gè)最小的封閉形狀C艾船,讓C可以將A和B包圍在里面,然后我們計(jì)算C中沒有覆蓋A和B的面積占C總面積的比例高每,然后用A和B的IOU值減去這個(gè)比值屿岂。
看到上圖的GIOU_loss中,增加了相交尺度的衡量方式鲸匿,緩解了單純IOU_Loss時(shí)的尷尬爷怀。
但為什么僅僅說緩解呢?因?yàn)檫€存在一種不足:
問題: 狀態(tài)1带欢、2运授、3都是預(yù)測(cè)框在目標(biāo)框內(nèi)部且預(yù)測(cè)框大小一致的情況烤惊,這時(shí)預(yù)測(cè)框和目標(biāo)框的差集都是相同的,因此這三種狀態(tài)的GIOU值也都是相同的吁朦,這時(shí)GIOU退化成了IOU柒室,無法區(qū)分相對(duì)位置關(guān)系。
基于這個(gè)問題逗宜,2020年的AAAI又提出了DIOU_Loss雄右。
------------------------------------------------DIOU_Loss------------------------------------------------------------
好的目標(biāo)框回歸函數(shù)應(yīng)該考慮三個(gè)重要的幾何因素:重疊面積,中心點(diǎn)距離纺讲,長(zhǎng)寬比擂仍。
針對(duì)IOU和GIOU存在的問題,作者從兩個(gè)方面進(jìn)行考慮
一:如何最小化預(yù)測(cè)框和目標(biāo)框之間的歸一化距離刻诊?
二:如何在預(yù)測(cè)框和目標(biāo)框重疊時(shí)防楷,回歸的更準(zhǔn)確?
針對(duì)第一個(gè)問題则涯,作者提出了DIOU_Loss
DIOU_Loss考慮了重疊面積和中心點(diǎn)距離,當(dāng)目標(biāo)框包裹預(yù)測(cè)框的時(shí)候冲簿,直接度量2個(gè)框的距離粟判,因此DIOU_Loss收斂的更快。
但就像前面好的目標(biāo)框回歸函數(shù)說所的峦剔,這時(shí)并沒考慮到長(zhǎng)寬比档礁。
問題:比如上面三種狀態(tài),目標(biāo)框包裹預(yù)測(cè)框吝沫,本來DIOU_Loss可以起作用呻澜。
但預(yù)測(cè)框的中心點(diǎn)的位置都是一樣的,因此按照DIOU_Loss的計(jì)算公式惨险,三者的值都是相同的羹幸。
針對(duì)這個(gè)問題,又提出了CIOU_Loss
-----------------------------------------------------------CIOU_Loss-----------------------------------------------------
CIOU_Loss和DIOU_Loss前面的公式都是一樣的辫愉,不過在此基礎(chǔ)上還增加了一個(gè)影響因子栅受,將預(yù)測(cè)框和目標(biāo)框的長(zhǎng)寬比都考慮了進(jìn)去。
其中v是衡量長(zhǎng)寬比一致性的參數(shù)恭朗,我們也可以定義為:
這樣CIOU_Loss就將目標(biāo)框回歸函數(shù)應(yīng)該考慮三個(gè)重要幾何因素:重疊面積屏镊、中心點(diǎn)距離,長(zhǎng)寬比全都考慮進(jìn)去了痰腮。
再來綜合的看下各個(gè)Loss函數(shù)的不同點(diǎn):
IOU_Loss:主要考慮檢測(cè)框和目標(biāo)框重疊面積而芥。
GIOU_Loss:在IOU的基礎(chǔ)上,解決了邊界框不重合的問題膀值。
DIOU_Loss: 在IOU和GIOU的基礎(chǔ)上棍丐,考慮了邊界框中心點(diǎn)距離的信息误辑。
CLOU_Loss: 在DIOU的基礎(chǔ)上,考慮邊界框?qū)捀弑鹊某叨刃畔ⅰ?/p>
DIOU_nms
nms主要用于預(yù)測(cè)框的篩選骄酗,YOLOV4將其中計(jì)算IOU的部分替換成DIOU的方式
在上圖重疊的摩托車檢測(cè)中稀余,中間的摩托車因?yàn)榭紤]邊界框中心點(diǎn)的位置信息,也可以回歸出來趋翻。
因此在重疊目標(biāo)的檢測(cè)中睛琳,DIOU_nms的效果優(yōu)于傳統(tǒng)的nms。
注意:為什么不用CIOU_nms踏烙,而用DIOU_nms?
因?yàn)榍懊嬷v到的CIOU_loss师骗,實(shí)在DIOU_loss的基礎(chǔ)上,添加的影響因子讨惩,包含groundtruth標(biāo)注框的信息辟癌,在訓(xùn)練時(shí)用于回歸。
但在測(cè)試過程中荐捻,并沒有g(shù)roundtruth的信息黍少,不用考慮影響因子,因此直接用DIOU_nms即可处面。