移动端视觉算法在支付宝的应用场景、技术框架及未来工作介绍

2024-07-12
来源:网络整理

本文主要由三部分组成:第一部分会介绍移动端视觉算法在支付宝的应用场景以及业务表现;第二部分会介绍支付宝视觉算法的一些技术框架以及我们的一些研发方案;第三部分会简单介绍我们目前的一些工作以及未来的一些工作。

边缘视觉算法@

首先我给大家介绍一下支付宝整个终端视觉算法的一些具体应用场景,基本上可以分为四类。

第一类是平台运营,比如大家熟知的春节扫一扫在移动端上用到了算法,还有支付设备里有很多互动游戏,这里用到了一些互动技术,还有针对很多线下场景的AR签到功能,这些都是带有运营属性的业务。

第二大类是平台工具,比如扫一扫识别物体,支付宝里的短视频拍摄,还有一些直播,这些拍摄工具在终端上也用到了很多视觉算法。

第三类是个人业务。很多用户会在支付宝里面操作一些个人业务,比如绑卡、转账、开通会员、会员认证,包括开通一些基金或者其他金融业务等等。这些里面会用到大量的移动端算法能力,来提高整体的用户体验。

第四类是垂直场景,比如说线下的IoT设备做产品的识别,AI的能力,以及在疫情期间我们为很多线上的服务提供了智能识别算法,来提高整体的效率。

支付宝移动端视觉算法整体应用范围非常广,应用的业务场景类型差异很大。这主要是因为支付宝是一个数字生活平台,基于这个大的定位和背景,业务对算法端的要求非常高,无论是能力还是性能。

在算法能力方面,整个支付宝计算机视觉算法能力目前已经覆盖了分类检测、分割、OCR等主流CV算法方向。

从模型性能上看,支付宝是国民级APP,业务多,有大量重负载场景,我们的算法也是针对这么大的背景,实现了低资源消耗和高性能的计算能力。

在开放生态方面,支付宝有非常强的开放生态,我们在小程序体系里有很多外部商户,还有一些机构会给终端用户提供服务,我们的移动端视觉算法会为这些场景提供几乎零计算成本的智能服务。

从业务角度,现在支付宝APP上在线的活跃模型有几百个,这个数字还在不断更新。另外我们的Io​​T还有几十万个内外部的设备使用了移动视觉技术。这是针对内部业务的。对于外部业务,可以通过APP上的小程序接入我们的一些解决方案。同时我们的视觉解决方案也会通过蚂蚁的商业产品输出到外部APP。

支付宝生态系统中移动算法的优势

移动端视觉算法能在支付宝有如此多的应用场景,产生如此大的商业价值,和整个支付宝生态有很大关系,优势能够发挥出来。一是支付宝本身业务场景广泛,二是支付宝用户基数大。在这两个背景下,好的体验和好的移动端算法可以为各种业务提供非常低成本的业务使用。

另外大家在使用支付宝的时候都有一个比较大的心态,就是支付宝是非常安全的。移动端整个数据的采集、处理、搬运都是在用户自己的手机上操作的,这也避免了用户对于个人数据隐私的担忧。同时我们对外的业务也会关心外部机构的数据合规问题。通过建设移动端算法能力,这些合规风险也是可以规避的。

开发边缘视觉算法的挑战

基本上我们要能够把移动端视觉算法的优势在支付宝的生态里实现,本质上我们的整个算法需要有足够的能力去支撑这些业务。当然这个是一个非常有挑战性的任务,而且随着整个手机硬件的不断发展,这个挑战也在不断的变化。比如说在早期,我们在2018年首先推出了端引擎,是和整个视觉算法的应用场景一起推出的。当时我们面临的问题是整个算力存储资源和网络流量的限制。这对模型的大小、速度、内存都有比较高的请求,而且当时整个行业的能力基本上是比较单一的。

虽然当时也出现了一些类似这样的分类网络结构,但是它们对 CV 场景的覆盖比较有限。同时在应用层面,也只是针对特定场景的一些算法。比如我们的人脸检测,基于人脸检测的算法,或者传统的文字分割和识别 OCR 算法。对于支付宝如此广泛的业务场景来说,这种算法很难拓展到其他场景。这时候我们面临的一个最大挑战就是如何有一个统一的框架来开发不同类型的视觉算法。

随着硬件的发展,我们有各种各样的芯片,不管是GPU还是NPU,而且这些芯片会越来越强。这时候我们又面临另外一个挑战,就是碎片化的硬件环境问题,因为支付宝里面有3000多个机型,现在的终端智能化已经到了这个阶段。我们看到行业内各大厂商在移动端算法的研发上,发展得很快。但其实大部分都局限于单一机型的研发设计思路,或者放弃了一些机器覆盖的问题。对于支付宝来说,这是不可接受的。因为支付宝可能一个机型就有几十万或者几百万的用户,或者换句话说,虽然有比较好的芯片,但是为了覆盖,会牺牲高端机器的体验。所以在不同的时间阶段,我们面临的挑战是不一样的。

支付宝视觉算法的发展历史

移动视觉算法的整个发展历程也是在挑战的过程中不断积累起来的。

这里我们给出几个重要的时间节点。第一个是2018年2月,这是端到端算法在五福场景的第一次大规模验证。这一次也开启了传统CV算法检测分类的规模化应用。同时在2018年,我们还针对OCR这个非常具有挑战性的CV技术方向,开展移动端的轻量化工作,考虑到支付宝在个人业务上对OCR的需求旺盛,结合移动端算法在隐私保护、实时体验、数据风险防护等方面的天然优势。这项工作一直持续到今天,还在进行中。在过去四五年的发展中,我们也保持了比较高的技术水平。

2019年整个短视频业务兴起,在视觉交互这个方向我们看到在各个APP里面已经培养出了非常强的用户心智。针对整个支付宝业务的特点,我们围绕视觉交互这个基础功能,布局了支付宝整个视觉交互技术的建设。

从 2021 年开始,我们开始关注碎片化的硬件环境,和引擎团队一起提出了可扩展建模的技术方案,同时在应用算法层的多个方向验证了一些有效性,后面我会详细介绍这项工作。

端到端视觉算法技术架构

我们经过几年的发展,从模型开发部署到应用,已经形成了一套系统的技术框架,基本上可以分为两大层,前两层是核心算法开发部分,这包括应用算法、网络结构设计,以及我们和引擎团队在研发模型工具链上的一些共建工作,这些工作可以更好地应对前面提到的计算资源有限和碎片化环境的双重挑战,从而提升整个端视觉算法的核心竞争力。

向上的方向是我们对业务端或者用户端的接触,包括两个层面。第一是这个场景模型的自主研发。因为CV算法是场景化的,可能这个业务今天要识别一个杯子,那个业务明天要识别一个笔记本。所以会有很多套路化的需求。特别是对于支付宝来说,自主研发的功能可以大大提高整个应用算法的研发效率,也有助于实现移动端视觉算法能力在各个业务场景的普适性。

另外还有很多可复用的产品能力,可以被多个业务方访问,我们可以把这些能力封装成一些插件或者SDK,提供给不同的业务团队或者技术团队来访问。

轻量级算法设计理念

面对运行环境和资源约束,算法本身的轻量化设计也有很多需要针对移动端进行优化的目标,可以概括为以下三个方面:

首先在网络结构设计上,核心是在基础网络上充分实现轻量和精准的平衡。其次,在网络设计好之后,如何充分利用轻量级网络的容量,充分挖掘网络的容量。第三,移动端本身在应用层面也具备优势,利用这些优势可以进一步提升整个移动端算法最终呈现给用户的效果。因此整个移动端算法的研发不仅仅是一个网络设计问题,需要从算法建模到整个识别流程进行全面的设计,实现效果的整体提升。

1.网络结构设计:网络结构选择

在整体的网络结构设计上,除了网络深度和宽度的调整,整体的设计理念其实借鉴了谷歌在2017年提出的卷积和2018年的卷积,这些思想的引入也对整体的轻量化网络设计起到了很大的推动作用,这些基础卷积层的操作形成了几个比较典型或者说比较知名的框架,比如这个结构,我们在不同的任务中也借鉴了很多这样的卷积层设计,或者说是所谓的设计理念。

另外还有一些工作,我可以引入一些比较轻量的计算模块,来加强一些特征的表达。这对于一些需要提取高级语义的任务会非常有效。比如说文字识别。这里举一些简单的数据,就是前面提到的移动端OCR。因为OCR本身是一个计算非常密集的视觉方向。通过网络结构上的调整,我们对于OCR的检测和识别模型结合起来,做到了1M左右的规模。同时在计算速度上,检测速度基本可以在40毫秒内,可以完成一张图片的文字检测。单行文字的识别速度可以达到9毫秒。

网络结构设计好之后,第二部分的容量就已经确定了。那么如何才能更好的利用这个容量去学习我们需要完成的识别任务呢?比较直观的做法就是蒸馏。蒸馏可以很好的挖掘模型容量。移动端的整个网络结构设计,还是由服务端的一个大网络转化而来,所以通过大网络去学习小网络的蒸馏,可以进一步提高整个网络容量的利用效率,有利于提高整个网络的准确率,减少整体的训练时间,提高训练的稳定性。

2. 培训策略:充分利用能力

关于第二部分,需要强调的一点是数据对于轻量级网络设计的重要性。这里举一个简单的例子,比如一个线性分类器和一个非线性分类器。更多的训练数据对更简单或轻量级的分类器的参数学习更有帮助。

对于轻量级网络来说,数据会变得非常重要。同时数据本身对于所有算法开发来说都是一个难题,特别是对于一些新兴业务来说。这时候我们在弱监督学习的技术方向上用到了很多技术,来提高数据的利用率,让整个小模型也能学到好的知识。

当模型有了网络结构,并且训练好之后,第三个任务就是使用定点计算。定点计算可以进一步压缩网络容量。从我们实际的测试来看,一个INT8的计算就可以替代浮点计算,整个计算速度基本可以提高一倍。同时也可以减少一半的内存占用,这对整体,特别是低端的机器有很大的好处。

这里我举一个训练策略的使用例子。这是一类特殊的网络轻量化。也就是对抗生成模型,GAN网络的轻量化。GAN本身的模型结构就非常不一样,不同的网络整个模型结构就非常不一样。同时它很难轻量化,因为它有一个生成模型,一个对抗模型。它的训练中可能会有多个对抗模型,所以它涉及到同时轻量化多个网络,它的训练其实很难保证稳定性。我们基本上用一个蒸馏的框架来完成这个工作,把这个效果的调优和我们的轻量化设计解耦。我们用统一的轻量化网络结构来完成这个训练。大网络主要给轻量化网络提供数据,供它学习。大分辨率的全图的计算速度和小分辨率的人脸的计算速度都可以达到实时或者准实时的要求。

3. 场景化设计:精准度进一步提升

整个网络结构的模型训练已经完成,在移动端使用时,利用移动端本身的特点可以进一步提升网络准确率。这里我们称之为移动端流式识别和本地化实时计算优势的结合。因为数据的采集和计算都是在本地完成的,所以实时视频流中多帧信息的融合可以进一步提升应用层算法的一些效果。一般来说,我们可以在前处理和后处理两个部分都加入一些这种流式识别融合的模式。

我举两个例子,一个是场景数据,这个是在预处理层面的,比如说在人脸检测或者肢体关键点检测的时候,它可能在多个方向上有很多姿势。但是因为整个动作是一个连续的动作,所以我们在整个使用过程中,在预测和推理的过程中,会利用之前的预测角度去预先修正。在整个模型的学习过程中,我更注重学习一个比较正面的人脸,比如关键点,比如学习一个正面的人的姿势。这样紧凑的样本空间可以降低模型学习的难度。这些应用都是在交互的场景中大量使用的,对实时性的要求非常高。所以我可以把整个模型压缩的更小一点。从整个测试来看,它的预测误差或者预测准确率会有很大提升。除了这个预处理的方法,还有一个就是后处理,这个是比较直观的,主要是提升准确率,或者在感知上的提升准确率,主要提升交互方向上整体的稳定性。比如说上面提到的五福模型,我们并不是用单帧的结果作为最后的结果。 其中采用多帧投票策略,识别准确率可提高到99.9%以上。

对于交互式场景,比如人脸的2D、3D关键点回归,对中间结果进行平滑处理,对于大角度、快动作或慢动作效果都能取得更好的跟踪效果。

碎片化硬件的模型开发

前面我主要介绍了我们在应用算法层面的一些研发思路和整个研发流程。现在介绍另外一个挑战,就是碎片化的硬件环境。我们之前所有的研发模型,基本都是单模型研发模型,这是为了保证支付宝APP覆盖到的这些模型的覆盖率。因为一台机器可能有几十万、几百万的用户在使用,所以我们基本上都是以最低端的设备作为我们的优化目标。这就带来一个问题,我的算力越强,我能用的模型就越大或者说性能越好。这时候为了兼顾低端的机器,它的体验就被牺牲了。

为了避免这个问题,我们在人工开发模式下,会采用一种叫分层模型开发的方法。我会从中端、高端、低端手机中挑选几款主流的机型来开发模型。这个模型本身的开发成本是跟我们挑选的模型数量相关的。这个效率其实很低。为了解决这个问题,我们也在和引擎团队探索另一种新的开发模式:可扩展建模。框架层会提供整个模型训练的开发框架,我们会在应用算法层面去设计这个建模方案。

这里举个我们今年上半年做的一个工作的例子,我们首先需要定义一个动态的、权重共享的超网络,在每次训练的过程中,会采样其中不同的子网络进行更新,收敛之后,这些子网络之间的权重是可以共享的。这个子网络训练好之后,我们就可以对不同子网络的准确率和时间消耗有一个对应的分布点图。有了这个点图之后,我们就可以根据不同模型的性能需求对其进行采样,进而实现自动化的分层模型开发,一次训练就可以生成不同性能消耗的多层级模型。同时它本身就带有网络搜索的概念。所以相比于人工设计,它可以探索更加多样的网络结构。

基于可扩展建模的端到端算法开发

在整个可扩展的建模中,在应用算法设计的层面,我们其实要考虑几个因素。第一,算法开发的loss和评估要一致,这个是比较重要的。因为我们在很多任务中用到这个框架,它的训练可能会不稳定,找到的网络结构可能不够好。这很大一部分是因为它里面的一些不一致,所以这个可以提高整个超级网络训练的稳定性。

第二,整个移动端的算法都会有异构的问题,在异构的情况下,模型设计需要用到适合不同结构或者算子的,这就需要算法和引擎团队一起来做一些取舍。

第三,这是一个提高效率的方案。我不太可能用非常大的模型或者很大的搜索空间去做搜索,这样非常耗时,而且很消耗计算资源。所以在整个应用算法层,在定义搜索空间的时候,我们会围绕现有的轻量级网络结构去搜索,降低整个搜索的复杂度。

下面介绍一个用例,业务模型有两种,第一种是我们最早手工设计的网络结构,第二种是我们通过可扩展建模搜索到的,然后我们抽样出了高中低三个档次的模型结构。

从两个业务模型来看,首先从结果上我们可以得到一个一致的结论,首先这样的框架可以一次性产生多个高性能的层次化模型,其次它有助于发掘模型的性能,在定义好这个结构化的搜索空间之后,得到的微小模型在同样的计算量或者同样的准确率下,它的速度提升其实还是比较明显的,所以这也是我们目前在OCR分割、检测、分类等任务中经常用到的模型设计思维的研发模式。

支付宝的视觉算法能力

通过整个端到端视觉算法的搭建,以及和引擎团队一起进行可扩展建模研发方案的探索,我们现在在蚂蚁或者支付宝的移动端视觉算法,无论是我们的网络结构,还是视觉算法的类型,还是上层应用的暴露,都已经做到了非常广泛的覆盖。这里列举几个我们常用的场景,包括视觉感知任务、视觉交互任务等。同时这些任务在支付宝也都已经封装好了,会以插件的形式提供给内部或者外部用户。

边缘视觉研发的未来前景

最后我想介绍一下我们目前正在做的一些工作,以及未来一两年可能继续探索的三个领域。

第一,网络结构的演进。我们其实正在跟引擎团队一起深入挖掘这个新的架构在终端上的使用,因为它的计算量还是比较大的。我们目前也在用它在一些相应的任务上,主要集中在视觉感知的方向上。比如OCR的检测和OCR的识别,当然它的性能比起传统的CNN结构来说还差一些,还没有达到那么快的速度。但是它的准确率提升是非常大的,我们也在继续往这个方向演进。

第二,训练方法的演进。移动端视觉算法非常依赖数据,我们之前的解决方案都是希望通过弱监督或者主动学习等学习方案,尽可能地利用不全标注样本或者噪声较大的标注样本。今天我们也在探索预训练模型在整个轻量级模型和网络结构训练过程中的作用。现在我们在分割场景和大规模商品识别场景下已经有了一些初步成果,希望以后有机会跟大家分享。

第三,研发模型的演进。这个主要是针对我们整个异构系统的,在引擎团队对可扩展建模的研发基础上,我们希望能够打通从模型结构设计到模型结构搜索的整个链条,在应用部署层面打通整个链条,在支付宝APP中能够实现千机万模型的概念,能够真正直观的为不同模型的用户提供更好的用户体验和算法服务。

分享