0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

用TensorFlow.js在浏览器中部署可进行任意图像风格迁移的模型

zhKF_jqr_AI 来源:未知 作者:李倩 2018-11-22 09:01 次阅读

风格迁移一直是很多读者感兴趣的内容之一,近日,网友Reiichiro Nakano公开了自己的一个实现:用TensorFlow.js在浏览器中部署可进行任意图像风格迁移的模型。让我们一起去看看吧!

GitHub:github.com/reiinakano/arbitrary-image-stylization-tfjs

小工具:reiinakano.github.io/arbitrary-image-stylization-tfjs/

迁移效果

所谓风格迁移,指的是神经网络通过迁移算法,用另一种风格(通常是画)重新“绘制”一张图像中的内容(通常是照片)。现如今,能在浏览器中实时进行风格迁移的项目有很多,但它们中的大多数都需要针对每种风格训练独立的神经网络,所以用户的选择大大受限。

Reiichiro Nakano提供的模型突破了以往模型的局限,它能将任何风格图像分解为表示其风格的100维向量,然后把这些向量结合照片信息一起馈送到另一个神经网络,以产生最终的风格化图像。

首先,我们来看看这个风格迁移模型的具体效果:

一种风格下的风格迁移

两种风格下的风格迁移

演示网站

上图是小编在作者开发的演示网站里测试的结果,感兴趣的读者可以前去一试。可以发现,虽然谈不上特别令人惊艳,但迁移的整体效果还是非常不错的,更可贵的是,它支持任意图像、任意风格的迁移,允许手动上传图片。

如果硬要说有什么不足,那就是网站的延迟有点高(选取图像/风格后无法及时跳转,也许是水管不行)。此外,在对构图空旷的图像(如加州金门大桥)进行风格迁移时,我们发现粗粝线条风格(如bricks)容易弱化主体线条,使迁移后的图像几乎没有内容。

技术来源

为了实现这个项目,作者参考的是2017 BMVC的一篇Oral Paper:Exploring the structure of a real-time, arbitrary neural artistic stylization network(arXiv:1705.06830)。

这篇论文结合灵活的风格迁移技术和快速网络传输,提出了一种允许使用任何内容/风格图像对进行实时风格化的网络。在包含约80,000幅画作的语料库上经过训练后,论文模型不仅在训练过的风格上表现出色,还能够推广到从未见过的风格和照片。也就是说,这是一个能以完全无监督的方式学习平滑的、结构丰富的嵌入空间,以及与风格绘画相关联的语义信息的模型。

一般来说,风格迁移模型的输入有两个,一是包含图像内容的照片c,二是包含图像风格的绘画s。这类算法假定图像的内容和风格可以定义如下:

如果模型从两幅图像中提取到的高级特征欧氏距离接近,则两个图像的内容相似。

如果模型从两幅图像中提取到的低级特征有相同的空间统计,则两个图像的风格相似。

根据这两个定义,风格迁移的优化目标可以表示为:

其中Lc(x, c)和Ls(x, s)分别是内容和风格的损失函数,λs是风格损失函数经拉格朗日乘数加权后表示的相对权重。

论文作者改进了这一做法。他们在风格迁移网络前添加了一个预测网络P(·),它以任意风格的图像作为输入,并预测归一化常数的嵌入向量→S,这样做的优势是模型能把学到的迁移方法推广到其他图像上。

论文模型架构

从本质上来说,这个模型直接学习的是从风格图像到风格参数的映射。在Kaggle Painter By Numbers(内容)和Describable Textures Dataset(风格)两个数据集上进行了训练后,模型输出的风格迁移效果如下图(左)所示:

网络是联合训练的,但它只用少量训练图像就模拟了多种风格,这意味着我们没有必要为每种风格单独设定拉格朗日乘数λs。 也就是说,同一个损失加权就足以在所有绘画风格和纹理上产生合理的结果。上图(右)则证明,该模型能够预测以前从未见到的风格和纹理样式,它们在质量上与训练集样本的风格和纹理几乎一致。

开源答疑

在GitHub上,开源项目的Reiichiro Nakano向开发者重点提了一些注意事项。

问:我的数据安全吗?你会看到我提交的图片吗?

当你在演示网站里测试风格迁移时,你的数据和图片只会在你自己的计算机上留下痕迹。事实上,这也是在浏览器中运行神经网络的主要优势之一。我只是把模型和代码发给你,由你在自己的浏览器上运行模型。

问:如果我想下载,模型一共多大?

风格神经网络的大小是9.6MB,迁移网络大概有7.9MB。它们在任何风格上都有效,所以你只用下一次就可以了。

问:你的模型和论文模型一模一样吗?

不完全一样,论文的风格网络用的是Inception-v3(大约96.2MB),太大了。所以在把模型移植到浏览器上之前,我用MobileNet-v2从预训练的Inception-v3网络中提取了知识,把大小缩小到了论文的1/10。

问:风格组合的具体方法是什么?

由于风格网络可以把每种风格映射成100维的风格向量,所以我们只需对内容和风格图像的风格向量进行加权平均,把计算结果作为迁移网络的输入,即可获得新风格向量。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 图像
    +关注

    关注

    2

    文章

    1063

    浏览量

    40029
  • 浏览器
    +关注

    关注

    1

    文章

    968

    浏览量

    34364
  • 函数
    +关注

    关注

    3

    文章

    3859

    浏览量

    61297

原文标题:【实现】在浏览器中快速进行任意风格迁移

文章出处:【微信号:jqr_AI,微信公众号:论智】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    tflite接口调用tensorflow模型进行推理

    摘要本文为系列博客tensorflow模型部署系列的一部分,用于实现通用模型部署。本文主要实现用tflite接口调用
    发表于 12-22 06:51

    如何使用TensorFlow将神经网络模型部署到移动或嵌入式设备上

    使用TensorFlow的transform_graph工具生成一个优化的8位模型,该模型效率更高,但精度较低。 4.设备上对优化的模型
    发表于 08-02 06:43

    TensorFlow发表推文正式发布TensorFlow v1.9

    其中有两个案例受到了大家的广泛关注,这个项目是通过 Colab 在 tf.keras 中训练模型,并通过TensorFlow.js浏览器中运行;最近在 JS 社区中,对这些相关项目
    的头像 发表于 07-16 10:23 2894次阅读

    利用TensorFlow.js,D3.js 和 Web 的力量使训练模型的过程可视化

    TensorFlow.js 将机器学习引入 JavaScript 和 Web。 我们将利用这个很棒的框架来构建一个深度神经网络模型。这个模型将能够按大联盟裁判的精准度来称呼好球和坏球。
    的头像 发表于 08-08 14:24 6645次阅读

    如何使用TensorFlow.js构建这一系统

    TensorFlow.js团队一直在进行有趣的基于浏览器的实验,以使人们熟悉机器学习的概念,并鼓励他们将其用作您自己项目的构建块。对于那些不熟悉的人来说,TensorFlow.js是一
    的头像 发表于 08-19 08:55 3334次阅读

    基于tensorflow.js设计、训练面向web的神经网络模型的经验

    你也许会好奇:为什么要在浏览器里基于tensorflow.js训练我的模型,而不是直接在自己的机器上基于tensorflow训练模型?你当然
    的头像 发表于 10-18 09:43 3862次阅读

    TensorFlow.js浏览器中构建了一个使用任意图像进行风格化的demo

    了10倍。所以作者认为distillation这种技术被低估了,它可以为浏览器带来一些很酷的ML功能,因为很多模型由于太大而无法在资源有限的环境中进行部署
    的头像 发表于 11-22 09:33 3402次阅读

    一种开源的机器学习模型,可在浏览器中使用TensorFlow.js对人物及身体部位进行分割

    人物分割有何用途?这项技术可广泛应用于多个多领域,包括增强现实、摄影编辑以及图像或视频的艺术效果等。具体应用由您决定!去年,当我们推出 PoseNet(首个能够在浏览器中使用简易网络摄像头估测身体
    的头像 发表于 02-26 16:33 5471次阅读

    ​多模态风格迁移——生成更加美丽动人的风格图像

    基于卷积的图像风格迁移主要利用两种方法来对特征进行表示,一种假设全局具有相同分布并用全局特征来表风格,另一种则基于
    的头像 发表于 05-01 14:11 4408次阅读

    TensorFlow.js制作了一个仅用 200 余行代码的项目

    我们先来看一下运行的效果。下图中,上半部分是原始视频,下半部分是使用 TensorFlow.js 对人像进行消除后的视频。可以看到,除了偶尔会在边缘处留有残影之外,整体效果还是很不错的。
    的头像 发表于 05-11 18:08 5425次阅读

    如何基于 ES6 的 JavaScript 进行 TensorFlow.js 的开发

    从头开发、训练和部署模型,也可以用来运行已有的 Python 版 TensorFlow 模型,或者基于现有的模型
    的头像 发表于 10-31 11:16 2848次阅读

    CNN到底是怎么回事?

    它用TensorFlow.js加载了一个10层的预训练模型,相当于在你的浏览器上跑一个CNN模型,只需要打开电脑,就能了解CNN究竟是怎么回事。
    的头像 发表于 06-28 14:47 3325次阅读
    CNN到底是怎么回事?

    基于OpenCV的DNN图像风格迁移

    /deep-photo-styletransfer 项目,需要安装 CUDA、pytorch、cudnn等等,配置能花一天的时间。 不过最近我发现一个非常好的开源应用项目,那就是基于OpenCV的DNN图像风格迁移。你只需要安装
    的头像 发表于 10-30 10:03 233次阅读

    js文件可以直接浏览器运行吗

    JS文件可以直接在浏览器中运行。JavaScript(简称JS)是一种广泛用于浏览器端编程的脚本语言。作为一种解释性语言,JS不需要编译,而
    的头像 发表于 11-27 16:45 1463次阅读

    js脚本怎么在浏览器中运行

    浏览器中运行JavaScript脚本是一种常见的方式,因为JavaScript是一种在Web浏览器中执行的脚本语言。下面是一个详细的,最少1500字的文章,介绍如何在浏览器中运行
    的头像 发表于 11-27 16:46 1378次阅读