写点什么

详解阿里 99 大促活动页内容识别技术实现

2019 年 9 月 25 日

详解阿里99大促活动页内容识别技术实现

引言

99 大促有淘宝、天猫、聚划算等全员参与,上千个页面形式的展现。其中,测试是保障活动页面的正常发布的一个必不可少的关键环节。传统的测试方法,需要测试人员去分析这个页面是否正常生成,以及是否实现正常地跳转等。这样通常会占用大量的测试资源。那么能否利用机器学习等相关技术为测试赋能呢?


带着这个问题,我们分析了页面的特性。经过分析后发现页面具有高度的相似性,很多模块是复用的。因此,可以利用机器学习去学习模块特征,进而达到识别这些模块的目的。最终,我们实现了对淘宝 99 大促几十个活动页模块的自动识别。


处理流程

深度学习技术通常由两部分构成:模型训练和模型预测。


深度学习通常是有监督学习的方式,因此在模型训练环节中,需要输入训练样本,“告知”它输入和输出是什么。此外,我们还需要选择合适的深度学习网络来训练。相关细节会在后续两个小节中详细描述:


样本生成:样本生成过程中使用的三种方法模型选择:fpn + Cascade R-CNN
复制代码


在模型预测环节,由于页面内容理解部分不止需要识别模块,还需要识别模块内部的元素。此外,受限于目标检测模型本身的局限性,会导致识别出来的位置没法达到像素级别的精确性,因此需要对位置做修正。为了近一步提高准确度,本文引入了位置修正模块。因此,本文的模型预测分为如下三个部分做介绍:


模块识别:识别页面中模块类别和位置元素识别:基于模块的识别区域,识别内部元素位置修正:通过传统图像的方式修正内部元素位置
复制代码


模型预测

样本制造

样本制造我们演进了三个版本:



第一个版本是手动打标,基于 labelImg 等标注工具进行标注。这种打标方式的缺点是需要投入较多的人力资源,且无法满足未上线页面的打标。


第二个版本是模型辅助打标,也就是先训练一个初始可用的模型,然后利用模型预测结果对模型进行初始标注,对不正确的地方作修改,可以不断地迭代优化模型。这种打标方式的缺点是无法满足未上线页面的打标。


第三个版本是自动打标,分析 H5 页面的代码生成布局 DSL,然后通过替换属性的方式自动生成相关代码。这种打标方式的优点是可以解决上述两个版本中“无法满足未上线页面打标”的问题。这种方法也是本文中采用的主要方法。


本文,主要使用了第三种方式去生成训练数据,第一种和第二种更加真实的方式生成验证数据,达到生产环境准确验证的目的。


模型选择

淘宝 99 大促活动页需要识别活动页里面有哪些页面模块,且需要知道模块所在的位置。而深度学习的目标检测模型可以在给定的图片中精确找到物体所在位置,并标注出物体的类别。


考虑到对坐标位置和类别有很高的召回率和准确率的要求(IOU0.5:0.95 的召回率和准确率都要达到 95%以上),本文使用了精度更高的 Cascade-RCNN 网络。



主流的目标检测模型 Faster-RCNN 的缺点是 RPN 的 proposals 大部分质量不高,IOU 低阈值会导致很多误检出,而高阈值会导致召回率过低。针对这个问题,Cascade-RCNN 使用 cascade 回归作为一种重采样的机制,逐层提高 proposal 的 IoU 值,从而使得前一层重新采样过的 proposals 能够适应下一层的更高阈值。这样做的好处是:每个阶段都有不同的 IoU 阈值,可以更好地去除离群点,适应新的 proposal 分布。


针对识别模块大小不一这种情况,我们在卷积特征提取网络加入了特征金字塔结构,均衡了不同尺度模块的检出数量(对小模块提升尤为明显),进而提高了召回率和准确率。网络结构如下图所示:



模型识别

模块识别

在本期的淘宝 99 大促中,我们支持了 28 个模块的识别,类似的模块如下:




识别的结果如下所示:




元素识别

由于页面内容理解部分不止需要识别模块,还需要识别模块内部的元素。如下图所示,我们不仅要识别七巧板模块,也需要识别内部元素的会场导航和商品导航模块。



本文考虑到这两种元素也会在页面中单独出现,采用了 Coarse-to-Fine 的架构:首先识别七巧板模块,然后通过另一个目标检测网络去识别内部元素。



识别的最终结果如下图所示:



位置修正

由于目标检测模型本身的局限性,会导致没法达到像素级别的精确性,因此需要对位置做修正。为了近一步提高准确度,采用计算公式如下:




效果

本篇我们基于 FPN+Cascade 网络去预测淘宝 99 大促模块,在验证集近千张的样本量的情况下,采用了 coco 的验证标准,达到了如下的准确率:


Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.982


Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.989


Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.984


Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.989


Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.423


Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.986


Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.993


Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.993


Average Recall (AR) @[ IoU=0.50 | area= large | maxDets=100 ] = 1.000


由上面的数据我们可以知道,页面和相应元素识别的召回率和准确率达到了 98%左右,满足了识别精度的要求。此外,该流程符合 Coarse-to-Fine 的架构(由粗粒度到细粒度),对于相类似的问题也可以采用该方法处理。


后续计划

我们后续会尝试将本文的方法推广应用到更多的业务场景中去,例如双十一活动页模块识别等。由于本文的方法相对耗时(GPU 机器几百毫秒级别),后续会在效果和效率的均衡上作更多的尝试,也希望大家能够关注我们后续的系列文章。


本文转载自公众号闲鱼技术(ID:XYtech_Alibaba)


原文链接


https://mp.weixin.qq.com/s/syuC9B5WoaXiel1vLHx1kQ


2019 年 9 月 25 日 08:00755

评论

发布
暂无评论
发现更多内容

LeetCode题解:142. 环形链表 II,JavaScript,快慢指针,详细注释

Lee Chen

LeetCode 前端进阶训练营

Django框架,Flask框架和Tornado框架各有什么优缺点

奈学教育

django flask tornado

计算机网络基础(十)---网络层-迪杰斯特拉算法

书旅

算法 计算机网络 网络 最短路径

如何设计一个亿级消息量的IM系统

Chank

Java Architecture Architect IM Instant Messaging

实战:docker搭建FastDFS文件系统并集成SpringBoot

生命在于折腾

springboot

企业为何需要建立统一的复用型软件平台?

力软.net/java开发平台

Java 企业信息化 开发工具 框架 平台应用服务

央行数字货币或将成为经济“内循环”的未来加速器

CECBC区块链专委会

数字经济 全球经济下行 降息 惠普金融深化

Django框架,Flask框架和Tornado框架各有什么优缺点

古月木易

django flask tornado

池化技术到达有多牛?看了线程和线程池的对比吓我一跳!

王磊

Java

真香!Linux 原来是这么管理内存的

cxuan

Linux 操作系统

腾讯“神盾-联邦计算”平台带你翻越数据合作的重重大山

小小的一朵云

大数据

顺势昌,逆势亡:人啊,得学会做信天翁,而不是鹧鸪鸟

非著名程序员

创业 程序员 管理 提升认知

乘商用之风,破后疫情之浪:丁耘分享华为如何持续护航5G新价值

脑极体

国家版权局发布《关于规范摄影作品版权秩序的通知》

CECBC区块链专委会

电子存证 作品版权 侵权盗版 剑网2019

NameNode和SecondaryNameNode工作机制

古月木易

NameNode econdaryNameNode

当远程工作成为未来的工作方式......

Atlassian速递

Atlassian Jira

第八周作业

田振宇

蚂蚁上市:P7可获1200万元期权,酸酸酸酸酸...

程序员生活志

互联网热点 蚂蚁金服

week08 总结

Z冰红茶

如何成为一个成功的首席数据官

尹千觞

QQ音乐PB级ClickHouse实时数据平台架构演进之路

小小的一朵云

大数据

将Arch Linux安装到U盘

Kurtis Moxley

Linux 安装操作系统

原创 | 使用JPA全面实现DDD持久化【关于本书】

编程道与术

Java hibernate DDD JDBC jpa

到底一台服务器能够支持多少TCP并发连接?

南方有乔木兮

什么样的信任才值得拥有?谈一谈极客邦的5K1S文档

泰稳@极客邦科技

4. JSON字符串是如何被解析的?JsonParser了解一下

YourBatman

Jackson JSON库

大厂经验(4):iOS端埋点自动采集技术原理剖析

DeeperMan

ios 前端 数据采集 埋点

秒杀全网!研发、运营必备实用工具网站

程序员生活志

工具类网站

Flink 1.11 SQL 使用攻略

Apache Flink

flink

NameNode和SecondaryNameNode工作机制

奈学教育

NameNode

一个小实验,来

池建强

算法 薪资

微服务架构下如何保证事务的一致性

微服务架构下如何保证事务的一致性

详解阿里99大促活动页内容识别技术实现-InfoQ