论文阅读_组归一化Group Normalization

2020-05-29  本文已影响0人  xieyan0811

论文地址:https://arxiv.org/pdf/1803.08494.pdf
相关代码:https://github.com/facebookresearch/Detectron/tree/master/projects/GN

Group Normalization(GN)源自2018年收录于cs.CV的论文《Group Normalization》,作者是Yuxinwu和Kaiminghe。

Batch Normalization(BN)是非常重要的归一化算法,但使用它时存在限制:在batch_size变小时,效果明显变差,下图为ResNet50模型效果:

这影响了在目标识别、实例分类、视频等由于内存限制,需要设置较小batch_size的算法效果。GN是BN的改进版本,它将channel分成多个组,计算每一组的均值和方差做归一化处理,使归一化操作与batch_size大小无关,它在ResNet-50上batch_size为2的情况下错误率比BN降低了10.6%(详见上图)。在batch_size正常的情况下,也能保证模型效果正常。GN可以在大部分场景中替代BN,并且已在ImageNet, COCO, Kinetics等多种场景中被证明是有效的方法。

原理

各种归一化方法的原理如下所示:

摘自论文

为了改进BN的batch_size的问题,相继出现了Layer Normalization (LN),Instance Normalization (IN),它们可以在RNN/LSTM有效地工作,但在机器视觉上达不到BN的精度。

所有的归一化方法均能用下式描述:

其中σ是标准差,μ是均值x是待归一化的数据,i是索引,对于图片来说,代入模型的数据一般是(N,C,W,H),它们分别是batch中图片的张数,通道数,和图片的长宽,不同的归一化方法在不同的维度计算,如i = (iN,iC,iH,iW)。标准差和均值计算方法如下:

其中ε(eps)是个很小的数用于防止前式中分母为0,S是像素点的值,m是数据个数。不同的归一化方法的主要差别在于其S不同。

BN的S定义如下:

它表示对具有同样通道的数据归一化,即在(N,H,W)三个维度上计算均值和方差。

LN的S定义如下:

它表示在(C,H,W) 维度上,对每个实例(每张图)计算均值和方差。

IN的S定义如下:

它表示仅在(H,W) 维度上,对每个实例的每个通道计算均值和方差。

一般的归一化层除了上述功能以外,还使用线性变换补偿可能损失的表征能力(实现仿射变换),该层输出的y定义如下:

其中的γβ通过训练求得,分别对应缩放和平移。

GN的S定义如下:

它与IN类似,差别在于对通道分组处理。G是预先定义的分组数,默认为32,⌊.⌋为向下取整符号,在(H,W,C/G)三个维度上计算均值和方差,上图最右侧展示了G=2,每组三个通道的情况,GN针对每个组计算μσ,针对每个通道学习γβ。

LN,IN,GN三种方法都与batch大小无关,LN和IN可视为GN的极端形式,当G=1时 GN=LN, LN假设层中的所有通道具有相同的分布(与全连接层不同,这个假设在卷积层很少有效,因此在机器视觉中效果较差),相对的GN把通道分成几组,这样更有弹性。当G=C时GN=IN,IN只依赖于空间中的点计算,未考虑各个Channel的共性,过于片面。

GN的TensorFlow代码实现如下:

实验

下图是在batch_size=32的情况下,使用各种不同归一化方法的对比结果,可以看到IN自始致终效果不佳,LN在训练早期效果也不好。

下图在不同batch_size的情况下,对比了BN与GN的效果,在batch_size变小后,BN受到了严重的影响,而GN从始至终几乎未受影响,这说明当图片数据很少时,batch的统计值具有很强的不确定性。

在目标识别和实例分割任务中图片分辨率往往较大,因此不能设置太磊的batch_size。常用方法是使用预训练(pre-train)的均值和方差,并将其冻住frozen,在精调时不处理归一化层,这种方法称为BN。下面是使用BN和GN的效果对比。

上一篇下一篇

猜你喜欢

热点阅读