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

简介: 作为阿里经济体前端委员会四大技术方向之一,前端智能化项目经历了 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+ 种类,后续将继续在样本精细化的分类以及基础组件的属性测量表达上做进一步的投入研发,并将模型的数据样本管理规范化,统一做输出。未来用户可以根据我们面向外部开源的样本集对部分基础组件识别后做特定的表达处理。

相关文章
|
1天前
|
前端开发 安全 开发工具
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
116 89
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
16天前
|
Dart 前端开发
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
112 75
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
3月前
|
缓存 前端开发 JavaScript
利用代码分割优化前端性能:策略与实践
在现代Web开发中,代码分割是提升页面加载性能的有效手段。本文介绍代码分割的概念、重要性及其实现策略,包括动态导入、路由分割等方法,并探讨在React、Vue、Angular等前端框架中的具体应用。
|
2月前
|
人工智能 移动开发 前端开发
WeaveFox:蚂蚁集团推出 AI 前端智能研发平台,能够根据设计图直接生成源代码,支持多种客户端和技术栈
蚂蚁团队推出的AI前端研发平台WeaveFox,能够根据设计图直接生成前端源代码,支持多种应用类型和技术栈,提升开发效率和质量。本文将详细介绍WeaveFox的功能、技术原理及应用场景。
1210 66
WeaveFox:蚂蚁集团推出 AI 前端智能研发平台,能够根据设计图直接生成源代码,支持多种客户端和技术栈
|
14天前
|
Dart 前端开发 容器
【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
60 18
【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
3月前
|
监控 前端开发 数据可视化
3D架构图软件 iCraft Editor 正式发布 @icraft/player-react 前端组件, 轻松嵌入3D架构图到您的项目,实现数字孪生
@icraft/player-react 是 iCraft Editor 推出的 React 组件库,旨在简化3D数字孪生场景的前端集成。它支持零配置快速接入、自定义插件、丰富的事件和方法、动画控制及实时数据接入,帮助开发者轻松实现3D场景与React项目的无缝融合。
263 8
3D架构图软件 iCraft Editor 正式发布 @icraft/player-react 前端组件, 轻松嵌入3D架构图到您的项目,实现数字孪生
|
2月前
|
缓存 监控 前端开发
探索前端性能优化:关键策略与代码实例
本文深入探讨前端性能优化的关键策略,结合实际代码示例,帮助开发者提升网页加载速度和用户体验,涵盖资源压缩、懒加载、缓存机制等技术。
|
3月前
|
缓存 监控 前端开发
前端性能优化:从代码到部署的全面策略
前端性能优化:从代码到部署的全面策略
|
4月前
|
存储 人工智能 前端开发
前端大模型应用笔记(三):Vue3+Antdv+transformers+本地模型实现浏览器端侧增强搜索
本文介绍了一个纯前端实现的增强列表搜索应用,通过使用Transformer模型,实现了更智能的搜索功能,如使用“番茄”可以搜索到“西红柿”。项目基于Vue3和Ant Design Vue,使用了Xenova的bge-base-zh-v1.5模型。文章详细介绍了从环境搭建、数据准备到具体实现的全过程,并展示了实际效果和待改进点。
282 14
|
4月前
|
JavaScript 前端开发 程序员
前端学习笔记——node.js
前端学习笔记——node.js
82 0

热门文章

最新文章