【论文复现】FReLU Activation(2020)

本文介绍了一种新型激活函数FReLU,通过2D漏斗条件和像素级建模,解决空间不敏感问题,使得普通卷积具备复杂布局捕获能力,且计算开销极小。实验显示FReLU在图片分类、目标检测、分割中超越ReLU、PReLU和Swish。
摘要由CSDN通过智能技术生成

在这里插入图片描述

目录

论文地址: https://arxiv.org/pdf/2007.11824.pdf.

贡献:

\qquad 提出FReLU非线性激活函数,在只增加一点点的计算负担的情况下,将ReLU和PReLU扩展成2D激活函数。具体的做法是将max()函数内的条件部分(原先ReLU的x<0部分)换成了2D的漏斗条件(代码是通过DepthWise Separable Conv + BN 实现的),解决了激活函数中的空间不敏感问题,使规则(普通)的卷积也具备捕获复杂的视觉布局能力,使模型具备像素级建模的能力。

FReLU在图片分类、目标检测、分割等领域上性能都优于ReLU、PReLU和Swish等激活函数(仅产生微不足道的内存开销)。

一、背景

\qquad 卷积神经网络主要由卷积层和非线性激活层构成。卷积层负责获取空间依赖关系,而非线性激活层负责为模型增加非线性能力。但是就目前技术来说,卷积层想要自动的捕获空间依赖关系还是具有挑战性的。虽然近年来也有很多的的研究工作是针对卷积层的改进,使卷积层具有了自适应获取图像局部上下文(获取空间依赖关系)的能力,大大提高了网络模型的精度。但是这些新设计的卷积一般都是非常复杂的卷积层。我们就在想:能否让普通(规则)的卷积也具有这种自适应获取图像局部上下文的能力,来抓取具有挑战性的复杂图像信息呢?

\qquad 另一方面,通常来说,都是在卷积层线性捕捉空间依赖性后,再由激活层进行非线性变换。激活函数在卷积神经网络中起到了非常重要的作用,既然卷积层想要起到获取空间依赖关系的作用很困难(需要将简单卷积改成复杂卷积),那么我们是否可以设计一种专门针对视觉任务的简单激活函数(具有了自适应获取图像局部上下文能力且形式又简单的激活函数)?

\qquad 作者通过研究,认为激活函数中的空间不敏感性是阻碍视觉任务实现显著改善的主要原因,并基于此提出了一种新的视觉激活函数,以消除这一障碍。

二、相关工作

2.1、标量激活函数

\qquad 标量激活函数(Scalar Activations)指的是那些单输入单输出激活函数,只依赖神经元本身。广泛使用的有ReLU、Leaky ReLU、PReLU、ELU等,这些函数有个特点:负半轴部分自适应的依赖样本。此外其他的标量函数如:Sigmoid、Tanh等用的比较少,主要是因为:1、容易饱和,导致梯度消失/爆炸;2、计算量太大(指数函数)。还有一种最新的标量函数:Swish = x * Sigmoid(x) ,采用自动搜索技术,结合一组一元函数和二元函数形成的一种新的搜索标量函数。在很多模型和数据集上性能都优于其他的标量激活函数,具有很大的潜力。

2.2、上下文条件激活函数

\qquad 上下文条件激活函(Contextual conditional activations)指的是那些多输入单输出的激活函数。除了依赖于神经元自身的标量激活外,它根据上下文信息激活神经元。代表函数是Maxout。但是Maxout参数量大,导致计算量太大了,用的也不多。我们希望设计的是一个也是能获取图像局部上下文能力的激活函数且计算量还要小。

2.3、空间相关性建模

\qquad 学习更好的空间相关性是很有挑战的,有些方法是使用不同大小的卷据核(kernel_size)去聚合不同范围的空间依赖,但是这样一来就需要产生多个分支,牺牲了效率,如atrous convolution/dilated convolution(空洞卷积)就是这样做的。另一种方法是自适应的学习空间相关性,如:STN、active convolution、deformable convolution(可变形卷积)等,这些方法自适应地利用空间变换来重建短距离相关性。我们简单的FReLU甚至在没有复杂卷积的情况下优于它们。此外还有就是引入空间注意机制模块,以更好地利用空间全局上下文。但是仍需要在源网络结构中添加额外的块,从而降低效率。我们的FReLU激活函数在非线性激活函数中更好、更高效的解决了这个问题(空间相关性建模)。

2.4、感受野

\qquad 在视觉识别任务中,感受野(Receptive field)的区域和大小至关重要。通过研究视觉感受野发现:不同像素的贡献不相等,中心像素的贡献影响更大。于是就有很多自适应感受野的方法被提出,但这些方式都有一个通病:在模型中引入额外的分支。如设计更复杂的卷积或利用注意机制,来实现自适应感受野并提高性能。本文为了达到同样的目的,通过在非线性激活中引入感受野。通过使用更具适应性的感受野,可以对常见复杂形状的布局进行近似处理,从而获得比复杂卷积更好的效果。

三、FReLU

正式开始讲解FReLU之前,先看下下面的这个大图,初步了解下FReLU、PReLU和Funnel的区别:
在这里插入图片描述
\qquad FReLU(Funnel漏斗 ReLU)。 通过在激活函数中使用空间条件/2D漏斗式条件(只产生微不足道的计算开销,且非常容易实现)可以将ReLU/PReLU扩展到具有像素级建模能力的可视参数激活函数,提取一个对象精细的空间布局。

\qquad 下面要介绍的是FReLU的两个核心组件(elements):funnel condition(漏斗式条件) + pixel-wise modeling capacity(像素级别建模能力),理解这两个就理解了FReLU的核心思想。

3.1、漏斗条件:funnel condition

\qquad FReLU也是采样相同的max()作为简单的非线性函数。但是对于条件部分,FReLU将其扩展为依赖于每个像素的空间上下文的2D条件。如下FReLU公式:
在这里插入图片描述

\qquad 这里的 T ( x c , i , j ) T(x_{c,i,j}) T(xc,i,j)就是我们定义的漏斗式条件, x c , i , j w x^w_{c,i,j} xc,i,jw表示第c个通道上,以2D位置 (i,j)为中心的窗口,也就是上面图c的黄色框口; p c w p^w_{c} pcw表示此窗口在同一通道中共享的参数。

3.2、像素级建模能力:pixel-wise modeling capacity

\qquad FReLU激活函数拥有像素级的建模能力:漏斗式条件的定义(其实就是一个Depthwise Seperate卷积操作)允许网络在非线性激活中为每个像素生成空间条件。因为函数 max(x) 为每个像素提供了一个选择,可以选择是否查看空间上下文(这里从公式可以看出来)。比如,网络中有n个FReLU层{F1,F2,F3……Fn},每一个FReLU层都有 k*k 参数窗口,为了方便我们先不考虑卷积层。那么第一层F1的感受野集合就是{1, 1+r} 其中(r=k-1);到Fn层感受野集合变为{1,1+r,……,1+nr},这就为每个像素都提供了更多的选择,如果n足够大,可以近似任何布局。由于激活区有许多不同的尺寸,不同尺寸的正方形可以近似于斜线和弧线的形状。如下图:
在这里插入图片描述
\qquad 因此提取物体的空间结构可以通过空间条件提供的像素级建模能力自然解决。我们通过实验也表明,FReLU可以更准确的提取图片的空间信息(详见第五节)。

总结一下:

  1. 利用这个空间条件T(x)和max函数的特性,我们可以提供像素级的建模能力或者说空间布局能力,可以自然的很轻易提取物体的空间结构(理论上任何形状都可以提取)。
  2. 之前的卷积(空间依赖)+非线性激活 两者是分开的,激活并不依赖于空间条件;而FReLU在非线性激活的同时产生空间依赖,激活依赖于空间条件。这也解决了第一节中我们提到的激活函数中的空间不敏感性。

3.3、实现细节

\qquad 公式和图中的漏斗条件T(x)我们是用一个深度可分离卷积 DepthWise Separable Conv + BN 来实现的,且深度可分离卷积的输入channel = 输出channel = groups。更详细内容见第四节代码实现。

3.4、计算量分析

\qquad 假如输入feature map为 C ∗ H ∗ W C * H * W CHW,输出feature map为 C ∗ H 0 ∗ W 0 C * H_0 * W_0 CH0W0,卷积核大小为 K h ∗ K w K_h * K_w KhKw K h = K w = K K_h=K_w=K Kh=Kw=K

没用FReLU时:
参数个数 = C ∗ K ∗ K ∗ C = C 2 K 2 C * K * K * C=C^2K^2 CKKC=C2K2
FLOPs = C C K K H W = C 2 K 2 H W CCKKHW=C^2K^2HW CCKKHW=C2K2HW
用FReLU时:
参数个数 = C ∗ K ∗ K ∗ C + 1 ∗ K ∗ K ∗ 1 ∗ C ( 个 ) = C 2 K 2 + C K 2 C * K * K * C + 1 * K * K *1 *C(个)=C^2K^2+CK^2 CKKC+1KK1C()=C2K2+CK2
FLOPs = C C K K H W + C K K H W = C 2 K 2 H W + C K 2 H W CCKKHW + CKKHW=C^2K^2HW + CK^2HW CCKKHW+CKKHW=C2K2HW+CK2HW

\qquad 可以看出附加的参数为 C K 2 CK^2 CK2,附加的FLOPs为 C K 2 H W CK^2HW CK2HW。但是通常来说C是远远比K要大的,所以附加的参数= C K 2 CK^2 CK2(相对 C 2 K 2 C^2K^2 C2K2)是微不足道的。附加的FLOPs= C K 2 H W CK^2HW CK2HW(相对 C 2 K 2 H W C^2K^2HW C2K2HW)也是微不足道的。

四、PyTorch实现

class FReLU(nn.Module):
    """
    FReLU https://arxiv.org/abs/2007.11824
    """
    def __init__(self, c1, k=3):  # ch_in, kernel
        super().__init__()
        # 定义漏斗条件T(x)  参数池窗口(Parametric Pooling Window )来创建空间依赖
        # nn.Con2d(in_channels, out_channels, kernel_size, stride, padding, dilation=1, bias=True)
        # 使用 深度可分离卷积 DepthWise Separable Conv + BN 实现T(x)
        self.conv = nn.Conv2d(c1, c1, k, 1, 1, groups=c1, bias=False)
        self.bn = nn.BatchNorm2d(c1)

    def forward(self, x):
        # f(x)=max(x, T(x))
        return torch.max(x, self.bn(self.conv(x)))

可以看到上面的实现代码非常的简单。

五、论文实验结果

1、ResNet 在 ImageNet 分类
在这里插入图片描述
可以看到FReLU在产生微不足道的内存开销的情况下,性能都是优于ReLU、PReLU和Swish等激活函数的。

2、在轻量级网络上的ImageNet 分类表现
在这里插入图片描述
可以看到在两个轻量级网络 MobileNet和ShuffleNet 上FReLU在产生微不足道的内存开销的情况下,性能都优于ReLU、PReLU和Swish等激活函数的。

3、在目标检测上的表现
在这里插入图片描述
可以看到FReLU在产生微不足道的内存开销的情况下,性能都是优于ReLU、PReLU和Swish等激活函数的。

4、在图像分割上的表现
在这里插入图片描述
可以看到,FReLU能更好地捕捉不规则和详细的对象布局(空间信息)。

\qquad 总结:FReLU在图片分类、目标检测、分割等领域上性能都优于ReLU、PReLU和Swish等激活函数(仅产生微不足道的内存开销)。

Reference

链接: 博客1.

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值