深度学习自动化前端开发:从sketch到HTML仅需5秒
分类:网校动态日期:2024-09-01 08:54:49人气:
为用户创建直观且有吸引力的网站是每个公司的重要目标,这是一个快速原型设计、设计和用户测试周期的过程。像Facebook 这样的大公司拥有足够的人力让整个团队专注于设计过程,而设计过程中的变更可能需要数周时间并涉及多个利益相关者;较小的企业没有这样的资源,因此他们的用户界面可能会发生一些变化。影响。
我的Insight 目标是使用现代深度学习算法来大大简化设计工作流程,并使任何规模的公司能够快速创建和测试网页。
现有设计工作流程
现有工作流程涉及多个利益相关者
典型的设计工作流程如下所示:
产品经理进行用户研究以制定技术参数表
设计师将根据这些要求尝试创建低保真原型并最终创建高保真原型
工程师将这些设计转化为代码,最终将产品交付给用户
开发周期的长度很快就会成为瓶颈,像Airbnb 这样的公司已经在使用机器学习来提高流程的效率。 (参见:https://airbnb.design/sketching-interfaces/)
Airbnb 内部人工智能工具演示:从草图到代码
虽然这个工具有望成为机器辅助设计的一个例子,但目前尚不清楚这种模型可以在多大程度上进行端到端的全面训练,也不清楚它在多大程度上依赖于手工制作的图像特征。当然没有办法知道,因为它目前是Airbnb 拥有的专有、非开源解决方案。我想创建一个开源版本的“绘图到代码”技术,可以被更多的开发人员和设计师使用。
理想情况下,我的模型将采用一个简单的手绘网站设计原型,并立即从该图像生成一个可用的HTML 网站:
SketchCode模型需要精心绘制的网站线框,并且可以生成HTML代码
事实上,上面的示例是根据我的模型的测试图像集生成的实际网站!你可以在我的Github 页面上查看:https://github.com/ashnkumar/sketch-code
从图像注释中获取灵感
我正在解决的问题属于程序综合(https://en.wikipedia.org/wiki/Program_synthesis)的广泛任务,即自动生成工作源代码。虽然许多程序合成可以处理根据自然语言要求或执行跟踪生成的代码,但就我而言,我可以从源图像(手绘线框)开始并自动获取所需的代码。
在机器学习领域,有一个领域叫做图像标题生成(https://cs.stanford.edu/people/karpathy/deepimagesent/),这个领域研究得很充分,旨在学习连接图像和文本的模型,特别是生成A源图像内容的描述。
图像标注模型生成源图像的描述
我从最近一篇名为pix2code 的论文以及Emil Wallner 使用这种方法的相关项目中获得了灵感(请参阅:前端是否恐慌?通过深度学习自动生成HTML 代码),并决定将我的任务重组为图像标题生成问题的一部分,将线框作为输入图像,将相应的HTML 代码作为输出文本。
获取正确的数据集
考虑到图像注释的方法,我理想的训练数据集是数千个手绘线框及其等效的HTML 代码。正如预期的那样,我找不到这样的数据集,因此我必须为该任务创建自己的数据集。
我从pix2code 论文中提到的一个开源数据集(https://github.com/tonybeltramelli/pix2code)开始,该数据集由1750 个人工生成的网页截图及其对应的源代码组成。
在pix2code 中生成的网站图像及其源代码的数据集
这个数据集对我来说是一个很好的起点,其中有一些有趣的东西:
数据集中生成的每个网站都包含几个简单的Bootstrap 元素,例如按钮、文本框和DIV。虽然这意味着我的模型将受到将这几个元素视为“词汇”(模型可以选择用来生成网站的元素)的限制,但这种方法应该很容易推广到更大的元素词汇。
让画面更加手绘
将网站的彩色主题切换为手写主题。
为了使数据集适应我的任务,我必须使网站上的图像看起来像是手绘的。图像的手绘得益于OpenCV和PIL库的灰度转换和轮廓检测功能。
最后我决定通过一系列操作直接修改原网站的CSS样式表:
通过更改页面元素的边框半径来舍入按钮和div
调整边框的粗细以模仿手绘草图,并添加阴影
将字体更改为类似手写的字体
我的最终版本通过结合倾斜、偏移和旋转来模拟实际绘制草图的不确定性,增加了数据增强的一步。
使用图像标注模型架构
现在我已经准备好了数据,我可以将其输入模型进行训练!
我用于图像标注的模型由三个主要部分组成:
使用卷积神经网络(CNN)视觉模型提取源图像特征
由对源代码标记序列进行编码的门控循环单元(GRU) 组成的语言模型
解码器模型(也是GRU),将前两个步骤的输出作为输入并预测序列中的下一个标记
使用标记序列作为输入来训练模型
为了训练这个模型,我将源代码分成带标签的序列。其中一个序列及其源图像是模型的单个输入,其标签是文档中的下一个标记。该模型使用交叉熵成本作为其损失函数,将模型预测的下一个令牌与实际令牌进行比较。
一旦模型生成了一组预测标签,编译器就会将DSL 标签转换为可以在任何浏览器中显示的HTML。
使用BLEU 分数评估模型
我决定使用BLEU 分数(https://machinelearningmastery.com/calculate-bleu-score-for-text-python/) 来评估模型。这是机器翻译任务中经常使用的评估指标,它试图评估在给定相同输入的情况下,机器生成的文本与人类可能编写的文本的接近程度。
本质上,BLEU 通过比较生成文本和参考文本的n 元语法序列来生成精炼文本。它非常适合这个项目,因为它会影响生成的HTML 中的实际元素以及它们之间的关系。
那么这就是最好的部分—— 我可以通过检查生成的网站完全了解BLEU 分数!
BLEU 分数可视化
完美的BLEU 分数为1.0 将在正确的位置生成源图像的正确元素,而较低的分数可能会预测错误的元素和/或将它们放置在相对于彼此错误的位置。最终我的模型在测试集上获得了0.76 的BLEU 分数。
一次转换=同时生成多种样式
将样式与模型生成过程分离可以给模型的使用带来很多好处:
前端工程师想要将SketchCode模型应用到自己公司的产品中,可以直接使用该模型,只需更改CSS文件即可符合公司的风格要求
内置可扩展性- 使用单个源图像,模型输出可以立即编译为5、10 或50 种不同的预定义样式,因此用户可以查看其网站的多个版本并在浏览器中浏览它们
总结与展望
通过利用图像注释方面的研究,SketchCode 可在几秒钟内将手绘网站线框图转换为可运行的HTML 网站。
该模型有一些局限性,包括:
由于该模型仅使用16 个元素的词汇表进行训练,因此它无法预测训练数据之外的标记。下一步可能是生成具有更多元素(例如图像、下拉菜单和表单)的其他示例网站——Bootstrap 组件一个很好的练习网站:https://getbootstrap.com/docs/4.0/components/buttons/
在实际生产环境中,网站有很多变化。创建更好地反映这种变化的训练数据集的一个好方法是抓取实际网站并捕获其HTML/CSS 代码以及网站内容的屏幕截图
用户评论
哇,这技术简直太神奇了!5秒就能把sketch变成HTML,效率提升不是一点半点。
有9位网友表示赞同!
从sketch到HTML仅需5秒?这么快,我都要怀疑自己是不是还在做梦了。
有13位网友表示赞同!
深度学习自动化前端开发,这个标题就让我对技术有了新的期待。
有12位网友表示赞同!
5秒完成sketch到HTML的转换,这对我这种懒癌晚期患者来说太有吸引力了。
有6位网友表示赞同!
以前做前端开发,光一个页面就得花费好几个小时,现在5秒搞定,简直不敢相信。
有11位网友表示赞同!
深度学习自动化前端开发,听起来好高大上,不知道具体操作流程是怎样的。
有6位网友表示赞同!
这技术要是普及开来,前端开发人员是不是都要失业了?
有16位网友表示赞同!
5秒完成sketch到HTML的转换,这对我这种设计小白来说,简直是福音啊!
有7位网友表示赞同!
深度学习自动化前端开发,这背后是不是有很高的技术门槛呢?
有20位网友表示赞同!
看到这个标题,我仿佛看到了未来前端开发的模样,真是太激动了。
有7位网友表示赞同!
5秒完成sketch到HTML的转换,这种速度简直让人难以置信。
有19位网友表示赞同!
深度学习自动化前端开发,听起来像是科幻片里的技术,现在竟然变成了现实。
有7位网友表示赞同!
5秒就能把sketch变成HTML,这技术得有多强大啊!
有15位网友表示赞同!
深度学习自动化前端开发,不知道这技术有没有什么局限性。
有20位网友表示赞同!
这技术要是能普及,前端开发行业会迎来一场革命性的变革。
有8位网友表示赞同!
5秒完成sketch到HTML的转换,这样的效率提升,让我对前端开发有了新的认识。
有19位网友表示赞同!
深度学习自动化前端开发,这让我对人工智能的发展充满了信心。
有8位网友表示赞同!
5秒就能完成sketch到HTML的转换,这速度比我想象的要快多了。
有17位网友表示赞同!
深度学习自动化前端开发,这技术真是让人大开眼界,太有潜力了。
有19位网友表示赞同!