轻量级模块SEnet(Squeeze-and-excitation module)分析以及使用

2017ImageNet分类比赛冠军模型SENet(Squeeze-and-Excitation Networks)。paperCode

一、

提出的动机:考虑通道之间的关系,以此来提升网络性能。希望能够显式地建模特征通道之间的相互依赖关系。

思想:通过学习的方式来获得每个特征通道的重要程度,依照这个重要程度来提升有用的特征并抑制对当前任务用处不大的特征。

二、模型结构

经过原有卷积变化Ftr得到特征图,首先是squeeze操作,仅包括一个全局平均池化。接着是excitation操作,包括两个全连接层和一个Relu。其中第一个FC对特征维度降低到输入的r分之一(减少率),然后经过Relu激活后再经过一个FC,这样比一个FC的好处在于:1)具有更多的非线性,可以拟合通道间复杂的相关性;2)极大地减少了参数量和计算量。最后经过一个sigmoid门控得到0~1之间归一化的权重,并利用scale操作将归一化后的权重加权到每个通道的特征上。这样就完成了上面提到的思想了:提升有用的特征并抑制对当前任务用处不大的特征。

公式:1)squeeze的全局平均池化

2)Excitation: Adaptive Recalibration

,其中W1是第一个FC的参数,\delta是Relu激活,W2是第二个FC的参数,\sigma是sigmiod激活。最终得到scale的参数s。

3)scale特征图

三、实例

其中左边为Inception,直接在Inception得到的特征图之后做SE就可以了。Resnet则稍有些技巧,需要在Addition后主支上Residual特征进行特征重标定。如果对Addition后主支上的特征重标定,由于在主支上存在0~1的scale操作,在网络较深BP优化时就会在靠近输入层容易出现梯度消失,导致模型难以优化。

四、添加SEnet层

将github中的文件放到原caffe路径中,重新编译。在prototxt中添加以下模块。

layer {
  name: "pool2_1/gap"
  type: "Pooling"
  bottom: "conv2_1/x3"
  top: "pool2_1/gap"
  pooling_param {
    pool: AVE
    global_pooling: true
  }
}
layer {
  name: "fc2_1/sqz"
  type: "InnerProduct"
  bottom: "pool2_1/gap"
  top: "fc2_1/sqz"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  param {
    lr_mult: 2.0
    decay_mult: 0.0
  }
  inner_product_param {
    num_output: 16
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "relu2_1/sqz"
  type: "ReLU"
  bottom: "fc2_1/sqz"
  top: "fc2_1/sqz"
}
layer {
  name: "fc2_1/exc"
  type: "InnerProduct"
  bottom: "fc2_1/sqz"
  top: "fc2_1/exc"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  param {
    lr_mult: 2.0
    decay_mult: 0.0
  }
  inner_product_param {
    num_output: 256
    weight_filler {
      type: "msra"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}
layer {
  name: "sigm2_1/gate"
  type: "Sigmoid"
  bottom: "fc2_1/exc"
  top: "fc2_1/exc"
}
layer {
  name: "scale2_1"
  type: "Scale"
  bottom: "conv2_1/x3"
  bottom: "fc2_1/exc"
  top: "scale2_1"
  scale_param {
    axis: 0
    bias_term: false
  }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值