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

简介: 精准!

闲鱼技术-仝辉,深宇

引言:

      淘宝99大促今年会有天猫,淘宝和聚划算全员参与,有上千个页面形式的展现。其中,测试是保障活动页面的正常发布的一个必不可少的关键环节。

      传统的测试方法,需要测试人员去分析这个页面是否正常生成,以及是否实现正常地跳转等。这样通常会占用大量的测试资源。那么能否利用机器学习等相关技术为测试赋能呢?

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

      具体的模型训练和模型识别部分会在下一章节“处理流程”中详细介绍。

处理流程:

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

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

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

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

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

模型训练:

样本制造:

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

image.png

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

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

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

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

模型选择:

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

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

image.png

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

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

image.png

模型识别:

模块识别:

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

image.png
image.png
识别的结果如下所示:
image.png
image.png

元素识别:

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

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

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

位置修正:

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

image.png
image.png

现有效果

      本篇我们基于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机器几百毫秒级别),后续会在效果和效率的均衡上作更多的尝试。也希望大家能够关注我们后续的系列文章。

相关文章
|
安全 关系型数据库 MySQL
Flink CDC中MySQL 进行cdc的用户需要什么权限?
Flink CDC中MySQL 进行cdc的用户需要什么权限?
1822 1
|
10月前
|
数据采集 Web App开发 数据可视化
Python爬取闲鱼价格趋势并可视化分析
Python爬取闲鱼价格趋势并可视化分析
|
机器学习/深度学习 数据可视化 数据挖掘
基于Copula分布的合成数据采样:保持多维数据依赖结构的高效建模方法
本文深入探讨了Copula的基础理论、运作机制及其在数据科学领域的应用。Copula作为一种数学框架,能够将随机变量间的依赖关系与其边际分布分离,特别适用于处理非线性依赖关系或异质分布变量。文章通过年龄与收入的关系分析,展示了Copula在多元分析中的独特优势,并介绍了高斯Copula的具体应用实例。此外,还详细讲解了Copula在合成数据生成中的应用,验证了合成数据在训练机器学习模型时的有效性。
669 18
|
机器学习/深度学习 人工智能 算法
强化学习在复杂环境中的应用与挑战
【8月更文第9天】强化学习(Reinforcement Learning, RL)是一种机器学习方法,通过智能体与环境的交互来学习最优策略。近年来,随着计算能力的提升和算法的进步,强化学习被广泛应用于各种复杂环境下的任务,如机器人导航、游戏策略优化等。本文将探讨强化学习在这些领域中的应用案例,并分析所面临的挑战及其潜在的解决方案。
1204 4
西门子S7-200 SMART自由口通信,如何设置通信参数
大家好,从今天开始我们来学习西门子S7-200 SMART自由口通信,本篇我们先来介绍一下如何设置通信参数。西门子S7-200 SMART除了支持以太网通信,还可以通过CPU上或信号板上的RS485接口实现串口通信。支持的串口协议,包括自由口协议、USS协议、MODBUS协议和PPI协议。STEP7 Micro/WIN SMART编程软件安装时自动集成串口通信所需要的功能块和子程序。
西门子S7-200 SMART自由口通信,如何设置通信参数
|
安全 Java 关系型数据库
SonarQube之采购选型参考
SonarQube是DevOps实践中主流的一款质量内建工具,过插件机制,Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具,比如pmd-cpd、checkstyle、findbugs、Jenkins。 通过不同的插件对这些结果进行再加工处理,通过量化的方式度量代码质量的变化,从而可以方便地对不同规模和种类的工程进行代码质量管理。同时 Sonar 还对大量的持续集成工具提供了接口支持,可以很方便地在持续集成中使用 Sonar
727 0
|
算法 搜索推荐 Serverless
打散算法的三种解决方案及其选型场景
打散算法优缺点及选型场景
7131 1
打散算法的三种解决方案及其选型场景
|
XML Web App开发 Java