本文來自公眾號“每日一醒”
SPP
對於一個CNN模型,可以將其分為兩個部分:
前面包含卷積層、激活函數層、池化層的特征提取網絡,下稱CNN_Pre,
后面的全連接網絡,下稱CNN_Post。
許多CNN模型都對輸入的圖片大小有要求,實際上CNN_Pre對輸入的圖片沒有要求,可以簡單認為其將圖片縮小了固定的倍數,而CNN_Post對輸入的維度有要求。
SPP:空間金字塔池化,無論CNN_Pre輸出的feature maps尺寸是怎樣,都能輸出固定的維度傳給CNN_Post。
SPP的本質就是多層maxpool,只不過為了對於不同尺寸大小 a*a 的featur map 生成固定大小 n*n 的的輸出。
那么 pool 的滑窗win大小,以及步長str都要作自適應的調整:
win=ceil(a/n)
str=floor(a/n)
ceil、floor分別表示上取整、下取整。
然后多個不同固定輸出尺寸的 pool組合在一起就構成了SPP Layer。
通俗的講,SPP就相當於標准通道層,不管任何大小的圖像,都用一套標准的pool對圖像進行池化,最后組合成一列相同大小的特征,作為全連接層的輸入,這一組相同大小的特征是固定的,可以提前進行計算。
SPP優點:
(1)對於不同尺寸的CNN_Pre輸出能夠輸出固定大小的向量。
(2)可以提取不同尺寸的空間特征信息,可以提升模型對於空間布局和物體變性的魯棒性。
(3)可以避免將圖片resize、crop成固定大小輸入模型的弊端。
Yolo v3中的SPP
spp模塊在yolov3的作用是多重感受野融合。
yolo v3基礎網絡:
yolov3-SPP網絡:
借鑒了SPP-Net中的SPP模塊,實現了不同尺度的特征融合。
和YOLOV3結構相比,在第一個預測特征層之前拆開了Convlutioanal Set,添加了SPP模塊。
通過DarkNet輸出的特征圖大小是16*16*1024, 由於三個卷積層的步距為1,特征圖的高寬不發生變化,通過三個卷積層以后,特征圖的大小變為16*16*512,
通過SPP有四個分支,將其拼接維度擴大四倍->16*16*2048。
相對於普通版本的YOLOv3,SPP版在本在第五、六層卷積之間增加了一個SPP模塊,這個模塊主要是由不同的池化操作組成。
檢測頭前面的第5和第6卷積層之間集成SPP模塊來獲得YOLOv3-SPP,在Feature Map經過SPP module池化后的特征圖重新cat起來傳到下一層偵測網絡中。
所以說,YOLOv3-SPP版本實際上只是增加了SPP 模塊,該模塊借鑒了空間金字塔的思想,通過SPP模塊實現了局部特征和全局特征融合,豐富了特征圖的表達能力,有利於待檢測圖像中目標大小差異較大的情況,所以對檢測的精度上有了很大的提升。
Yolo v4中的SPP
SPP結構參雜在對CSPdarknet53的最后一個特征層的卷積里,在對CSPdarknet53的最后一個特征層進行三次DarknetConv2D_BN_Leaky卷積后,分別利用四個不同尺度的最大池化進行處理,最大池化的池化核大小分別為13x13、9x9、5x5、1x1(1x1即無處理)。
SPP能夠極大地增加感受野,分離出最顯著的上下文特征。
總結
SPP可以對於不同尺寸的圖片輸出固定大小的向量。
SPP可以提取不同尺寸的空間特征信息,可以提升模型對於空間布局和物體變性的魯棒性。
——————
淺談則止,細致入微AI大道理
掃描下方“每日一醒”,選擇“關注”公眾號
—————————————————————
—————————————————————