风格迁移算法-Adaptive Instance Normalization

最近看了两篇关于人物风格迁移的论文DualStyleGAN和VToonify,里面都提到了AdaIN这个算法,在此之前没有学习过相关邻域的知识,论文也是纯属硬理解,所以先学习记录一下AdaIN算法。

在做风格迁移之前我也看过换脸的一些论文,也做过相关的实验,在很多换脸的顶会论文中,在做特征融合的时候都会用到一个AdaIN模块,当时只是看懂它的数学公式,并没有去深究为什么它可以在特征融合、风格迁移的过程中发挥这么答的作用。


风格迁移

通俗理解

风格迁移,顾名思义,就是将一张图片/视频的风格嵌入到另一张图片/视频中去,被嵌入的图片/视频保持原内容,但是风格却变成了其他样式。

背景知识

AdaIN的主要与标准化有关,在深度神经网络的训练过程中有很多的标准化操作包括Batch Normalization、Instance Normalization、Conditional Instance Normalization。

Batch Normalization

对一个batch中的数据进行标准化,就是每一个值减去batch的均值,除以batch的标准差,计算公式如下:
对于全连接层(FC)或卷积层(Conv),假设其输入为 x ∈ R m x\in\mathbb{R}^{m} xRm,即一个 m m m 维向量,BN 的公式为:

x i ^ = x i − μ B σ B 2 + ϵ \hat{x_i}=\frac{x_i-\mu_B}{\sqrt{\sigma_B^2+\epsilon}} xi^=σB2+ϵ xiμB

其中,

μ B = 1 m ∑ i = 1 m x i \mu_B=\frac{1}{m}\sum_{i=1}^{m}x_{i} μB=m1i=1mxi
σ B 2 = 1 m ∑ i = 1 m ( x i − μ B ) 2 \sigma_B^2=\frac{1}{m}\sum_{i=1}^{m}(x_i-\mu_B)^2 σB2=m1i=1m(xiμB)2

ϵ \epsilon ϵ 是一个很小的数,用于避免方差为零的情况, m = N ∗ H ∗ W m = N*H*W m=NHW

接下来,BN 通过一个线性变换将 x ^ \hat{x} x^ 映射到均值为 γ \gamma γ,方差为 β 2 \beta^2 β2 的分布上:

y i = γ x i ^ + β y_i=\gamma\hat{x_i}+\beta yi=γxi^+β

其中, γ \gamma γ β \beta β 是 BN 层可学习的参数。


Instance Normalization

Ulyanov等[4]发现,将BN替换为Instance Normalization(IN),可以提升风格迁移的性能。IN的操作跟BN类似,就是范围从一个batch变成了一个instance。计算公式和Batch Normalization类似。


Conditional Instance Normalization

Conditional Instance Normalization (CIN) 是在 Instance Norm (IN) 基础上引入条件参数的一种归一化技术,用于在图像风格迁移中控制生成图像风格。

假设样本的输入张量为 X ∈ R N × C × H × W X \in \mathbb{R}^{N \times C \times H \times W} XRN×C×H×W,其中 N N N 表示样本数, C C C 表示通道数, H H H W W W 分别为输入样本的高度和宽度,同时假设条件数据 y ∈ R M y \in \mathbb{R}^M yRM。给定输入和条件数据,CIN 的计算可概括为以下几个步骤:

  • 对输入张量 X X X 进行标准化:
    x ^ i = x i − μ i σ i 2 + ϵ \widehat x_{i} = \frac{x_{i} - \mu_i}{\sqrt{\sigma_i^2 + \epsilon}} x i=σi2+ϵ xiμi

其中 μ i , σ i 2 \mu_i, \sigma_i^2 μi,σi2 均计算自输入张量 X X X i i i 个通道, ϵ \epsilon ϵ 是一个足够小的常量,避免分母为零的情况。

  • 定义逐通道的缩放系数 s i s_i si 和平移参数 b i b_i bi
    s i = f S ( y ) i , b i = f B ( y ) i s_i = f_S(y)_i,\quad b_i = f_B(y)_i si=fS(y)i,bi=fB(y)i

其中 f S f_S fS f B f_B fB 分别是针对条件数据的可学习函数,用于生成适当的缩放和偏移参数。

  • 应用缩放系数和偏移参数:
    y i j = s i x ^ i + b i y_{ij} = s_i \widehat x_{i} + b_i yij=six i+bi

通过将缩放系数和偏移参数引入到标准化后的输入张量中,便可通过控制条件数据 y y y 来对风格转移进行控制。

以上就是 Conditional Instance Normalization (CIN) 的计算公式,通过引入条件参数控制缩放和偏移参数,可以实现更为灵活的图像风格迁移。


为什么Instance Normalization更适合做风格迁移

在这里插入图片描述
论文中提到DNN提取的特征统计特性(均值和方差)可以代表图像的风格,AdaIN这篇论文的作者做了三组实验,a、b两组实验为BN方法与IN方法分别在original images、contranormalized images上的结果,可以看出IN方法在风格转换这一方面是比BN更高效的,当在 style normalized images上实验时,二者的差距就很小了。在c实验中,作者将训练图片都迁移到同一种风格,这时候BN和IN的loss曲线差距就小了很多,这是为什么呢?

BN和IN的计算主要区别在于一个是针对batch样本,一个是针对个体样本,当训练数据都被归一到同一种风格,一个batch的统计特征和一个个体样本的统计特征会大致相同,而在这个时候,训练loss也大致相同,这侧面说明了影响风格转换的关键就是统计特征:均值和方差


Adaptive Instance Normalization

既然均值和方差可以很大程度的影响风格转换效果,那么我想改变一张图片的风格,如果先对其进行去风格化,再进行风格嵌入,效果是不是会出奇的好呢?
在这里插入图片描述

AdaIN全称为Adaptive Instance Normalization,是一种图像处理技术,用于实现风格迁移。它的计算公式如下:
设输入特征图为 x ∈ R C × H × W x \in \mathbb{R}^{C \times H \times W} xRC×H×W,风格特征图为 y ∈ R C × 1 × 1 y \in \mathbb{R}^{C \times 1 \times 1} yRC×1×1,其中 C C C表示通道数, H H H W W W分别表示特征图的高度和宽度。AdaIN的操作可以表达为:
AdaIN ( x , y ) = σ ( y ) ( x − μ ( x ) σ ( x ) ) + μ ( y ) \text{AdaIN}(x, y) = \sigma(y) \left(\frac{x - \mu(x)}{\sigma(x)}\right) + \mu(y) AdaIN(x,y)=σ(y)(σ(x)xμ(x))+μ(y)
其中 μ \mu μ表示均值运算, σ \sigma σ表示标准差运算,它们的计算公式分别为:
μ ( x ) = 1 C × H × W ∑ c = 1 C ∑ h = 1 H ∑ w = 1 W x c , h , w \mu(x) = \frac{1}{C \times H \times W} \sum_{c=1}^C \sum_{h=1}^H \sum_{w=1}^W x_{c, h, w} μ(x)=C×H×W1c=1Ch=1Hw=1Wxc,h,w
σ 2 ( x ) = 1 C × H × W ∑ c = 1 C ∑ h = 1 H ∑ w = 1 W ( x c , h , w − μ ( x ) ) 2 \sigma^2(x) = \frac{1}{C \times H \times W} \sum_{c=1}^C \sum_{h=1}^H \sum_{w=1}^W (x_{c, h, w} - \mu(x))^2 σ2(x)=C×H×W1c=1Ch=1Hw=1W(xc,h,wμ(x))2
μ ( y ) = 1 C ∑ c = 1 C y c , 1 , 1 \mu(y) = \frac{1}{C} \sum_{c=1}^C y_{c, 1, 1} μ(y)=C1c=1Cyc,1,1
σ ( y ) = 1 C ∑ c = 1 C ( y c , 1 , 1 − μ ( y ) ) 2 + ϵ \sigma(y) = \sqrt{\frac{1}{C} \sum_{c=1}^C (y_{c, 1, 1} - \mu(y))^2 + \epsilon} σ(y)=C1c=1C(yc,1,1μ(y))2+ϵ
其中 ϵ \epsilon ϵ是一个很小的数,用于防止分母为0的情况。 σ ( x ) \sigma(x) σ(x)被除以 σ ( y ) \sigma(y) σ(y)表示将 x x x的标准差归一化到与风格特征的标准差相同。最终的结果是 σ ( y ) \sigma(y) σ(y)乘以归一化后的 x x x再加上 μ ( y ) \mu(y) μ(y)


首先先对content image进行去风格化(减去自身均值再除以自身标准差),再风格化到style image的风格(乘style image的标准差再加均值 )。
训练时,先用VGG提取content image和style image的特征,然后在AdaIN模块进行的操作,然后用于VGG对称的Decoder网络将特征还原为图像,然后将还原的图像再输入到VGG提取特征,计算content loss和style loss,计算公式如式,style loss会对多个层的特征进行计算。VGG的参数在训练过程中是不更新的,训练的目的是为了得到一个好的Decoder。

效果展示

在这里插入图片描述

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值