百度大脑EasyDL零售版货架拼接技术探秘
在快消行业的商品识别需求场景中,快消品牌商的业务代表在终端门店拜访销售时,需对商品陈列规范进行审查。传统做法需要人工统计,耗费时间长,人力成本高,且数据真实性无法保障。快消品牌商为了对访销过程进行精细化管理,开始使用SFA、DMS等工具进行数字化转型,并探索利用AI技术对现有的数字化访销实现“降本、增效、动销”,推动其规模化落地,最终拉动业绩增长。
EasyDL是基于百度飞桨框架PaddlePaddle推出的面向企业打造的一站式AI开发平台,包括经典版、专业版、零售版三款产品,面向不同人群、不同场景需求,提供高效进行AI模型开发部署的平台产品。其中百度EasyDL零售版围绕零售快消品行业的数字化访销场景,提供了核心的商品检测识别模型及配套服务能力,包括定制商品检测服务、标准商品检测服务和货架拼接服务。标准商品检测服务提供无需训练即可直接使用的商品检测API,支持识别数千种常见饮品和日化用品;定制商品检测服务,提供易操作的定制模型页面,用户仅需要五步便可以定制新的商品识别模型。标准和定制商品检测服务都支持返回商品的名称、品牌、规格和商品在图中的位置,可用于辅助统计完整货架上的商品排面、货架占比、商品分销等陈列指标。由于一些门店内的货架较长,需要对多张货架局部图片进行拼接,才能统计完整货架上的商品陈列指标,因此自动实现货架拼接并智能识别商品,成为快消品行业陈列审核效率提升的重要环节。为了满足这一需求,百度EasyDL零售版推出了货架拼接服务。
百度飞桨EasyDL零售版货架拼接服务支持将多个货架的局部图片或视频,组合为完整货架图片;同时支持使用定制的或标准的商品检测服务对局部货架图片进行商品检测,并在拼接好的完整货架图中输出商品检测结果,其中包含SKU的名称和数量,适用于需要在长货架进行商品检测的业务场景,并且支持云服务调用、离线SDK部署或生成APP。下面,我们来看看货架拼接服务的使用方式和具体实现细节。
1、百度飞桨EasyDL货架拼接服务结构总览
上图是货架拼接服务的整体结构总览图,用户可以通过三种方式使用与体验:1)直接调用云服务API;2)使用离线部署SDK;3)生成体验APP。
在云服务API方式中,为了方便用户对需拼接的货架图片进行上传、查询等动作,我们提供了6个API接口,分别为:创建任务、上传图片、开始任务、查询结果、终止任务和任务列表。其中,在查询结果这个API中,根据任务状态的进度不同,共有六种可能的任务状态,包括:Created(已创建)、Queued(排队中)、Running(正在拼接)、Success(拼接成功)、Failure(拼接失败)、Terminated(已终止)。下图为任务状态的转换图:
离线SDK是将API进行封装后,支持用户快速部署到多种硬件环境中离线使用,满足各类无网络环境或需要高并发返回预测结果的场景使用。
当用户完成模型发布后,在货架拼接服务的页面上可以选择生成体验APP,下载到 手机 进行使用。体验APP支持用户拍摄货架视频,APP会自动对视频进行抽帧获取局部货架图片。如果用户尚未发布一个模型但想要体验APP的使用,也可以通过https://ai.baidu.com/easydl/app/1001/vas/img-stitch 申请邀测权限,步骤如下:
整个货架拼接流程中使用的关键模块和功能包括:
1)Task Manager: 任务信息管理服务,提供了6个通用的API,管理货架拼接任务的meta数据、完成用户对任务的各种操作,对用户数据鉴权等;
2)Daemon Scheduler:后台守护进程,负责扫描和调度可执行的货架拼接离线任务;对任务进行流控管理;任务执行异常检查等;
3)DagTask Scheduler:基于有向无环图(DAG)调度和执行任务。由于货架拼接离线任务流程较为复杂,可以分为若干个子任务,部分子任务可并行执行,通过DAG的方式来组织和运行整体离线任务,可以提升任务的运行效率,后面会详细介绍离线任务的完整结构。
2、百度飞桨EasyDL货架拼接离线任务实现详解
接下来,一起了解下离线任务是如何实现的。货架拼接服务支持用户上传从上到下、横向拍摄的多个视频或者多组局部货架图片,货架拼接任务会先后进行横向和纵向的货架图片拼接,获取完整的货架大图;另外由于用户在百度EasyDL平台训练商品检测模型使用的往往是货架的局部图片,因此需要使用局部图片调用API进行商品检测,并根据拼接参数将检测框的位置校准的拼接大图上。整个流程可拆分为以下5个子任务:
1)调用用户指定的定制或者标准的商品检测模型服务对局部货架图片进行商品检测,获取商品名称和在局部图片上的检测框位置信息。
2)对每一组从左到右拍摄的局部货架图片,获得一张拼接的完整货架图片。
3)经过步骤2,获取N组货架图片横向拼接后生成的大图,对N张大图进行纵向的图片拼接,获得最终完整的货架完整大图。
4) 对于每一组从左到右拍摄的图片,通过步骤2会得到的一组拼接参数,使用这组参数计算,对这组图片的商品检测框的位置进行相应的平移、旋转、拉伸等,将检测框横向校准到拼接大图上的相应位置,并对重叠较多的检测框进行去重。
5) 类似与步骤4,通过步骤3产生的拼接参数,对步骤4横向校准后的商品检测框,再次做纵向的位置校准,得到商品在最终大图上的位置。
整个流程总体可以组织如下所示的DAG:
从上图可以发现,在任务开始阶段,子任务1和2没有依赖的关系,可并行运行;在子任务2成功后,任务3即可运行,无需等待子任务1的结果;通过DAG方式可以使得子任务局部并行运行,加快整体拼接任务的处理速度。 另外,货架图片拼接子任务通过容器化的方式运行,避免对部署环境的依赖,提升可扩展性;通过调度资源工具,避免GPU、CPU等资源的抢占冲突,提升拼接任务的可靠性。
3、百度飞桨EasyDL货架拼接算法详解
纵观整个货架拼接离线任务,其中较为核心的还是货架拼接算法,算法的设计决定了拼接任务的速度、可靠性以及结果的准确性等。下面,将对货架拼接算法进行详细介绍。
3.1、货架拼接算法
货架拼接算法本质上是属于图像拼接算法的范畴,在图像拼接算法中,目前主要有三种不同的方法:1)全局对齐方法,以一个单应性矩阵来对齐图像,通过求解相机参数对图像进行变换和融合,输出拼接图像;2)空域变化绘制方法,将图像划分为密集的网格,每个网格都用一个单应性矩阵对齐,然后对每个网格进行优化变形,采用全局对齐类似的方法对网格图像进行拼接;3)缝合线主导方法,以匹配图像之间的缝合线为主导,不用严格去对齐整个重叠区域,而是只对齐缝合线附近的区域,通过缝合线实现图像的拼接。
而对于货架拼接的场景来说,拍摄图片的方式一般都是手机端平移拍摄,存在拍摄的角度比较随意、拍摄距离近、需要拼接的图片数量比较多的问题。而在上述的图像拼接算法中,全局对齐方法要求各次拍摄时相机的光心近乎重合,即拍摄时相机只能做纯旋转运动,对拍摄方式的要求很高。空域变化绘制方法和缝合线主导方法对匹配的特征内点的数量和质量要求较高,而且需要调整更多的超参数,计算量较大,拼接速度慢,无法用于大量图片的拼接任务。因此,上述几种图像拼接的方法都无法很好地解决货架拼接场景存在的问题,不能直接用于货架拼接。
针对上述货架拼接场景存在的问题,我们在全局对齐方法的基础上对拼接算法进行了优化。首先,针对平移拍摄角度比较随意的问题,在进行货架图像拼接之前,我们对输入的货架图像进行水平矫正,将所有图像都矫正到相同的拍摄视角下,这样可以有效减小拍摄角度对拼接效果的影响,拼接效果有了很大提升。其次,当输入的货架图片数量较多时,为了减小拼接难度,提高拼接的效率,我们自动对输入的货架图片进行分组,将大量图片的单次拼接分解成少量图片的多次并行拼接,可以有效降低拼接时间。
在分组拼接的过程中,我们采用与全局对齐类似的方法对单个分组的货架图片进行拼接,通过货架图像之间的匹配、变换和融合,得到每个分组的拼接图片。之后对多个分组的拼接图片进行合并,输出整个货架的拼接图片和拼接参数。货架拼接算法的整体流程如下:
3.2、SKU检测框合并去重
SKU检测框合并去重整体流程图:
对于在相邻图片重叠部分的SKU,其在两张图片上都会被检测出来,因此我们需要对这部分SKU进行合并和去重,去除相同的SKU。具体步骤如下:
1)将每张图片上检测到的SKU检测框坐标根据货架拼接的参数进行变换,将单张图片上的SKU检测框坐标转换成拼接图片上的SKU检测框坐标。
2)对于当前图片上的每个SKU检测框,当与其他某个SKU检测框之间有重叠部分,且重叠部分的交并比(IOU)大于某一个阈值时,判定这两个SKU检测框属于同一个检测框。
3)根据这两个SKU检测框的坐标以及置信度进行合并去重,得到最终的SKU检测框坐标。
4)当对所有图片上的SKU检测框都进行合并去重后,统计拼接图片上的每一个种类的SKU检测框的数量,可以得到整个货架上SKU的种类以及数量,输出整个货架上SKU的统计信息。
以上为百度飞桨EasyDL零售版货架拼接服务架构和算法详解的全部内容,为了全面助力快消品牌商对访销过程进行精细化管理,围绕快速消费品企业在线下渠道中的销量逻辑,百度大脑推出了基于AI技术的数字化访销解决方案,在EasyDL零售版的基础上,还提供翻拍识别、门脸识别和门店拜访行程规划等AI能力,帮助品牌商有效提升一线业务人员人效,最终实现销量的增长。
目前已有多家零售快消品牌商和服务商在实际业务中使用百度EasyDL零售版,提升终端门店管理与执行的效率和效果,准确地洞察商品在货架上的真实信息,让数据分析更高效精准,有效缩短决策时长,从而实现市场运营与决策的智能化。