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

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

3天内不再提示

基于深度学习自动化的前端开发解析

zhKF_jqr_AI 来源:未知 作者:佚名 2018-04-11 10:00 次阅读

作者:Ashwin Kumar编译:weakish

编者按:Ashwin Kumar之前是Sway Finance的联合创始人,Sway Finance是Y Combinator孵化的一家初创企业,使用机器学习技术自动化会计。后来去了Insight,在Insight开发了一个模型,允许用户从手绘的示意图创建可以工作的HTML网站。现任Mythic深度学习科学家。

所有规模的公司而言,创建直观、沉浸式的用户体验都是一个关键的目标。创建用户体验是一个以原型、设计、测试为周期的快速过程。Facebook这样的巨头有充足的资源,可以在设计过程中投入整个团队,设计过程可能长达数周,涉及多个相关者;小企业没有这样的资源,因此它们的用户界面做出来可能会不太好。

我在Insight的目标是使用现代深度学习算法显著地流水线化设计工作流程,赋能任何企业快速创建和测试网页。

今天的设计工作流程

经过多个相关者的设计工作流程

一个典型的设计工作流程可能是这样的:

产业经理进行用户研究,得出一些规格要求

设计师接收需求,探索低保真原型,并逐渐创建高保真模型

工程师将设计实现为代码并最终交付产品至用户

研发周期的长度可能很快成为瓶颈,Airbnb这样的公司开始使用机器学习使这一过程更高效。

尽管看起来这是一个很有前途的机器辅助设计的样例,我们并不清楚这一模型多大程度上是完全基于端到端训练的,多大程度上依赖手工提取的特征。我们无法知道确切的答案,因为这是一个闭源的专有实现。我希望开发一个绘图到代码技术的开源版本,面向更广泛的开发者和设计师。

理想情况下,我的模型将可以接受一个简单的手绘网站设计原型,并立刻基于图像生成可以工作的HTML网站:

SketchCode模型接受手绘示意图,生成HTML代码

事实上,上图是我的模型在测试图像集上生成的真实网站!相关代码发布在我的GitHub上:ashnkumar/sketch-code

从图像标注汲取灵感

我打算解决的问题属于程序生成任务,自动生成可以工作的源代码。不过,程序生成大多涉及从自然语言规格声明或执行追踪(execution trace)生成代码,而我的案例将基于图像(手绘示意图)生成代码。

在机器学习中,图像标注是一个研究很充分的领域,图像标注寻找能够将图像和文本相联系的学习模型,特别是基于源图像内容生成描述。

文本:一个扔飞盘的妇女

受最近的pix2code论文和Emil Wallner的相关项目的启发,我决定重塑我的任务为图像标注任务,以手绘网站示意图为输入图像,相应的HTML代码为输出文本。

获取合适的数据集

从图像标注的角度来说,理想的数据集将是数以千计的成对的手绘草图和相应的HTML代码。毫不意外,我没法找到这样的数据集,我需要为这一任务创建自己的数据集。

我从pix2code论文的开源数据库开始,其中包含1750张合成的网站截屏以及相关的源代码。

pix2code数据集

这是一个很好的数据库,可以作为我自己的数据集的基础:

数据集中生成的网站包含一些简单的Bootstrap元素的组合,例如按钮、文本框和div。尽管这意味着我的模型的“词汇表”将限于少数元素——可供选择的生成网站的元素——这一方法可以简单地推广至更大的元素词汇表。

每个样本的源代码包含一个领域特定语言(DSL)的token,该DSL是论文作者专门创建的。每个token对应一段HTML和CSS,有一个编译器将DSL编译成可以工作的HTML代码。

让图像看起来像是手绘的

转换彩色网站图像至手绘版本

为了修改数据集以适应我自己的任务,我需要让这些网站图像看起来像是手绘的。我尝试使用python中的OpenCV和PIL库修改每张图像,例如转换为灰度图像,等高线检测

最终,我决定直接修改原网站的CSS样式表,进行以下操作:

修改网页元素的圆角边框以曲线化按钮和div的边角。

调整边框的厚度,以模拟手绘草图,并添加下降阴影。

修改字体为手绘风格字体。

最后,我通过添加倾斜、移动、旋转以增强这些图像,以模拟实际手绘草图的变化性。

使用图像标注模型架构

现在我已经有数据了,终于可以把数据传给模型了!

我使用了一个图像标注的模型架构,主要包含三部分:

使用卷积神经网络(CNN)从源图像提取图像特征的计算机视觉模型

基于门控循环单元(GRU)的编码源代码token序列的语言模型

接受前两步的输出作为输入,预测序列中的下一个token的解码器模型(也是GRU)

训练使用token序列作为输入的模型

为了训练这一模型,我将源代码拆分成token序列。模型的单个输入是一个序列和源代码图像,标签为文档中的下一个token。模型使用交叉熵作为损失函数,比较模型的下一个token预测和实际的下一个token。

在推理阶段,当模型用来从头生成代码的时候,过程略有不同。图像仍然由CNN处理,但文本过程仅仅使用一个开始序列作为种子。在每一步中,模型将预测的下一token序列附加到当前输入序列,并传给模型作为新输入序列。不断重复这一过程,直至模型预测一个token,或过程达到预先定义的文档token数限制。

一旦模型生成了预测token的集合,编译器转换DSL token至可由任何浏览器渲染的HTML。

使用BLEU分数评估模型

我决定使用BLEU分数评估模型。BLEU分数是机器翻译任务中一个常用的指标,这一指标衡量机器生成文本在多大程度上接近由人类基于相同输入生成的文本。

基本上,BLEU比较生成文本和参考文本的n元序列,以创建准确率变体。用BLEU评估这一项目很合适,因为它基于实际生成的HTML元素,以及元素之间的关系。

最棒的是,我可以通过查看生成网站实际看到BLEU分数!

可视化BLEU分数

给定源图像,完美的BLEU分数(1.0)意味着正确的元素位于正确的位置,而较低的分数预测错误的元素,或者元素位于错误的位置。最终模型能够在评估数据集上取得0.76的BLEU分数。

额外奖励——定制风格

我意识到模型提供了一个额外奖励,由于模型仅仅生成网页的骨架,我可以在编译过程中加入定制的CSS层,然后立刻获得所得网站的不同风格。

同一草图对应不同风格

样式解耦模型生成过程带来了很大的优势:

想要在自家公司使用SketchCode模型的前端工程师可以如原样使用模型,仅仅修改一个CSS文件,使网站适配公司的风格指南

内置可伸缩性——基于单一源图像,模型的输出可以立刻编译至5、10、50种不同的预定义分割,因此用户可以可视化多个版本的网站,并在浏览器中浏览查看。

总结和未来方向

利用图像标注方面的研究,SketchCode能够接受手绘网站示意图,并在数秒之内将它们转换为可以工作的HTML网站。

这一模型具有一些限制,这也意味着未来可以做的改进:

由于训练模型的词汇表仅包括16个元素,它无法预测在数据中未见的token。下一步可能使用更多元素生成额外的网站样本,例如图像、下拉菜单、表单——Bootstrap组件是一个很好的开始。

生产环境中的实际网站有很多变化。创建更能反映这些变化的训练数据集的一个很好的方法是抓取实际网站的HTML/CSS代码和网站内容截屏。

手绘同样有很多通过修改CSS无法完全捕捉的变化。在手绘草图数据中生成更多变化的一个很好的方法是使用对抗生成网络创建逼真的手绘网站图像。

如前所述,你可以在GitHub上找到此项目的代码:ashnkumar/sketch-code

原文地址:https://blog.insightdatascience.com/automated-front-end-development-using-deep-learning-3169dd086e82

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

    关注

    73

    文章

    5239

    浏览量

    119922
  • 前端开发
    +关注

    关注

    0

    文章

    21

    浏览量

    4159

原文标题:从草图到网站:基于深度学习自动化前端开发

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

收藏 人收藏

    评论

    相关推荐

    深度解析深度学习下的语义SLAM

    随着深度学习技术的兴起,计算机视觉的许多传统领域都取得了突破性进展,例如目标的检测、识别和分类等领域。近年来,研究人员开始在视觉SLAM算法中引入深度学习技术,使得
    发表于 04-23 17:18 66次阅读
    <b class='flag-5'>深度</b><b class='flag-5'>解析</b><b class='flag-5'>深度</b><b class='flag-5'>学习</b>下的语义SLAM

    非标自动化设备

    1、非标自动化设备 2、根据需求设计和制造 3、完成代替人工的目标
    发表于 03-25 09:52

    Zebra Aurora深度学习OCR算法荣获CAIMRS颁发的自动化创新奖

    在第二十二届中国自动化及数字化年度评选活动中,Zebra Aurora深度学习OCR算法获得了由中国自动化及数字化产业年会(简称CAIMRS)颁发的
    的头像 发表于 03-20 16:35 194次阅读

    TC397怎么自动化烧录?

    TC397第一次烧录的时候需要先烧录六个包,使用Infineon Memtool 4.8软件,如果想要量产,怎么实现不用手动选择文件的烧录方式,使用自动化烧录
    发表于 01-25 07:03

    LabVIEW与Tektronix示波器实现电源测试自动化

    MDO MSO DPO2000/3000/4000系列示波器,开发一个自动化测试项目。该项目旨在自动化执行一系列电子信号的捕获、分析和报告生成,提高测试过程的效率和准确性。 项目的核心在于实现测试流程
    发表于 12-09 20:37

    Neuro-T:零代码自动深度学习训练平台

    友思特 Neuro-T为传统的深度学习视觉检测方案提供了“自动深度学习”的解决方案,结合自动标注
    的头像 发表于 11-24 17:58 297次阅读
    Neuro-T:零代码<b class='flag-5'>自动</b><b class='flag-5'>深度</b><b class='flag-5'>学习</b>训练平台

    深度学习技术与边缘学习技术的不同之处

    如今,AI技术的广泛应用已经成为推动制造和物流领域自动化的核心驱动力。康耐视所推出的深度学习和边缘学习技术,这两种基于AI的技术,在工业自动化
    的头像 发表于 11-17 10:44 292次阅读

    深度学习的由来 深度学习的经典算法有哪些

    深度学习作为机器学习的一个分支,其学习方法可以分为监督学习和无监督学习。两种方法都具有其独特的
    发表于 10-09 10:23 365次阅读
    <b class='flag-5'>深度</b><b class='flag-5'>学习</b>的由来 <b class='flag-5'>深度</b><b class='flag-5'>学习</b>的经典算法有哪些

    C语言深度解析

    C语言深度解析,本资料来源于网络,对C语言的学习有很大的帮助,有着较为深刻的解析,可能会对读者有一定的帮助。
    发表于 09-28 07:00

    基于Arduino的家庭自动化项目

    包含相关代码、详细图文、物料表一个简单的基于DIY Arduino的家庭自动化项目,它使用土壤湿度传感器、泵和其他电子元件来自动浇水植物。它由一个适合室内园艺的混凝土花盆箱组成。自流式播种机也可作为水培系统使用。电气系统可根据农业和农业需求以及微灌系统进行扩展。
    发表于 09-26 08:16

    工厂自动化系统分享

    工厂自动化结构 PLC系统应用 IO-Link系统解决方案 工厂自动化中的工业机器人 问答环节
    发表于 09-07 06:32

    深度学习框架是什么?深度学习框架有哪些?

    深度学习框架是什么?深度学习框架有哪些?  深度学习框架是一种软件工具,它可以帮助
    的头像 发表于 08-17 16:03 1786次阅读

    深度学习基本概念

    深度学习基本概念  深度学习是人工智能(AI)领域的一个重要分支,它模仿人类神经系统的工作方式,使用大量数据训练神经网络,从而实现自动化的模
    的头像 发表于 08-17 16:02 1165次阅读

    深度学习工业应用:关于缺陷检测机器自动化方面

    随着机器学习深度学习的发展,很多人眼很难去直接量化的特征, 深度学习可以搞定, 这就是深度
    发表于 07-17 12:55 302次阅读
    <b class='flag-5'>深度</b><b class='flag-5'>学习</b>工业应用:关于缺陷检测机器<b class='flag-5'>自动化</b>方面

    深度解析可扩展且保密的深度学习

    可扩展且保密的深度学习
    发表于 06-28 16:09 215次阅读
    <b class='flag-5'>深度</b><b class='flag-5'>解析</b>可扩展且保密的<b class='flag-5'>深度</b><b class='flag-5'>学习</b>