ECCV最佳论文提名:Group Normalization

Group Normalization

论文链接:https://arxiv.org/abs/1803.08494
代码链接:https://github.com/facebookresearch/Detectron/tree/master/projects/GN
ECCV 2018最佳论文提名奖,何恺明团队的新作品。GN(Group Normalization)是BN(Batch Normalization)的改进版,主要克服的是BN在过小的批量训练上误差会增大的弊端。GN不止是检测领域,在分割或者序列处理等其他领域都有很好的应用潜力。
代码链接里已经公布了一些预训练模型,不过作为今年刚提出的方法,要普及开估计还要一定的时间。

1. Background

BN是现在CNN网络中非常常见的层,它可以起到加快训练、使网络收敛得更好的作用。BN的原理是让CNN中每一层的输入数据都保持相同的分布,实现方式是在批次内计算均值和方差,用减去均值和除以方差的方法让输出符合均值为0、方差为1的正态分布的特点。
但是这样会引出一个问题,BN的均值和方差都是在一个mini-batch内计算的,有一定的随机性。而且这个min-batch越小,随机性就越大,这不仅会导致收敛速度上的问题,更重要的是,网络性能会有所下降。
在这里插入图片描述
这是作者实验获得的数据,可以看到,小的batch会使得模型错误率急剧上升。但是在图像和视频等领域,由于显存开销问题和对输入的高分辨率要求,我们不可能使用很大的batch,一般都是每个GPU一到两张图片。怎样解决这个问题呢?
作者从传统的一些特征方法里得到了灵感,因为很多方法比如HOG或者SIFT都是group-wise的,即将特征分组、并且在组内正则化。基于这方面的启发,作者提出了GN方法,核心思想就是将CNN的channel分组,并且在组内正则化而不是简单粗暴地在每个通道上正则化。

2. Method

实现方式

先来解释组内正则化是什么意思。常规的BN分两个部分,第一是改变数据分布,使其满足均值为0,方差为1:
在这里插入图片描述
其中:
在这里插入图片描述
第二个部分是学习线性映射,防止表达特征的丢失,注意这里的尺度和偏移量都是用channel作index的:
在这里插入图片描述
留意到公式(2)里有个k属于Si,表达了均值和标准差是在某个特定的组内计算的。
实际上,目前也有很多其他的标准化方法,核心焦点都是分组问题,结合图来说:
在这里插入图片描述
BN的特点就是,所有批次的相同通道划分为一个组。即第一张图片特征的第一个通道,第二张图片特征的第一个通道……Batch内所有图片特征的第一个通道扔在一起,算出均值和方差,然后每个都减去均值、除以方差;往后的通道亦然……
LN(Layer Norm)的特点就是,第一张图片所有通道的特征扔在一起,后面的图片亦然。而IN(Instance Norm)是把每张图片的每个通道放在一块……
GN介于LN和IN两种极端情况之间,它会规定多少个通道是一个组或者规定共有多少个组,如图所示,就是每张图片,1-3通道放在一起正则化,4-6通道放到一起正则化,依次类推……数字化的表示就是:
在这里插入图片描述
其中C是总的通道数,G是组的个数,一般是32,C/G代表每组的特征数量。GN的实现也很简单,比如在tf里面:
在这里插入图片描述

对GN的理解

组的划分实际上是对数据分布的假设,以LN为例,它实际上假设了每张图片所有通道的特征都是同分布的,而GN则是每个组的分布不同,条件没有那么苛刻,因此GN的表现力和包容性会更强。而IN只依赖于独立的某一维,没有探究不同通道之间特征的关联性。这是作者认为GN更加优秀的原因。
组划分的另一个深层次含义就是假定DNN的特征并不是一个非结构化的。例如conv1,可视化过程中会发现往往它们学习出了很多边边角角,其中就可能有水平对称的形状。那么将它们划分到一个组内来正则化明显会更可靠。

3. Experiments

Image Classification

在ImageNet的分类结果如下:
在这里插入图片描述
可以看到,在32images/gpu的时候,GN的train error是最小的,收敛很容易;但是val error会比BN高一些,这是因为BN的正则化方式引入了一些随机量,GN因为过强的表达能力出现了一定的过拟合;而当bathc的数量减小时,GN仍然保持了它的性能,BN的错误率却开始不断上升。
还有一些对BR(batch renorm)的对比和对不同特征网络例如VGG的分析,这里不再一一展示。

Detection

作者还将GN使用到了detection算法上,主要以Mask RCNN做比较。要注意的地方有三个:
第一,使用ImageNet的预训练网络的时候,要frozenBN层,不然结果反而会劣化,而GN不会有这个问题。保持特征网络的BNfrozen,只在Head部分使用GN会提升效果,但是如果把backbone也换成GN预训练的,效果会更好。
在这里插入图片描述
第二,使用BN的准确率模型性能已经无法随着迭代次数增加的时候,GN反而可能会随着迭代次数的增加性能有一定的上升。
在这里插入图片描述
第三,不使用预训练模型,GN仍然可以达到compared的性能,但是BN会出现结果的劣化……
在这里插入图片描述
另外还有关于分割的研究和其它很多对比实验,这里不再详细介绍。

总的来说,GN是一种非常有效的方法,而且实现比较简单,预计会有比较大的应用潜力。Github上已经发布了一些预训练模型,有兴趣的不妨看一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值