近年來YOLO系列層出不窮执赡,更新不斷姚垃,已經(jīng)到v7版本侮邀。Rocky認(rèn)為不能簡單用版本高低來評判一個系列的效果好壞坏怪,YOLOv1-v7不同版本各有特色,在不同場景绊茧,不同上下游環(huán)境铝宵,不同資源支持的情況下,如何從容選擇使用哪個版本华畏,甚至使用哪個特定部分鹏秋,都需要我們對YOLOv1-v7有一個全面的認(rèn)識。
故Rocky將YOLO系列每個版本都表示成下圖中的五個部分亡笑,逐一進(jìn)行解析侣夷,并將每個部分帶入業(yè)務(wù),競賽仑乌,研究等維度進(jìn)行延伸思考百拓,探索更多可能性。
干貨篇
----【目錄先行】----
- YOLOv1-v7論文&&代碼大放送
- YOLO系列中輸入側(cè)晰甚,Backbone衙传,Neck,Head厕九,Tricks的特點(diǎn)
- YOLOv1 輸入側(cè)蓖捶,Backbone,Neck扁远,Head腺阳,Tricks大解析
- YOLOv2 輸入側(cè),Backbone穿香,Neck,Head绎速,Tricks大解析
- YOLOv3 輸入側(cè)皮获,Backbone,Neck纹冤,Head洒宝,Tricks大解析
- YOLOv4 輸入側(cè)购公,Backbone,Neck雁歌,Head宏浩,Tricks大解析
- YOLOv5 輸入側(cè),Backbone靠瞎,Neck比庄,Head,Tricks大解析
- YOLOx 輸入側(cè)乏盐,Backbone佳窑,Neck,Head父能,Tricks大解析
- YOLOv6 輸入側(cè)神凑,Backbone,Neck何吝,Head溉委,Tricks大解析
- YOLOv7 輸入側(cè),Backbone爱榕,Neck瓣喊,Head,Tricks大解析
【一】YOLOv1-v7論文&&代碼大放送
YOLOv1論文名以及論文地址:You Only Look Once:Unified, Real-Time Object Detection[1]
YOLOv1開源代碼:YOLOv1-Darkent[2]
YOLOv2論文名以及論文地址:YOLO9000:Better, Faster, Stronger[3]
YOLOv2開源代碼:YOLOv2-Darkent[4]
YOLOv3論文名以及論文地址:YOLOv3: An Incremental Improvement[5]
YOLOv3開源代碼:YOLOv3-PyTorch[6]
YOLOv4論文名以及論文地址:YOLOv4: Optimal Speed and Accuracy of Object Detection[7]
YOLOv4開源代碼:YOLOv4-Darkent[8]
YOLOv5論文名以及論文地址:無
YOLOv5開源代碼:YOLOv5-PyTorch[9]
YOLOx論文名以及論文地址:YOLOX: Exceeding YOLO Series in 2021[10]
YOLOx開源代碼:YOLOx-PyTorch[11]
YOLOv6論文名以及論文地址:YOLOv6: A Single-Stage Object Detection Framework for Industrial Applications[12]
YOLOv6開源代碼:YOLOv6-PyTorch[13]
YOLOv7論文名以及論文地址:YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors[14]
YOLOv7開源代碼:Official YOLOv7-PyTorch[15]
【二】YOLO系列中輸入側(cè)呆细,Backbone型宝,Neck,Head絮爷,Tricks的特點(diǎn)
輸入側(cè)
YOLO系列中的輸入側(cè)主要包含了輸入數(shù)據(jù)趴酣,數(shù)據(jù)增強(qiáng)算法以及一些特殊預(yù)處理操作。
輸入數(shù)據(jù)可以是圖片坑夯,也可以是視頻岖寞。
數(shù)據(jù)增強(qiáng)算法包含通用增強(qiáng)以及YOLO自帶的一些高階增強(qiáng)算法。
YOLO系列的輸入側(cè)可謂是通用性最強(qiáng)的一個部分柜蜈,具備很強(qiáng)的向目標(biāo)檢測其他模型仗谆,圖像分類,圖像分割淑履,目標(biāo)跟蹤等方向遷移應(yīng)用的價(jià)值隶垮。
并且從業(yè)務(wù),競賽秘噪,研究等角度觀察狸吞,輸入側(cè)結(jié)構(gòu)也能在這些方面比較好的融入,從容。
Backbone
YOLO系列中的Backbone結(jié)構(gòu)主要作為算法模型的一個核心特征提取器蹋偏,隨著時代的變遷不斷發(fā)展便斥。
某種程度上,YOLO系列的各個Backbone代表著當(dāng)時的高價(jià)值模型與AI行業(yè)的發(fā)展記憶威始,計(jì)算機(jī)視覺江湖上枢纠,名噪一時的那些“算法兵器”,它們確實(shí)來過黎棠。
YOLO系列的Backbone與輸入側(cè)一樣晋渺,是通用性非常強(qiáng)的一個部分,在不同的計(jì)算機(jī)視覺細(xì)分方向葫掉,都有廣泛的應(yīng)用些举。
Neck
YOLO從v3版本開始設(shè)計(jì)Neck結(jié)構(gòu),其中的特征融合思想最初在FPN(feature pyramid networks)網(wǎng)絡(luò)中提出俭厚,在YOLOv3中進(jìn)行結(jié)構(gòu)的微調(diào)户魏,最終成為YOLO后續(xù)系列不可或缺的部分。
FPN的思路劍指小目標(biāo)挪挤,原來很多目標(biāo)檢測算法都是只采用高層特征進(jìn)行預(yù)測叼丑,高層的特征中語義信息比較豐富,但是分辨率較低扛门,目標(biāo)位置比較粗略鸠信。假設(shè)在深層網(wǎng)絡(luò)中,最后的高層特征圖中一個像素可能對應(yīng)著輸出圖像的像素區(qū)域论寨,那么小于像素的小物體的特征大概率已經(jīng)丟失星立。與此同時,低層的特征語義信息比較少葬凳,但是目標(biāo)位置準(zhǔn)確,這是對小目標(biāo)檢測有幫助的绰垂。FPN將高層特征與底層特征進(jìn)行融合,從而同時利用低層特征的高分辨率和高層特征的豐富語義信息火焰,并進(jìn)行了多尺度特征的獨(dú)立預(yù)測劲装,對小物體的檢測效果有明顯的提升。
FPN結(jié)構(gòu)
FPN論文地址:Feature Pyramid Networks for Object Detection[16]
【Rocky的延伸思考】
- 業(yè)務(wù):FPN具備在業(yè)務(wù)場景中的應(yīng)用價(jià)值昌简,但還是要分場景來使用占业,主要在小目標(biāo)場景可以嘗試,并同時要兼顧上游數(shù)據(jù)側(cè)與下游部署側(cè)的適配纯赎。
- 競賽:FPN的思想可謂是算法競賽的一個利器谦疾,在分類,分割犬金,檢測等任務(wù)中都能大展拳腳念恍,進(jìn)行遷移應(yīng)用碎紊。
- 研究:FPN具備作為baseline的價(jià)值,不管是進(jìn)行拓展研究還是單純的學(xué)習(xí)FPN思想樊诺,都是提升研究能力的不錯選擇。
Head
YOLO系列中的Head結(jié)構(gòu)主要包含了Head檢測頭音同,損失函數(shù)部分以及Head結(jié)構(gòu)的優(yōu)化策略词爬。
Head檢測頭體現(xiàn)了YOLO系列“簡潔美”的思想,與two-stage檢測算法相比权均,YOLO取消了RPN模塊顿膨,設(shè)計(jì)了特征提取網(wǎng)絡(luò)Backbone+檢測頭Head的end-to-end整體邏輯,其對工程的友好特性讓工業(yè)界頓時開滿“YOLO花”叽赊。
YOLO系列的損失函數(shù)部分可謂是目標(biāo)檢測領(lǐng)域中的“掌上明珠”恋沃,其在業(yè)務(wù),競賽和研究等維度都有很強(qiáng)的遷移價(jià)值必指。
two-stage檢測算法簡明邏輯
【Rocky的延伸思考】
- 業(yè)務(wù):YOLO系列的Head結(jié)構(gòu)中囊咏,不管是Head檢測頭,損失函數(shù)部分以及Head結(jié)構(gòu)的優(yōu)化策略塔橡,其在業(yè)務(wù)中都可以作為baseline進(jìn)行遷移使用梅割。
- 競賽:YOLO系列的Head結(jié)構(gòu)在目標(biāo)檢測競賽中可以說時入場必選結(jié)構(gòu),能極大程度上縮短競賽初期的熟悉適應(yīng)成本葛家。
- 研究:YOLO系列的Head結(jié)構(gòu)和Neck結(jié)構(gòu)一樣户辞,具備作為baseline的價(jià)值。
Tricks
YOLO系列中使用的Tricks癞谒,從橫向角度來看底燎,基本算是當(dāng)時的最優(yōu)Trcks;從縱向角度來看弹砚,其大部分都具備了可遷移性双仍,強(qiáng)適應(yīng)性,能夠跟隨著我們一起進(jìn)入2020年代迅栅,并且依舊發(fā)揮余熱殊校。
YOLO系列中使用的Tricks和Backbone以及輸入側(cè)一樣,是通用性非常強(qiáng)的一個部分读存,遷移應(yīng)用在業(yè)務(wù)为流,競賽,研究等維度让簿,可能會帶來出其不意的效果與驚喜敬察。
【三】YOLOv1 輸入側(cè),Backbone尔当,Neck莲祸,Head蹂安,Tricks大解析
YOLOv1作為YOLO系列的開山鼻祖,讓YOLO這個計(jì)算機(jī)視覺中的“璀璨明珠”在2015年的夏天锐帜,拉開了帷幕田盈。
YOLOv1整體上有著樸素的邏輯,但是隱隱約約已經(jīng)為后續(xù)的YOLO發(fā)展定下了簡單實(shí)用的基調(diào)缴阎。
下面Rocky就將YOLOv1拆解允瞧,從輸入側(cè),Backbone蛮拔,Head述暂,Tricks入手,帶著大家一起學(xué)習(xí)研究建炫。
(需要注意的是畦韭,YOLO系列中的Neck結(jié)構(gòu)在YOLOv3才出現(xiàn),故在后面的YOLOv3部分將加入Neck結(jié)構(gòu)的講解)
YOLOv1 輸入側(cè)大解析
YOLOv1在輸入側(cè)做的最多的工作是調(diào)整輸入圖像的尺寸以支持對圖像細(xì)粒度特征的挖掘與檢測肛跌。
同樣的艺配,YOLO系列的grid邏輯(“分而治之”)也從輸入側(cè)開始展開,直到Head結(jié)構(gòu)輸出相應(yīng)結(jié)果惋砂。
YOLOv1整體結(jié)構(gòu)
YOLOv1 Backbone大解析
YOLOv1的Backbone結(jié)構(gòu)主要受啟發(fā)于GoogLeNet思想妒挎,從上面的整體結(jié)構(gòu)可以看出,模型結(jié)構(gòu)非常簡潔西饵,卷積一卷到底酝掩。
YOLOv1的backbone結(jié)構(gòu)中使用了Leaky ReLu激活函數(shù),但并沒有引入BN層眷柔。
YOLOv1 Head大解析
YOLOv1作為YOLO系列的開山鼻祖期虾,其Head結(jié)構(gòu)整體邏輯比較直觀,并且對后續(xù)的版本影響深遠(yuǎn)驯嘱。
YOLOv1 Head結(jié)構(gòu)
YOLOv1中镶苞,圖片被劃分為 的網(wǎng)格(grid cell),每個網(wǎng)絡(luò)在Head結(jié)構(gòu)中進(jìn)行獨(dú)立檢測鞠评。
YOLOv1在Inference過程中并不是把每個單獨(dú)的網(wǎng)格作為輸入茂蚓,網(wǎng)格只是用于物體ground truth中心點(diǎn)位置的分配,如果一個物體的ground truth中心點(diǎn)坐標(biāo)在一個grid cell中剃幌,那么就認(rèn)為這個grid cell就是包含這個物體聋涨,這個物體的預(yù)測就由該grid cell負(fù)責(zé)。而不是對圖片進(jìn)行切片负乡,并不會讓網(wǎng)格的視野受限且只有局部特征牍白。
YOLOv1的輸出是一個 的張量, 表示把輸入圖片劃分成 的網(wǎng)格抖棘,每一個網(wǎng)格的通道維度等于 驻售,代表YOLOv1中每個網(wǎng)格能預(yù)測2個框,每個框能預(yù)測5個參數(shù) 再加上20個種類寥掐。
把上述內(nèi)容轉(zhuǎn)換成通用公式就是網(wǎng)格一共是 個,每個網(wǎng)格產(chǎn)生 個檢測框帕胆,每個檢測框會經(jīng)過網(wǎng)絡(luò)最終得到相應(yīng)的bounding box。最終會得到 個bounding box般渡,每個bounding box都包含5個預(yù)測值惶楼,分別是bounding box的中心坐標(biāo) ,bounding box的寬高 和置信度 诊杆。其中 代表網(wǎng)格中box能與物體的取得的最大IOU值。
鋪墊了這么多變量表示何陆,到這里終于可以引出對工業(yè)界產(chǎn)生深遠(yuǎn)影響的YOLOv1的損失函數(shù)晨汹,YOLO系列的后續(xù)版本的損失函數(shù)都是從這個最初的形式優(yōu)化而來。
乍一看YOLOv1的損失函數(shù)十分復(fù)雜贷盲,don't worry淘这,接下來Rocky將進(jìn)行詳細(xì)分析。
整體上來看巩剖,YOLOv1的損失函數(shù)可以分為檢測框的回歸損失铝穷,置信度誤差損失以及分類誤差損失。
公式中第一行和第二行代表了檢測框的中心點(diǎn)和寬高的回歸損失佳魔,其中 表示第 個網(wǎng)格的第 個box是否去預(yù)測這個物體曙聂,即這個box與物體的ground truth box的IOU值和其他box相比是否是最大的。如果是鞠鲜,那么 宁脊,否則 ,而YOLOv1中每個網(wǎng)格只有2個box贤姆,還是比較簡單的榆苞。值得注意的是寬高回歸損失中使用了開根號的操作,這是考慮到了小目標(biāo)與大目標(biāo)對應(yīng)的檢測框會存在差異霞捡,并消除這個差異坐漏。不開根號時,損失函數(shù)往往更傾向于調(diào)整尺寸比較大的檢測框碧信。例如赊琳,12個像素點(diǎn)的偏差,對于 的檢測框幾乎沒有影響音婶,因?yàn)榇藭r的IOU值還是很大慨畸,但是對于 的小檢測框影響就很大。
公式中第三行和第四行代表了置信度誤差損失衣式,分別是含物體的置信度誤差損失和不含物體的置信度誤差損失寸士。當(dāng)網(wǎng)格中含有物體時檐什,,并且置信度ground truth值 弱卡;當(dāng)網(wǎng)格中不含物體時乃正,,并且置信度ground truth值 婶博。包含物體的預(yù)測置信度 為網(wǎng)格中box與物體ground truth box能取到的最大的IOU值瓮具,這很好理解,計(jì)算邏輯也直接明了凡人。但是不包含物體的置信度誤差損失究竟是怎么回事名党?don't worry,不包含物體的置信度誤差損失包含兩部分挠轴,一部分是包含物體的網(wǎng)格中的兩個box中不負(fù)責(zé)預(yù)測的那個box传睹,另外一部分是不包含物體的網(wǎng)格中的box,讓他們都往0回歸吧岸晦!
目標(biāo)檢測中存在一個常見問題欧啤,那就是類別不均衡問題,YOLOv1中也不例外启上。在一張圖像中物體往往只占一小部分邢隧,大部分還是背景為主。故在置信度誤差損失中設(shè)置了 和 來平衡含物體的置信度誤差損失和不含物體的置信度誤差損失兩者的權(quán)重冈在,讓模型更加重視含物體的置信度誤差損失倒慧。
公式中第五行代表了分類誤差損失,只有當(dāng) 時才會進(jìn)行計(jì)算包券。
到這里迫靖,YOLOv1損失函數(shù)的解析就告一段落了。接下來我們看一下YOLOv1Head側(cè)的優(yōu)化策略:
- 使用NMS算法兴使,過濾掉一些重疊的檢測框系宜。
- 同一網(wǎng)格中的不同檢測框有不同作用,也就是置信度誤差損失的設(shè)計(jì)邏輯发魄,這樣可以增加召回率
- Inference時使用 作為輸出置信度盹牧。使用物體的類別預(yù)測最大值 乘以最合適的預(yù)測框 ,這樣也可以過濾掉一些大部分重疊的檢測框励幼,同時考慮了檢測框與類別讓輸出更加可信汰寓。
Inference時使用 作為輸出置信度
YOLOv1 Tricks大解析
作為YOLO系列的開山之作,YOLOv1中并未用太多的Tricks苹粟,但是設(shè)計(jì)出YOLO的架構(gòu)有滑,已經(jīng)足夠偉大。
YOLOv1的缺陷:
- 由于YOLOv1每個網(wǎng)格的檢測框只有2個嵌削,對于密集型目標(biāo)檢測和小物體檢測都不能很好適用毛好。
- Inference時望艺,當(dāng)同一類物體出現(xiàn)的不常見的長寬比時泛化能力偏弱。
- 由于損失函數(shù)的問題肌访,定位誤差是影響檢測效果的主要原因找默,尤其是大小物體的處理上,還有待加強(qiáng)吼驶。
【Rocky的延伸思考】
- 業(yè)務(wù):YOLOv1 輸入側(cè)邏輯非常適合作為新業(yè)務(wù)的實(shí)驗(yàn)性Baseline惩激,快速搭建,快速試錯蟹演。Head結(jié)構(gòu)經(jīng)過時間的考驗(yàn)與沉淀风钻,非常適合作為簡單業(yè)務(wù)的入場baseline部分模塊進(jìn)行搭建。
- 競賽:YOLOv1 坦率來說在競賽中已不具備競爭力酒请,但作為baseline入場模型也未嘗不可魄咕。
- 研究:YOLOv1 Head架構(gòu)可謂是YOLO系列的開山鼻祖,給后續(xù)系列搭建了baseline蚌父,不管是入門學(xué)習(xí)還是進(jìn)行擴(kuò)展研究,都是非常有價(jià)值的毛萌。
【四】YOLOv2 輸入側(cè)苟弛,Backbone,Neck阁将,Head膏秫,Tricks大解析
時隔一年,在2016年的冬天做盅,YOLOv2來了缤削,YOLOv2讓工業(yè)界狂喜的同時,YOLO版本號迭代的周期也來開了帷幕吹榴。
YOLOv2 輸入側(cè)大解析
YOLOv2的輸入側(cè)在YOLOv1的基礎(chǔ)上引入了多尺度訓(xùn)練(Multi-Scale Training)亭敢,并且優(yōu)化了預(yù)訓(xùn)練模型(High Resolution Classifier)。
多尺度訓(xùn)練(Multi-Scale Training)的邏輯是模型每訓(xùn)練一定的Epoch图筹,改變輸入圖片的尺寸帅刀,使得模型對不同的輸入尺寸更魯棒,能夠從容地對不同尺寸的圖像進(jìn)行檢測远剩。
論文中使用32的倍數(shù)作為輸入的尺寸扣溺,具體使用了320、352瓜晤、384锥余、416、448痢掠、480驱犹、512嘲恍、544、576着绷、608這10種尺寸蛔钙。
在預(yù)訓(xùn)練模型這塊,YOLOv2使用了High Resolution Classifier思想荠医。一般基于ImageNet預(yù)訓(xùn)練的模型的輸入尺寸都是小于的吁脱。YOLOv2使用的輸入尺寸是,比YOLOv1的要大彬向,故預(yù)訓(xùn)練模型網(wǎng)絡(luò)需要使用大分辨率輸入在ImageNet上進(jìn)行微調(diào)兼贡。經(jīng)過這個操作,YOLOv2的mAP提升了4%娃胆。
YOLOv2 Backbone大解析
YOLOv2的Backbone結(jié)構(gòu)在YOLOv1的基礎(chǔ)上設(shè)計(jì)了Darknet-19網(wǎng)絡(luò)遍希,并引入了BN層優(yōu)化模型整體性能。
Darknet-19網(wǎng)絡(luò)結(jié)構(gòu)
Darknet-19網(wǎng)絡(luò)包含19個卷積層和5個max pooling層里烦,整體計(jì)算量比YOLOv1中采用的GoogleNet更少凿蒜,最后用average pooling層代替全連接層進(jìn)行Inference。
在YOLOv2的Backbone中加入BN層之后胁黑,使得mAP提升了2%废封,而BN層也成為了YOLO后續(xù)系列的標(biāo)配。
YOLOv2 Head大解析
YOLOv2的Head結(jié)構(gòu)在YOLOv1的基礎(chǔ)上進(jìn)行了網(wǎng)絡(luò)結(jié)構(gòu)和損失函數(shù)的改進(jìn)丧蘸,并且大名鼎鼎的anchor box也在此引入漂洋。
passthrough layer結(jié)構(gòu)
YOLOv2在YOLOv1的基礎(chǔ)上去掉了最后的全連接層,采用了卷積和anchor boxes來預(yù)測檢測框力喷。由于使用卷積對特征圖進(jìn)行下采樣會使很多細(xì)粒度特征(Fine-Grained Features)的損失刽漂,導(dǎo)致小物體的識別效果不佳。故在YOLOv2Head側(cè)中引入了passthrough layer結(jié)構(gòu)弟孟,將特征圖一分為四贝咙,并進(jìn)行concat操作,保存了珍貴的細(xì)粒度特征拂募。
剛才提到了YOLOv2使用卷積和anchor box來輸出檢測框颈畸,那么到底anchor box機(jī)制是怎么樣的呢?
YOLOv1中每個網(wǎng)格預(yù)測兩個檢測框没讲,并讓最合適的檢測框向ground truth框進(jìn)行回歸修正眯娱。在YOLOv2中,Head側(cè)不對檢測框的寬高進(jìn)行直接硬回歸爬凑,而是將檢測框與Anchor框的偏差(offset)進(jìn)行回歸徙缴,并且每個網(wǎng)格指定 個anchor box。在訓(xùn)練時,只有最接近ground truth的檢測框進(jìn)行損失的計(jì)算于样。在引入anchor box后疏叨,mAP由69.5下降至69.2,原因在于每個網(wǎng)格預(yù)測的物體變多之后穿剖,召回率大幅上升蚤蔓,準(zhǔn)確率有所下降,總體mAP略有下降糊余。
Dimension Clusters
在引入anchor box之后秀又,又使用了Dimension Clusters操作,使得anchor box的寬高由聚類算法產(chǎn)生贬芥。沒錯吐辙,就是K-means算法(K-NN算法)。使用K-means算法獲得anchor box的具體細(xì)節(jié)可以在我之前的文章【三年面試五年模擬】算法工程師的獨(dú)孤九劍秘籍(第七式)中取用蘸劈。YOLOv2Head側(cè)輸出的feature map大小為 昏苏,每個grid cell設(shè)置了 個anchor box預(yù)測得到 個檢測框,一共有 個檢測框威沫,與YOLOv1相比大大提高目標(biāo)的定位準(zhǔn)確率贤惯。
優(yōu)化了anchor box預(yù)設(shè)置后,YOLOv2設(shè)計(jì)了Direct location prediction操作來支持檢測框與Anchor框的偏差(offset)回歸邏輯棒掠。與YOLOv1相比孵构,YOLOv2中每個檢測框輸出5個偏差參數(shù) ,為了將預(yù)測框的中心點(diǎn)約束在當(dāng)前grid cell中句柠,使用sigmoid函數(shù) 將 和 歸一化處理,將值約束在 之間棒假,這使得模型訓(xùn)練更穩(wěn)定溯职。
Direct location prediction整體邏輯
其中 和 代表anchor box的寬高, 和 代表grid cell左上角相對于feature map左上角的距離帽哑。
講完了網(wǎng)絡(luò)結(jié)構(gòu)的改進(jìn)和anchor box谜酒,接下來就是損失函數(shù)的改進(jìn)了:
可以看出,在計(jì)算檢測框的回歸損失時妻枕,YOLOv2去掉了開根號操作僻族,進(jìn)行直接計(jì)算。但是根據(jù)ground truth的大小對權(quán)重系數(shù)進(jìn)行修正:(這里 和 都?xì)w一化到 )屡谐,這樣對于尺度較小的預(yù)測框其權(quán)重系數(shù)會更大一些述么,可以放大誤差,起到和YOLOv1計(jì)算平方根相似的效果愕掏。
在訓(xùn)練前期(iter < 12800)度秘,YOLOv2還會進(jìn)行 的計(jì)算,表示對anchor boxes和檢測框進(jìn)行坐標(biāo)回歸饵撑,促進(jìn)網(wǎng)絡(luò)學(xué)習(xí)到anchor的形狀剑梳。
YOLOv2 Tricks大解析
等到Y(jié)OLOv2發(fā)布時唆貌,引入了當(dāng)時來說比較有創(chuàng)造性的Tricks,即設(shè)計(jì)了分類與檢測的聯(lián)合訓(xùn)練方法垢乙,使得YOLO能夠?qū)崟r檢測多達(dá)9000種目標(biāo)锨咙,在這種方法下輸出的模型稱為YOLO9000。
YOLO9000聯(lián)合訓(xùn)練邏輯
YOLO9000主要在COCO和ImageNet數(shù)據(jù)集上進(jìn)行訓(xùn)練追逮,首先在檢測數(shù)據(jù)集上訓(xùn)練一定的epoch來讓模型學(xué)習(xí)定位和檢測目標(biāo)的能力酪刀;再使用分類數(shù)據(jù)集進(jìn)行訓(xùn)練,從而擴(kuò)展模型對目標(biāo)的識別能力羊壹。
在訓(xùn)練的過程中蓖宦,混合目標(biāo)檢測和分類的數(shù)據(jù)集。當(dāng)輸入是檢測數(shù)據(jù)集時油猫,對整個Loss函數(shù)計(jì)算Loss稠茂;當(dāng)輸入是分類數(shù)據(jù)集時,Loss函數(shù)只計(jì)算分類Loss情妖,其余部分Loss設(shè)為零睬关。
YOLO9000使用的聯(lián)合訓(xùn)練不同于將Backbone在ImageNet上進(jìn)行預(yù)訓(xùn)練,聯(lián)合訓(xùn)練可以擴(kuò)充檢測識別的目標(biāo)類別毡证。例如电爹,當(dāng)模型檢測出車的位置后,更進(jìn)一步將其細(xì)分類別轎車料睛、卡車丐箩、客車、自行車恤煞、三輪車等屎勘。
【Rocky的延伸思考】
- 業(yè)務(wù)側(cè):YOLOv2 輸入側(cè)的多尺度訓(xùn)練思想,Backbone以及Head結(jié)構(gòu)完全可以作為baseline模型的一部分進(jìn)行業(yè)務(wù)開展居扒。
- 競賽側(cè):YOLOv2 輸入側(cè)的多尺度訓(xùn)練思想在競賽側(cè)是一個提分利器概漱。Head結(jié)構(gòu)中的anchor box機(jī)制,Dimension Clusters以及Direct location prediction優(yōu)化方法可以作為競賽側(cè)的提分策略喜喂。
- 研究側(cè):YOLOv2 輸入側(cè)的多尺度訓(xùn)練思想以及High Resolution Classifier和Head結(jié)構(gòu)以及損失函數(shù)具備作為baseline的價(jià)值瓤摧,不管是進(jìn)行拓展研究還是單純學(xué)習(xí)思想。
【五】YOLOv3 輸入側(cè)玉吁,Backbone照弥,Neck,Head进副,Tricks大解析
時間來到2018年产喉,這時候Rocky正要開始研究生的生涯,與此同時,YOLOv3來了曾沈!后續(xù)YOLO系列的整體結(jié)構(gòu)这嚣,都在YOLOv3中已經(jīng)定型。
下面Rocky在這里先分享一下YOLOv3的整體結(jié)構(gòu):
YOLOv3網(wǎng)絡(luò)結(jié)構(gòu)圖
YOLOv3 輸入側(cè)大解析
在YOLOv3輸入側(cè)塞俱,Rocky想引入常用基礎(chǔ)數(shù)據(jù)增強(qiáng)技術(shù)和高階數(shù)據(jù)增強(qiáng)算法姐帚。
因?yàn)椴还苁荵OLO系列還是二階段目標(biāo)檢測系列;不管是目標(biāo)檢測還是圖像分類和分割障涯,基礎(chǔ)數(shù)據(jù)增強(qiáng)技術(shù)和高階數(shù)據(jù)增強(qiáng)算法都有很強(qiáng)的實(shí)用價(jià)值罐旗。
高階數(shù)據(jù)增強(qiáng)算法:
高階數(shù)據(jù)增強(qiáng)算法
其中RandErasing將圖像的部分區(qū)域替換為隨機(jī)值,或者是訓(xùn)練集的平均像素值唯蝶。
而GridMask則使用了一個網(wǎng)格掩碼九秀,并將掩碼進(jìn)行隨機(jī)翻轉(zhuǎn),與原圖相乘粘我,從而得到增廣后的圖像鼓蜒,通過超參數(shù)控制生成的掩碼網(wǎng)格的大小。
基于NAS搜索的AutoAugment在一系列圖像增強(qiáng)子策略的搜索空間中通過搜索算法找到適合特定數(shù)據(jù)集的圖像增強(qiáng)方案征字。針對不同類型的數(shù)據(jù)集都弹,會包含不同數(shù)量的子策略。每個子策略中都包含兩種變換匙姜,針對每張圖像都隨機(jī)的挑選一個子策略畅厢,然后以一定的概率來決定是否執(zhí)行子策略中的每種變換方法。
其余方法的細(xì)節(jié)知識氮昧,Rocky將在后續(xù)的高階數(shù)據(jù)增強(qiáng)專題文章中依次展開框杜,大家敬請期待。
常用基礎(chǔ)數(shù)據(jù)增強(qiáng)技術(shù):
- 顏色變換:在色彩通道空間進(jìn)行數(shù)據(jù)增強(qiáng)袖肥,比如將某種顏色通道關(guān)閉咪辱,或者改變亮度值。
- 旋轉(zhuǎn)變換:選擇一個角度昭伸,左右旋轉(zhuǎn)圖像梧乘,可以改變圖像內(nèi)容朝向澎迎。
- 添加噪聲:從高斯等分布中采樣出的隨機(jī)值矩陣加入到圖像中庐杨。
- 銳化和模糊:使用高斯算子,拉普拉斯算子等處理圖像夹供。
- 縮放變換:圖像按照比例進(jìn)行放大和縮小并不改變圖像中的內(nèi)容灵份。
- 平移變換:向上下左右四個維度移動圖像。
- 翻轉(zhuǎn)變換:關(guān)于水平或者豎直的軸進(jìn)行圖像翻轉(zhuǎn)操作哮洽。
- 裁剪變換:主要有中心裁剪與隨機(jī)裁剪填渠。
- 仿射變換:對圖像進(jìn)行一次線性變換并接上一個平移變換。
YOLOv3 Backbone大解析
YOLOv3的Backbone在YOLOv2的基礎(chǔ)上設(shè)計(jì)了Darknet-53結(jié)構(gòu)。
YOLOv3將YOLOv2的Darknet-19加深了網(wǎng)絡(luò)層數(shù)氛什,并引入了ResNet的殘差思想莺葫,也正是殘差思想讓YOLOv3將Backbone深度大幅擴(kuò)展至Darknet-53。
YOLOv3優(yōu)化了下采樣方式(無池化層結(jié)構(gòu))枪眉,采用卷積層來實(shí)現(xiàn)捺檬,而YOLOv2中采用池化層實(shí)現(xiàn)。
YOLOv3 Neck大解析
YOLOv3則是較好的引入了FPN的思想贸铜,以支持后面的Head側(cè)采用多尺度來對不同size的目標(biāo)進(jìn)行檢測堡纬,越精細(xì)的grid cell就可以檢測出越精細(xì)的目標(biāo)物體。YOLOv3設(shè)置了三個不同的尺寸蒿秦,分別是,和烤镐,他們之間的比例為。
YOLOv3采用全卷積的思路棍鳖,在Neck結(jié)構(gòu)也不例外(YOLOv1-v2中采用池化層做特征圖的下采樣炮叶, v3中采用卷積層來實(shí)現(xiàn))。
YOLOv3 Head大解析
YOLOv3Head結(jié)構(gòu)在YOLOv2的基礎(chǔ)上引入了多尺度檢測邏輯和多標(biāo)簽分類思想鹊杖,優(yōu)化了損失函數(shù)悴灵。
YOLOv3在Neck結(jié)構(gòu)的基礎(chǔ)上順勢而為融合了3個尺度,在多個尺度的融合特征圖上分別獨(dú)立做檢測骂蓖。再將Anchor Box由5個增加至9個积瞒,每個尺度下分配3個Anchor Box,最終對于小目標(biāo)的檢測效果提升明顯登下。并且多尺度+9anchor box讓YOLOv3的整體檢測性能達(dá)到了一個比較從容的level茫孔。
再說多標(biāo)簽分類思想,我大受震撼被芳。首先什么是多標(biāo)簽分類呢缰贝?我們先對幾種常見的分類邏輯做一個對比:
- 二分類(Two-Class Classification)問題,是最簡單的分類問題畔濒,比如一個任務(wù)中只有貓和狗剩晴,每個樣本中也只有其中的一類。
- 單標(biāo)簽多分類(Multi-Class Classification)問題侵状,指一個樣本(一個圖片或者一個檢測框)有一個標(biāo)簽赞弥,但總共的類別數(shù)是大于兩類的。目標(biāo)檢測中針對每個檢測框的分類是多分類問題趣兄。在深度學(xué)習(xí)中绽左,使用softmax是最常用的解決方案。
- 多標(biāo)簽多分類(Multi-Label Classification)問題艇潭,指一個樣本(一個圖片或者一個檢測框)中含有多個物體或者多個label拼窥。在深度學(xué)習(xí)中戏蔑,使用多個Logistic輸出是一種性價(jià)比很高的做法。
YOLOv3將YOLOv2的單標(biāo)簽分類改進(jìn)為多標(biāo)簽分類鲁纠,Head結(jié)構(gòu)將用于單標(biāo)簽分類的Softmax分類器改成多個獨(dú)立的用于多標(biāo)簽分類的Logistic分類器总棵,取消了類別之間的互斥,可以使網(wǎng)絡(luò)更加靈活改含。YOLOv2使用Softmax分類器彻舰,認(rèn)為一個檢測框只屬于一個類別,每個檢測框分配到概率最大的類別候味。但實(shí)際場景中一個檢測框可能含有多個物體或者有重疊的類別標(biāo)簽刃唤。Logistic分類器主要用到Sigmoid函數(shù),可以將輸入約束在0到1的范圍內(nèi)白群,當(dāng)一張圖像經(jīng)過特征提取后的某一檢測框類別置信度經(jīng)過sigmoid函數(shù)約束后如果大于設(shè)定的閾值尚胞,就表示該檢測框負(fù)責(zé)的物體屬于該類別。
YOLOv3的損失函數(shù)在YOLOv2的基礎(chǔ)上進(jìn)行了改進(jìn):
YOLOv3中置信度誤差損失和分類誤差損失都使用交叉熵來表示帜慢。
YOLOv3 Tricks大解析
等到Y(jié)OLOv3發(fā)布時笼裳,YOLO系列的整體架構(gòu)算是基本確定,Adam優(yōu)化器也開始逐漸流行起來粱玲。
Adam優(yōu)化器結(jié)合了AdaGrad和RMSProp兩種優(yōu)化算法的優(yōu)點(diǎn)躬柬。對梯度的一階矩估計(jì)(First Moment Estimation,即梯度的均值)和二階矩估計(jì)(Second Moment Estimation抽减,即梯度的未中心化的方差)進(jìn)行綜合考慮允青,計(jì)算出更新步長。
Adam的優(yōu)勢:
- 實(shí)現(xiàn)簡單卵沉,計(jì)算高效颠锉,對內(nèi)存需求少。
- 參數(shù)的更新不受梯度的伸縮變換影響史汗。
- 超參數(shù)具有很好的解釋性琼掠,且通常無需調(diào)整或僅需很少的微調(diào)萌衬。
- 更新的步長能夠被限制在大致的范圍內(nèi)(初始學(xué)習(xí)率)圣蝎。
- 能自然地實(shí)現(xiàn)步長退火過程(自動調(diào)整學(xué)習(xí)率)平挑。
- 很適合應(yīng)用于大規(guī)模的數(shù)據(jù)及參數(shù)的場景辜纲。
- 適用于不穩(wěn)定目標(biāo)函數(shù)。
- 適用于梯度稀疏或梯度存在很大噪聲的問題顶吮。
Adam的實(shí)現(xiàn)原理:
【Rocky的延伸思考】
- 基礎(chǔ)數(shù)據(jù)增強(qiáng)技術(shù)和高階數(shù)據(jù)增強(qiáng)算法不管是在業(yè)務(wù)嘿悬,競賽還是研究維度都能非常穩(wěn)定的帶來性能的提升锋爪。
- 業(yè)務(wù):YOLOv3 整體結(jié)構(gòu)在工程中非常穩(wěn)定副硅,且久經(jīng)時間的考驗(yàn)姥宝,可以作為業(yè)務(wù)baseline模型的首選翅萤。
- 競賽:YOLOv3 整體結(jié)構(gòu)在競賽中的地位和業(yè)務(wù)側(cè)同理恐疲。
- 研究:基于YOLOv3優(yōu)化而來的論文日新月異腊满,讓人眼花繚亂,但正真價(jià)值幾何培己,還需要我們?nèi)ヅ袛唷?/li>
【六】YOLOv4 輸入側(cè)碳蛋,Backbone,Neck省咨,Head肃弟,Tricks大解析
首先,Rocky在這里先分享一下YOLOv4的整體結(jié)構(gòu):
YOLOv4網(wǎng)絡(luò)結(jié)構(gòu)圖
YOLOv4 輸入側(cè)大解析
YOLOv4的輸入側(cè)在YOLOv3的基礎(chǔ)上零蓉,使用了Mosaic和CutMix高階數(shù)據(jù)增強(qiáng)來提升模型的整體性能笤受。
Mosaic數(shù)據(jù)增強(qiáng)技術(shù)從經(jīng)典的CutMix優(yōu)化而來。在CutMix的邏輯中敌蜂,使用兩張圖片分別選取部分像素進(jìn)行拼接箩兽,產(chǎn)生新的數(shù)據(jù)。而Mosaic則在此基礎(chǔ)上圖片數(shù)量增加到四張章喉,并采用隨機(jī)縮放汗贫,裁剪和排布的方式進(jìn)行拼接。
Mosaic邏輯
Mosaic數(shù)據(jù)增強(qiáng)的優(yōu)點(diǎn):
- 優(yōu)化模型對小目標(biāo)的檢測效果秸脱。
- 減少訓(xùn)練算力落包,由于一次性可以計(jì)算4張圖片,所以Batch Size可以不用很大摊唇,也為YOLOv4在一張GPU卡上完成訓(xùn)練奠定了數(shù)據(jù)基礎(chǔ)咐蝇。
- 依然是一種增強(qiáng)數(shù)據(jù)操作,讓模型的魯棒性與泛化性能更優(yōu)巷查。
而上面提到的CutMix則從Mixup和Cutout優(yōu)化而來嘹害。
由上圖可知,Mixup將兩張圖片按比例混合吮便,其label也按同等比例分配笔呀;Cutout則是將圖片中的部分像素區(qū)域置0,但是label不變髓需;CutMix則是在Cutout的基礎(chǔ)上對置0的像素區(qū)域隨機(jī)填充其他圖像的部分像素值许师,label則按同等比例進(jìn)行分配。
其中僚匆,是二進(jìn)制矩陣微渠,用來標(biāo)記需要裁剪的區(qū)域和保留的區(qū)域,裁剪的區(qū)域值均為咧擂,其余位置為逞盆。圖片和組合得到新樣本,最后兩個圖的label也對應(yīng)求加權(quán)和松申。
CutMix的優(yōu)勢:
- 由于采用填充的形式云芦,合成的圖片不會有不自然的混合情形俯逾。
- 高價(jià)值信息增多,提升訓(xùn)練效率舅逸,優(yōu)化算法性能桌肴。
- 作為YOLOv4的Bag of freebies,其不增加模型的推理耗時琉历。
- 增加算法的局部識別與局部定位能力坠七。
- 在輸入側(cè),起到了類似dropout的作用旗笔。
YOLOv4 Backbone大解析
YOLOv4的Backbone在YOLOv3的基礎(chǔ)上彪置,受CSPNet網(wǎng)絡(luò)結(jié)構(gòu)啟發(fā),將多個CSP子模塊進(jìn)行組合設(shè)計(jì)成為CSPDarknet53蝇恶,并且使用了Mish激活函數(shù)悉稠。
CSPDarknet53總共有72層卷積層,遵循YOLO系列一貫的風(fēng)格艘包,這些卷積層都是大小的猛,步長為2的設(shè)置,能起到特征提取與逐步下采樣的作用想虎。
CSP子模塊主要解決了由于梯度信息重復(fù)導(dǎo)致的計(jì)算量龐大的問題卦尊。
CSP模塊不僅僅是一個子結(jié)構(gòu),更是一個處理思想舌厨,可以和ResNet岂却、ResNext、DenseNet裙椭、EfficientNet等網(wǎng)絡(luò)結(jié)合使用躏哩。
DenseNet結(jié)構(gòu)與CSP模塊結(jié)構(gòu)
上圖左側(cè)是DenseNet的結(jié)構(gòu),它進(jìn)行反向傳播時會有大量的重復(fù)計(jì)算揉燃,而右側(cè)的圖是CSP模塊結(jié)構(gòu)扫尺,它將基礎(chǔ)層的特征圖分成兩部分,一部分直接與該階段的末尾concat相連炊汤,另一部分經(jīng)過局部Dense模塊正驻,從而既能保留Dense模塊的特征復(fù)用,又能截?cái)嗵荻攘髑栏苊獯罅康闹貜?fù)計(jì)算姑曙,同時可以保證準(zhǔn)確率。
總的來說迈倍,CSP模塊解決了三個方面的問題:
- 提升模型的學(xué)習(xí)能力伤靠,同時使模型輕量化。
- 降低計(jì)算瓶頸啼染,提高硬件利用率宴合。
- 降低模型的內(nèi)存占用焕梅。
CSP模塊邏輯也可以遷移到其他Backbone網(wǎng)絡(luò),例如優(yōu)化ResNet以提升性能:
ResNet的CSP化
CSPNet論文地址:CSPNet[17]
YOLOv4論文中通過消融實(shí)驗(yàn)發(fā)現(xiàn)使用Mish激活函數(shù)會提升性能形纺,于是在Backbone中將其使用。(注:除Backbone以外的網(wǎng)絡(luò)結(jié)構(gòu)依舊使用LeakyReLU激活函數(shù))
Mish激活函數(shù)消融實(shí)驗(yàn)
Mish激活函數(shù)的示意圖如下徒欣,其有三個主要特征:
- 無上界有下界逐样。Mish向上無邊界避免了由于封頂而導(dǎo)致的梯度飽和,加快訓(xùn)練過程打肝。向下有邊界有助于實(shí)現(xiàn)強(qiáng)正則化效果脂新。
- 非單調(diào)函數(shù)。允許其在負(fù)半軸有穩(wěn)定的微小負(fù)值粗梭,從而使梯度流更穩(wěn)定争便。與ReLU負(fù)半軸的硬零邊界相比,其梯度更平滑断医。
- 無窮連續(xù)性與光滑性滞乙。具有較好的泛化能力,提高訓(xùn)練結(jié)果的質(zhì)量鉴嗤。
Mish激活函數(shù)
Mish激活函數(shù)的表達(dá)式:
Mish激活函數(shù)論文地址:Mish激活函數(shù)[18]
YOLOv4 Neck大解析
YOLOv4的Neck結(jié)構(gòu)主要包含了SPP模塊和PAN模塊斩启。
SPP模塊在YOLOv3_SPP.cfg中率先展現(xiàn),但是在YOLOv4中則成為了一個標(biāo)配醉锅。SPP模塊包含3個最大池化層兔簇,其滑動核(sliding kernel)尺寸分別是和,并通過Padding操作硬耍,使每個最大池化層的輸出特征圖不變垄琐,用于Concat融合操作。
SPP模塊代替了卷積層后的常規(guī)池化層经柴,可以增加感受野狸窘,更能獲取多尺度特征,訓(xùn)練速度也讓人滿意坯认。Yolov4論文中使用的圖像在COCO目標(biāo)檢測任務(wù)進(jìn)行實(shí)驗(yàn)朦前,SPP模塊能以0.5%的額外計(jì)算代價(jià)將AP50提升2.7%。
SPP模塊
SPP模塊論文:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition[19]
PAN模塊對不同層次的特征進(jìn)行瘋狂融合鹃操,其在FPN模塊的基礎(chǔ)上增加了自底向上的特征金字塔結(jié)構(gòu)韭寸,保留了更多的淺層位置特征,將整體特征提取能力進(jìn)一步提升荆隘。
在引入YOLOv4時恩伺,特征圖最后的融合操作相比于原論文發(fā)生了變化,從add操作改為concat操作椰拒,增加了特征圖的通道數(shù):
[圖片上傳失敗...(image-580cdd-1675416470624)]
PAN模塊論文:Path Aggregation Network for Instance Segmentation[20]
YOLOv4 Head大解析
YOLOv4的Head結(jié)構(gòu)沿用了YOLOv3的整體架構(gòu)晶渠,并引入了CIOU Loss和DIOU NMS來提升Head結(jié)構(gòu)的整體性能凰荚。
[圖片上傳失敗...(image-a0ba53-1675416470624)]
在YOLOv3中,使用MSE(均方誤差)損失函數(shù)對檢測框的中心點(diǎn)以及寬高坐標(biāo)進(jìn)行優(yōu)化褒脯。在MSE損失函數(shù)的邏輯中便瑟,將檢測框的中心點(diǎn)和寬高坐標(biāo)作為獨(dú)立的變量對待,但是實(shí)際上他們之間是有關(guān)聯(lián)的番川。所以一個直觀的解決方案是使用IOU損失代替MSE損失到涂。
YOLOv4論文中依次提到了IOU Loss,GIOU Loss颁督,DIOU Loss以及CIOU Loss践啄。其中IOU Loss是其他Loss的基石,也最為簡單沉御,公式如下:
其中 代表檢測框屿讽, 代表ground truth, 代表兩者的交并比吠裆。
IOU Loss思想簡潔明了伐谈,但存在兩個問題:
- 當(dāng)檢測框和ground truth不相交時,會使IOU=0试疙,從而無法反應(yīng)兩個框距離的遠(yuǎn)近衩婚,進(jìn)而導(dǎo)致IOU Loss不可導(dǎo)。
- 當(dāng)兩個檢測框大小相同效斑,IOU也相同時非春,IOU Loss無法區(qū)分兩者位置的差異。
[圖片上傳失敗...(image-737f17-1675416470624)]IOU Loss問題示意圖
而GIOU Loss能改進(jìn)這些問題缓屠,其在檢測框與ground truth之外映射一個最小外接矩形來緩解IOU Loss存在的問題奇昙,其公式和圖解如下:
其中 代表最小外接矩形,最后一項(xiàng)代表使用差集來進(jìn)行約束與懲罰敌完。
[圖片上傳失敗...(image-1ef893-1675416470624)]GIOU Loss圖解
但出現(xiàn)上圖右側(cè)的情況時储耐,GIOU Loss被打回原形。
DIOU Loss在GIOU Loss基礎(chǔ)上提出了中心點(diǎn)距離的概念滨溉,來改進(jìn)GIOU Loss被打回原形的問題什湘。
[圖片上傳失敗...(image-8986a9-1675416470624)]DIOU Loss圖解
對ground truth和檢測框的中心點(diǎn)進(jìn)行度量,引入位置信息的同時加快了損失函數(shù)的收斂晦攒,其公式如下:
但是DIOU Loss仍存在檢測框長寬比帶來的新問題:
[圖片上傳失敗...(image-da7c32-1675416470624)]DIOU Loss問題示意圖
最后闽撤,就是YOLOv4中使用的CIOU Loss登場了。CIOU Loss在DIOU Loss的基礎(chǔ)上考慮了檢測框長寬比的因素脯颜,將檢測框回歸損失的三大邏輯:重疊面積哟旗、中心點(diǎn)距離,長寬比進(jìn)行了有效整合,其公式如下:
其中 代表了長寬比一致性的參數(shù):
在使用了CIOU Loss之后闸餐,YOLOv4的整體損失函數(shù)如下所示:
介紹完YOLOv4的CIOU Loss以及整體損失函數(shù)饱亮,接下來我們來介紹YOLOv4對NMS操作的優(yōu)化。
YOLOv4改進(jìn)了YOLOv1-v3中使用的傳統(tǒng)NMS操作舍沙,使用了DIOU思想計(jì)算“IOU”值近上,進(jìn)一步優(yōu)化了后處理效果。CIOU思想在訓(xùn)練中有很大作用拂铡,但是在Inference過程中壹无,并沒有g(shù)round truth的信息,所以使用DIOU足矣和媳,且能減少計(jì)算量格遭。
YOLOv4 Tricks大解析
YOLOv4在YOLOv3的基礎(chǔ)上哈街,設(shè)計(jì)使用了SAT留瞳,CmBN和Label Smoothing等Tricks。
YOLOv4中的SAT(self adversarial training) 使用基于FGSM原理的梯度攻擊技術(shù)骚秦,生成對抗樣本進(jìn)行對抗訓(xùn)練她倘。
[圖片上傳失敗...(image-64f00a-1675416470624)]
首先,什么是對抗樣本呢作箍?對抗樣本是在原圖像中增加擾動噪聲生成硬梁,如上圖所示。對抗樣本容易使得模型輸出錯誤判斷胞得,這給模型的魯棒性造成了重大挑戰(zhàn)荧止。
打不過,就加入它阶剑。秉持著這個原則跃巡,我們在訓(xùn)練時將對抗樣本加入訓(xùn)練集一起訓(xùn)練,即為對抗訓(xùn)練牧愁。進(jìn)行對抗訓(xùn)練能擴(kuò)充訓(xùn)練集的可能性素邪,使得數(shù)據(jù)集逼近我們想要的數(shù)據(jù)分布,訓(xùn)練后的模型魯棒性和泛化性能也大大增強(qiáng)猪半。
生成對抗樣本的方法主要分為三種兔朦,具體邏輯如下圖所示。
[圖片上傳失敗...(image-7f5eb7-1675416470624)]
CmBN(Cross mini-Batch Normalization)是CBN的修改版磨确。
CBN主要用來解決在Batch-Size較小時沽甥,BN的效果不佳問題。CBN連續(xù)利用多個迭代的數(shù)據(jù)來變相擴(kuò)大Batch-Size從而改進(jìn)模型的效果乏奥。(每次迭代時計(jì)算包括本次迭代的前四個迭代后統(tǒng)一計(jì)算整體BN)
而CmBN是獨(dú)立利用多個mini-batch內(nèi)的數(shù)據(jù)進(jìn)行BN操作安接。(每四個迭代后統(tǒng)一計(jì)算一次整體BN)
[圖片上傳失敗...(image-b95187-1675416470624)]
Label Smooth可以看作是一種防止過擬合的正則化方法。
其主要是在One-Hot標(biāo)簽中加入噪聲,減少訓(xùn)練時GroundTruth在計(jì)算損失函數(shù)的權(quán)重盏檐,來達(dá)到防止過擬合的作用歇式,增強(qiáng)模型的泛化能力。
通常參數(shù)設(shè)置如下圖中的比例即可胡野。
[圖片上傳失敗...(image-1575ff-1675416470624)]
【Rocky的延伸思考】
- YOLOv4中的輸入側(cè)和Tricks具備在業(yè)務(wù)材失,競賽以及研究中進(jìn)行實(shí)驗(yàn)的價(jià)值。
- 業(yè)務(wù):YOLOv4 Backbone中使用的CSP思想可以方便地與業(yè)務(wù)場景相結(jié)合硫豆。Neck結(jié)構(gòu)和Head中提出的CIOU Loss和DIOU NMS可以作為工程基線模型的首選龙巨。
- 競賽:YOLOv4 Backbone中提到的CSP結(jié)構(gòu)和Mish激活函數(shù)在競賽中是比較有效的Tricks。Neck結(jié)構(gòu)可以作為競賽的入場結(jié)構(gòu)熊响。Head中提出的CIOU Loss和DIOU NMS在競賽中的依舊是提分利器旨别。
- 研究:YOLOv4 整體結(jié)構(gòu)具備作為研究Baseline的價(jià)值。
【七】YOLOv5 輸入側(cè)汗茄,Backbone秸弛,Neck,Head洪碳,Tricks大解析
同樣的递览,Rocky在這里先分享一下YOLOv5的整體結(jié)構(gòu):
[圖片上傳失敗...(image-3084b7-1675416470624)]YOLOv5網(wǎng)絡(luò)結(jié)構(gòu)圖
YOLOv5 輸入側(cè)大解析
YOLOv5的輸入側(cè)同樣使用了Mosaic高階數(shù)據(jù)增強(qiáng)策略,并增加自適應(yīng)圖像調(diào)整策略瞳腌。
值得一提的是绞铃,正是Mosaic論文的作者提出了YOLOv5,并且YOLOv5的輸入側(cè)做了很多工程優(yōu)化嫂侍,對工業(yè)界非常友好儿捧。
而自適應(yīng)圖像調(diào)整策略可以優(yōu)化常規(guī)圖像縮放填充引入過多無效信息導(dǎo)致Inference耗時增加的問題。其邏輯主要是計(jì)算圖像原生尺寸與輸入尺寸的縮放比例挑宠,并獲得縮放后的圖像尺寸菲盾,最后再進(jìn)行自適應(yīng)填充獲得最后的輸入圖像,具體代碼邏輯可以在datasets.py的letterbox函數(shù)中查看痹栖。
YOLOv5 Backbone大解析
YOLOv5的Backbone同樣使用了YOLOv4中使用的CSP思想亿汞。
[圖片上傳失敗...(image-c6dea3-1675416470624)]
值得一提的是,YOLOv5最初版本中會存在Focus結(jié)構(gòu)揪阿,在YOLOv5第六版開始后疗我,就舍棄了這個結(jié)構(gòu)改用,=的常規(guī)卷積南捂,其產(chǎn)生的參數(shù)更少吴裤,效果更好。
[圖片上傳失敗...(image-781023-1675416470624)]Focus結(jié)構(gòu)
YOLOv5 Neck大解析
由于YOLOv5在YOLOv4發(fā)布之后沒多久就開源了溺健,且并沒有論文的發(fā)表麦牺,創(chuàng)新性部分一直受到熱議。
[圖片上傳失敗...(image-83f746-1675416470624)]
YOLOv5的Neck結(jié)構(gòu)也使用了SPP模塊和PAN模塊,但是在PAN模塊進(jìn)行融合后剖膳,將YOLOv4中使用的常規(guī)CBL模塊替換成借鑒CSPnet設(shè)計(jì)的CSP_v5結(jié)構(gòu)魏颓,加強(qiáng)網(wǎng)絡(luò)特征融合的能力。
YOLOv5 Head大解析
YOLOv5的Head結(jié)構(gòu)在YOLOv4的基礎(chǔ)上引入了Auto Learning Bounding Box Anchors(自適應(yīng)anchor box)和鄰域正負(fù)樣本分配策略吱晒。
[圖片上傳失敗...(image-e723c8-1675416470624)]
YOLOv5的anchor box是自適應(yīng)于訓(xùn)練數(shù)據(jù)的甸饱,會根據(jù)不同的訓(xùn)練數(shù)據(jù)自動學(xué)習(xí)適配相應(yīng)的anchor box。代碼中具體的對應(yīng)函數(shù)是check_anchor函數(shù)仑濒。
由于增加高質(zhì)量正樣本檢測框可以顯著加速收斂叹话,故YOLOv5設(shè)計(jì)了相應(yīng)的鄰域正負(fù)樣本分配策略,其主要流程如下:
- 將ground truth與當(dāng)前feature map中的anchor box進(jìn)行比較墩瞳,如果ground truth與anchor box的寬高比例都處在 驼壶,那么這個ground truth就能與當(dāng)前featuer map相匹配。
- 將當(dāng)前feature map中的ground truth分配給對應(yīng)的grid cell喉酌。將這個grid cell分為四個象限热凹,針對與當(dāng)前feature map匹配的ground truth,會計(jì)算該ground truth處于四個象限中的哪一個瞭吃,并將鄰近的兩個grid cell中的檢測框也作為正樣本碌嘀。如下圖所示涣旨,若ground truth偏向于右上角的象限歪架,就會將ground truth所在grid cell的上面和右邊的grid cell中的檢測框也作為正樣本。
[圖片上傳失敗...(image-481108-1675416470624)]YOLOv5鄰域正負(fù)樣本分配策略
比起yolov4中一個ground truth只能匹配一個正樣本霹陡,YOLOv5能夠在多個grid cell中都分配到正樣本和蚪,有助于訓(xùn)練加速和正負(fù)樣本平衡。
YOLOv5 Tricks解析
YOLOv5中使用的Tricks基本上和YOLOv4一致烹棉,并在此基礎(chǔ)上引入了更多的工程優(yōu)化邏輯攒霹。
YOLOv5通過不同的訓(xùn)練參數(shù)配置,用來獲得不同復(fù)雜度的模型浆洗。
[圖片上傳失敗...(image-d45f28-1675416470624)]YOLOv5模型家族
除此之外催束,YOLOv5還嘗試了混合精度訓(xùn)練和模型EMA(Exponential Moving Average)策略。
混合精度訓(xùn)練能在盡可能減少精度損失的情況下利用FP16加速訓(xùn)練伏社,并使用FP16存儲模型權(quán)重抠刺,在減少占用內(nèi)存的同時起到了加速訓(xùn)練的效果。
模型EMA(Exponential Moving Average)策略將模型近期不同epoch的參數(shù)做平均摘昌,提高模型整體檢測性能以及魯棒性速妖。
【Rocky的延伸思考】
- YOLOv5 整體結(jié)構(gòu)的易用性使得其不管在業(yè)務(wù),競賽還是研究中都非常友好聪黎,且其github庫更新頻率讓人敬佩罕容。YOLOv5可以說是YOLO系列在工業(yè)界用的最多最廣泛的一個分支,因?yàn)槠涫荘ytorch架構(gòu)的,減少了工業(yè)界人員對Darknet不熟悉不從容的麻煩锦秒。
【八】YOLOx 輸入側(cè)露泊,Backbone,Neck旅择,Head滤淳,Tricks大解析
首先,Rocky在這里先分享一下YOLOx的整體結(jié)構(gòu):
[圖片上傳失敗...(image-49b36f-1675416470624)]YOLOx網(wǎng)絡(luò)結(jié)構(gòu)圖
YOLOx 輸入側(cè)大解析
YOLOx的輸入側(cè)在YOLOv5的基礎(chǔ)上摒棄了預(yù)訓(xùn)練邏輯砌左,并使用Mosaic和MixUp高階數(shù)據(jù)增強(qiáng)算法脖咐。
MixUp最初應(yīng)用在分類任務(wù)上,將兩張圖片通過設(shè)定的融合系數(shù)進(jìn)行融合汇歹,兩個圖片上的label也對應(yīng)融合屁擅。
[圖片上傳失敗...(image-975634-1675416470624)]MixUp邏輯
由于Mosaic和MixUp高階數(shù)據(jù)增強(qiáng)算法已經(jīng)足夠強(qiáng)大,在這種情況下ImageNet預(yù)訓(xùn)練并不能帶來有效增益产弹,故YOLOx摒棄了預(yù)訓(xùn)練邏輯派歌,并從頭訓(xùn)練。
YOLOx Backbone大解析
YOLOx的Backbone沿用了YOLOv3的Backbone結(jié)構(gòu)痰哨,故在此不在展開介紹胶果。
YOLOx Neck大解析
YOLOx的Neck依然使用了YOLOv3的結(jié)構(gòu),并且使用了SPP模塊斤斧。
[圖片上傳失敗...(image-8e3974-1675416470624)]
YOLOx Head大解析
YOLOx的Head結(jié)構(gòu)在YOLOv5的基礎(chǔ)上在網(wǎng)絡(luò)結(jié)構(gòu)中引入了Decoupled Head早抠,并使用anchor-free思想和SimOTA正負(fù)樣本分配策略進(jìn)行損失函數(shù)的計(jì)算與優(yōu)化。
[圖片上傳失敗...(image-adb257-1675416470624)]
YOLOx使用了三個Decoupled Head(解耦頭)撬讽,分別聚焦cls(分類信息)蕊连,reg(檢測框信息)和IOU(置信度信息)。常規(guī)的檢測頭在特征的表達(dá)與學(xué)習(xí)能力上比起Decoupled Head有所欠缺游昼,并且Decoupled Head模塊能加快模型的收斂速度甘苍。
[圖片上傳失敗...(image-181eea-1675416470624)]Decoupled Head(解耦頭)與常規(guī)檢測頭的效果對比
除此之外,YOLOx還使用anchor-free思想烘豌,比起YOLO系列中常規(guī)的anchor-based载庭,在Head側(cè)可以減少約 的參數(shù)。比起anchor-based方法使用先驗(yàn)知識設(shè)計(jì)anchor尺寸廊佩,anchor-free思想將感受野作為“anchor”信息囚聚。上述三個Decoupled Head中最上面的分支對應(yīng)著大anchor框,中間的分支對應(yīng)著中等anchor框最下面的分支對應(yīng)著小anchor框罐寨。最后的輸出將這個三個分支融合成一個 的特征向量靡挥。
接下來就是介紹YOLOx的正負(fù)樣本分配策略了,我們知道目標(biāo)檢測場景一張圖像中往往負(fù)樣本占絕大多數(shù)鸯绿,而正樣本只是少數(shù)跋破。為了獲得更多高質(zhì)量的正樣本簸淀,YOLOx中設(shè)計(jì)了樣本初篩+SimOTA邏輯。
在樣本初篩中毒返,有兩種方法來篩選正樣本:
- 根據(jù)中心點(diǎn)判斷:找到中心點(diǎn)落在ground truth框中的所有anchor box租幕。
- 根據(jù)檢測框判斷:以ground truth中心點(diǎn)作為基準(zhǔn),繪制一個邊長為5的正方形拧簸,找到中心點(diǎn)落地這個正方形中的所有anchor box劲绪。
經(jīng)過初篩之后,再使用SimOTA進(jìn)行精細(xì)化篩選盆赤。其主要流程如下:
- 通過上面提到的樣本初篩方法贾富,獲取正樣本,同時獲取它們的特征信息(cls牺六,reg颤枪,IOu)。
- 計(jì)算正樣本與ground truth的Reg Loss和Cls Loss淑际,并將它們加權(quán)相加畏纲,Reg和Cls的權(quán)重為 。(loss aware)
- 通過每個ground truth的檢測樣本來確定其能分配到的高價(jià)值正樣本數(shù)(Dynamic K)春缕,其邏輯是獲取與當(dāng)前ground truth的IOU值前10的檢測框盗胀,并將它們求和并取整,計(jì)算出來的整數(shù)就作為當(dāng)前ground truth的正樣本數(shù)“容量”锄贼。
- 確定每個ground truth的Dynamic K個正樣本票灰,其邏輯是選取步驟2中加權(quán)Loss最小的前K個樣本作為正樣本。
- 共用正樣本去重咱娶,其邏輯是如果一個檢測框被兩個及以上的ground truth認(rèn)作正樣本米间,那么再次使用加權(quán)Loss進(jìn)行評判强品,將這個檢測框分給加權(quán)Loss最小的那個ground truth膘侮,作為其獨(dú)有的正樣本。
YOLOv5的正負(fù)樣本分配策略是基于鄰域匹配的榛,并通過跨網(wǎng)格匹配策略增加正樣本數(shù)量琼了,從而使得網(wǎng)絡(luò)快速收斂,但是該方法屬于靜態(tài)分配方法夫晌,并不會隨著網(wǎng)絡(luò)訓(xùn)練的過程而調(diào)整雕薪。YOLOx使用的SimOTA能夠算法動態(tài)分配正樣本,進(jìn)一步提高檢測精度晓淀。而且比起OTA由于使用了Sinkhorn-Knopp算法導(dǎo)致訓(xùn)練時間加長所袁,SimOTA算法使用Top-K近似策略來得到樣本最佳匹配,大大加快了訓(xùn)練速度凶掰。
YOLOx Tricks解析
YOLOx使用了YOLOv5中提到的模型EMA(Exponential Moving Average)策略燥爷,并且使用余弦退火學(xué)習(xí)率優(yōu)化訓(xùn)練過程蜈亩。
余弦退火學(xué)習(xí)率衰策略(CosineAnnealingLR)使得學(xué)習(xí)率呈周期性變化,但我們通常取它的一個余弦周期來完成整個訓(xùn)練過程前翎。
另外稚配,固定步長衰減(StepLR),多步長衰減(MultiStepLR)港华,指數(shù)衰減(ExponentialLR)等都是經(jīng)典實(shí)用的學(xué)習(xí)率衰減策略道川。
固定步長衰減在每隔一定的步長或者epoch對學(xué)習(xí)率進(jìn)行一定衰減,而多步長衰減策略比起固定步長衰減則更加靈活立宜,它可以在不同階段使用不同強(qiáng)度和頻率的衰減策略冒萄。指數(shù)衰減策略是使用指數(shù)邏輯對學(xué)習(xí)率進(jìn)行衰減。
[圖片上傳失敗...(image-a556ca-1675416470624)]
【Rocky的延伸思考】
YOLOx 整體結(jié)構(gòu)給業(yè)務(wù)橙数,競賽以及研究提供了一些新思路宦言,一定的落地價(jià)值。Rocky也很想知道YOLOv7引入Decoupled Head會是什么樣的效果商模。
【九】YOLOv6 輸入側(cè)奠旺,Backbone,Neck施流,Head响疚,Tricks大解析
首先,Rocky在這里先分享一下YOLOv6的整體結(jié)構(gòu):
[圖片上傳失敗...(image-db4da4-1675416470624)]YOLOv6網(wǎng)絡(luò)結(jié)構(gòu)圖
YOLOv6 輸入側(cè)大解析
YOLOv6的輸入側(cè)沿用了YOLOv5的整體邏輯瞪醋,并沒有引入新的Tricks忿晕,故就不再展開贅述。
YOLOv6 Backbone大解析
YOLOv6的Backbone結(jié)構(gòu)在YOLOv5的基礎(chǔ)上银受,設(shè)計(jì)了EfficientRep Backbone結(jié)構(gòu)践盼。
[圖片上傳失敗...(image-f543e7-1675416470624)]
和YOLOv5的Backbone相比,YOLOv6的Backbone不但能夠高效利用硬件算力宾巍,而且還具有較強(qiáng)的表征能力咕幻。
YOLOv6的Backbone中將普通卷積都替換成了RepConv結(jié)構(gòu)。同時顶霞,在RepConv基礎(chǔ)上設(shè)計(jì)了RepBlock結(jié)構(gòu)肄程,其中RepBlock中的第一個RepConv會做channel維度的變換和對齊。
另外选浑,YOLOv6將SPPF優(yōu)化設(shè)計(jì)為更加高效的SimSPPF蓝厌,增加特征重用的效率。
[圖片上傳失敗...(image-5ccabc-1675416470624)]SimSPPF結(jié)構(gòu)
YOLOv6 Neck大解析
YOLOv6的Neck結(jié)構(gòu)受到硬件感知神經(jīng)網(wǎng)絡(luò)設(shè)計(jì)思想的啟發(fā)古徒,基于RepVGG style設(shè)計(jì)了可重參數(shù)化拓提、更高效的Rep-PAN。
[圖片上傳失敗...(image-84994e-1675416470624)]YOLOv6 Neck結(jié)構(gòu)
硬件感知神經(jīng)網(wǎng)絡(luò)設(shè)計(jì)的思想基于硬件的特性、推理框架/編譯框架的特點(diǎn)握玛,以硬件和編譯友好的結(jié)構(gòu)作為設(shè)計(jì)原則,在網(wǎng)絡(luò)構(gòu)建時斑唬,綜合考慮硬件計(jì)算能力胆数、內(nèi)存帶寬肌蜻、編譯優(yōu)化特性、網(wǎng)絡(luò)表征能力等必尼,進(jìn)而獲得又快又好的網(wǎng)絡(luò)結(jié)構(gòu)蒋搜。
Rep-PAN在PAN模塊基礎(chǔ)上,引入RepVGG style的RepBlock替換了YOLOv5中使用的CSP-Block判莉,同時對整體Neck中的算子進(jìn)行了調(diào)整豆挽,目的是在硬件上達(dá)到高效推理的同時,保持較好的多尺度特征融合能力券盅。
RepVGG論文:RepVGG: Making VGG-style ConvNets Great Again[21]
YOLOv6 Head大解析
YOLOv6的Head結(jié)構(gòu)和YOLOx一樣使用Anchor-free邏輯和SimOTA標(biāo)簽分配策略帮哈,并在其基礎(chǔ)上改進(jìn)了Decoupled Head(解耦檢測頭)結(jié)構(gòu),在損失函數(shù)中引入了SIoU邊界框回歸損失锰镀。
[圖片上傳失敗...(image-31a8b3-1675416470624)]
YOLOv6依然采用了Decoupled Head結(jié)構(gòu)娘侍,并對其進(jìn)行了精簡設(shè)計(jì)。YOLOX的檢測頭雖然提升了檢測精度泳炉,但一定程度上增加了網(wǎng)絡(luò)延時憾筏。YOLOv6采用Hybrid Channels策略重新設(shè)計(jì)了一個更高效的Decoupled Head結(jié)構(gòu),在維持精度的同時降低了延時花鹅,緩解了Decoupled Head中 卷積帶來的額外延時開銷氧腰。
為了進(jìn)一步提升回歸精度,YOLOv6使用了SIoU檢測框回歸損失函數(shù)來優(yōu)化網(wǎng)絡(luò)的學(xué)習(xí)過程刨肃。
YOLOv4中的CIoU Loss雖然考慮到檢測框與ground truth之間的重疊面積古拴、中心點(diǎn)距離,長寬比這三大因素真友,但是依然缺少了對檢測框與ground truth之間方向的匹配性的考慮黄痪。SIoU Loss通過引入了所需回歸之間的向量角度,重新定義了距離損失锻狗,有效降低了回歸的自由度满力,加快網(wǎng)絡(luò)收斂,進(jìn)一步提升了回歸精度轻纪。
SIOU Loss論文地址:SIoU Loss: More Powerful Learning for Bounding Box Regression[22]
YOLOv6 Tricks大解析
YOLOv6進(jìn)行了很多蒸餾方向上的嘗試。
比如Self-distillation叠纷,Reparameterizing Optimizer刻帚,使用 Channel-wise Distillation進(jìn)行量化感知訓(xùn)練等方法,進(jìn)一步加強(qiáng)模型的整體性能涩嚣。
【Rocky的延伸思考】
- 業(yè)務(wù):YOLOv6 Backbone可以高效用于業(yè)務(wù)向的部署端崇众。Neck結(jié)構(gòu)使用了端側(cè)友好的設(shè)計(jì)策略掂僵,Rocky也在實(shí)際中測試過,發(fā)現(xiàn)其效果會因任務(wù)類型與場景的改變而變化顷歌,是否使用還需要通過實(shí)驗(yàn)來反饋锰蓬。
- 競賽:YOLOv6 Backbone可以用于競賽的Baseline嘗試。Rocky也相信YOLOv6會在一些限定算力資源的競賽中會大放異眯漩。
- 研究:YOLOv6 整體結(jié)構(gòu)可以用于研究的入場Baseline芹扭。
【十】YOLOv7 輸入側(cè),Backbone赦抖,Neck舱卡,Head,Tricks大解析
首先队萤,Rocky在這里先分享一下YOLOv7的整體結(jié)構(gòu):
[圖片上傳失敗...(image-a45b9a-1675416470624)]YOLOv7網(wǎng)絡(luò)結(jié)構(gòu)圖
YOLOv7 輸入側(cè)大解析
YOLOv7的輸入側(cè)沿用了YOLOv5的整體邏輯轮锥,并沒有引入新的Tricks,故就不再展開贅述要尔。
YOLOv7 Backbone大解析
YOLOv7的Backbone結(jié)構(gòu)在YOLOv5的基礎(chǔ)上舍杜,設(shè)計(jì)了E-ELAN和MPConv結(jié)構(gòu)。
[圖片上傳失敗...(image-ba30c8-1675416470624)]
E-ELAN結(jié)構(gòu)會在后面的Neck部分中詳細(xì)介紹赵辕,這里就不再展開蝴簇。MPConv結(jié)構(gòu)由常規(guī)卷積與maxpool雙路徑組成,增加模型對特征的提取融合能力匆帚。不管是E-ELAN還是MPConv結(jié)構(gòu)熬词,都將特征重用邏輯演繹到了比較高的水準(zhǔn),讓人眼前一亮吸重。
YOLOv7 Neck大解析
YOLOv7的Neck結(jié)構(gòu)主要包含了SPPSCP模塊和優(yōu)化的PAN模塊互拾。
[圖片上傳失敗...(image-c642cb-1675416470624)]
SPPCSP模塊在SPP模塊基礎(chǔ)上在最后增加concat操作,與SPP模塊之前的特征圖進(jìn)行融合嚎幸,更加豐富了特征信息颜矿。
PAN模塊引入E-ELAN結(jié)構(gòu),使用expand嫉晶、shuffle骑疆、merge cardinality等策略實(shí)現(xiàn)在不破壞原始梯度路徑的情況下,提高網(wǎng)絡(luò)的學(xué)習(xí)能力替废。
論文原文:(E-ELAN uses expand, shuffle, merge cardinality to achieve the ability to continuously enhance the learning ability of the network without destroying the original gradient path.)
[圖片上傳失敗...(image-b8d20-1675416470624)]E-ELAN模塊
YOLOv7 Head大解析
YOLOv7的Head結(jié)構(gòu)使用了和YOLOv5一樣的損失函數(shù)箍铭,引入RepVGG style改造了Head網(wǎng)絡(luò)結(jié)構(gòu),并使用了輔助頭(auxiliary Head)訓(xùn)練以及相應(yīng)的正負(fù)樣本匹配策略椎镣。
[圖片上傳失敗...(image-a0270c-1675416470624)]
RepVGG style在訓(xùn)練過程中可以通過多路分支提升性能诈火,推理可以通過結(jié)構(gòu)重新參數(shù)化實(shí)現(xiàn)推理速度的加快。
Rocky之前也對RepVGG style思想進(jìn)行遷移性實(shí)驗(yàn)状答,發(fā)現(xiàn)RepVGG style在不同模型中的兼容性并不是很強(qiáng)冷守,往往需要針對當(dāng)前的模型和場景進(jìn)行大量調(diào)參才能展現(xiàn)效果刀崖。
[圖片上傳失敗...(image-952776-1675416470624)]輔助頭訓(xùn)練策略以及相應(yīng)的正負(fù)樣本匹配策略
YOLOv7在Head結(jié)構(gòu)引入了輔助頭(auxiliary Head)進(jìn)行訓(xùn)練。正常網(wǎng)絡(luò)訓(xùn)練如上圖(a)所示拍摇,而用輔助頭參與訓(xùn)練時亮钦,將對模型的訓(xùn)練進(jìn)行深度監(jiān)督,如上圖(b)所示充活。將輔助頭和檢測頭的損失進(jìn)行融合蜂莉,相當(dāng)于在網(wǎng)絡(luò)高層進(jìn)行局部的模型ensemble操作,提升模型的整體性能堪唐。
而YOLOv7的正負(fù)樣本分配策略正是圍繞著檢測頭(lead head)與auxiliary Head進(jìn)行設(shè)計(jì)巡语,其主要是將YOLOv5和YOLOx的正負(fù)樣本分配策略相結(jié)合:
- 使用YOLOv5的正負(fù)樣本分配策略分配正樣本。
- 使用YOLOx的正負(fù)樣本分配策略確定正樣本淮菠。
YOLOv7的正負(fù)樣本分配策略相較于yolov5男公,加入了loss aware,利用當(dāng)前模型的表現(xiàn)合陵,能夠?qū)崟r精篩枢赔;而較于只使用YOLOX中的SimOTA算法,能夠提供更精確的先驗(yàn)知識拥知。
上圖(d)中踏拜,lead head和auxiliary head使用一樣的正負(fù)樣本匹配策略,通過讓淺層的auxiliary head學(xué)習(xí)到lead head已經(jīng)獲得的特征低剔,讓lead head更能專注于學(xué)習(xí)尚未學(xué)習(xí)到的剩余特征速梗。
而上圖(e)中,在使用lead head和auxiliary head一起優(yōu)化模型的時候襟齿,auxiliary head的正樣本是較為“粗糙的“姻锁,主要是通過放寬正樣本分配過程的約束來獲得更多的正樣本。lead head中的一個anchor如果匹配上ground truth猜欺,則分配3個正樣本位隶,而同樣的情況下auxiliary head分配5個。lead head中將top10個樣本IOU求和取整开皿,而auxiliary head中取top20涧黄。auxiliary head的學(xué)習(xí)能力不如lead head強(qiáng),為了避免丟失需要學(xué)習(xí)的信息赋荆,將重點(diǎn)優(yōu)化auxiliary head的召回率笋妥。而lead head可以從高recall的結(jié)果中篩選出高精度的結(jié)果作為最終輸出。lead head和auxiliary head的損失函數(shù)權(quán)重設(shè)置為 糠睡。
YOLOv7 Tricks大解析
YOLOv7也使用了YOLOv5中提到的模型EMA(Exponential Moving Average)策略挽鞠,并引入了YOLOR中使用的隱性知識。
YOLOR中的隱式知識可以在推理階段將計(jì)算值簡化為向量狈孔。這個向量可以與前一層或后一層卷積層的偏差和權(quán)重相結(jié)合信认。
由于篇幅原因,在這里就不展開講了均抽,后續(xù)Rocky將專門對蒸餾技術(shù)撰寫一篇總結(jié)文章嫁赏,大家敬請期待!
【Rocky的延伸思考】
- 蒸餾技術(shù)在業(yè)務(wù)油挥,競賽以及研究中的應(yīng)用落地潦蝇,以及蒸餾技術(shù)自身的發(fā)展,都是值得我們關(guān)注的地方深寥。
- 業(yè)務(wù):YOLOv7 整體結(jié)構(gòu)作為YOLO系列最新的一版攘乒,其值得我們在業(yè)務(wù)中進(jìn)行實(shí)驗(yàn)驗(yàn)證其效果。
- 競賽:YOLOv7 整體結(jié)構(gòu)可以在競賽中實(shí)驗(yàn)其效果惋鹅,在競賽中去融入则酝,去從容。
- 研究:YOLOv7 作為最新的YOLO版本闰集,有很強(qiáng)的研究價(jià)值沽讹,Rocky這邊準(zhǔn)備進(jìn)行更多實(shí)驗(yàn)。
參考資料
Rocky Ding WeThinkIn