这是2019年CVPR的一篇风格迁移的论文,通过给内容图像添加attention,使得风格能更好的和内容的对应区域匹配上。同时还使用多尺度特征交换,使得不同层级风格融合不同的特征。目前的风格迁移存在着引入扭曲风格、产生不足够风格等问题。attention模块可以关注内容图像的显著性特征,同时在多个特征上保持attention关注的一致性。多尺度交换模块可以产生多种风格。整体结构图如下所示:
可以看出来核心模块是自attention模块、多尺度交换模块和多击融合模块。下面依次简要说明这三者.
Self-Attention Autoencoder
该模块的意义在于,捕捉内容区域之间的关联性,获得内容特征的显著性区域。获得特征$f_x$在第i个位置的attention如下所示:
其中$\alpha_{ij}$反映的是两个区域之间的关联性,而不仅仅是相邻的区域。flat是在特征尺度上做的操作,其中
其中e可以表示为:
所以最后得到的A其表示为$A_x = (a_x^1,…,a_x^N)^T$,$\Theta$是可学习的参数(1x1卷积表示),N是HW,最终的输出表示为:
然后将该输出送入到decoder,获得最终的每个位置的方差被第一项表示,表示图像的显著性区域。重建图像表示为$\hat{x}=\phi_d(O_x)$,重建loss表示为特征和像素层面上的L2 loss,如下:
其中特征层面上在VGG上进行操作,同时在attention上增加稀疏性去使得attention关注更小的区域,如下所示:
最后还有TV loss,获得attention的loss是上述三个loss的和。
Multi-scale Style Swap
风格交换步骤里,更大的patch会有更大的感受野引入更多的style,但是patch的相对大小又受到了scale的限制,所以这里限制了patch的大小。改变style的尺度,从而引入多尺度style stroke。这里得到多尺度的style 的特征通过多尺度白化获得:
该操作是在多尺度上做放缩,最后将结果和内容特征做style交换,表示为:
Multi-stroke Fusion
attention模块可以强调$Ac$里的非0区域,其后面是一个高斯卷积核,可以进一步控制显著性区域。归一化后获得$\hat{A}_c$,此外除了k个交换的特征$f{cs}^k$,这里还引入了白化的$\hat{f}c$作为$f{cs}^0$,所以最后多尺度stroke融合有k+1个特征。可以用来对attention map做K+1聚类,随后将交换style的内容特征图在聚类结果的attention map下引导:
权重图表示为:
其中$D_k = |\hat{A}^c - m_k|$,$m_k$是聚类中心,所以D表示距离聚类中心的绝对距离,1-D表示每个stroke size对合成特征的贡献。
这篇论文这几个attention还有权重神马的表示形式很有意思,可以用来借鉴。