Pytorch: 图像风格迁移
Copyright: Jingmin Wei, Pattern Recognition and Intelligent System, School of Artificial and Intelligence, Huazhong University of Science and Technology
本教程不商用,仅供学习和参考交流使用,如需转载,请联系本人。
Reference
Image Style Transfer Using Convolutional Neural Networks
A Neural Algorithm of Artistic Style
Perceptual Losses for Real-Time Style Transfer and Super-Resolution
图像风格迁移的主要任务是将图像的风格迁移到内容图像上,使得内容图像也具有一定的风格。
风格图像可以是艺术家的一些作品,包含艺术家的风格,也可以是经典的具有特色的照片,具有鲜明色彩。而内容图像通常来自现实世界。
利用风格迁移可以将内容图像处理为想要的风格。
常用的图像风格迁移方式
固定风格固定内容的普通风格迁移
参考文章:
Image Style Transfer Using Convolutional Neural Networks
A Neural Algorithm of Artistic Style
其思路为,把图片当做可以训练的变量,通过不断优化图片的像素值,降低其与内容图片的内容差异,并降低其与风格图片的风格差异,通过对卷积网络的多次迭代训练,能够生成一幅具有特定风格的图像。并且内容与内容图片的内容一致,生成图片的风格与风格图片的风格一致。
基于 VGG16 网络中卷积层的图像风格迁移如下: a ⃗ \vec{a} a 为输入的风格图像, p ⃗ \vec{p} p 为输入的内容图像, x ⃗ \vec{x} x 则是表示有随机噪声生成的图像风格迁移后的图像。 L c o n t e n t \mathcal{L}_{content} Lcontent 表示图像的内容损失, L s t y l e \mathcal{L}_{style} Lstyle 表示图像的风格损失, α \alpha α 和 β \beta β 分别表示内容损失权重和风格损失权重。
使用较深层次的卷积计算得到的特征映射能够较好地表示图像内容,而较浅层次的卷积计算得到的特征映射能够较好地表示图像的风格,基于此就能通过不同卷积层的特征映射来分别度量,目标图像在风格上,以及内容上和风格图像的差异。
两个图像的内容相似性度量主要是通过在 conv4_2 层上特征映射的相似性,作为内容损失
L c o n t e n t = 1 2 ∑ i , j ( F i j l − P i j l ) 2 \mathcal{L}_{content} = \frac{1}{2}\sum_{i,j}(F_{ij}^l-P_{ij}^l)^2 Lcontent=21i,j∑(Fijl−Pijl)2
l l l 表示特征映射的层数, F F F 和 P P P 分别是目标图像和诶荣图像在读音卷积层输出的特征映射。
两个图像的风格损失并不是直接通过特征映射来比较的,而是计算 Gram 矩阵先计算出图像的风格,在进行比较。计算特征映射的 Gram 矩阵则是先将其特征映射变换为一个列向量,而 Gram 矩阵则使用这个列向量乘以其转置获得,它能更好地表示图像的风格。所以输入风格图像 a ⃗ \vec{a} a 和目标图像 x ⃗ \vec{x} x 使用 A l A^l Al 和 G l G^l Gl 分别表示它们在 l