前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用python 6步搞定从照片到名画,你学你也可以(附视频)

用python 6步搞定从照片到名画,你学你也可以(附视频)

作者头像
AI研习社
发布2018-03-19 16:22:25
1.2K0
发布2018-03-19 16:22:25
举报
文章被收录于专栏:AI研习社AI研习社

近年来,机器学习的进步使我们仅用几行代码就能生成惊为天人的艺术作品。如果可以将艺术作品的原型设计速度提高100倍,让用户真正地与创作媒介合为一体,效果会怎么样呢?

如果我们可以用机器学习的模式来扩展生物学习的模式,那么机器显然不是我们的艺术竞争对手,而是提高我们艺术创造力的途径。

本期,Siraj将教大家通过在Keras中用TensorFlow后端编写Python脚本,把原图像变成任意艺术家的风格,从而实现风格迁移

【雷锋字幕组】招募进行时

我们是一个由海内外优秀开发者组成的志愿者团队,致力于经典机器学习课程及AI前沿学术成果传播,有着完善的入组学习机制和丰富的资源福利。如果你热衷于AI技术学习和分享,那你还在等什么?快来加入我们吧!欢迎添加组长微信 jadelover11 加入字幕组~

1. 图像的张量表示

要用的一幅原图以及一幅风格图,将原图进行风格转化:

首先将图片输入神经网络,将它们转换为同一数据格式,Keras后端TensorFlow的变量函数等价于tf.variable。该参数将表示转换为数组的图像,然后我们将对风格图像执行相同的操作,创造出一个以后可以存储最终结果的组合图像,然后使用占位符用给定的宽度和高度初始化。

2. 将三张图片合并到一个Keras张量作为输入

使用 concatenate 连接函数执行此操作。

3. 用3个图像作为输入创建VGG16网络

将输入设置为新创建的张量,并将权重设置为imagenet,设置include_top = False。

VGG16是由牛津大学视觉几何团队创建的16层卷积网络,赢得了2014年的ImageNet大赛。他们的想法是对数千个不同图像进行图像分类的预先训练的卷积网络。

已经知道如何对图像中包含的信息进行编码,它在每一层都可以通过学习过滤器来检测出某些通性,我们将利用过滤器来执行风格转换,而不需要顶部卷积层的原因是因为它的完全连接层和softmax函数,通过压缩维度特征映射来帮助图像进行分类并输出概率。

我们将把风格迁移任务用优化问题表示,用损失函数来衡量想要最小化的误差值。在这种情况下,损失函数可以分解为两个部分:内容损失风格损失。把总损失初始化为零,并将两种损失都添加到其中。

  • 内容损失

可以认为图像包括风格部分和内容部分。我们知道 CNN的学习特征是按照渐进的抽象成分排列的,由于更高层次的特征是更抽象的。所以检测人脸没有那么抽象,可以把它们与内容联系起来,让它们检测构成图像的对象。分别通过网络运行输出图像和参考图像时,将从各自选择的隐藏层中获得一组特征表示,然后测量它们之间的欧氏距离以计算损失。

  • 风格损失

这仍然是一个网络的隐藏层输出的函数,但稍微复杂一些。我们还是通过网络观察两个图像的激活情况,但将添加额外的步骤来度量激活的相关性而不是直接比较原始的激活内容。对于这两个图像 ,我们将在网络中的给定层获取激活的Gram矩阵。它是用一个给定层的所有激活的内积来计算的,这些激活是一组向量 ,每一个向量表示一个特征。

因此 ,这个结果矩阵包含了给定层的每一对特征映射之间的相关性,它代表了在图像的不同部分中共同出现的特征趋势。一旦有了这个 ,就可以将风格损失定义为参考图像和输出图像的Gram矩阵之间的欧氏距离。我们会计算选择的每一层的风格损失的加权总和把它作为总的风格损失。

事实证明,就风格而言,像内容损失那样只用一个单层损失效果并不理想。而当使用多个层时,效果会有所改善。

接下来定义输出图像对于损失的梯度,然后利用梯度来不断地改进输出图像以最小化损失。所以将计算出给定层中损失对激活的导数,以得到梯度来更新输出图像,而不是权重。梯度给出了如何更新输出图像的方向,这样一来原图和风格图像的区别就变小了。

4. 将损失函数合并为单个标量

调用助手类组合损失函数并给出它的模型和,输出图像作为参数。

5. 得到关于损失的输出图像的梯度

利用Keras的梯度函数,在后台转换为tf.gradients。这就给出了一个张量关于一个或多个其他张量的符号梯度。

6. 在输出图像的像素上运行优化算法(L-BFGS)以最小化损失

这与随机梯度下降很相似,但收敛速度更快。把计算出的梯度输入最小化函数,它就能输出结果图像,让我们看看是什么样的!

一些手机应用也在做这个,例如Prisma可让用户在移动设备上选择过滤器,Artisto甚至支持将滤镜应用到视频中。我们还处于使用机器学习创造艺术的早期阶段,所以这个领域仍然有很多机会。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-07-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI研习社 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档