深度学习
  • 前言
  • 第一章:经典网络
    • ImageNet Classification with Deep Convolutional Neural Network
    • Very Deep Convolutional Networks for Large-Scale Image Recognition
    • Going Deeper with Convolutions
    • Deep Residual Learning for Image Recognition
    • PolyNet: A Pursuit of Structural Diversity in Very Deep Networks
    • Squeeze-and-Excitation Networks
    • Densely Connected Convolutional Networks
    • SQUEEZENET: ALEXNET-LEVEL ACCURACY WITH 50X FEWER PARAMETERS AND <0.5MB MODEL SIZE
    • MobileNet v1 and MobileNet v2
    • Xception: Deep Learning with Depthwise Separable Convolutions
    • Aggregated Residual Transformations for Deep Neural Networks
    • ShuffleNet v1 and ShuffleNet v2
    • CondenseNet: An Efficient DenseNet using Learned Group Convolution
    • Neural Architecture Search with Reinforecement Learning
    • Learning Transferable Architectures for Scalable Image Recognition
    • Progressive Neural Architecture Search
    • Regularized Evolution for Image Classifier Architecture Search
    • 实例解析:12306验证码破解
  • 第二章:自然语言处理
    • Recurrent Neural Network based Language Model
    • Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation
    • Neural Machine Translation by Jointly Learning to Align and Translate
    • Hierarchical Attention Networks for Document Classification
    • Connectionist Temporal Classification : Labelling Unsegmented Sequence Data with Recurrent Neural Ne
    • About Long Short Term Memory
    • Attention Is All you Need
    • BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
  • 第三章:语音识别
    • Speech Recognition with Deep Recurrent Neural Network
  • 第四章:物体检测
    • Rich feature hierarchies for accurate object detection and semantic segmentation
    • Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
    • Fast R-CNN
    • Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
    • R-FCN: Object Detection via Region-based Fully Convolutuional Networks
    • Mask R-CNN
    • You Only Look Once: Unified, Real-Time Object Detection
    • SSD: Single Shot MultiBox Detector
    • YOLO9000: Better, Faster, Stronger
    • Focal Loss for Dense Object Detection
    • YOLOv3: An Incremental Improvement
    • Learning to Segment Every Thing
    • SNIPER: Efficient Multi-Scale Training
  • 第五章:光学字符识别
    • 场景文字检测
      • DeepText: A Unified Framework for Text Proposal Generation and Text Detection in Natural Images
      • Detecting Text in Natural Image with Connectionist Text Proposal Network
      • Scene Text Detection via Holistic, Multi-Channel Prediction
      • Arbitrary-Oriented Scene Text Detection via Rotation Proposals
      • PixelLink: Detecting Scene Text via Instance Segmentation
    • 文字识别
      • Spatial Transform Networks
      • Robust Scene Text Recognition with Automatic Rectification
      • Bidirectional Scene Text Recognition with a Single Decoder
      • multi-task learning for text recognition with joint CTC-attention
    • 端到端文字检测与识别
      • Reading Text in the Wild with Convolutional Neural Networks
      • Deep TextSpotter: An End-to-End Trainable Scene Text Localization and Recognition Framework
    • 实例解析:字符验证码破解
    • 二维信息识别
      • 基于Seq2Seq的公式识别引擎
      • Show and Tell: A Neural Image Caption Generator
      • Show, Attend and Tell: Neural Image Caption Generation with Visual Attention
  • 第六章:语义分割
    • U-Net: Convolutional Networks for Biomedical Image Segmentation
  • 第七章:人脸识别
    • 人脸检测
      • DenseBox: Unifying Landmark Localization with End to End Object Detection
      • UnitBox: An Advanced Object Detection Network
  • 第八章:网络优化
    • Batch Normalization
    • Layer Normalization
    • Weight Normalization
    • Instance Normalization
    • Group Normalization
    • Switchable Normalization
  • 第九章:生成对抗网络
    • Generative Adversarial Nets
  • 其它应用
    • Holistically-Nested Edge Detection
    • Image Style Transfer Using Convolutional Nerual Networks
    • Background Matting: The World is Your Green Screen
  • Tags
  • References
由 GitBook 提供支持
在本页
  • 前言
  • 1. IN详解
  • 1.1 IST中的IN
  • 1.2 IN vs BN
  • 1.3 TensorFlow 中的IN
  • 总结

这有帮助吗?

  1. 第八章:网络优化

Instance Normalization

上一页Weight Normalization下一页Group Normalization

最后更新于4年前

这有帮助吗?

tags: Normalization

前言

对于我们之前介绍过的这类的注重每个像素的任务来说,每个样本的每个像素点的信息都是非常重要的,于是像这种每个批量的所有样本都做归一化的算法就不太适用了,因为BN计算归一化统计量时考虑了一个批量中所有图片的内容,从而造成了每个样本独特细节的丢失。同理对于这类需要考虑一个样本所有通道的算法来说可能忽略了不同通道的差异,也不太适用于图像风格迁移这类应用。

所以这篇文章提出了Instance Normalization(IN),一种更适合对单个像素有更高要求的场景的归一化算法(IST,GAN等)。IN的算法非常简单,计算归一化统计量时考虑单个样本,单个通道的所有元素。IN(右)和BN(中)以及LN(左)的不同从图1中可以非常明显的看出。

图1:LN(左),BN(中),IN(右)

1. IN详解

1.1 IST中的IN

在Gatys等人的IST算法中,他们提出的策略是通过L-BFGS算法优化生成图片,风格图片以及内容图片再VGG-19上生成的Feature Map的均方误差。这种策略由于Feature Map的像素点数量过于多导致了优化起来非常消耗时间以及内存。IN的作者Ulyanov等人同在2016年提出了Texture network(图2),

图2:Texture Networks的网络结

图2中的生成器网络(Generator Network)是一个由卷积操作构成的全卷积网络,在原始的Texture Network中,生成器使用的操作包括卷积,池化,上采样以及BN。但是作者发现当训练生成器网络网络时,使用的样本数越少(例如16个),得到的效果越好。但是我们知道BN并不适用于样本数非常少的环境中,因此作者提出了IN,一种不受限于批量大小的算法专门用于Texture Network中的生成器网络。

1.2 IN vs BN

BN的详细算法我们已经分析过,这里再重复一下它的计算方式:

μi=1HWT∑t=1T∑l=1W∑m=1Hxtilmσi2=1HWT∑t=1T∑l=1W∑m=1H(xtilm−μi)2ytijk=xtijk−μiσi2+ϵ\mu_i = \frac{1}{HWT}\sum_{t=1}^T\sum_{l=1}^W\sum_{m=1}^H x_{tilm} \qquad \sigma_i^2 = \frac{1}{HWT}\sum_{t=1}^T\sum_{l=1}^W\sum_{m=1}^H (x_{tilm} -\mu_i)^2 \qquad y_{tijk} = \frac{x_{tijk}-\mu_{i}}{\sqrt{\sigma_{i}^2+ \epsilon}}μi​=HWT1​t=1∑T​l=1∑W​m=1∑H​xtilm​σi2​=HWT1​t=1∑T​l=1∑W​m=1∑H​(xtilm​−μi​)2ytijk​=σi2​+ϵ​xtijk​−μi​​

正如我们之前所分析的,IN在计算归一化统计量时并没有像BN那样跨样本、单通道,也没有像LN那样单样本、跨通道。它是取的单通道,单样本上的数据进行计算,如图1最右侧所示。所以对比BN的公式,它只需要它只需要去掉批量维的求和即可:

μti=1HW∑l=1W∑m=1Hxtilmσti2=1HW∑l=1W∑m=1H(xtilm−μti)2ytijk=xtijk−μtiσti2+ϵ\mu_{ti} = \frac{1}{HW}\sum_{l=1}^W\sum_{m=1}^H x_{tilm} \qquad \sigma_{ti}^2 = \frac{1}{HW}\sum_{l=1}^W\sum_{m=1}^H (x_{tilm} -\mu_{ti})^2 \qquad y_{tijk} = \frac{x_{tijk}-\mu_{ti}}{\sqrt{\sigma_{ti}^2+ \epsilon}}μti​=HW1​l=1∑W​m=1∑H​xtilm​σti2​=HW1​l=1∑W​m=1∑H​(xtilm​−μti​)2ytijk​=σti2​+ϵ​xtijk​−μti​​

对于是否使用BN中的可学习参数β\betaβ和γ\gammaγ,从LN的TensorFlow中源码中我们可以看出这两个参数是要使用的。但是我们也可以通过将其值置为False来停用它们,这一点和其它归一化方法在TensorFlow中的实现是相同的。

1.3 TensorFlow 中的IN

def instance_norm(inputs,
                  center=True,
                  scale=True,
                  epsilon=1e-6,
                  activation_fn=None,
                  param_initializers=None,
                  reuse=None,
                  variables_collections=None,
                  outputs_collections=None,
                  trainable=True,
                  data_format=DATA_FORMAT_NHWC,
                  scope=None)

其中的center和scale便是分别对应BN中的参数β\betaβ和γ\gammaγ。

归一化统计量是通过nn.moments函数计算的,决定如何从inputs取值的是axes参数,对应源码中的moments_axes参数。

    # Calculate the moments (instance activations).
    mean, variance = nn.moments(inputs, moments_axes, keep_dims=True)

下面我们提取源码中的核心部分,并通过注释的方法对齐进行解释(假设输入的Tensor是按NHWC排列的):

inputs_rank = inputs.shape.ndims # 取Tensor的维度数,这里值是4
reduction_axis = inputs_rank - 1 # 取Channel维的位置,值为3
moments_axes = list(range(inputs_rank)) # 初始化moments_axes链表,值为[0,1,2,3]
del moments_axes[reduction_axis] # 删除第3个值(Channel维),moments_axes变为[0,1,2]
del moments_axes[0] # 删除第一个值(Batch维),moments_axes变为[1,2]

总结

IN本身是一个非常简单的算法,尤其适用于批量较小且单独考虑每个像素点的场景中,因为其计算归一化统计量时没有混合批量和通道之间的数据,对于这种场景下的应用,我们可以考虑使用IN。

另外需要注意的一点是在图像这类应用中,每个通道上的值是比较大的,因此也能够取得比较合适的归一化统计量。但是有两个场景建议不要使用IN:

  1. MLP或者RNN中:因为在MLP或者RNN中,每个通道上只有一个数据,这时会自然不能使用IN;

  2. Feature Map比较小时:因为此时IN的采样数据非常少,得到的归一化统计量将不再具有代表性。

IN在TensorFlow中的实现见,其函数声明如下:

链接
图像风格迁移
BN
LN
图2:Texture Networks的网络结构
图1:LN(左),BN(中),IN(右)