SK conv
- 作者通过SK conv(选择性卷积核)来聚合多个卷积核(ps:虽然说聚合的是卷积核,但是具体的操作是含input 即特征映射的)的信息。
 - SK conv由3个部分组成:split,fuse和select,它们的作用分别是生成卷积核size不同的分支、聚合不同分支信息以获得选择权重的全局的表示、根据选择权重聚合不同size核的特征映射。

 
split
对于input:
    
     
      
       
        x
       
       
        ∈
       
       
        
         R
        
        
         
          
           H
          
          
           ′
          
         
         
          ×
         
         
          
           W
          
          
           ′
          
         
         
          ×
         
         
          
           C
          
          
           ′
          
         
        
       
      
      
       x\in R^{H'\times W'\times C'}
      
     
    x∈RH′×W′×C′,
 分别进行
    
     
      
       
        
         F
        
        
         ˘
        
       
       
        、
       
       
        
         F
        
        
         ^
        
       
      
      
       \breve{F}、\hat{F}
      
     
    F˘、F^运算,即与不同的分组/深度conv进行运算,然后计算BN、ReLU。
 这些convs是size不同的卷积(例如3x3与5x5),或者是不同dilation的不同的空洞卷积,简而言之就是split成感受野不同神经元
    
     
      
       
        
         U
        
        
         ˇ
        
       
       
        、
       
       
        
         U
        
        
         ^
        
       
      
      
       \check{U}、\hat{U}
      
     
    Uˇ、U^。
 
fuse
fuse是利用门来控制信息流,这些信息流来自多个分支,可以将不同规模的信息传输到下一层的神经元中。
 
 具体步骤:
- 融合不同分支的信息: U = U ˇ + U ^ U=\check{U}+\hat{U} U=Uˇ+U^;
 - 通过简单地使用全局平均池 F q p F_{qp} Fqp来嵌入全局信息,以生成 s ∈ R C s∈R^C s∈RC的通道统计信息;
 - 通过
     
      
       
        
         
          F
         
         
          
           f
          
          
           c
          
         
        
       
       
        F_{fc}
       
      
     Ffc降维成
     
      
       
        
         z
        
        
         ∈
        
        
         
          R
         
         
          d
         
        
       
       
        z\in R^d
       
      
     z∈Rd,
     
      
       
        
         z
        
        
         =
        
        
         
          F
         
         
          
           f
          
          
           c
          
         
        
        
         (
        
        
         s
        
        
         )
        
        
         =
        
        
         δ
        
        
         (
        
        
         B
        
        
         (
        
        
         W
        
        
         s
        
        
         )
        
        
         )
        
       
       
        z=F_{fc}(s)=\delta\big(B(Ws)\big)
       
      
     z=Ffc(s)=δ(B(Ws)),也就是先进行一次全连接层计算,接着BN、ReLU计算;
为了研究 d d d对模型效率的影响,作者使用减小比率 γ \gamma γ来控制 d d d的值: d = m a x ( C / γ , L ) d=max(C/\gamma,L) d=max(C/γ,L),其中 L L L为 d d d的最小值.

 
select
select首先分别生成a、b两个矩阵作为权重,分别对
    
     
      
       
        
         U
        
        
         ˇ
        
       
       
        、
       
       
        
         U
        
        
         ^
        
       
      
      
       \check{U}、\hat{U}
      
     
    Uˇ、U^进行加权,然后相加
    
     
      
       
        V
       
       
        =
       
       
        
         a
        
        
         c
        
       
       
        ×
       
       
        
         U
        
        
         ˇ
        
       
       
        +
       
       
        
         b
        
        
         c
        
       
       
        ×
       
       
        
         U
        
        
         ^
        
       
      
      
       V=a_c\times \check{U}+b_c\times \hat{U}
      
     
    V=ac×Uˇ+bc×U^。
 
 a、b是卷积后Softmax生成的,这是为了 
    
     
      
       
        
         a
        
        
         c
        
       
       
        +
       
       
        
         b
        
        
         c
        
       
       
        =
       
       
        1
       
      
      
       a_c+b_c=1
      
     
    ac+bc=1.
 同理,有多个分支的时候也是所有的权重矩阵相加等于1:
    
     
      
       
        
         f
        
        
         
          1
         
         
          c
         
        
       
       
        +
       
       
        
         f
        
        
         
          2
         
         
          c
         
        
       
       
        +
       
       
        
         f
        
        
         
          3
         
         
          c
         
        
       
       
        +
       
       
        .
       
       
        .
       
       
        .
       
       
        +
       
       
        
         f
        
        
         
          n
         
         
          c
         
        
       
       
        =
       
       
        1
       
      
      
       f_{1c}+f_{2c}+f_{3c}+... +f_{nc}=1
      
     
    f1c+f2c+f3c+...+fnc=1
 
实验
- 实验发现分支数D=2,分组数G=32时最佳。
 - 输入object越大,SKConv越偏向于选择感受野大的的卷积核。

 
参考代码:
 1. https://github.com/pppLang/SKNet/blob/master/sknet.py
 2. 空洞卷积 https://github.com/developer0hye/SKNet-PyTorch/blob/master/sknet.py










