深度学习数据驱动_利用深度学习实现手绘数据可视化的生成

ea6ad001be72bd584d3ac6a730d33380.png

前一段时间,我开发了Sketchify, 该工具可以把任何以SVG为渲染技术的可视化转化为手绘风格。(参考手绘风格的数据可视化实现 Sketchify)

那么问题来了,很多的chart是以Canvas为渲染技术的,那要怎么办?

我拍脑袋一想,为什么不使用深度学习技术来做呢?

63c92ed1c0e30ba6e92eed669973afa4.png

原理很简单:

  • 首先用相同的数据分别生成原始的和手绘风格的数据可视化图数据。
  • 然后利用深度神经网络,使用该数据训练一个模式,输入是数据图,输出的手绘风格的图。这样就可以训练一个生成手绘风格数据可视化的神经网络了。
  • 然后对于任何新的数据图,输入该网络就可以输出一个手绘风格的图。

这听起来就像如何把大象放到冰箱里一样的简单直接。

废话少说,开始干。

准备数据

数据准备要生成一定数量的原始图和手绘图,利用Sketchify就可以完成功能,但是具体如何做到?参考如下架构:

cd62299eecde5572cd6a42b385bc83ce.png
  • VizServer是一个web服务,用nodejs开发,代码在这里https://github.com/gangtao/handyModel/tree/master/vizService
    VizServer使用restify提供RestAPI接口,利用squirrelly.js的模版引擎生成一个包含可视化的Html页面。模版代码在这里
  • DataGen负责生成随机的图表数据,发送请求到VizServer,把返回的网页利用puppeteer的headless browser渲染,并截图。代码在这里
    其中,数据生成部分我是用了mockjs,我发现另一个比较有趣的库可以做类似的功能是casual

训练神经网络

数据准备好以后就可以训练神经网络了。

深度神经网络的训练往往比较消耗资源。最好有相当大的内存和GPU。有俩个免费的选择:

  • google colab

61e00d681b26291b0c17ef01fdf222eb.png


colab就不需要介绍了,大家都很熟悉了,有免费GPU

  • paperspace

88b45efbeefa2a7683c9f4e3e15e1e41.png


paperspace是一个新的深度学习的免费环境,我试用了以下,免费的GPU配置还是很不错的,大家可以试试看。
有了训练环境,导入数据,设一个神经网络,然后就可以训练了。这里省去若干介绍如何加载数据png,转换成tensor或tf的dataset。大家可以参考这些代码。
总之,大象还是没能顺利的放入冰箱,我训练的模型大都输出这样的手绘图。

26fd2dec6b110bd2c56196c1d610ca56.png

离我的设想的输出差距比较大。为什么会失败呢?我想大概有以下这些原因。

  1. 我的神经网络比较简单,受限于硬件,我不可能训练非常复杂的神经网络。
  2. 我的损失函数选择不好
  3. 我的网络不收敛
  4. 我的训练时间不够

总之,完成图像到图像的翻译任务,我们需要更复杂和高深的技术。

图像到图像的翻译

经研究我发现,这个任务是一个典型的图像到图像的翻译,例如前些日子火遍大江南北的deepfake,就是基于图像到图像的翻译。

b2e6eddfa422c6b5ab1f83da2710f1cf.png

有一些专门的的研究针对图像到图像的翻译任务。一个是CycleGan,另一个是pix2pix(Conditional GAN),这两个都是基于GAN(生成对抗网络)的,所以我们先简单讲讲GAN。 (参考 在浏览器中进行深度学习:TensorFlow.js (八)生成对抗网络 (GAN))

469846f90f8e124c0a5fa2989531fc0b.png

如上图所示,GAN包含两个互相对抗的网络:G(Generator)和D(Discriminator)。正如它的名字所暗示的那样,它们的功能分别是:

  • Generator是一个生成器的网络,它接收一个随机的噪声,通过这个噪声生成图片。
  • Discriminator是一个鉴别器网络,判别一张图片或者一个输入是不是“真实的”。它的输入是数据或者图片,输出D表示输入为真实图片的概率,如果为1,就代表100%是真实的图片,而输出为0,就代表不可能是真实的图片。

在训练过程中,生成网络G的目标就是尽量生成真实的图片去欺骗判别网络D。而D的目标就是尽量把G生成的图片和真实的图片分别开来。这样,G和D构成了一个动态的“博弈过程”。在最理想的状态下,G可以生成足以“以假乱真”的图片

CycleGan

https://github.com/junyanz/CycleGAN

efedafe6df7da494abf512bdabdc6cac.png

实现图像间的翻译,借助GAN,应该有两个domain的鉴别器,每个鉴别器单独判断各自domain的数据是否是真实数据。至于generator,图像的翻译需要将domain A的图像翻成domain B的图像,所以generator有点像自编码器结构,只是decoder的输出不是domain A的图像,而是domain B的图像。为了充分利用两个discriminator,还应该有一个翻译回去的过程,也就是说,还有一个generator,它将domain B的数据翻译到domain A。

CycleGAN作者做了很多有意思的实验,包括horse2zebra,apple2orangle,以及风格迁移,如:对风景画加上梵高的风格。

6552cf2c8399a9cfd06cd5457af5fc63.png

Pix2pix

https://github.com/phillipi/pix2pix

pix2pix是基于条件对抗生成网络,关于CGAN和GAN的架构区别可以参考下图:

3793eb5156b704a0dda0ae8a31550f9b.png


CGAN与GAN非常相似,除了生成器和鉴别器均以某些额外信息y为条件。可以通过将鉴别器和生成器作为附加输入层输入来执行这种调节。“ y”可以是任何种类的辅助信息,例如类别标签或来自其他模态的数据。在本教程中,我们将类标签用作“ y”。这里条件信息y是添加的额外条件信息,生成器G和鉴别器D都学会了以某些模式进行操作。例如,在面部生成应用程序的情况下,我们可以要求生成器生成带有微笑的面部,并询问鉴别器特定图像是否包含带有微笑的面部。

9679177c31bc614a49b0ed6c555a3be1.png

作者举了几个图像到图像翻译的应用例子,都挺有趣的。

好了拥有了强大的工具以后,后面的事情就比较简单了。

我利用前面提到的生成工具生成了400对bar chart的原始和手绘图,另外分别有100对测试和验证数据集。利用paperspace的免费GPU,运行https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix的pix2pix代码,使用缺省的参数,训练了200个epoch,每个epoch大概50秒,总共耗时3小时左右。

[Network G] Total number of parameters : 54.414 M
[Network D] Total number of parameters : 2.769 M

缺省的网络的参数数量如上图所示。

训练结果如下图:

77b30ff07d0a93271c3b5eb7d03665cb.png

862df205dd50223dedadd7f35b3c91ad.png

上面两个是我的测试数据中的两个例子。A是原始域,B是手绘域。中间的fakeB是pix2pix模型根据原始A图生成的结果。我们看到该生成图形几乎可以乱真。

下一步

到这里是不是大功告成了呢?还没有,想想我们之前要解决的问题,对于任意的基于Canvas渲染的可视化图表,我们改如何运用该模型呢?这里我列出还需要做的工作:

  • 增强数据生成功能,生成更多不同类型,数据,风格的图数据来训练一个更通用的模型(在本例子中,我们只有Bar Chart的缺省风格的训练数据)
  • 部署该模型为一个服务,在客户端浏览器中利用JS把Canvas数据发送请求至该服务来获得手绘风格的输出。
  • 或者利用Keras训练该模型并利用tensorflowJs直接部署到浏览器,这样做就不需要服务器端的交互,更利于集成。

总结

本文给出了一个利用深度学习实现数据可视化到手绘风格转化的实际例子,利用机器学习或者深度学习解决一个具体的问题很有趣,但是要完成端到端的功能,需要很多很琐碎的知识和系统思考的能力。希望这个故事对你有所帮助。有问题请发评论给我。

参考:

  • 手绘风格的数据可视化实现 Sketchify
  • 训练数据生成代码
  • Pix2pix 原始论文 https://phillipi.github.io/pix2pix/
  • AI从绘图制作出精美的照片(pix2pix)
  • 利用深度学习实现从图像到图像的翻译
  • 条件对抗网络的图像到图像翻译 Pix2Pix
  • 图像到图像的翻译 CycleGANS和Pix2Pix
  • Pix2pix论文的Pytorch代码 https://github.com/junyanz/pytorch-CycleGA
  • 一篇关于pix2pix的介绍 https://machinelearningmastery.com/a-gentle-introduction-to-pix2pix-generative-adversarial-network/
  • 另一篇关于pix2pix的介绍 https://ml4a.github.io/guides/Pix2Pix/
  • 在浏览器中进行深度学习:TensorFlow.js (八)生成对抗网络 (GAN)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/537679.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

远程计算机无法操作,win7系统的QQ远程协助无法控制计算机的问题的解决方法

在使用win7系统的计算机工作和学习过程中,可能会发生win7系统的QQ远程协助无法控制计算机的情况. 如何处理win7系统的QQ远程控制无法控制计算机的问题?对于计算机级别的用户,如果win7系统qq远程协助无法控制计算机,通常不知道该怎…

微软全新Chromium版Edge浏览器下载

下载地址: https://www.microsoft.com/en-us/edge

企业网站 源码 服务邮箱:_后来才知道:温州腾讯企业邮箱定制服务

后来才知道:温州腾讯企业邮箱定制服务 qnmsptdb后来才知道:温州腾讯企业邮箱定制服务 软文推广得到大家的转发之后,那么软文的经济价值也会随之而来。内容更新质量言外之意,如果你长期更新低质量内容,是不可取的&#…

圣三一学院计算机专业,360教育集团:爱尔兰都柏林大学圣三一学院计算机专业...

应用,新产品设计。网络和分布系统的安全和管理课程介绍计算机基层和网络安全,研究网络管理的方法和高端信息服务的管理。这六个部分内容的学习包括每周大概20小时的沟通时间,包括讲座、辅导、研讨会、试验等。绝大部分课程要求学生完成其他课…

in最多可以放多少?_汽车最多可以停放多少天不开?维修师傅:尽可能别超过这个时间...

在当下,买车似乎已经成为了一种消费潮流,其中不乏一些本身用车需求不明显但也随大流买车的人,结果车买回来之后最初的新鲜劲一过就放在那里不怎么用了。当然也有部分车主是因为自己的工作修需要经常需要在外出差,那么就算想天天开…

计算机电源风扇安装方法,机箱风扇怎么装 电脑机箱风扇电源线接法

夏天天气炎热,电脑机箱内温度也较高,温度过高会影响电脑性能出现死机等问题,甚至影响硬件寿命。所以给机箱装风扇来散热是非常重要的。那么,机箱风扇怎么装合理呢?机箱风扇的电源线怎么接呢?下面分享一下机箱风...夏天天气炎热&…

市场压力只有老板扛?柏明顿阿米巴如何传递经营压力

内部交易是阿米巴经营模式中的一个重要环节,通过内部交易,使企业内部上下道工序之间以价格为纽带,以服务和产品进行等价交换,统一结算交易。通过内部交易行为,可以掌握各个阿米巴单元的盈亏状态。阿米巴构建内部市场&a…

flutter怎么添加ios网络权限_视频号直播间怎么添加购物车商品;超详细流程步骤。丨国仁网络资讯...

蘑菇租房的联合创始人龙东平前几个月曾说:“视频号是一次掀翻桌子重新排座次的机会,是巨浪滔天,是新世界,新秩序。”视频号发展趋势愈加迅猛,越来越多的玩家涌入,正在获得新一波社交流量。为什么更加受欢迎…

网络中服务器是指为网络提供资源,并对这些资源进行管理的计算机,2016年职称计算机考试Internet冲刺试题及答案3...

1、Internet的通信协议是( A )A、TCP/IP B、OSI/ISOC、NetBEUI D、NWLink2、把计算机网络分为有线和无线网的主要分类依据是(C)A、网络成本 B、网络的物理位置C、网络的传输介质 D、网络的拓扑结构3、要将两台计算机直接相连,那么使用双绞线的类型为(A)A、交叉线 B、…

mos管开关电路_【电路】MOS管开关电路图详解(一)

MOS管的开关特性静态特性MOS管作为开关元件,同样是工作在截止或导通两种状态。由于MOS管是电压控制元件,所以主要由栅源电压uGS决定其工作状态。工作特性如下:※uGS※ uGS>开启电压UT:MOS管工作在导通区,漏源电流iDSUDD/(RDrDS…

Visio图形自动编号

操作步骤: 1.进入“视图”--“加载项” 2.“加载项”---“运行加载项” 3.“运行加载项”---“给形状编号”

Java面试170题答案解析(1-20题)

为什么80%的码农都做不了架构师?>>> 转载于:https://my.oschina.net/lanyu96/blog/2250020

Visio各图形如何一键自动对齐?

在创作的过程中,不用管图形是否对齐,间距是否一致,在最后的时候,一键对齐 具体操作: 开始---------位置------自动对齐与自动调整间距

黎明之路服务器正在维护,黎明之路进不去怎么办_黎明之路更新失败怎么办_玩游戏网...

《代号Z》什么时候上线根据最新的消息,《代号Z》这款游戏已经正式更名为《黎明之路》,那么名字也最终确定了,这款游戏到底什么时候上线呢?下面就跟着玩游戏网的小编一起了解一下吧~《代号Z》上线时间:游戏将会在4月26日…

php修改学生信息代码_值得收藏的CRM软件客户管理系统(包括JAVA/PHP)

悟空CRM是一款永久开源免费的CRM管理系统,悟空CRM-基于JAVA/TP5.0vueElementUI的前后端分离CRM系统 ,悟空CRM是基于JAVA/PHP多语言的B/S架构的管理软件,为企业提供行业专属的crm客户管理方案。 悟空CRM,CRM,免费CRM,开源HRMS,开源OA,移动办公,办公软件,手…

ajax验证码验证对错,jQuery Ajax显示对号和错号用于验证输入验证码是否正确

AJAX 的 jQuery Ajax显示对号和错号用于验证输入验证码是否正确废话不多说了,直接给大家贴代码了,具体代码如下所示:$(document).ready(function(e) {$(#yes).hide();$(#no).hide();$(input[namegcode]).keyup(function(){if($(this).val().l…

灰度内测是什么意思?

灰度测试是什么意思?如果您对互联网软件开发行业了解不多,您可能对这个词不太熟悉。事实上,灰度测试是指如果软件要在不久的将来推出新功能,或者进行重大修改,你必须首先做少量的试验工作,然后慢慢增加数量…

给点建议!开源项目架构选择!仿腾讯IM后端项目!InChat!

希望各位猿类给点建议或者提一些新的方案思路! 前言 小弟无心插柳的聊天项目InChat(一开始叫SBToNettyChat)在广大互联网朋友的积极推动下,慢慢步入正轨,目前2个月(一周4小时开发时间的速度)迭代…

Project给任务分配资源

视图:资源工作表 现有资源如下: 项目经理,工时类资源,55元每小时,3月份在当前项目平均每天只能投入一半的时间 视图:任务分配状况工具 此视图分配给任务分配资源特别方便,分配任务的资源为“…

gdiplus判断一个点是否在圆弧线上_福建教师招聘考试小学数学面试教案:圆的认识...

开门见山地说:学科知识与教学能力教案设计知识点总结(查看更多)闽小狮:2020年福建教师招聘面试公告汇总(持续更新中)圆,根据欧几里得的《几何原本》定义,是在同一平面内到定点的距离…