Gatys - Image Style Transfer 论文阅读笔记
Abstract
- 前人的缺陷:缺乏对图像语义的代表,难以将图像内容和风格区分开来
- 本文使用CNN的图像表示提取图像信息
A Neural Algorithm of Artistic Style
架构图象的内容和风格分离并重新组合
Introduction
- 探究高性能神经网络学习的特征表示是如何独立处理和操作自然图像的内容和风格的
- A Neural Algorithm of Artistic Style - 通过CNN得到的特征表示限制的纹理迁移算法
2. Deep image representations
- 使用VGG生成结果
- 标准化网络-将每一个卷积层的激活函数的平均值设为1
- 不用全连接层
- 发现使用平均池化比最大池化效果更好一点
2.1 Content representation
输入图像在CNN的每一层编码
有$N_l个$不同模板的层有$N_l$个feature map
- 每个feature map的size为feature map的长乘宽
层$l$的结果可以被存储到矩阵中$F^l\in R^{N_l\times M_l}$
其中$F^l_{ij}$是第i个模板在位置j在$l$层的activation
将编码在每个不同层的图像信息可视化
- 可以在白噪声图像使用梯度下降在白噪声图像来找到一个与原图特征相应匹配的图像
$\vec p$和$\vec x$是原图和生成图像,$P^l$和$F^l分别是他们的.在l层相应的特征表示
两个特征表示的损失函数
- $$
L_{content}(\vec p, \vec x, l) = \frac{1}{2}\sum_{i,j}(F^l_{ij}-P^l_{ij})^2
$$
- $$
损失函数相对于$l$层激活的导数为:
$$
\frac{\partial L_{content}}{\partial F^l_{ij}} = \begin{cases}
(F^l - P^l){ij} & F^l{ij} >0\
0 &F_{ij}^l<0
\end{cases}
$$据此对于图像$\vec x$的梯度可以通过标准误差反向传播计算出来 => 因此我们可以改变最初随机图像$\vec x$直到生成对于CNN的某一层产生和原图$\vec p$一样的响应
CNN是在图像识别上训练的,图像的表示使得目标信息在处理层上面愈加明显=> 在网络的处理层,输入图像转变为representations对真正的图像内容越来越敏感,但是对于图像的外观相对保持不变了
网络的月高层获得目标的更高层内容以及在输入图像中的排列,但是不限制重构过程中的像素值
因此参考网络高层的特征响应作为内容表示
2.2 Style Representation
特征空间可以在网络的任何一层上建立特征空间,包括不同模板相应之间的关系 <= 由Gram矩阵给出,$G^l_{ij}$为向量化的feature maps i和j在l层的内积:
$$
G^l_{ij} = \sum_k F^l_{ik}F^l_{jk}
$$通过涵盖不同层的特征关联,可以获得输入图片的稳定多维表示,获得其纹理信息,但不是global arrangement
通过在网络的不同层生成的风格特征空间可视化风格特征空间获得的信息
使用梯度下降从一个白噪声图像,最小化和原图的Gram矩阵的mean-squared
计算
$\vec a$和$\vec x$是原图和生成图像,$A^l$和$G^l$是相应的层l风格表示:
l层loss: $E_l = \frac{1}{4N^2_lM^2_l}\sum_{i,j}(G^l_{ij} - A^l_{ij})^2$
总风格损失:$L_{style}(\vec a, \vec x) = \sum^L_{l=0}w_lE_l$
- $w_l$是每层对于总损失贡献的权重因子
$E_l$对于$l$层的activation的导数为:
$$
\frac{\partial E_l}{\partial F^l_{ij}} = \begin{cases}\frac{1}{N^2_lM^2_l}((F^l)^T(G^l-A^l)){ji} & if F^l{ij} > 0 \
0 & if F^l_{ij} < 0
\end{cases}
$$$E_l$对于$\vec x$的梯度可以通过标准差反向传播直接计算
2.3 Style transfer
风格图像:过左侧网络,得到风格特征$A^L$
内容图像:过右侧网络,得到内容图像$F^l$
目标图像:白噪声$\vec x$过网络
- 风格损失:计算和风格网络每一层的误差,并求和
- 内容损失:计算和特定层的损失
- 两种损失线性组合得到总损失
最小化的损失函数:
- $$
L_{total}(\vec p, \vec a, \vec x) = \alpha L_{conent}(\vec p, \vec x) + \beta L_{style}(\vec a, \vec x)
$$
- $$
损失函数对于输入像素$\vec x$的梯度可以被用作一些数值优化策略的输入??
在计算风格图像的特征之前,缩放风格图像为和内容图像相同的大小
3 Results
- CNN中对于图像的内容和风格表示是完全可分的
- => 可以独立处理二者之一产生新的图像
3.1 Trade-off between content and style matching
- 合成图像无法很好地同时满足风格和内容的相似性,但是可以通过调节$L_{total}$的参数控制生成图片的侧重
3.2 Effect of different layers of the Convolutional Neural Network
Style
- 另一个合成图像中的重要因子为对于进行内容和风格表示匹配的layers的选择
- 风格表示是多维的,包含网络的很多层
- 层级的数目和位置决定了那种维度的风格匹配,导致了不同的视觉体验
- 发现在较高层匹配风格表示保留了较多局部图片结构 => 平滑连续的视觉体验
- => 较好的图片通常在网络高层匹配风格表示
Content
- 网络中高层层级提取内容,会使得风格化更好。像素级信息不是很多,一些内容高尚的细节会被弱化以更好地风格化
3.3 Initialization of gradient descent
- 生成图像的输入无论设置为风格图像还是内容图像,对于输出的效果影响不大;反而初始化为白噪声可以使得产生的图片效果更加多样
3.4 Photorealistic style transfer
- 可以应用到任何图像之间的风格迁移
!!!可以为不同种风格迁移调参
- 如果是两幅照片,主要迁移了色彩和光影
4 Discussion
limiting factor
- 合成图像的分辨率,CNN的优化随着像素个数线性增长 => 处理速度与图像分辨率十分相关
low-level noise
- 主要在风格图像和内容图像都为照片的时候会表现得比较明显
- 可以选择去噪的后处理