Instance Normalization
为什么需要 IN
IN 的提出是为了图像风格迁移的任务。对于这个任务来说,每个样本的每个像素点都是十分重要的。
- BN 中,是在 batch 中跨样本做的归一化,不好
- LN 中,在每个样本上跨通道的进行了归一化,不好。(这里可能因为不同的通道表征不同的特征,那么在图像风格迁移中,不同特征之间的差异性是十分重要的)
怎么做 IN
与 BN 框架相同 Step 1: 数据归一化。沿着 计算均值和方差 Step 2: 对规范化后的数据进行数据变换。引入两个可学习的参数 和
如何计算均值 和方差 ? 假设输入的是图像数据,每个 batch 中的特征图尺寸为 ,即一个 batch 中有 个样本,每个样本对应的特征图有 C 和通道,那么 IN 实际上就是针对每个样本的每个通道做归一化,对于第 个样本的第 个通道有
\begin{aligned} \mu_{(i,j)}=&\frac{1}{HW}\sum_k^{HW}x_k\\ \sigma_{(i,j)}^2=&\frac{1}{HW}\sum_k^{HW}(x_k-\mu_{(i,j)})^2 \end{aligned}$$ #### 测试阶段怎么做? 基于测试样本来做,不需要像 BN 一样提前保留 $\mu$ 和 $\sigma$,有点类似 LN ## LN 放在哪里? 可能是替换 BN 就行? ## 什么时候不能用 IN 只能说,IN 适合图像风格迁移的任务,如 GAN,STYLE TRANSFER 这类任务。也有人说生成式任务 IN 表现也好。 因为对于这类任务来说,每个通道的均值和方差是包含了对应的风格或者特点的,因此归一化时不能进行跨通道的操作。 ## 与 BN 的联系和区别 当 BN 中的 batch size = 1,退化成了 IN。 --- 参考资料 - [模型优化之Instance Normalization - 知乎 (zhihu.com)](https://zhuanlan.zhihu.com/p/56542480) - [Batch Normalization、Instance normalization简单理解_烤粽子的博客-CSDN博客_instance normalization](https://blog.csdn.net/Mao_Jonah/article/details/113871034)