AdaIN - Arbitrary Style Transfer in Real-time with Adaptive Instance Normalization

AdaIN 是一个经典的风格迁移方法,之后在 StyleGAN(v1) 中也以重要的组成模块出现。了解 AdaIN 也有助于了解其他图像生成工作。

原始论文:Arbitrary Style Transfer in Real-time with Adaptive Instance Normalization

什么是风格?What is style?

在详细介绍 AdaIN 之前,我们需要明白什么是风格,风格迁移方法要迁移的是什么?

风格迁移领域一些经典的工作1将图像风格当作是不同图像特征之间的关系,通过修改不同图像特征之间的关系修改图像的风格。

假设1 图像风格是图像特征之间的关系。

基于以上的假设,我们介绍 AdaIN 方法。

AdaIN 方法 Method

在这里插入图片描述

Fig.1 AdaIN 方法

AdaIN 方法分成三部分,编码 Encoder,AdaIN,以及解码 Decoder。第一部分编码 Encoder 使用了预训练的 VGG 网络作为编码器,提取图像的特征,值得注意的是 Encoder 不参与参数更新,模型参数固定;第二部分 AdaIN 为本文重点,旨在将内容图像特征 x x x 的均值 μ ( x ) \mu(x) μ(x) 以及方差 σ ( x ) \sigma(x) σ(x)
替换成风格图像特征 y y y 的均值 μ ( y ) \mu(y) μ(y) 以及 σ ( y ) \sigma(y) σ(y) 。第三部分解码器 Decoder 将变换之后的内容图像 x ^ \hat{x} x^ 重新变换到图像空间获得风格迁移之后的图像。注意,与 Encoder 不同,Decoder 网络的参数需要进行梯度更新。

AdaIN 通过计算图像特征的均值以及方差来建模图像的风格,通过改变图像特征的均值以及方差来改变图像的风格。

具体的 AdaIN 计算公式如下

A d a I N ( x , y ) = σ ( y ) ( x − μ ( x ) σ ( x ) ) + μ ( y ) \mathsf{AdaIN}(x,y) = \sigma(y)\big(\frac{x-\mu(x)}{\sigma(x)}\big)+\mu(y) AdaIN(x,y)=σ(y)(σ(x)xμ(x))+μ(y)

如果按照比较抽象的角度想,我们可以认为 x x x y y y 分别位于“风格1空间”以及“风格2空间”,对 x x x 进行正则化 x − μ ( x ) σ ( x ) \frac{x-\mu(x)}{\sigma(x)} σ(x)xμ(x) 是将 x x x 投影到内容空间中得到内容特征 C ( x ) C(x) C(x),之后将内容特征从内容空间投影到“风格2空间”中得到风格迁移之后的结果。

之后为了约束模型的训练,该工作提出了内容损失 Content loss L C \mathcal{L}_C LC 以及风格损失 Style loss L S \mathcal{L}_{S} LS。Content loss 使用编码器提取生成图像的特征,将其约束与之前变换得到的特征 A d a I N ( x , y ) \mathsf{AdaIN}(x,y) AdaIN(x,y) 一致,以此进行内容约束。而 Style loss 则根据编码器中的若干层提起的特征进行风格的度量(计算特征图的均值和方差),将生成的图像以及风格图像的特征风格进行约束,使得生成图像的风格与风格图像一致,实现风格约束。

根据上诉过程,AdaIN 方法只优化了 Decoder 的参数。

AdaIN 环境配置

在使用 AdaIN 进行风格迁移生成图像时,用到了 GitHub 上的源码:https://github.com/naoto0804/pytorch-AdaIN。

但在根据其提供的 requirements.txt 文件配置环境的时候,存在问题。里头的 numpy 版本号以及个别包的版本号不对,有的甚至为 0.0.0。emmmm

后来我直接使用了 openmmlab 的环境,直接搞定。该源码的运行环境不麻烦,基本 torch 版本对了就行。

写在这记录下。

参考 References


  1. Texture Synthesis Using Convolutional Neural Networks ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值