在“何时何地何人对何种商品发生了兴趣?”这个问题中,时间地点上要求精准地确定顾客的行为发生在哪个时刻、位于门店内的哪个货架附近;并要求准确的关联顾客,甚至关联上顾客的年龄、性别、新老客等属性;以及要求准确地确定是哪个SKU的商品被翻动或者拿起。与自动售货柜、线下大屏等场景不同,监控视角下相机离货品过远成像不清晰,同时商场和超市中的货品排列密集成像不完整,因此视觉相机只能大体用于判断顾客是否有翻动商品的动作,但是不能直接获得“人-货-场”中货品的信息,如图所示。
图1. 顾客翻动商品快照
为了解决该问题,我们使用了目前在新零售场景中广泛使用的无线射频电子标签(RFID),用于探测被用户翻动的商品。被动RFID标签价格低廉,可以广泛装配在服饰等货物中。算法目前给出了“何时何地何人与何种商品发生交互”的数据,整体的实现流程如图所示。
图2. 人货动作检测整体技术框图
其中,远程实体店中装配有监控摄像机设备与RFID接收器设备,分别录制实时视频与RFID标签受激反射的时序信号;其中监控视频通过在实体店中布署的远端服务器运行顾客检测算法得到有行人的图片,只将检测到的行人图片回传到后台,RFID时序信号信号量较小因此全部回传到后台;后台服务器环境中,首先基于回传的RFID信号与检测哪些RFID标签可能被翻动了,由于店铺服务员已经将RFID标签的EPC编号与商品的SKU编号关联入库,基于被翻动的标签EPC编号可以取到对应商品的SKU;同时,回传的顾客图片被送入Mobilenet分类器中进行分类,检测出疑似有在翻动商品的顾客,并根据顾客的图像坐标进行坐标变换,得到该顾客的真实物理坐标;最后,将检测出的疑似被翻动的商品与疑似有翻动商品动作的顾客基于时间和动作的可疑程度进行关联,得到商品与行人的最佳匹配,从而实现检测“何时何地何人与何种商品发生交互”。
本文讨论其中的三个关键的技术点:
基于图像的顾客动作检测算法;
基于射频信号的商品翻动检测算法;
基于二部图匹配的人货关联算法。
基于图像的顾客动作检测算法随着业务与布署的需求经历了基于视频检测到基于单帧图像检测的演变过程。
1.1 视频图像动作检测
1.1.1 问题分析
与行人、人脸检测等问题不同,顾客与商品的交互动作是一个时序过程,例如“拿起”、“翻动”、“试穿”等都是有一定时长的时序过程,因此理解用户的行为是一个典型的视频动作分类问题。视频级动作理解主要研究基于整段视频进行模型学习与预测。随着深度神经网络的广泛应用,视频动作理解技术在近期得到了很大的发展,比较著名的有2014年的CNN模型[1]、2015年的LRCN模型[2]和2017年的I3D模型[3]。其中LRCN在单帧图片上使用2D卷积提取特征,在帧与帧之间使用RNN提取时序关系,获得了较好的效果但是训练耗时巨大;I3D模型基于3D卷积真正实现对整个视频进行特征提取,同时训练速度加快了很多。
但是开源的数据集例如UCF101, HMDB51, Kinetics只有有限的几类常见体育运动、乐器演奏活动等动作,并未包含商超场景下的数据。因此我们自主构造商超场景下的动作视频,并提供给外包进行标注。商超场景下顾客与商品发生交互的过程是极其短暂的,在全天视频中有顾客行为的的时段约只有0.4%,正例特别稀疏。为了尽可能发掘正例样本,提高外包标注效率,我们使用Lucas–Kanade光流算法对视频进行了预处理,通过初步判断视频中有无活动目标筛选视频,经过该处理后,将样本中正例的比例提高到了5%。为了提高样本的置信度,我们同时还对样本中的正例进行了校验标定,确保正例的准确性。
为了检测在视频中发生的动作,本文尝试了:
基于人体关键点检测算法(Pose)与跟踪算法(Track)自动裁剪得到每个顾客每只手的实时短视频;
基于Inception-V1 C3D(I3D)模型训练手部动作的分类器,并对I3D模型进行了裁剪优化。
裁剪顾客每只手的短视频有助于精确确定动作发生的位置,同时由于顾客对商品的翻动动作一定是通过手部进行的,因此顾客身体的其他部位对检测结果没有直接影响,而关注于手腕局部有利于减小模型计算量、加快模型收敛,其中算法涉及的Pose模型基于Open Pose[4],Track算法基于Deep Sort[5],均有成熟的模型可以直接使用。
本文主要讨论对Inception-V1 C3D模型应用于理解手部动作视频的研究。基于图片的学习任务通常使用2D卷积核在图像上滑动并池化实现特征提取,而基于视频的学习任务要求将传统的2D卷积扩展到3D上,在视频中滑动并池化实现特征提取。如图所示,3D卷积相比于2D卷积多了一个时间维度。
图3. 2D卷积池化与3D卷积池化操作示意图
本文使用了新近提出的Inception-V1 C3D(I3D)模型,该模型将传统的Inception-V1模型扩展到3D维度,在Kinetics, HMDB51, UCF101数据集上取得了目前最好的效果。I3D模型框图如图所示。示意图中所有的卷积与池化操作都是3D层次上进行的,其中Mix模块是Inception V1模型中的Inception感知子模块,由4个branch构成,如右侧所示。
图4. I3D模型框图(左)与Inception 子模块结构
实际应用在商超顾客行为理解的任务中时,我们发现3D卷积带来模型参数过多,极容易过拟合,同时网络程度过深也导致模型泛化能力差,dropout作用微弱等问题,因此我们对Inception-V1模型作了简化,去除了模型中不必要的多层Inception模块(Mix_4c, Mix_4d, Mix_4e, Mix_4f, Mix_5c),并将每个Inception模块的卷积核数量(depth)调少至原来的1/2,将模型简化为如图所示:
图5. I3D模型的裁剪改进
该简化操作将模型分类准确度(Accuracy)从80.5%提高到87.0%,进一步调试超参,最终分类Accuracy提高至92%.
我们将样本使用tfrecords处理之后,上传到了集团数据存储中心,并使用PAI在分布式环境中进行了模型训练(30张GPU卡),并将训练所得的模型应用于理解顾客的动作,算法目前实现的实际预测效果如视频动作检测结果.mp4所示,目前在服务器下可以实现实时的对单路视频中的顾客动作进行检测,但是视频动作分类检测相比于传统的图像分类任务存在的问题主要有:
模型复杂度高,三维卷积(C3D, Convolutional 3D)需要同时在时间与空间上进行;
数据规模巨大,训练困难,相比于图片,视频数据规模扩大了数百倍到数万倍;
实际部署模型挑战大,视频动作模型在实用过程中的预测时间效率,组织时序样本,滚动窗口预测等方面都存在极大的挑战。
基于视频卷积的顾客动作检测算法有较高的精度(92%), 并能给出准确的动作位置(精确到手腕位置),但是由于视频3D卷积模型和Pose模型参数多复杂度高,一台服务器只能跑一路检测算法,给计算性能带来沉重的负担,同时三维卷积算法要求精准关联一段时间以内的手部连续视频,给Tracking算法也带来很大挑战。为了让动作检测算法可以适应于多路监控信号多个店铺的场景中,我们进一步发展了基于单张图片的可疑动作检测算法,对单张图片直接进行疑似动作的分类检测。单张图片的可疑动作检测由于信息较少,准确性相对于基于视频的动作检测算法偏低,但是通过与RFID检测结果相互融合校正,可以弥补其准确率较低的缺陷。
基于单张图片的疑似动作检测是经典的二分类问题,为了减小对计算能力的需求,我们使用了MobileNet[6]作为分类模型。MobileNet是微软提出的一种高效轻量的网络模型,主要基于depth-wise convolutions和point-wise convolutions对传统的卷积层进行了计算量上的优化。与传统卷积网络相比,MobileNet在保持精度几乎不变的同时计算量和参数数量可以降到原来的10%~20%左右。本文中,使用了MobileNet_V1版本模型,并设置卷积通道数因子Depth multiplier为0.5以进一步减小模型规模。我们通过外包标注了图片动作数据集,并对样本作了均衡处理以保证训练过程中正负样本数量一致。同时,考虑到业务场景中希望尽可能捕捉到用户有动作的瞬间,因此我们根据模型Logits输出进行了最优化参数寻优,在保持分类精度(accu)89.0%左右时,提高正例召回率(recall)达到90%,确保正例尽可能被召回,如下图所示。
图6. MobileNet模型优化
基于图片的动作检测算法对动作的分类精度可达89%(略低于基于视频的动作检测算法,同时无法精确到手腕位置),召回90%。下图展示了模型预测出的行人是否有拿取衣物的动作,其中图片下方灰白色条纹表示模型检测动作为正例,图片下方黑色条纹表示模型检测动作为负例。
图7. 基于图片的动作分类结果示例
由于基于图片的动作检测算法基于轻便的MobileNet模型,大大降低了计算复杂度,对一家门店全天的数万张可疑图片进行预测耗时只需要十分钟左右。同时算法可以只对回传到后端的图像处理,大大降低了现场设备与服务器的负担。但是基于图片的动作检测算法只精确到行人位置,不能给出精确的动作位置,同时同一个动作在前后若干秒内的图片都有可能被检测为正例,对时间关联准确性也有一定影响。
当顾客翻动衣服时,挂扣在衣服上的RFID标签会随之发生微小抖动,RFID接收机设备记录标签反射的信号RSSI,Phase等特征值的变化,回传到后台,算法通过对每个天线回传的信号值进行分析判断商品是否发生翻动。基于RFID信号判断商品翻动存在诸多问题,包括信号自身噪声、环境多径效应、偶然电磁噪声、货柜对信号遮挡的影响等。同时RFID反射信号的大小与接收器离标签距离远近存在非线性关系[7],
其中,d代表RFID标签与接收器之间距离, l=d mod λ, γ受Multipath和当前环境的影响,μ表示各种静态设备误差带来的偏移。从公式中可以看出,接收器安装的位置,商店环境等都会给RFID信号带来很大影响,寻找统一的可以适用于不同商店、不同位置接收器的翻动判断算法存在很大挑战。
我们首先尝试了建立监督模型检测商品是否被翻动,通过收集门店中实际布署的两个不同RFID天线采集的标签RSSI与Phase时序信号,并手工组合了以下特征:
其中Ant1, Ant2表示两个不同天线对同一个标签采集到的信号,Diff表示对信号的差分运算,Avg表示对信号的均值处理。最终以每秒50帧,每个样本采集8秒连续信号形成400×10的二维特征。并使用自主构造的数据集基于以下模型进行训练,最终实际分类精度为91.9%。
图8. RFID CNN模型
使用基于有监督模型的检测算法可以获得较高的商品翻动检测精度,但是实际应用过程中发现模型泛化能力很差,当店铺货柜发生移动或者天线位置发生移动时,信号发生剧烈变化,基于原先数据集训练好的模型很难泛化到新的场景中去。因此,我们进一步尝试了基于无监督模型的算法,力图提高检测算法的泛化能力。特别的,我们注意到:相位信息与空间位置无关,但是与相对位移有关:相位信息频率分布图;频率信息与空间位置无关,但是与动作快慢有关:频域信息频率分布图。
严格意义上,频率信息中的幅度信息与空间位置存在关系,但是当我们只关注于频率分布(不同频率成份的占比)时,可以将频率信息也当成与空间位置信息无关的特征。频率信息的获取需要对RSSI信号与Phase信号进行离散傅利叶变换:
然后统计频率信号与相位信号的分布图。对得到的分布图,计算当前分布与前一个时刻分布的JS散度(相对于KL散度,JS散度具有加法的对称性,因此可以用来衡量多个分布之间的相对距离)。
基于相邻时刻前后两个样本的JS散差异对商品的翻动行为进行检测,根据场景调节最终JS散度差异值域值可以得到与基于监督模型相近的动作检测精度。
基于监督模型与无监督模型对商品的翻动情况进行了检测,算法给出了精确的被翻动的商品(SKU),监督模型检测精度可达91.9%,无监督模型的检测精度可达94%(高于监督模型),同时使用JS散度度量提高了算法的泛化性能,根据不同场景轻微修正域值,检测算法就可以适用于不同的场景。
显然,基于图像的顾客行为检测与基于RFID的商品翻动情况检测是分离的两个过程:
基于RFID的检测给出了商品被翻动的情况,但是不能给出翻动动作对应的顾客;
基于图片的动作检测给出疑似在翻动商品的顾客,但是不能给出是哪些商品被翻动。
在实际场景中,同一位置同一时刻通常只有少数的几个动作发生,因此可以根据RFID检测出的商品被翻动的时刻和图像检测出的在翻动商品的顾客的时刻进行匹配,将翻动商品的顾客与被翻动的商品关联起来。但是存在的问题是:
图像检测出的动作时刻与RFID检测出的动作时刻累计误差可达5~15秒。RFID信号、监控视频信号回传到服务端过程的传输时间差、现场设备时钟不同步导致的时间差、算法估计动作时刻不准都会带来两种检测算法的时刻不一致。
邻近时刻邻近位置可能有多个可疑顾客和多个可疑被翻动商品。
我们对同一个货架附近的RFID设备检测出的动作与图像检测出的动作进行关联,并在关联动作时,同时考虑了时刻一致性与动作可疑程度的匹配性。确保同一货架同一时刻确实有拿取商品的顾客关联上确实被拿取的商品。当有多个顾客在同一个区域均有可疑动作或者多个商品在同一个区域均有可疑的被翻动情况时,进一步通过二部图匹配算法,找到多个商品与多个顾客之间的最佳匹配。 本文中,顾客与商品的匹配程度(边权)定义为:
表示第i个顾客翻动第j个商品的可能程度,其中
是基于Sigmoid函数描述的顾客与商品动作时间一致性函数,
是MobileNet模型对输入顾客图片预测的动作概率,
是模型对输入RFID信号预测的动作概率。最大化顾客与商品的匹配程度是一个带权二部图匹配问题,我们使用了的Hungarian[8]匹配算法对商品与顾客进行匹配,考虑到业务场景中顾客常常分批次进店购物(通常间隔十几分钟同时进店两三个人),商品与顾客通常只在很短的几分钟时间内存在可能的匹配关系,该二部图实际上由多个不连通的子图构成(如图所示):
图9. 人货匹配的二部图中存在多个子图
因此我们在匹配算法之前先将二部图分成了多个不连通的子图,对每个子图单独进行匹配以降低计算与存储复杂度。在使用邻接矩阵存储边权关系时,分成子图匹配大大提高了算法效率,将匹配全天数百至数千个顾客与商品所耗费时间从数个小时降低到了几分钟的量级。
基于二部图匹配的人货关联算法可以得到商品与顾客之间的全天最佳匹配,改进后的算法大大提高了计算效率,将匹配全天顾客与行人耗费计算时间从数个小时降低到几分钟以内。同时,人货关联算法是整体人货关联的最终环节,人货关联的准确性受到顾客检测准确性、基于单帧图片检测的顾客动作准确性(89%)、基于RFID的商品翻动行为检测准确性(94%)以及人货关联匹配程度准确性等各个上游算法模型准确性的影响。
我们整合了上述算法:
基于图像的顾客动作检测算法;
基于射频信号的商品翻动检测算法;
基于二部图匹配的人货关联算法。
并在门店中进行实际预测。为了便于理解,这里给出了算法检测出的若干示例结果:“何时(时刻)、何地(图像坐标)、何人(行人ID)、与何种商品(商品SKU)发生交互”。
其中行人ID是顾客检测算法为进店用户赋予的编号,坐标这里给出的是图像中的坐标,并在下游流程中可以变换至其在店铺中的物理位置,SnapShot是算法匹配上的顾客在翻动商品的瞬间。
基于单帧图片的动作检测尽管精度偏低,但是对提高顾客与商品的关联准确性却有明显的作用。我们对比分析了不作单帧图片动作检测关联得到的人货数据与基于单帧图片动作检测关联得到的人货数据,发现基于单帧图片的动作检测算法将匹配的最终准确率从40.6%提高到了85.8%。
由于人货关联算法是整体人货关联的最终环节,人货关联的准确性受到各个上游算法模型准确性的影响,我们通过时间关联程度与动作可疑程度两个维度同时进行匹配,使得最终的匹配行人与翻动商品的准确率可以达到85.8%。说明了:
人货场精细到商品SKU与行人动作秒级的关联是切实可行的;
基于无监督的RFID检测算法可以降低规模化部署商品翻动检测算法的难度;
基于单帧图片的行人动作检测算法切实有效并可以直接在后端服务器环境规模化布署;
同时,算法目前仍处于初级阶段,在以下若干个方向中仍需进一步化化扩展:
1.基于单帧图片的行人动作检测算法仍有很大的优化空间:数据集从千张正例提升到数万张正例可能可以带来显著性能提升,服务器可以承受更多的计算压力,因此分类模型可以尝试VGG, ResNet, Inception等更优的模型。
2.目前的单帧图片动作检测算法位置上只精确到行人位置,可以尝试检测模型将定位精度精确到动作发生位置。
3.目前RFID接收器只能检测附近1~3米内几十个商品到几百个商品的信号,同时RFID接收器的采集频率,天线轮询机制对RFID检测的容量与范围带来很大限制。RFID检测算法从硬件层开始优化可以实现大大降低成本并提升检测容量、范围与精度。
4.无监督的RFID商品翻动检测算法依赖域值调试,寻找可以泛化到不同门店的无监督检测算法仍然有很大优化空间。
5.关联人货目前基于时间与动作可疑程度,进一步可以依据粗略的商品位置与行人位置进行关联,对于提高关联准确率将会有较大作用。