热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

风格迁移应用_图像风格迁移

​不知道大家使用过一款叫Prisma的图片处理App没有,Prisma通过人工智能把你手机中那些普通的照片模仿出著名艺术家画作的风格。其背后的原理,就是

b834b63031872342d90ede0f3c08bcdb.png

​不知道大家使用过一款叫Prisma的图片处理App没有,Prisma通过人工智能把你手机中那些普通的照片模仿出著名艺术家画作的风格。

8d13418b91debced47495d5d6429a4e4.png

其背后的原理,就是通过神经网络学习某个图像的风格,然后再将这种风格应用到其他图像上。

902566b7d3aef1567e0e02b9d4e8e461.png

f5a4c38b29f487953c575ba8ecb3da25.png

f701ffa2ec689f62d2cb8133975ffc39.png

这个就是图像风格迁移,直观来看,就是将一副图片的“风格”转移到另一幅图片,而保持它的内容不变。一般我们将内容保持不变的图称为内容图,content image,把含有我们想要的风格的图片,如梵高的星空,称为风格图,style image。

技术细节

其实要实现的东西很清晰,就是需要将两张图片融合在一起,这个时候就需要定义怎么才算融合在一起。首先需要的就是内容上是相近的,然后风格上是相似的。这样来我们就知道我们需要做的事情是什么了,我们需要计算融合图片和内容图片的相似度,或者说差异性,然后尽可能降低这个差异性;同时我们也需要计算融合图片和风格图片在风格上的差异性,然后也降低这个差异性就可以了。这样我们就能够量化我们的目标了。

  • 对于内容的差异性我们该如何定义呢?其实我们能够很简答的想到就是两张图片每个像素点进行比较,也就是求一下差,因为简单的计算他们之间的差会有正负,所以我们可以加一个平方,使得差全部是正的,也可以加绝对值,但是数学上绝对值会破坏函数的可微性,所以大家都用平方,这个地方不理解也没关系,记住普遍都是使用平方就行了。

107cc5c16f955604699dddc3e3eb19a0.png
  • 对于风格的差异性我们该如何定义呢?这才是一个难点。这也是这篇文章提出的创新点,引入了Gram矩阵计算风格的差异。我们知道一张图片通过卷积网络之后可以得到一个特征图,Gram矩阵就是在这个特征图上面定义出来的。每个特征图的大小一般是 M*N*C 或者是 C*M*N 这种大小,这里C表示的是厚度,放在前面和后面都可以,M*N 表示的是一个矩阵的大小,其实就是有 C 个 M*N 这样的矩阵叠在一起。

4af5dd4f351ac0bddb9509e2a994aa1a.png

Gram矩阵是如何定义的呢?首先Gram矩阵的大小是由特征图的厚度决定的,等于 C*C,那么每一个Gram矩阵的元素,也就是 Gram(i, j) 等于多少呢?先把特征图中第 i 层和第 j 层取出来,这样就得到了两个 M*N的矩阵,然后将这两个矩阵对应元素相乘然后求和就得到了 Gram(i, j),同理 Gram 的所有元素都可以通过这个方式得到。这样 Gram 中每个元素都可以表示两层特征图的一种组合,就可以定义为它的风格。然后风格的差异就是两幅图的 Gram 矩阵的差异,就像内容的差异的计算方法一样,计算一下这两个矩阵的差就可以量化风格的差异。Gram计算的实际上是两两特征之间的相关性,哪两个特征是同时出现的,哪两个是此消彼长的等等,同时,Gram的对角线元素,还体现了每个特征在图像中出现的量,因此,Gram有助于把握整个图像的大体风格。

1a89f1a591359421a12e185752e40720.png
  • 有了图像风格和内容的表示,我们就可以进行图像风格转移了。快速风格迁移的网络结构包含两个部分。一个是“生成网络”(原文中为Transformation Network),一个是“损失网络”(Loss Network)。生成网络接收一个图片当做输入,然后输出也是一张图片(即风格迁移后的结果)。如下图,左侧是生成网络,右侧为损失网络:

49f61b0add3f2bdb10e74d81b796e53c.png

风格迁移效果

902566b7d3aef1567e0e02b9d4e8e461.png

f5a4c38b29f487953c575ba8ecb3da25.png

f701ffa2ec689f62d2cb8133975ffc39.png

c5346b3c81796d44fb4c6d1e50d51d66.png

fb3bbc5a67488e231c5faa870e032577.png

015eb8c138a18033d93b3a25e166b9a8.png

07b4042dd242c3a526b0b3459fee49cb.png

8de56401c8a1461380992524379b38c6.png

6ec6c63e33ab246f8120017cbc35b193.png


推荐阅读
  • 本文探讨了图像标签的多种分类场景及其在以图搜图技术中的应用,涵盖了从基础理论到实际项目实施的全面解析。 ... [详细]
  • 三星Galaxy S8/S8+即将登场,全面解析新旗舰
    3月29日晚11点,备受瞩目的三星Galaxy S8/S8+将正式发布。作为三星在Note 7爆炸事件后的重磅产品,S8/S8+不仅承载着恢复消费者信心的重任,其创新的设计和技术也备受期待。 ... [详细]
  • 2017年人工智能领域的十大里程碑事件回顾
    随着2018年的临近,我们一同回顾过去一年中人工智能领域的重要进展。这一年,无论是政策层面的支持,还是技术上的突破,都显示了人工智能发展的迅猛势头。以下是精选的2017年人工智能领域最具影响力的事件。 ... [详细]
  • 本文档旨在帮助开发者回顾游戏开发中的人工智能技术,涵盖移动算法、群聚行为、路径规划、脚本AI、有限状态机、模糊逻辑、规则式AI、概率论与贝叶斯技术、神经网络及遗传算法等内容。 ... [详细]
  • 本文探讨了亚马逊Go如何通过技术创新推动零售业的发展,以及面临的市场和隐私挑战。同时,介绍了亚马逊最新的‘刷手支付’技术及其潜在影响。 ... [详细]
  • 基于2-channelnetwork的图片相似度判别一、相关理论本篇博文主要讲解2015年CVPR的一篇关于图像相似度计算的文章:《LearningtoCompar ... [详细]
  • 随着技术的发展,黑客开始利用AI技术在暗网中创建用户的‘数字孪生’,这一现象引起了安全专家的高度关注。 ... [详细]
  • HTML5实现逼真树叶飘落动画详解
    本文详细介绍了如何利用HTML5技术创建一个逼真的树叶飘落动画,包括HTML、CSS和JavaScript的代码实现及优化技巧。 ... [详细]
  • 利用Java与Tesseract-OCR实现数字识别
    本文深入探讨了如何利用Java语言结合Tesseract-OCR技术来实现图像中的数字识别功能,旨在为开发者提供详细的指导和实践案例。 ... [详细]
  • 本文介绍了如何在VB.NET版机房收费系统中实现数据从DataGridView导出至Excel的功能,包括环境配置、代码实现及常见问题解决方法。 ... [详细]
  • 回顾与学习是进步的阶梯。再次审视卷积神经网络(CNNs),我对之前不甚明了的概念有了更深的理解。本文旨在分享这些新的见解,并探讨CNNs在图像识别和自然语言处理等领域中的实际应用。 ... [详细]
  • 强人工智能时代,区块链的角色与前景
    随着强人工智能的崛起,区块链技术在新的技术生态中扮演着怎样的角色?本文探讨了区块链与强人工智能之间的互补关系及其在未来技术发展中的重要性。 ... [详细]
  • 大数据时代的机器学习:人工特征工程与线性模型的局限
    本文探讨了在大数据背景下,人工特征工程与线性模型的应用及其局限性。随着数据量的激增和技术的进步,传统的特征工程方法面临挑战,文章提出了未来发展的可能方向。 ... [详细]
  • 本文详细介绍了 TensorFlow 的入门实践,特别是使用 MNIST 数据集进行数字识别的项目。文章首先解析了项目文件结构,并解释了各部分的作用,随后逐步讲解了如何通过 TensorFlow 实现基本的神经网络模型。 ... [详细]
  • 吴恩达推出TensorFlow实践课程,Python基础即可入门,四个月掌握核心技能
    量子位报道,deeplearning.ai最新发布了TensorFlow实践课程,适合希望使用TensorFlow开发AI应用的学习者。该课程涵盖机器学习模型构建、图像识别、自然语言处理及时间序列预测等多个方面。 ... [详细]
author-avatar
无正道
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有