論文地址:https://arxiv.org/pdf/2006.11538.pdf
github:https://github.com/iduta/pyconv
作者認為,當前CNN主要存在兩個不足:(1)實際的感受野不足;(2)在下采樣中,很多的細節信息會丟失。
從圖中可以看出,有的物體尺寸較大(建築、沙發),有的物體尺寸較小(行人,書本)。這種尺寸的變化是標准卷積級經捕獲的。為此,作者提出了金字塔卷積(Pyramid Convolution, PyConv),包含不同尺度的卷積核,可以提取多尺度信息,在多個任務上均取得了較好的性能
PyConv 的示意如圖所示,直觀來看,就是從上往下卷積核的大小依次減小,同時,在通道維度上,通道的數目依次增加。最后將得到的 feature map 拼接起來。
在圖像分類任務中的 PyConv 示意所圖所示,首先是9X9的卷積,16個卷積核,分為16組,因此生成16X16=256個 feature map;然后是7X7的卷積,16個卷積核,分為8組,因此生成16X8=128個 feature map;接着是5X5的卷積,16個卷積核,分為4組,因此生成16X4=64個 feature map;最后是3X3的卷積,16個卷積核,只有1組,因此生成16X1=16個 feature map。然后,會用1X1的卷積來使輸出的維度都為 256。
備汪:關於分組卷積,網上有一個比較形象的圖示。對於普通卷積,如果輸入的 feature map 尺寸為CHW, 卷積核的數量為N,每個卷積核的尺寸為CxKxK,那么輸出的 feature map 尺寸為 CHN,總的參數量為:NxCxKxK 。
如果進行分組卷積,假定要分成 G 組,每組輸入的 feature map 數量為 \(\frac{C}{G}\),每組輸出的 feature map 數量為 \(\frac{N}{G}\),每個卷積核的尺寸為\(\frac{C}{G}\times K\times K\), 每組的卷積核數量為 \(\frac{N}{G}\),卷積核只與同組的輸入進行卷積,則總的參數量為 \(N\times \frac{C}{G} \times K \times K\),則總的參數量減少為以前的 \(\frac{1}{G}\)。
當分組數量等於輸入map數量,輸出map數量也等於輸入map的數量,即 G=N=C,每個卷積核尺寸為\(1\times K \times K\)時,就成了 Depthwise convolution。
金字塔卷積 PyConv,通過集成不同尺度的卷積核,提升了多個視覺任務的性能,同時,該模塊是一種“即插即用”的模塊,可以較好的嵌入不同的網絡架構中。