• GAN相关网络用什么归一化方法:BatchNorm?Weight Norm?Layer Norm?


    一、问题背景

    问题是这样的,在做一个图像生成的任务中(基于GAN),出现了局部噪声的问题,表现为下图所示,在和几位老师傅交流之后,推测是因为BN的问题。关于BatchNorm、LayerNorm、InstanceNorm、WeightNorm等介绍移步大佬博客
    图像生成出现局部噪声
    那么怎么解决呢?参考StyleGAN2中,使用EqualConv2d替换掉Conv+BN的方式解决(经过实验,使用Layer Norm也能避免此问题)。EqualConv2d其实就是在初始化参数的时候,对卷积参数进行一次缩放处理。公式如下:
    w i j k ′ = w i j k ′ ′ / c i n ∗ k ∗ k w'_{ijk}=w''_{ijk} / \sqrt{c_{in}*k*k} wijk=wijk′′/cinkk
    其中 c i n c_{in} cin表示输入通道数,k表示卷积核尺度,代码在这里;在对卷积参数进行缩放之外,通过对卷积的处理使得输出恢复到单位标准差:
    w i j k = w i j k ′ / ∑ i , k ( w i j k ′ ) 2 + ϵ w_{ijk}=w'_{ijk}/\sqrt{\sum_{i,k}(w'_{ijk})^2+\epsilon} wijk=wijk/i,k(wijk)2+ϵ
    其实这一段比较好理解,带入到卷积运算公式之后,再求方差可以把卷积参数带来的方差变化给约掉,也就是卷积参数不会导致特征的整体方差发生变化,代码在这里

    那么问题来了,到底什么时候用BN?什么时候用Weight Norm?什么是时候用Layer Norm呢?

    二、先从StyleGAN说起

    2.1 StyleGAN中的问题

    StyleGAN用于生成图像的,通过输入不同的噪声,控制生成的图像具备不同特征,比如性别、头发、肤色等。虽然StyleGAN的效果很好,但是在生成图像时会存在『水滴状』噪声问题,如下图所示。
    在这里插入图片描述

    2.2 StyleGAN2

    StyleGAN2提到StyleGAN中采用AdaIN进行归一化,导致出现这个问题的,将AdaIN去掉之后这个问题就没有了,然后又提出第一章介绍的权重解调来实现特征的归一化。AdaIN最开始提出用于风格迁移任务中,代码在这里。计算公式如下:
    A d a I N ( x , y ) = σ ( y ) x − μ ( x ) σ ( x ) + μ ( y ) AdaIN(x,y)=\sigma(y)\frac{x-\mu(x)}{\sigma(x)}+\mu(y) AdaIN(x,y)=σ(y)σ(x)xμ(x)+μ(y)
    其中x表示源图像,y表示风格,也就是AdaIN可以将x图像迁移到y中风格中。用直白的语言说就是统一不同图像风格的变化,而BN、IN、LN是从不同纬度对特征分布进行统一。

    三、不同网络及任务使用的归一化方法

    下面对一些经典的算法进行统计,主要是图像、GAN相关算法,也涉及少量的文本、语音相关的内容。

    算法任务网络结构归一化方式卷积备注
    StyleGAN图像生成StyleGAN上采样AdaIN普通卷积
    StyleGAN2图像生成StyleGAN2上采样Weight Demodulate普通卷积
    AdaIN图像风格迁移VGGUNetAdaIN普通卷积
    IN图像风格迁移VGGUNetAdaIN普通卷积
    MobileFSGAN换脸MobileFSGANUNetG:BN;D:spectral_norm普通卷积
    单阶段-多阶段检测相关目标检测、分类ResNet等下采样BN普通卷积
    SegNet语义分割VGGUNetBN普通卷积
    FCN语义分割FCN下采样-普通卷积
    DenseNet图像分类、检测DenseNet下采样BN普通卷积轻量化
    MobileNet图像分类、检测MobileNet下采样DepthWiseConv轻量化
    ShuffleNet图像分类、检测ShuffleNet下采样GNGroup Conv轻量化
    Weight Normalization图像分类、生成--WN-
    Transformer文本Transformer-LN-
    deepspeech语音RNN-BN普通卷积

    四、分析各种归一化应用情况

    4.1 BN

    最常见的归一化方法,在目标检测、图像分类任务中使用的骨干网络中(如ResNet相关,ResNet、ResNext、ResNeSt等)。对于GAN相关的网络用的比较少,但是也有一些算法会用。
    缺点:计算mean、var时受mini-batch影响,容易引入噪声,尤其是在GAN相关的算法中,可能会出现水滴状的问题。
    注意:在图像分类、检测、分割等任务中,往往使用预训练模型,所以即使batchsize=1也不会导致太差的结果。

    4.2 LN

    针对单个样本,不受mini-batch影响,在RNN系列模型用的比较多,NLP任务中常用。

    4.3 IN

    对于图像而言,有点像是对每个像素进行归一化,用于风格迁移中。

    4.4 WN

    不依赖数据的统计量,感觉有点类似于万金油。BN、LN都是基于特征的统计量,而WN是对权重进行处理的。

    4.5 GN

    常用于分组卷积或分组相关运算中。

    4.6 DepthWiseConv

    不用norm,猜测其实每个卷积都是独立的,不像普通卷积一样进行多个纬度的累加,所以输出特征比较稳定。猜想普通卷积多个纬度相加,特征值可能会出现变化比较大的情况,所以需要各种norm给拉回来,利用网络优化,而DWC就一个小卷积核,不怕不怕。

    引用:
    [1] BN、LN、IN、GN等介绍
    https://zhuanlan.zhihu.com/p/33173246
    https://zhuanlan.zhihu.com/p/115949091
    [2] 论文
    上面涉及的所有论文,懒得一个个贴了。

    即兴写的不免有很多疏漏,若有问题欢迎交流!

  • 相关阅读:
    python使用pandas中的read_csv函数读取csv数据为dataframe、使用map函数和lower函数将指定字符串数据列的数据转化为小写字符串
    docker安装onlyoffice
    【个人记录 | 研二预答辩】
    Pytorch学习整理笔记(二)
    C#Winform调用tcp/ip调用斑马打标机示例
    【OFDM】多径信道下OFDM通信系统误码率仿真附matlab代码
    汇编语言与接口技术实验
    Frechet distance距离计算原理及python实现
    网络安全(黑客)自学
    (附源码)ssm某村青年人口信息管理系统 毕业设计 271621
  • 原文地址:https://blog.csdn.net/qq_36561737/article/details/126802376