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