基于深度学习的复杂场景中卷烟烟盒检测与识别方法
2021-11-22单宇翔龙涛楼卫东陆海良胡红春李轩
单宇翔,龙涛,楼卫东,陆海良,胡红春,李轩
1 浙江中烟工业有限责任公司信息中心,杭州市上城区中山南路77号 310008;
2 深圳爱莫科技有限公司,深圳市南山区国际创新谷1期2栋A座 518000;
3 中国烟草总公司职工进修学院,郑州 450008
零售终端是烟草产业链的重要组成部分,是烟草实现最终销售的关键环节。随着控烟政策日益趋紧,烟草品牌宣传途径愈发狭窄。终端陈列对于卷烟品牌培育、产品动销的作用愈发凸显,决胜终端对烟草企业而言更多了一份特殊的意义。烟草工商业企业各项工作开展和针对零售终端的众多营销活动,都需要对卷烟烟盒(本论文中的卷烟烟盒指的是卷烟陈列场景中的卷烟小盒,简称烟盒;烟盒图像指的是对该场景进行拍照得到的烟盒外观图像)进行识别和分析,以进行卷烟市场表现评估(陈列分析、上柜率检查)、零售终端评价、库存盘点、零售终端信息采集等。
传统的流程采用人工对图片中的每一个卷烟烟盒图像进行辨识、判断,工作量巨大,且难以对市场上的数量巨大的所有卷烟烟盒实现准确的辨别,容易导致识别和判定结果出错。近年来,图像识别算法得到了快速的发展,特别是基于深度学习的方法[1],在很多场景得到了广泛应用,例如根据图像内容进行分类[2-3],无人驾驶场景进行车辆或者行人的检测[4-9],以及广泛应用的人脸识别[10-13]。在上述这些领域,深度学习技术极大降低了人力成本,提升了任务精度和速度。但在烟草领域,除了在工业生产[14-15]和零售支付场景中的传统的烟盒条码识别,深度学习技术并未得到广泛和有效的应用。
造成这一局面的主要原因,在于深度学习的主流应用场景与烟草应用场景存在着较大的差异,现有技术无法有效应用到烟草的相关场景中。以陈列场景的烟盒识别为例,由于不同业务场景的差异,卷烟烟盒会以各种形态出现。比如在终端陈列时,卷烟烟盒会在零售店铺的前柜和背柜中成行成列地密集摆放,在宣传样品中会独立存在于宣传陈列架里。由于零售终端本身业态情况复杂,包含了街边店、超市、便利店、烟草直营店等多种类型。店铺条件差异大,使得烟盒图像本身的差异巨大;加之受到拍摄人员、拍摄设备、拍摄条件等影响,使得拍摄的烟盒图像无法标准化,出现较多的玻璃反光、遮挡、不同角度摆放等;另外烟盒规格本身数量多,新品更新迭代快,某些品牌不同规格之间在外包装上差异非常小,不同品牌的规格之间也有很多具有较强的相似性。图1 和图2 展示了一些比较典型的烟盒陈列图片和相似性规格的烟盒情况,从图中可以看出卷烟烟盒识别所需要支持的复杂程度非常高。
图1 零售终端复杂的烟盒图片场景Fig. 1 The cigarette packs placed in complex retail stores
图2 部分规格之间的外观差异非常小,上面一行为同一品牌,下面一行为不同品牌Fig. 2 Visual similarity in appearance of cigarette cases. Top row: the same brand. Bottom row: different brands
采用主流的深度学习图像识别方法(如人脸识别的框架模型)来进行卷烟烟盒识别,面临以下几个方面的挑战:1)卷烟烟盒外观图像的角度随意性更大,人脸识别、车辆识别这类问题,目标对象的呈现姿态相对固定,基本都以正立的方式出现在图片中。主流的目标检测算法例如Faster R-CNN[16]、YOLO[17],对于大部分处于正立状态的目标对象,经过大规模的数据对深度学习模型训练后,都可以实现较好的检测。而对于任意摆放和拍摄的烟盒对象,这些方法都存在着检测能力弱的问题;2)烟盒图像往往会密集出现,相邻摆放,使得检测和识别的难度增大。在一般图像识别任务中,即使对物体没有进行很好的定位,目标周围基本都以背景为主。陈列条件下的烟盒识别中,相邻烟盒对识别会产生较大干扰,是准确烟盒识别的一大挑战。因此,烟盒检测和识别的关键在于如何对属于该烟盒的区域信息进行有效的提取,保证属于本烟盒的外观图像内容包含在内又不引入相邻烟盒图像的干扰信息;3)基于深度学习训练烟盒识别模型需要大量的训练样本。而烟盒的陈列场景环境复杂,烟盒与周围商品很难区分,该情况极大地增加了人工标注的难度,对构建烟盒识别深度学习模型带来了巨大挑战。
为了解决在复杂场景下的烟盒识别问题,应对以上提到的实际挑战,本论文首次提出了三个核心步骤的卷烟烟盒识别框架:1)卷烟烟盒可视区域检测;2)卷烟烟盒图像几何正则化;3)基于仿真图像训练的卷烟烟盒识别。其中,烟盒可视区域检测将目标检测问题转化为实例化区域分割问题,有效的应对多角度拍摄和烟盒相邻太近的挑战;然后根据实例分割结果,拟合烟盒可见图像关键点,根据可见区域的关键点实现图像变换,将烟盒视区域变换到正立的烟盒图像模板,实现烟盒图像的正则化;最后,为了应对训练数据不足的问题,本论文采用基于人类知识的烟盒图像仿真增强方法。对于单一规格的单张图片,实现各种复杂场景的图像模拟和数据的大规模增广,基于增广后的仿真图像大数据实现深度学习模型的训练。
综上所述,本论文将烟盒实例化分割和烟盒图像几何正则化步骤结合起来,消除了拍摄角度对识别的影响,并通过图像仿真方法解决了烟盒真实数据相对匮乏和深度学习需要大量训练样本驱动之间的矛盾。通过以上设计的新型架构和方法,最终有效构建了复杂场景下的烟盒图像识别系统。
1 烟盒识别系统
本论文设计了完整的烟盒识别系统,如图3 所示,包含烟盒可视区域检测-烟盒图像正则化-基于仿真图像训练的烟盒识别三个基础步骤。
图3 烟盒识别系统的流程Fig. 3 The flow of cigarette cases recognition system
1.1 烟盒外观可视区域检测
烟盒可视区域检测的目的是将属于烟盒的图像从背景图片中区分出来。在行人、车辆、人脸等通用检测任务中,被检测目标通常比较稀疏,角度旋转情况较少。通常采用Faster R-CNN 或YOLO 等检测算法来预测目标的左上、右下两个顶点坐标。
但在卷烟烟盒图像检测任务中,由于环境的复杂多变,卷烟烟盒的密集摆放、陈列角度的多变都会显著降低上述算法对非正立的烟盒检测效果,且容易遗漏部分有效区域,或者误包含其它规格烟盒区域。如图4 所示,由于烟盒拍摄角度有倾斜,导致3 个示意框都无可避免地将不属于自己的区域划入了示意框范围内。这种干扰引入势必影响到烟盒识别的精度。如右上角的“红塔山”纹理将右边的“云烟”包了进来,在识别过程中,“云烟”纹理带来的干扰信息识别影响“红塔山”纹理的正确识别。
图4 用主流检测算法检测卷烟烟盒得到的结果(如红框所示)Fig. 4 The cigarette cases detection results obtained by using traditional algorithms
为了克服上述问题,本文利用实例分割来精确检测出每个烟盒的有效区域。为了训练模型,本文收集并标注了30 万张烟盒陈列图片,每张图片都对每一个像素点进行了标定,指明该像素属于前景,还是属于背景。本系统采用了Mask R-CNN[18]模型作为检测模块,在8 块RTX 2080Ti 显卡服务器上,利用手工标注的30 万烟盒对其进行训练。与YOLO、Faster R-CNN 等算法相比,Mask R-CNN 不再是输出一个典型的正立矩形框,而是将目标检测问题转化为一个实例分割问题,对于每个图像的像素点进行赋值实现区域分割。Mask R-CNN 的结构如图5 所示。
图5 Mask R-CNN 的处理流程Fig. 5 The main process of Mask R-CNN
当陈列图像输入Mask R-CNN 网络后,网络首先检测出每个烟盒的最小外接矩形,而后对每个烟盒的最小外接矩形进行像素点级别的分割,将烟盒区域和其它干扰像素完全分开。与主流的正立矩形框目标检测算法相比,本文的检测模型不受烟盒旋转、排列、朝向等因素的影响,对相互交叠的烟盒也能给出较为精准的判断,部分结果如图6 所示。从图中可以看出,本文的检测结果不受烟盒摆放的影响,能够准确预测出每一个烟盒的位置。
图6 卷烟烟盒检测结果,其中绿框表示检测得到外接矩形,不同颜色的色块表示烟盒的实际区域Fig. 6 Cigarette cases segmentation results. The green rectangles represent the predicted bounding boxes, and blocks of different colors indicate the actual area of the cigarette case
1.2 烟盒图像几何正则化
由于通过检测模型得到的卷烟烟盒图像位置是不规则的分割结果,如果直接进行识别,即使同种烟盒的外观都会呈现出多种变化,影响识别效果。这种问题如图7 所示。
图7 同一种烟盒在不同角度成像,外观会有很大差异Fig. 7 The appearance of the same case varies greatly under different angles
为了消除这种差异性,本文设计了卷烟烟盒图像正则化模块,将每一个烟盒的形状修正为正方形,再进行后续的识别。正则化模块的主要流程有三步:计算烟盒顶点,计算透视矩阵,进行透视变换。
首先,本文对检测模块的输出的烟盒图像分割结果的前景区域进行轮廓检测,提取出所有轮廓点的坐标,再通过对图像轮廓点进行四边形拟合,从而得到烟盒的四个顶点。具体流程如图8 所示。
图8 卷烟烟盒顶点的获得流程Fig. 8 The process of calculating the key points of the cigarette case
而后,本文定义了边长为256 像素的正方形,则正方形的四个顶点坐标分别为(0,0),(0,255),(255,255),(255,0),通过计算求解出烟盒屏幕和正方形屏幕之间的透视变换矩阵。
根据透视变换原理[19],在3D 空间中两个平面上的点进行变换满足下列关系:
而空间中的点(x,y,z)在屏幕上的投影(x',y'),可通过下列公式计算:
令烟盒四个顶点的3D 空间坐标为(xoldk,yoldk,zoldk),屏幕投影坐标为(xoldk',yoldk'),正方形四个顶点的3D 空间坐标为(xnewk,ynewk,znewk),屏幕投影坐标为(xnewk',ynewk'),k= 1,2,3,4。则易知:
根据公式(1)(3),进一步推理出烟盒屏幕顶点坐标与正方形屏幕顶点坐标之间的关系:
进一步化简得:
为了方便计算,引入8 个新变量β11,β12,β13,…,β32,最终方程表示为:
其中:
因为烟盒和正方形4 个顶点之间映射关系构建了8 个方程(x 坐标和y 坐标分别都有映射关系),而方程中的未知数a11~a32刚好也是8 个,易得知:通过烟盒与正方形顶点的映射关系可以求解出β11~β32这8 个未知参数。
最后,本文根据计算得到的透视变换参数β11~β32,对整个烟盒纹理进行透视变化,就能得到最终正则化的烟盒纹理,部分效果图9 所示。可以看出:几何正则化的烟盒在相似度上有了很大的提升,更利于后续的识别任务。
图9 原始烟盒图像与正则化后的烟盒图像的对比Fig. 9 Comparison of original case image and cigarette case image after regularization
1.3 基于仿真图像训练的烟盒识别
烟盒识别模块是本系统的最后一个模块,将正则化后的烟盒图片送入烟盒识别模块,就能得到烟盒图片的识别结果。本论文采用了在人脸识别领域性能优异的DocFace[20]模型,将该模型提出的diam_softmax方法用于卷烟烟盒识别器的训练中。DocFace 的优点在于对非同源数据的训练上有着较好的性能,能够充分利用生成样本存在的多样性,提高模型在真实场景上的识别性能。
通过自主研发的数据仿真引擎进行样本增广,构建烟盒3D 模型和设定不同的光照、角度、反光、遮挡等控制参数,从而获得各种外观不同的训练样本,有效解决训练数据不充足的问题。部分仿真引擎生成的图片效果如图10 所示。与深度学习领域常用的对抗生成网络技术(Generative Adversarial Nets)[21]相比,我们的数据仿真引擎能保证生成的每一张样本都严格归属于特定类别,不会出现模棱两可的训练样本。利用仿真引擎,生成了1000 个畅销烟品近1000 万张烟盒图像样本。
图10 通过仿真引擎生成的虚拟训练样本Fig. 10 Virtual training samples generated by simulation engine
将得到的数据,利用DocFace 框架在GPU 服务集群(8 片英伟达RTX 2080Ti 高性能显卡)上进行训练。得益于仿真引擎生成的大量有效仿真数据,训练得到的算法模型可以准确地区分不同规格的烟盒,识别效果如图11 所示。无论是在外观上只有细微的差异,还是实际场景中造成了烟盒部分的遮挡,智能图像识别系统均可以进行准确的识别。同时与构建的规格数据库实现关联,准确的输出产品属性信息,包括厂商信息、品牌信息、规格名称信息等。识别范围覆盖中国市场上流通的国内卷烟品牌规格和国外进口的卷烟品牌和规格。同时还可以处理各种复杂的陈列情况,包括光照变化、遮挡、角度大等实际情形。
图11 卷烟烟盒识别结果展示Fig. 11 Demonstration of cigarette cases recognition result
2 实验验证
本论文设计的深度学习方法采用PyTorch 框架进行训练,硬件环境配置为2 个Intel® Xeon® E5-2650处理器,8 块NVIDIA GeForce RTX 2080Ti-12G 计算显卡,服务器硬盘为100TB,内存为512GB。其中检测模型训练的时间为1 周,识别模型的训练时间为1 周。然后对训练的模型进行测试。从真实的烟品陈列场景中挑选出200 张图片作为测试集,部分测试样本如图12 所示。
图12 测试数据集图片样本Fig. 12 Image samples of test data set
运用手工方式标注每个烟盒的区域与类别,一共得到10000 个左右的标注烟盒和品名。通过对比系统输出与人工标注结果的差异来测试烟盒检测与烟盒识别的性能。
2.1 卷烟烟盒检测实验结果
用公式(8)评估单个卷烟烟盒的检测精度:
其中areapred表示预测模型给出单烟盒前景区域预测值,areatruth表示人工标注的单烟盒前景准确值,通过对二者的交集除以二者的并集,就得到了单烟盒的检测准确率。容易理解:当预测结果和真实结果完全不重叠时,精度为0;当预测结果和真实结果完全重叠时,精度为1。
按照公式(9)计算整个测试集的平均检测精度
最终本系统的检测模块在测试集合上获得了95.1%的平均精度,精度分布情况如图13 所示。可以看出,检测结果在绝大多数样本上都取得了很好的检测精度,只有极少数样本的检测精度低于0.2 左右,通过观察得知:这部分样本存在严重遮挡、不完整、模糊等问题,即使手工标注出了烟盒区域,但其内容也无法支持后续的品名识别,属于无效数据。如果除去这部分数据,本系统的平均检测精度达到了96.9%,完全满足了烟盒自动化检测的需求。部分无法识别的数据如图14 所示。
图13 检测结果的分布直方图。横坐标代表检测精度,纵坐标代表对应精度样本的数量Fig. 13 Histogram of the test results. The horizontal axis corresponds to the recognition accuracy,and the vertical axis corresponds to the number of samples
图14 部分检测失败的烟盒图像样本,本身纹理因为遮挡、反光和残缺等因素而被破坏Fig. 14 Some image samples of cigarette cases that failed in detection were destroyed in different degrees due to occlusion,reflection, and mutilation
2.2 卷烟烟盒识别实验结果
将200 张测试样本中9874 张烟盒图像根据其真实标签进行分类,共780 个烟品类别对设计的图像识别模型进行测试,使用图像识别领域常用的命中率(True Positive Rate)和错误命中率(False Positive Rate, FPR)组成的ROC 曲线[23]对系统识别模块的性能进行评估。最终结果如图15 所示。可以看出,当FPR=0.01 时TPR 约为0.95。这个实验结果表明了本文提出的模型在烟盒识别上取得了较高精度,可满足烟盒自动化识别的需求。
图15 识别ROC 曲线对比:本论文方法(样本正则化+DocFace)与传统深度学习方法(样本未正则化+mobilenetV2[22]分类)的结果对比Fig. 15 The ROC curve of cigarette case recognition result
3 结论
本研究利用人工智能图像识别方法来实现图像中的烟盒区域分割、烟盒图像变换与烟盒识别的完整系统。由于在实际中的烟盒图像存在遮挡、随意摆放、玻璃反光、拍摄角度大等众多挑战,直接采用深度学习目标检测的方法存在较大的难度。本文提出的方法将烟盒检测问题当成可视区域分割问题,实现了不同角度、不同遮挡程度的烟盒的图像区域定位;然后将分割出来的可视区域进行图像变换,变换到正则位置;最后将变换到正则位置的烟盒图像区域输入到深度学习图像识别模型,实现了高精度的烟盒规格分类识别。采用大量仿真数据对识别模型进行训练,并从实际的卷烟柜台陈列图像中随机挑选了各类卷烟烟盒图像进行人工标注,采用标注图像对设计的检测和识别方法进行检验。测试结果表明:本论文方法精度高,鲁棒性强,抗干扰能力强。对于包含100 个左右烟盒的陈列图像,在单显卡(NVIDIA GeForce RTX 2080Ti-12G)的计算服务器上完成所有烟盒的检测和识别,本文提出的整体框架推理时间为300ms 左右。
该智能化烟盒识别技术可以为烟草营销数字化智能化转型提供有力的技术支撑,该技术已在浙江中烟互联网营销活动场景中进行了试点应用。后续将对条烟的图像识别开展深入研究,通过信息技术和大数据分析,赋能烟草营销业务的创新。