目标
运用卷积神经网络将某张图的风格应用到另一张图像上。
输入
内容图像 + 样式图像
方法
基于卷积神经网络的样式迁移方法。
- 初始化合成图像,一般初始化为内容图像(合成图像即为网络迭代更新的变量)。
- 选择一个已经预训练好的模型来抽取图像特征(其模型参数无需再训练)。
- 选择2中模型的某些层的输出分别作为内容特征或者样式特征。
- 确定损失函数,包括内容损失(Content Loss)、样式损失(Style Loss)和总变差损失(Total Variation Loss)。
- 通过正向转播计算样式迁移损失函数。
- 通过反向传播迭代更新模型参数,更新合成图像。
抽取特征
可用VGG网络的某些层的输出抽取图像的内容特征和样式特征。一般离输入层越近的卷积层输出的图像细节信息越多,反之远的层输出的全局信息越多。在这里选择VGG的第四个卷积块的最后一个卷积层作为内容层,选择VGG的每一个卷积块的第一个卷积层作为样式层,来匹配局部和全局的样式。
损失
内容损失:使合成图像与内容图像在内容特征上相近,通过平方误差函数衡量合成图像与内容图像在内容特征上的差异。
样式损失:使合成图像与样式图像在样式特征上相近,通过平方误差函数衡量合成图像与样式图像在样式上的差异。
假设样式层输出的样本数为1,通道数为
c
c
c,高和宽分别为
h
h
h和
w
w
w,我们可以把输出变换成
c
c
c行,
h
h
h*
w
w
w列的矩阵
X
\mathbf{X}
X,其对应的Gram矩阵
X
X
T
\mathbf{XX}^T
XXT,在
R
c
∗
c
\mathbf{R}^{c*c}
Rc∗c的空间上,其中
x
i
j
x_{ij}
xij为通道
i
i
i和
j
j
j样式特征向量
x
i
\mathbf{x}_i
xi和
x
j
\mathbf{x}_j
xj的内积,它表达了通道
i
i
i和通道
j
j
j样式特征的相关性。所以Gram矩阵可以表达样式层输出的样式。
总变差损失:由于更新得到的合成图像可能有大量高频噪声点,即过亮或者过按的像素点。而加入总变差损失有助于减少合成图像上的噪声。假设xi,j表示坐标(i,j)的像素值,降低总变差损失,使得合成图像临近的像素值尽可能相似。其计算公式如下:
∑
i
,
j
∣
x
i
,
j
−
x
i
+
1
,
j
∣
+
∣
x
i
,
j
−
x
i
,
j
+
1
∣
\sum_{i,j}|x_{i,j} - x_{i+1,j}| + |x_{i,j} - x_{i,j+1}|
i,j∑∣xi,j−xi+1,j∣+∣xi,j−xi,j+1∣
摸鱼导致时间要不够了,主要是我远程写代码的电脑没开QAQ,PyTorch实践下期再写吧,kk