【风格迁移系列二】Fast Patch-based Style Transfer of Arbitrary Style 论文解读

本文深入解析FastPatch-based Style Transfer of Arbitrary Style论文,详细介绍Style-Swap算法及其实现过程,包括简化公式、卷积操作、one-hot编码和转置卷积步骤。同时,探讨了模型的优化公式和逆网络,分享了官方与非官方的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

很久没有写博客了,最近遇到一篇论文 Fast Patch-based Style Transfer of Arbitrary Style 刚开始很难理解它的算法细节,结合代码渐渐理解了。由于自己学习时没有找到很好的博客参考,所以想将自己对算法的理解记录下来,以供大家参考。如果有理解不恰当的地方,还望批评指正。

1 Style-Swap & Parallelizable Implementation

论文首先简单介绍了Style-Swap,重点是下面这个求最近邻匹配的公式:
在这里插入图片描述
然后讲了他们的并行实现过程:

  1. 第一步:简化公式。注意到 ∣ ∣ ϕ i ( c ) ∣ ∣ ||\phi_i (c)|| ϕi(c) 对于 a r g m a x argmax argmax 运算是常数,因此删除这一项并不影响最后的结果,最近邻匹配公式可以重新写为如下形式:
    (公式应该很容易理解,不解释)在这里插入图片描述
  2. 第二步:卷积操作。可以看出公式 (2) 是点积运算,很容易想到利用卷积得到 K a , b , j K_{a,b,j} Ka,b,j,把内容激活块 ϕ a , b ( C ) \phi_{a,b}(C) ϕa,b(C) 当做输入,标准化的风格激活块 ϕ j ( S ) ∣ ∣ ϕ j ( S ) ∣ ∣ \frac{\phi_j (S)}{||\phi_j (S)||} ϕj(S)ϕj(S) 当做卷积核,经过卷积操作即可得到 K a , b , j K_{a,b,j} Ka,b,j。不是很明白的可以看下面放出的图的左边来理解,其中最大的 “方块” 是通过 vgg 后得到的内容激活块,然后将风格激活块分成了四份,每一份是 3*3 大小,并且都经过了标准化。取卷积时的步长为1,每个标准化的风格激活块对内容激活块卷积后都可以得到 3*3 的结果,也就是图中左边最大的“方块”后面跟着的四个小 “方块”。
    Style Swap
  3. 第三步:one-hot 编码。这个操作很容易理解,就是第二步中四个小 “方块” 最大的值令为1,其他的为0。(可能会有几个相同的最大值,就是有多个1的意思。可以理解为图中的黑色块为1,白色块为0)
    在这里插入图片描述
  4. 第四步:转置卷积(反卷积)。这块不是很懂的先补补知识 一文搞懂反卷积,转置卷积 这步把公式(3)得到的结果当做输入,未标准化的风格激活块当做反卷积核,那么只有最近邻匹配的风格块(值为1)会输出,其余的与0相乘不会输出。最后转置卷积会导致生成图像中出现棋盘效应 (在这里叫做overlap),棋盘效应不懂的可以看看这篇文章《Deconvolution and Checkerboard Artifacts》,因此最后还需要将转置卷积结果除以overlap的块数来平滑结果。

2 Optimization Formulation & Inverse Network

首先放上整个模型的图。很容易看出整个模型的一个风格迁移流程

  1. 卷积神经网络(vgg)计算特征图;
  2. 上述介绍的 style-swap;
  3. 将 style-swap 后的结果 feed 进 inv 网络(其实就是反卷积构成的decoder)。

在这里插入图片描述
inv 网络的目标函数是 :
在这里插入图片描述
其中 I I I 是经过上述风格迁移流程后得到的风格迁移结果, ϕ ( I ) \phi(I) ϕ(I) 是将得到的结果再通过 vgg 进行一次 encoder ,将得到的特征图与 style-swap 的结果计算特征重构损失。 后面的 l t v l_{tv} ltv 如下式定义:
在这里插入图片描述
从式子的下标可以理解:就是 I I I 相邻上下的像素点之间的均方差和相邻左右的像素点之间的均方差之和。最小化这个损失,可以使得图片像素过渡得自然,更接近自然图像。

最后为了让 inv 网络可以对任意的目标图像直接转换,需要训练 inv 网络,目标函数如下:
在这里插入图片描述
公式(6)和(4)其实是一样的意思,将 H H H 理解为 style-swap 后的结果, f f f 理解为 inv 网络。论文采用了COCO 作为内容数据集和 Wikiart 作为风格数据集来训练该网络,一旦训练完成,就可以实现快速的风格迁移。

3 Code

官方实现(torch):https://github.com/rtqichen/style-swap
非官方实现(pytorch):https://github.com/irasin/Pytorch_Style_Swap

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值