图像风格迁移1 A Neural Algorithm of Artistic Style

论文地址
https://arxiv.org/pdf/1508.06576v2.pdf

所谓图像风格迁移,是指利用算法学习著名画作的风格,然后再把这种风格应用到另外一张图片上的技术。著名的国像处理应用Prisma是利用风格迁移技术,将普通用户的照片自动变换为具有艺术家的风格的图片。

先回忆一下图像识别模型VGGNet。
事实上,可以这样理解VGGNet的结构:前面的卷积层是从图像中提取“特征”,而后面的全连接层把图片的“特征”转换为类别概率。其中,VGGNet中的浅层(如conv1_1,conv1_2),提取的特征往往是比较简单的(如检测点、线、亮度),VGGNet中的深层(如conv5_1、conv5_2),提取的特征往往是比较复杂(如有无人脸或某种特定物体)

在这里插入图片描述
具体来说,风格迁移使用卷积层的中间特征还原出对应这种特征的原始图像。如图7-2a所示,先选取衣服原始图像,经过VGGNet计算后得到各种卷积层特征。接下来,根据这些卷积层的特征,还原出对应这种特征的原始图像。图像b、c 、d 、e 、f 分别为使用卷积层conv1_2、conv2_2 、conv3 _2 、conv4_2 、conv5_2 的还原图像。可以发现:浅层的还原效果往往比较好,卷积特征基本保留了所高原始图像中形状、位置、颜色、纹理等信息; 深层对应的还原图像丢失了部分颜色和纹理信息,但大体保留原始图像中物体的形状和位置。
在这里插入图片描述
个人理解:
1.准备好一个训练好的VGGnet,去掉全连接层,此时网络浅层可以提取纹理特征,网络深层提取内容特征。
2.准备三张大小一样的图片a(原图) b(风格图) c(白噪声图)
3.分别计算三张图片通过VGGnet后的特征 称为 Fa Fb Fc
4.取网络浅层特征,计算Mse(Fb -FC),称为风格损失,取深层特征,计算Mse(Fc-Fa),称为内容损失
5.总的损失 = 风格损失 + 内容损失
6.反向传播,更新c(白噪声图),保存VGGnet参数不变,整个过程只有c(白噪声图)在不断更新
7.根据新的c重新计算损失,再次更新c

作者的目的是想把艺术大师的名画的画风迁移到普通的图片上,使机器也可以画名画。这就涉及到两方面的图片——画风图片(一般是名画)、内容图片(我们想画的内容)

具体实现的方式用框图表示出来是这样的

在这里插入图片描述
实际操作是通过不带全连接层的vgg网络分别抽取内容图、画风图以及生成图(就是最后你画的“名画”)的特征图,然后分别用内容特征和生成特征图计算内容损失,用画风图和生成图计算风格损失,将两个损失合起来,作为总体损失,用总体损失来计算生成图的梯度然后更新生成图。生成图最初初始化为白噪声图。vgg用imagenet预训练模型。
在这里插入图片描述
作者的意图是想通过CNN分别抽取内容图的特征图、名画的特征图。然后用内容特征图做出目标内容;用画风特征图做出目标画风。根据生成图的内容与目标内容的差异来“画”(优化)内容;用生成图与目标画风的差异来“画”(优化)风格。(下面这句为个人理解)这样一来,上面框图中最上面的网络和最下面的网络实际只跑一次,但中间网络要跑N次,但这N次跑前向和后向,后向不会优化网络参数,只会优化生成图。

特征图可以选择vgg 5个卷积模块中任何一个模块的仁义卷积层的输出,实际画风提取了多个卷积层的输出。内容直接用特征图表示;画风采用每个特征图自己与自己的格拉姆矩阵表示,通常将多个卷积层提取的多个特征图作格拉姆矩阵后叠加。

格拉姆矩阵是计算相关关系的,个人以为计算特征图自己的格拉姆矩阵是提取像素与像素之间的关联,以这种关联性来表示风格。

论文中实际方法是这样的:

2. 实际操练

实际操作过程中,可以分成以下几步
1.图像预处理(内容图、画风图)、生成图占位符定义
2. 预训练模型加载
3. 三张图跑网络
4. 内容损失计算
5. 格拉姆矩阵计算
6. 风格损失计算
7. 损失和梯度汇总
8. 设置迭代计算图
9. 选择生成图优化方法
10.开始迭代

3.损失函数

  • 利用内容损失还原图像内容
  • 利用风格损失还原图像风格

以上是原始的图像风格迁移的基本原理。事实上,原始图像迁移的速度非常慢,在CPU上生成一张图片需要数十分钟甚至几个小时,即使在GPU上也需要数分钟才能生成一张较大的图片,这大大限制了这项技术的使用场景。速度慢的原因在于,

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值