【深度学习】SENet学习总结

任意方向文本 Arbitrary Shape Scene Text Detection with Adaptive Text Region Representation 这篇论文中,接触到了这个block

从表中看出,SE-VGG16的对于模型性能的提升。


言归正传? 

Sequeeze-and-Excitation(SE) block并不是一个完整的网络结构,而是一个子结构,可以嵌到其他分类或检测模型中。

SENet的核心思想在于通过网络根据loss去学习特征权重,使得有效的feature map权重大,无效或效果小的feature map权重小的方式训练模型达到更好的结果。

一般卷积层的输出并没有考虑对各通道的依赖性,只是针对各个channel做卷积。本文的目标就是让网络有选择性的增强信息量大的特征,使得后续处理可以充分利用这些特征,并对无用特征进行抑制。SEblock就是给不同通道赋不同的权重,对于所有的转化Ftr:X→U,(X是输入的图形,U是提取的特征),我们都可以建立对应的SE块去对特征进行重计算。具体操作是对U做squeeze(average global pooling,size=W*H),得到一维向量(长度为C),然后做excitation(类似RNN中的门机制,学习参数W来建立通道相关性),得到的结果作为U中C个channel的权重做scale。其目的是学习每个通道的重要程度,增强有用的特征抑制无用的特征(Selectively enhance useful features and suppress less useful ones )

嵌入全局信息

压缩的目的:为了解决通道间相关性的利用问题,我们首先输出特征图中每个通道的信号。每个卷积核都是作用在局部感受野上(针对各个channel做卷积),这导致每个变换输出U的单元不能利用这个范围之外的环境(上下文)信息。这个问题在感受野很小的较低层级中更加严重。 为了减轻这个问题,我们将全局空间信息压缩成一个通道描述符。利用全局平均池化得到一个通道维度(特征维度)上的统计数据。

这一步的结果相当于表明该层C个feature map的数值分布情况,或者叫全局信息

自适应重标定

激活的目的:为了能够利用压缩操作得到的聚合信息,我们下一步的目标是完整捕获通道维度上的依赖性。为了实现这个目标,这个函数必须具有满足两个标准:第一,他必须足够灵活(尤其是能够学习通道间非线性的相互作用);第二,他必须能够学习一个非互斥(non-mutually-exclusive)的关系,因为我们希望确保多个通道都能被强调,这与独热激活(one-hot activation)方式相反。为了满足这两个标准,我们选择了一个带有sigmoid激活函数的简单的门限机制:

这个s其实是本文的核心,它是用来刻画tensor U中C个feature map的权重。而且这个权重是通过前面这些全连接层和非线性层学习得到的,因此可以end-to-end训练。这两个全连接层的作用就是融合各通道的feature map信息,因为前面的squeeze都是在某个channel的feature map里面操作。SE块本质上引入了对输入的动态适应性,这有助于增强特征区分能力。

Xc就是channel-wise multiplication,Uc是一个二维矩阵,Sc是一个数,也就是权重,因此相当于把Uc矩阵中的每个值都乘以Sc。


SE block在VGG-16中的具体应用如下, 

  • 为什么这里要有两个FC,并且通道先缩小,再放大?

因为一个全连接层无法同时应用relu和sigmoid两个非线性函数,但是两者又缺一不可。为了减少参数,所以设置了r比率。

def Squeeze_excitation_layer(self, input_x, out_dim, ratio, layer_name):
    with tf.name_scope(layer_name) :
        squeeze = Global_Average_Pooling(input_x)
        excitation = Fully_connected(squeeze, units=out_dim / ratio, layer_name=layer_name+'_fully_connected1')
        excitation = Relu(excitation)
        excitation = Fully_connected(excitation, units=out_dim, layer_name=layer_name+'_fully_connected2')
        excitation = Sigmoid(excitation)
        excitation = tf.reshape(excitation, [-1,1,1,out_dim])
        scale = input_x * excitation
        return scale

关于其他经典网络的添加,


顺便补充

global average pooling

参考:

SENet(Squeeze-and-Excitation Networks)算法笔记

论文阅读笔记《Squeeze-and-Excitation Networks》

Squeeze-and-Excitation Networks

  • 1
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值