前端代码是怎样智能生成的-组件识别篇

简介: 作为阿里经济体前端委员会四大技术方向之一,前端智能化项目经历了 2019 双十一的阶段性考验,交出了不错的答卷,天猫淘宝双十一会场新增模块 79.34% 的线上代码由前端智能化项目自动生成。在此期间研发小组经历了许多困难与思考,本次 《前端代码是怎样智能生成的》 系列分享,将与大家分享前端智能化项目中技术与思考的点点滴滴。

背景介绍

我们在做一些 Deisgn2Code 的时候,一种比较直接的方式是借助设计师使用的设计工具的开发插件来帮我们提取设计稿里的元数据,我们可以快速提取设计稿里的图像、文本、Shape 等原生元素,从而组装生成一个页面。但目前我们的开发体系里还有许多基础组件是不在设计工具体系里,比如表单、表格、开关等组件,虽然像 Sketch 这类工具提供了灵活的方式能让设计师设计出相应的 UI 类型,但是同样的 UI 所对应 Sketch 里的 DSL 描述并不是我们所期望的。此时,我们往往需要借助其他途径来获取相对准确的描述,通过深度学习不断学习所需要识别的组件是一个比较好的方式。

image.png
(Sketch 中的设计图层描述)

所在分层

本文讲述前端智能化 D2C 里技术分层中的 基础组件识别 能力层,主要识别图像中可能存在预先定义的一些基础组件,从而辅助下游技术体系中对已识别的图层进行表达优化,比如优化图层嵌套结构从而产出合规的组件树,优化图层语义化的结果等。

image.png
(D2C 技术能力分层)

整体方案

参照以往的算法工程方案,我们的整体方案涉及到样本获取、样本评估、模型训练、模型评估以及模型预测一整条流程链路。

image.png
(算法工程 Pipeline)

样本获取 & 评估

样本集是整个模型的关键,样本的质量决定了模型质量的上限,算法模型的调优只是不断得往这个质量靠近。我们的样本可以来源于多种途径,因为此模型涉及到组件上下文的识别场景较少,此篇的基础组件识别模型我们选择结合业界使用量比较多的一些 UI 类库自己编码生成样本,确保编程部分对样本数据质量的保障。

在具体的样本编码开始前,我们需要简单对我们需要识别的组件做一个简单的分类,设定好此次分类的类目类型。在对整个样本的生成上,我们需要遵循以下几点原则:

  • 数据种类丰富且均等,即每种种类数量一致,尽可能涵盖多种种类(组件属性、样式影响,组件库的样式尽量只在合理的范围内随机化通用的背景色、宽高、圆角等,泛化组件样式)
  • 针对一些特定场景(比如覆盖问题),也需要构造相关的场景(图上文本、图上图遮罩等)
  • 针对一些线框型的组件(比如 Input),可以在周边 Padding 几像素的空白避免模型处理学习到边缘特征

下图为一个简单样本的 DEMO:

image.png
(基础组件识别样本)

在样本生成后,你可能需要对自己的样本集进行一个评估,评估过程中可以适当引入 数据校验 和 类目统计 等相关的工程,来评估整体的样本质量:

  • 检测标注数据是否存在错误:参考标注区域结合背景色计算方差等方式
  • 统计所有 UI 类型的数据分布情况,每个分类的数量以及数据是否均衡等

模型选型

在目前众多的目标检测模型中,根据一份最近的 PASCAL VOC 数据集的目标检测模型报告,我们选择了一种排名第一的 YOLO One-Stage 算法作为我们基础组件模型的迁移学习,来快速进行试验。

image.png
(各大目标检测模型数据分析报告)

简单介绍下,YOLO 即 You Only Look Once,主要分为三个步骤:

  1. 将图像 Resize 到 416 * 416(v3)尺寸
  2. 卷积网络学习样本集里的分类特性
  3. 预测的时候进行非极大值抑制,筛选 Boxes

image.png

YOLO 采用一个单独的 CNN 模型来实现端到端的目标检测,相比其他的二段流(R-CNN 等)算法,YOLO 的训练和预测速度更快。它将输入的图片切分成 S * S 网格,然后让每个单元格负责去检测中心点落在各个单元格中的目标,每个单元格会预测所在目标的边界框(bounding box)以及边界框的置信度(confidence score),置信度包含边界框内含目标的可能性大小以及边界框的准确度。最后将各个单元格预测的结果做整合得到最终的预测结果。YOLO 相关的其他更多设计细节,感兴趣的同学可以访问 yolo 官网来了解。

image.png

我们在做 Web 里的基础组件的目标检测时,期望卷积网络在相应的单元格中能够学习到其中每一类组件的特征,从而能够识别并区分出不同组件之间的差异,因此在对组件样本的选取上,要保障组件之间的特性差异,避免卷积网络丢失这部分的学习。

模型评估

在目标检测模型的评估中,我们选择使用均值平均精度 mAP 来进行衡量模型的准确率(基于 COCO 的算法)。可以选择部分测试集数据的模型预测结果,对结果数据跟数据的真实值(Ground Truth)进行比较,从而计算出每个分类的 AP。

image.png
(模型 AP 评估)

此处可以选择 IoU 超过 0.5 的对所有分类进行一个简单的制图比较,可以观察到目前对于小目标的识别检测(部分文本元素影响因素较大)精度较差,后续在样本的处理上可以进一步对此类小目标结合规则部分的预处理做检测加强。

image.png
(模型 mAP 评估)

模型预测处理

因为模型的迁移学习上我们选用了 yolo3,在对图像做处理时都会将图像预处理成 416 * 416 的尺寸做训练学习,为了在模型预测的时候结合训练数据得到更好的效果,我们可以在预测阶段的前置过程中也可将输入的图像做一定尺寸的适配,经测试适配后的图像预测后的 IoU 比未经适配的图像预测后的 IoU 高出很多(测试集显示有 10%+ 的提升)。

图像尺寸适配后,我们训练完的模型会对输入的图像直接做预测,此时会得到一个大致的类别区域框,但往往我们需要一个围绕 UI 组件的更加精确的框,此时我们可以借助 OpenCV 的能力结合图像本身做一个梯度裁边 Refine 以达到一个更精确的效果,如下图是边框 Refine 前后的对比。

image.png
(模型预测结果优化)

总结

目前前端智能小组里的基础组件包含 20+ 种类,后续将继续在样本精细化的分类以及基础组件的属性测量表达上做进一步的投入研发,并将模型的数据样本管理规范化,统一做输出。未来用户可以根据我们面向外部开源的样本集对部分基础组件识别后做特定的表达处理。

相关文章
|
29天前
|
JavaScript 前端开发 开发者
哇塞!Vue.js 与 Web Components 携手,掀起前端组件复用风暴,震撼你的开发世界!
【8月更文挑战第30天】这段内容介绍了Vue.js和Web Components在前端开发中的优势及二者结合的可能性。Vue.js提供高效简洁的组件化开发,单个组件包含模板、脚本和样式,方便构建复杂用户界面。Web Components作为新兴技术标准,利用自定义元素、Shadow DOM等技术创建封装性强的自定义HTML元素,实现跨框架复用。结合二者,不仅增强了Web Components的逻辑和交互功能,还实现了Vue.js组件在不同框架中的复用,提高了开发效率和可维护性。未来前端开发中,这种结合将大有可为。
93 0
|
15天前
|
SpringCloudAlibaba JavaScript 前端开发
谷粒商城笔记+踩坑(2)——分布式组件、前端基础,nacos+feign+gateway+ES6+vue脚手架
分布式组件、nacos注册配置中心、openfegin远程调用、网关gateway、ES6脚本语言规范、vue、elementUI
谷粒商城笔记+踩坑(2)——分布式组件、前端基础,nacos+feign+gateway+ES6+vue脚手架
|
9天前
|
机器学习/深度学习 数据采集 JavaScript
ADR智能监测系统源码,系统采用Java开发,基于SpringBoot框架,前端使用Vue,可自动预警药品不良反应
ADR药品不良反应监测系统是一款智能化工具,用于监测和分析药品不良反应。该系统通过收集和分析病历、处方及实验室数据,快速识别潜在不良反应,提升用药安全性。系统采用Java开发,基于SpringBoot框架,前端使用Vue,具备数据采集、清洗、分析等功能模块,并能生成监测报告辅助医务人员决策。通过集成多种数据源并运用机器学习算法,系统可自动预警药品不良反应,有效减少药害事故,保障公众健康。
ADR智能监测系统源码,系统采用Java开发,基于SpringBoot框架,前端使用Vue,可自动预警药品不良反应
|
28天前
|
机器学习/深度学习 存储 前端开发
实战揭秘:如何借助TensorFlow.js的强大力量,轻松将高效能的机器学习模型无缝集成到Web浏览器中,从而打造智能化的前端应用并优化用户体验
【8月更文挑战第31天】将机器学习模型集成到Web应用中,可让用户在浏览器内体验智能化功能。TensorFlow.js作为在客户端浏览器中运行的库,提供了强大支持。本文通过问答形式详细介绍如何使用TensorFlow.js将机器学习模型带入Web浏览器,并通过具体示例代码展示最佳实践。首先,需在HTML文件中引入TensorFlow.js库;接着,可通过加载预训练模型如MobileNet实现图像分类;然后,编写代码处理图像识别并显示结果;此外,还介绍了如何训练自定义模型及优化模型性能的方法,包括模型量化、剪枝和压缩等。
31 1
|
28天前
|
开发者 图形学 C#
深度解密:Unity游戏开发中的动画艺术——Mecanim状态机如何让游戏角色栩栩如生:从基础设置到高级状态切换的全面指南,助你打造流畅自然的游戏动画体验
【8月更文挑战第31天】Unity动画系统是游戏开发的关键部分,尤其适用于复杂角色动画。本文通过具体案例讲解Mecanim动画状态机的使用方法及原理。我们创建一个游戏角色并设计行走、奔跑和攻击动画,详细介绍动画状态机设置及脚本控制。首先导入动画资源并添加Animator组件,然后创建Animator Controller并设置状态间的转换条件。通过编写C#脚本(如PlayerMovement)控制动画状态切换,实现基于玩家输入的动画过渡。此方法不仅适用于游戏角色,还可用于任何需动态动画响应的对象,增强游戏的真实感与互动性。
56 0
|
28天前
|
Android开发 iOS开发 C#
Xamarin:用C#打造跨平台移动应用的终极利器——从零开始构建你的第一个iOS与Android通用App,体验前所未有的高效与便捷开发之旅
【8月更文挑战第31天】Xamarin 是一个强大的框架,允许开发者使用单一的 C# 代码库构建高性能的原生移动应用,支持 iOS、Android 和 Windows 平台。作为微软的一部分,Xamarin 充分利用了 .NET 框架的强大功能,提供了丰富的 API 和工具集,简化了跨平台移动应用开发。本文通过一个简单的示例应用介绍了如何使用 Xamarin.Forms 快速创建跨平台应用,包括设置开发环境、定义用户界面和实现按钮点击事件处理逻辑。这个示例展示了 Xamarin.Forms 的基本功能,帮助开发者提高开发效率并实现一致的用户体验。
69 0
|
28天前
|
API UED 开发者
如何在Uno Platform中轻松实现流畅动画效果——从基础到优化,全方位打造用户友好的动态交互体验!
【8月更文挑战第31天】在开发跨平台应用时,确保用户界面流畅且具吸引力至关重要。Uno Platform 作为多端统一的开发框架,不仅支持跨系统应用开发,还能通过优化实现流畅动画,增强用户体验。本文探讨了Uno Platform中实现流畅动画的多个方面,包括动画基础、性能优化、实践技巧及问题排查,帮助开发者掌握具体优化策略,提升应用质量与用户满意度。通过合理利用故事板、减少布局复杂性、使用硬件加速等技术,结合异步方法与预设缓存技巧,开发者能够创建美观且流畅的动画效果。
53 0
|
28天前
|
前端开发 UED 开发者
React组件优化全攻略:深度解析让你的前端应用飞速运行的秘诀——从PureComponent到React.memo的彻底性能比较
【8月更文挑战第31天】在构建现代Web应用时,性能是提升用户体验的关键因素。React作为主流前端库,其组件优化尤为重要。本文深入探讨了React组件优化策略,包括使用`PureComponent`、`React.memo`及避免不必要的渲染等方法,帮助开发者显著提升应用性能。通过实践案例对比优化前后效果,不仅提高了页面渲染速度,还增强了用户体验。优化React组件是每个开发者必须关注的重点。
46 0
|
29天前
|
JavaScript 前端开发
揭秘Vue.js组件魔法:如何轻松驾驭前端代码,让维护变得轻而易举?
【8月更文挑战第30天】本文探讨了如何利用Vue.js的组件化开发提升前端代码的可维护性。组件化开发将复杂页面拆分为独立、可复用的组件,提高开发效率和代码可维护性。Vue.js支持全局及局部组件注册,并提供了多种组件间通信方式如props、事件等。通过示例展示了组件定义、数据传递及复用组合的方法,强调了组件化开发在实际项目中的重要性。
17 0
|
1月前
|
存储 前端开发 JavaScript
前端语言串讲 | 青训营笔记
前端语言串讲 | 青训营笔记
25 0