面试问题总结——关于YOLO系列(二)
- 接著上篇的的YOLO系列面試問(wèn)題總結(jié),加油,沖!
(如有寫(xiě)的不對(duì)的地方,歡迎指正)
二.YOLOv2
YOLOv2(論文題目:YOLO9000:Better(更準(zhǔn)確),Faster(更快),Stronger(類(lèi)別更多))
Precision(準(zhǔn)確率):指的是預(yù)測(cè)的框里面包含目標(biāo)的比例;
Recall(召回率):指的是所有真實(shí)目標(biāo)中被檢測(cè)出來(lái)的比例。
1.關(guān)于anchor box和bounding box的區(qū)別
??anchor box是根據(jù)預(yù)測(cè)的形狀來(lái)設(shè)計(jì)的box,bounding box是根據(jù)預(yù)測(cè)的分類(lèi)來(lái)設(shè)計(jì)的。(舉例,現(xiàn)在要預(yù)測(cè)男人、女人、汽車(chē),那么根據(jù)他們的形狀,用2種anchor box來(lái)預(yù)測(cè),長(zhǎng)條的、扁平的,但是還需要預(yù)測(cè)目標(biāo)的類(lèi)別,需要3種bounding box,即c1=男人,c2=女人,c3=汽車(chē)。)
2.關(guān)于anchor box和bounding box的區(qū)別
①Batch Normalization(批規(guī)范化BN層應(yīng)用)
??作者在YOLOv2中每一個(gè)卷積之后增加了BN層,提高了網(wǎng)絡(luò)訓(xùn)練的速度,加快了收斂,BN層的主要思想:BN是對(duì)每一個(gè)神經(jīng)元的響應(yīng)進(jìn)行標(biāo)準(zhǔn)化,而不是對(duì)某一層的輸出進(jìn)行標(biāo)準(zhǔn)化。在訓(xùn)練階段:比如batch size為32,表示每次訓(xùn)練的時(shí)候喂進(jìn)去32張圖片,某層的某個(gè)神經(jīng)元會(huì)輸出32個(gè)響應(yīng)值,對(duì)這32個(gè)響應(yīng)值減去均值除以標(biāo)準(zhǔn)差,將其變成以0為均值,標(biāo)準(zhǔn)差為1的分布,再做歸一化,把歸一化后的響應(yīng)值乘上γ再加上β,即yi = γxi+β,每個(gè)神經(jīng)元都訓(xùn)練一組γ、β。在測(cè)試階段:測(cè)試階段均值、方差、γ、β都用訓(xùn)練階段全局求出的參數(shù),BN層相當(dāng)于做線性變換。這么做使得損失函數(shù)能發(fā)生較大的變化,從而使得梯度變大,避免了梯度消失的問(wèn)題,同時(shí)梯度變大能夠加快模型的收斂速度,提高訓(xùn)練的速度。
??BN層的作用:因?yàn)樵谏窠?jīng)網(wǎng)絡(luò)的訓(xùn)練過(guò)程中,若每一層的輸入都保持相同的分布,隨著網(wǎng)絡(luò)層數(shù)的加深,訓(xùn)練會(huì)變得困難,則BN層的作用是加快收斂、改善梯度,因?yàn)楹芏嗟募せ詈瘮?shù)比如說(shuō)sigmoid激活函數(shù),在0附近是非飽和區(qū),如果輸入太大或者太小的話,就會(huì)進(jìn)去飽和區(qū),就意味著梯度消失難以訓(xùn)練。(訓(xùn)練和測(cè)試時(shí)的BN層不一樣)
??BN層一般在神經(jīng)網(wǎng)絡(luò)線性計(jì)算之后,激活函數(shù)之前進(jìn)行BN操作。
關(guān)于BN的參考資料:
https://www.bilibili.com/video/BV1Lx411j7GT
https://zhuanlan.zhihu.com/p/34879333
②High Resolution Classifier(高分辨率)
??YOLOv1一開(kāi)始是先使用224×224的分辨率在ImageNet上進(jìn)行預(yù)訓(xùn)練分類(lèi)器的,之后為了提高定位精度,才更改分辨率為448×448的,在VOC2007上繼續(xù)訓(xùn)練,而YOLOv2一開(kāi)始就使用了448×448這個(gè)更大的分辨率,這樣網(wǎng)絡(luò)就可以適應(yīng)大分辨率的輸入。
③Convolutional With Anchor Boxes(基于卷積的anchor box,作用:增大recall)
??YOLOv1中通過(guò)全連接層直接預(yù)測(cè)bounding box的坐標(biāo)值,在YOLOv2中作者發(fā)現(xiàn)通過(guò)anchor box的偏移量而不是坐標(biāo)值能夠簡(jiǎn)化問(wèn)題,讓神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)起來(lái)更容易。所以最終YOLOv2去掉了全連接層,使用anchor boxes來(lái)預(yù)測(cè)bounding boxes,同時(shí)去掉了網(wǎng)絡(luò)中的一個(gè)池化層,收縮網(wǎng)絡(luò)讓其運(yùn)行在416×416分辨率上,卷積層采用32這個(gè)值進(jìn)行下采樣,最終可以輸出一個(gè)13×13的特征圖,這樣就引入了下一個(gè)細(xì)粒度特征的改進(jìn)點(diǎn)。
④Dimension Clusters(維度聚類(lèi))
??這個(gè)是關(guān)于初始anchor boxes的大小和數(shù)量的,v2中使用了5個(gè),v3中使用了9個(gè),這些個(gè)數(shù)和大小是作者基于他訓(xùn)練集的物體邊框數(shù)據(jù)集上通過(guò)Kmeans聚類(lèi)得到的,個(gè)數(shù)是作者通過(guò)實(shí)驗(yàn)得到的經(jīng)驗(yàn)值,關(guān)于大小,各個(gè)數(shù)據(jù)集適用的anchor boxes大小不同,所以我們?cè)谟?xùn)練自己的數(shù)據(jù)集時(shí),也要通過(guò)Kmeans聚類(lèi)生成自己的anchor boxes大小。
??在維度聚類(lèi)中,關(guān)于Kmeans聚類(lèi),如果用歐式距離來(lái)度量的話,顯示是不合理的,因?yàn)榇蟮念A(yù)測(cè)框會(huì)產(chǎn)生大的歐式距離,小的預(yù)測(cè)框會(huì)產(chǎn)生小的歐氏距離,但我們需要大小框產(chǎn)生同樣的效果影響,所以使用IOU,IOU是和box的大小無(wú)關(guān)的,公式如下:
(式中box表示某個(gè)類(lèi)別的ground truth,centroid表示聚類(lèi)中心框)
⑤Direct location prediction(直接位置預(yù)測(cè))
??在YOLOv2中作者引入anchor box容易遇到模型不穩(wěn)定的問(wèn)題,主要來(lái)自預(yù)測(cè)box的中心點(diǎn)坐標(biāo)(x,y)值,公式如下:
??這個(gè)公式是沒(méi)有約束的,預(yù)測(cè)的邊界框很容易向任何方向偏移,可以落在圖片上任何位置,這就導(dǎo)致了模型的不穩(wěn)定性。作者這里并未采用這種方式,而是將預(yù)測(cè)邊框中心點(diǎn)相對(duì)于對(duì)應(yīng)網(wǎng)格grid cell左上角位置的相對(duì)偏移值,使用sigmoid函數(shù)將值約束在0~1,這使得模型訓(xùn)練更穩(wěn)定,避免了預(yù)測(cè)框bounding box的野蠻生長(zhǎng)。
⑥Fine-Grained Features(細(xì)粒度特征)
??將高層的信息與相對(duì)低層的信息進(jìn)行融合,在YOLOv2中得到的最終預(yù)測(cè)的特征層大小為13×13分辨率的,作者融合相對(duì)更低層的特征信息26*26分辨率的,通過(guò)Passthrough layer來(lái)進(jìn)行實(shí)現(xiàn)。實(shí)現(xiàn)結(jié)合的過(guò)程如下:
??從上圖可以發(fā)現(xiàn),Passthrough layer可以將原特征圖(W、H、C)變換為W/2、H/2、C×4。(W表示寬,H表示高,C表示通道數(shù))
??上圖解讀:首先將26×26×512的卷積層通過(guò)與1×1的卷積核進(jìn)行一個(gè)降維變成26×26×64維度,再通過(guò)PassThrough Layer這一層將寬和高會(huì)變?yōu)樵瓉?lái)的一半,通道數(shù)×4,則變成13×13×256維度,這是從低層的特征得來(lái)的,再與原來(lái)的高層信息13×13×1024進(jìn)行融合,相加后得到13×13×1280維度的信息。
⑦M(jìn)ulti-Scale Training(多尺度訓(xùn)練)
??YOLOv1的輸入尺寸是448×448,YOLOv2中加入了anchor boxes,為了獲得奇數(shù)×奇數(shù)特征圖,輸入尺寸變成了416×416,作者為了增加模型的魯棒性,即在不同尺寸輸入圖片上都可以進(jìn)行穩(wěn)健檢測(cè),在訓(xùn)練的過(guò)程中每經(jīng)過(guò)10個(gè)batch就會(huì)隨機(jī)選擇新的圖片輸入尺寸,更改的尺寸范圍是{320,352…,608},都是32的倍數(shù),使得小尺寸圖片在YOLOv2上運(yùn)行更快,在速度和精度上達(dá)到了平衡。
為什么模型的網(wǎng)絡(luò)結(jié)構(gòu)沒(méi)有改變,卻可以輸入不同尺寸的圖片?
??因?yàn)镈arknet19有Global Average Pooling(全局平均池化)層,它會(huì)把輸出的每一個(gè)feature map的通道求平均,來(lái)替代全連接層(就是不管你的輸入圖像尺寸是什么,只要通道數(shù)是一樣的,最后都會(huì)變成一個(gè)固定維度的數(shù)1000)。同時(shí)這么做還有一個(gè)副作用,就是如果輸入大的圖片,識(shí)別的精度就很準(zhǔn)但時(shí)間較慢,如果輸入的是小圖片,識(shí)別的精度較低但速度很快,所以就可以在速度和精度之間做一個(gè)權(quán)衡。
3. YOLOv2損失函數(shù)
4.YOLOv2中BackBone:Darknet-19
??在YOLOv2原論文的Faster章節(jié)中,作者主要提到了Darknet-19這個(gè)BackBone(YOLO中網(wǎng)絡(luò)部分分為Input輸入:比如YOLOv4的輸入圖片大小為608×608×3或416×416×3;Backbone主干網(wǎng)絡(luò):大多時(shí)候指的是提取特征的網(wǎng)絡(luò);Neck:放在Backbone和Head之間是為了更好的利用Backbone提取的特征;Head:獲取網(wǎng)絡(luò)輸出內(nèi)容的網(wǎng)絡(luò),利用之前提取的特征做出預(yù)測(cè)),這個(gè)19指的是Darknet網(wǎng)絡(luò)有19個(gè)卷積層,在實(shí)際使用中作者使用448×448高分辨率分類(lèi)器進(jìn)行計(jì)算,而這里網(wǎng)絡(luò)采用的是224×224作為網(wǎng)絡(luò)輸入,因?yàn)橐彤?dāng)時(shí)的同類(lèi)別分類(lèi)網(wǎng)絡(luò)進(jìn)行一個(gè)對(duì)比,它們都是224×224的輸入,控制變量法。
上圖表示的是用于分類(lèi)的Darknet19網(wǎng)絡(luò)結(jié)構(gòu)圖。
5. YOLOv2模型框架
??YOLOv1中網(wǎng)格劃分是7×7,最后輸出的是7×7×(2×5+20)維度的張量,因?yàn)槭?個(gè)bounding box,每個(gè)bounding box有4個(gè)位置參數(shù)和1個(gè)定位參數(shù),最后再加上20個(gè)類(lèi)別。
??YOLOv2使用的是Darknet-19骨干網(wǎng)絡(luò)(Darknt-19網(wǎng)絡(luò)有19個(gè)卷積層,5個(gè)最大池化層),輸入圖像是416×416×3,YOLOv2會(huì)把它劃分成13×13的網(wǎng)格,對(duì)應(yīng)的輸出結(jié)果就是13×13的feature map,這13×13的grid cell每個(gè)都會(huì)生產(chǎn)生一個(gè)125維的向量,每個(gè)125維的向量都包含5個(gè)anchor,每個(gè)anchor都包括4個(gè)位置參數(shù),1個(gè)置信度參數(shù),20個(gè)類(lèi)別概率。(13×13×5×(5+20))
上圖表示的是用于檢測(cè)的Darknet19網(wǎng)絡(luò)結(jié)構(gòu)圖
??如上圖所示,Filters表示的是卷積核的個(gè)數(shù),如第一行Size只標(biāo)注了大小3×3,步距為1,則默認(rèn)padding也為1(YOLOv1中的padding默認(rèn)為SAME),這就用到了那個(gè)卷積計(jì)算公式,以第二層最大池化后網(wǎng)絡(luò)尺寸為208×208×32,則再經(jīng)過(guò)3×3×64卷積,得到OH =(H+2P-FH)/ S + 1 =(208+2×1-3)+ 1 = 208,即208×208×64。
??注意,圖中的每個(gè)Convolutional都是由Conv2d卷積層+BN層+LeakyReLU激活函數(shù)組成。(注意其中的卷積層是不包括偏置bias的,因?yàn)槿绻褂肂N層,卷積中的bias是不起任何作用的,因?yàn)閎ias在BN的過(guò)程中消掉了)
最后的輸出Conv2d,就是一個(gè)卷積層,沒(méi)有BN層也沒(méi)有激活函數(shù),就是一個(gè)分類(lèi)器。YOLOv1中是2×5+20,因?yàn)閅OLOv1是直接預(yù)測(cè)目標(biāo)框,而YOLOv2是基于anchor預(yù)測(cè)目標(biāo)框,是(5+20)×5。
6.關(guān)于Darknet的分類(lèi)模型和檢測(cè)模型
??左圖是分類(lèi)的Darknet19,右圖是檢測(cè)的Darknet19(因?yàn)樽髡呤悄肐mageNet分類(lèi)數(shù)據(jù)集進(jìn)行訓(xùn)練的,拿COCO目標(biāo)檢測(cè)數(shù)據(jù)集進(jìn)行預(yù)測(cè)的)
??骨干網(wǎng)絡(luò)BackBone分為分類(lèi)的Darknet19和檢測(cè)的Darknet19
??用于分類(lèi)的Darknet19:網(wǎng)絡(luò)中大量采用1×1的卷積核進(jìn)行降維和升維,輸入是224×224×3,最后輸出的是7×7×1000的張量,用Global Average Pooling(全局平均池化)層對(duì)這1000個(gè)通道求平均得到1000個(gè)值,正好是1000個(gè)類(lèi)別的概率。
??用于檢測(cè)的Darknet19:除了分類(lèi)中的最后一步不同,其他的模型結(jié)構(gòu)分類(lèi)和檢測(cè)的都一樣,在此基礎(chǔ)上加上3個(gè)3×3的卷積層和PassThrough層,最后再通過(guò)1個(gè)1×1的卷積層,得到13×13×125維度的張量。
總結(jié)
以上是生活随笔為你收集整理的面试问题总结——关于YOLO系列(二)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 直播带货表格模板-自动显示图片-自动关联
- 下一篇: 中兴微型计算机,超乎想象的视觉享受,中兴