Zhangzhe's Blog

The projection of my life.

0%

PSConv: Squeezing Feature Pyramid into One Compact Poly-Scale Convolutional Layer

URL

https://arxiv.org/pdf/2007.06191.pdf

TL;DR

  • 本文提出了一种新颖的卷积方式——PSConv,参数量与计算量都不变的情况下可以提高网络特征提取能力
  • PSConv的本质是一种dilated系数周期性变化的空洞卷积,周期性变化发生在 CinC_{in}CoutC_{out} 两个“正交”坐标系中

Algorithm

什么是PSConv

  • 标准卷积:

    Hc,x,y=k=1Cini=K12K12j=K12K12Gc,k,i,jFk,x+i,y+jH_{c,x,y} = \sum_{k=1}^{C_{in}}\sum_{i=-\frac{K-1}{2}}^{\frac{K-1}{2}}\sum_{j=-\frac{K-1}{2}}^{\frac{K-1}{2}} G_{c,k,i,j}F_{k,x+i,y+j}

    其中,F表示输入feature, FRCin×H×WF\in\mathbb{R}^{C_{in}\times H\times W} ,G表示kernel, GRCout×Cin×K×KG\in\mathbb{R}^{C_{out}\times C_{in}\times K\times K} ,H表示一个kernel卷积输出 HR1×H×WH\in\mathbb R^{1\times H\times W} ,i,j分表表示kernel中的点距离kernel中心在H于W方向上的偏移

  • 空洞卷积:

    Hc,x,y=k=1Cini=K12K12j=K12K12Gc,k,i,jFk,x+id,y+jdH_{c,x,y} = \sum_{k=1}^{C_{in}}\sum_{i=-\frac{K-1}{2}}^{\frac{K-1}{2}}\sum_{j=-\frac{K-1}{2}}^{\frac{K-1}{2}} G_{c,k,i,j}F_{k,x+id,y+jd}

    其中:id表示 偏移 i * 空洞系数 d

  • PSConv:

    Hc,x,y=k=1Cini=K12K12j=K12K12Gc,k,i,jFk,x+iD(c,k),y+jD(c,k)H_{c,x,y} = \sum_{k=1}^{C_{in}}\sum_{i=-\frac{K-1}{2}}^{\frac{K-1}{2}}\sum_{j=-\frac{K-1}{2}}^{\frac{K-1}{2}} G_{c,k,i,j}F_{k,x+iD(c,k),y+jD(c,k)}

    其中:i * D(c, k)表示 偏移 i * 空洞系数 D(c, k),D是空洞系数矩阵DRCout×CinD\in\mathbb R^{C_{out}\times C_{in}}D(i, j) 表示 第 i 个 kernel 第 j channel 的空洞系数 d

空洞系数矩阵D设计的基本法

  • D矩阵的一行表示一个kernel,kernel 的通道数为 CinC_{in}

  • PSConv 是将这 CinC_{in} 通道分为 P 个周期,每个周期的长度为 t=CinPt = \lceil \frac{C_{in}}{P}\rceil

  • 每个周期 t 个空洞系数 d={d1,d2,...,dt}d = \{d_1, d_2,...,d_t\} ,实验证明当 t=4,d={1,2,1,4}t=4,d=\{1,2,1,4\} 效果最好

  • 另外D矩阵的列上也要具有周期性,方法是让每一行相对与上一行偏移 1个相位(一个周期 t 个相位)

效果

  • 涨点,替换什么什么就涨点,原因是使用一种类似周期性金字塔kernel的方法,得到了非常有想象力的感受野

  • 虽然不增加参数量与计算量,但是train与inference都会变慢,所以作者附录中给出了一种优化实现方式,是将每个周期的相同相位合并到一起使用group Conv,然后再shuffle index,与ShuffleNet一个意思

  • 优化后确实会变快,可以将PS-ResNet-50/101在inference速度提升到与标准ResNet-50/101基本一致

  • 消融实验对比了只在 CinC_{in} 或者 只在CoutC_{out} 上周期性变化,发现哪个轴上周期变化都是必要的

  • 当 t = 1时,D中只会包含一种元素,此时PSconv退化为标准空洞卷积

  • PSConv 可以加入 group 参数,每个 group 内单独周期变化

Thoughts

  • 不增加计算量和参数量,且文章附录中提出经过优化实现可以将PS-ResNet-50/101在inference速度提升到与标准ResNet-50/101基本一致。

  • 如果在硬件设计中,预留了dilated Conv接口,并借鉴文中的优化实现方式,使用分组卷积+index shuffle减小filter通道间dilated不同的问题,这种白送的点也挺香的

图表

  • 标准卷积与PSConv (可以带group参数)

ps1.png

  • PS group Conv

ps2.png

  • 优化实现

ps3.png

  • 搜索 t 与 d

ps4.png

  • 横纵坐标周期消融实验

ps5.png

  • 涨点涨点涨点…

ps8.png
ps9.png
ps7.png
ps6.png