基于深度学习的多条形码检测与实现*

2018-10-13 02:21:16刘秉瀚
网络安全与数据管理 2018年9期
关键词:倾斜角条码条形码

周 勉,刘秉瀚

(福州大学 数学与计算机科学学院,福建 福州 350108)

0 引言

条形码技术[1]在日常生活中应用广泛,比如物流管理、智能仓库、图书馆自动借阅等。虽然条形码相关技术发展至今已然相当成熟,但在多个条码同时出现的应用场景中(比如物流),由于背景复杂,定位难度相对较大,目前主要还是依赖人工逐个完成,费时费力,效率低下。为此,研究复杂背景中的多条形码具有极大应用前景。

目前常见的方法是借助条形码的灰度、条纹特征进行检测,文献[2]提出了一种基于窗口直方图的算法,实现了条码的方向不变性,但需要选取与条码规格接近的窗口才能取得较好的效果;文献[3]采用Max-Min和Canny算子相结合的方法过滤背景噪声,通过投影的方式定位目标区域实现快速定位,但在多条码场景下,投影区域往往存在重叠部分,导致检出失败;文献[4-5]提出了基于传统神经网络的定位算法,这种方法需要预先提取候选块的特征,然后将特征作为神经网络的输入。一方面特征提取步骤繁琐,另一方面候选块的选取也将影响检测效果。总的来看,传统的检测条形码的方法应用在复杂背景的多条码检测中存在鲁棒性较差、步骤繁琐、阈值选取困难等弊端。

相比于传统方法,基于深度学习的目标检测不仅可以自动地提取丰富的特征,同时可以将特征提取、选择、分类融合在同一个网络模型中进行优化,具有极大的优势。文献[6]提出了一种基于卷积神经网络的QR码定位方法。该方法首先对二值化后的图像按照固定的宽、高划分候选cell,然后通过卷积神经网络对cell进行分类,过滤掉不含QR码的部分。最后根据cell的边缘数、纹理等信息进行合并得到检测结果。该方法在复杂背景下有较好的QR码定位效果,但这种需要预处理和后处理的检测方式,要设置多项阈值,检测效果受先验知识影响较大。

为了避免复杂阈值设定带来的困扰,同时降低条码被分段检出的风险,本文借鉴深度学习领域流行的目标检测思想,提出一种可在复杂背景中直接提取条形码位置、倾斜角度以及扫描线的端对端检测算法。本文算法具有检测步骤简单、人工干预少、鲁棒性好等优点。

1 目标检测深度学习模型

目前用于目标检测的深度学习模型大致可以分为以下两类:

(1)两步检测法。这类方法将目标检测过程分为区域推荐和区域分类两个过程。区域推荐过程的目的是从原始图片信息中得到多个可能存在目标的区域;区域分类过程的目的是对第一步所产生的区域进行逐个分类、甄别。两步法的优点是准确率高,但缺点是需要大量计算、速度慢,候选区较多的情况下问题尤为明显,难以满足实时检测的要求。这类算法包括R-CNN[7]、Faster-RCNN[8]等。

(2)端到端检测法。相比起两步法这类方法舍弃了区域推荐,采用单个神经网络,通过拟合的方式直接从待检测的图片中计算出目标区域。此类方法的典型代表包括YOLO[9]和SSD[10],两者均为“特征提取网络+分类回归”的设计思路,这种模型仅采用一个神经网络完成目标检测,具有训练过程简单、检测速度快的优点。相比起SSD,YOLO的设计更为简洁,易于实现。

YOLO的模型结构采用了24个卷积层+2个全连接层的模型设计,卷积层用于提取物体的特征,全连接层用于分类和预测。

YOLO将待检测的图片分为S×S个区域(cell),目标中心点所在的cell负责预测该目标的“边框(bounding-box,bbox)”。因此网络训练目标就是对S×S个cell进行分类,找出那些目标中心点所在的cell并计算目标区域的bbox。每个cell首先要预测B个bbox,同时给出每个bbox的置信,理想情况下与目标完全贴合的bbox其置信度为1,如果一个bbox不含任何目标其置信度为0。除此之外每个cell还需给出C个条件概率,用于说明该cell所属的物体类别。置信度与条件概率的乘积即可认为是某个bbox属于具体类别的可能性,这么设计的目的是希望经过训练可以让特定大小的bbox与某些特定的类别产生一定的关联。在YOLO模型中,B=2,S=7,C=20,所以最终的网络输出为7×7×30。

2 基于深度学习的多条形码检测

考虑到条形码的使用场景多为实时检测,对检测速度有较高的要求,本文借鉴了YOLO “特征提取+分类回归”的设计思路,构建一个针对多条形码检测且设计更加精简的深度学习模型。由于存在大小不一、角度不同的多条码目标,基于bbox的检测模式不仅不能提供角度信息,而且多个条码的bbox相互干扰可能导致小目标无法检出。为此本文提出一个针对多条形码的检测模式,同时,为了达到快速检测的目的,本文以“卷积+maxpool”的结构设计神经网络,并行地完成条形码多特征的检测。另外,本文模型采用卷积的方式替代全连接层,以减少模型的参数量。

2.1 检测模型设计思想

由于实际中条形码解码过程并不需要获取完整的图片信息,只需要沿着条形码长度延伸的方向(扫描线)读取完整的条形信息即可,因此,本文将条形码的中心位置、扫描线以及倾斜角作为条形码的代表性特征。

本文借鉴YOLO思想将待检测图片分为S×S个cell,每个cell负责检测条形码代表性特征。为便于区分,本文把目标中心点所在的cell称为rcell。设计思路如下:

(1)bbox的置信度评估方面,为避免阈值选取问题,本文设计每个bbox输出两个预测值,分别表示为rcell和非rcell的置信度,通过softmax函数映射成概率分布后采用交叉熵进行loss评估。

(2)条形码首尾颠倒对后续识别影响不大,因此倾斜角只需考虑第一象限和第二象限(180°范围)。由于bbox的置信度采用了交叉熵,倾斜角loss评估如果采用平方差估算可能导致loss不均衡。为了降低角度预测的误差,本文将倾斜角分为两个部分进行预测(见图1):①倾斜角所属象限,分为2个类别(0:第一象限;1:第二象限);②倾斜角在象限中的角度(以10°为间隔将90°的象限角分为10个类别)。这样共计12个输出,与直接将180°按10°间隔分成19个分类相比,减少了参数量。

图1 倾斜角分类

(3)出于与倾斜角预测相同的考虑,对条码扫描线归一化长度l/w(l为条码长度,w为图片宽度)的预测也采用了分部预测方式:十分位a的预测以及剩余位b的预测,如式(1)所示:

l/w=a×0.1+b×0.01

(1)

其中,a为[0,9]之间的任意整数,本文采用分类方法进行预测,并用交叉熵作为loss评估函数;b为[0,10)之间任意实数,采用均方误差评估。因为在a正确的情况下误差就已经得到了有效的控制,b在这部分并不是很重要,采用均方误差评估有利于减少运算量。

(4)在中心点预测方面,由于条形码由平行的线条组成,为此对中心的定位要求并不是很高,这部分采取与YOLO相同的方式进行预测。

(5)在S的选取方面,设置太小将无法有效地检出目标,设置太大将大幅增加运算量,根据待检测图片中条码与图像的实际比例,本文S设置为7。由于本文仅涉及“条码”与“非条码”的二分类问题,而这个问题与cell的二分类是一致的,为此本文中C=0,B=1。根据上述思路,本文提出的模型结构中,每个cell的输出包含27个值,含义如表1所示。

表1 模型输出定义

2.2 模型损失函数

本文所设计模型为多任务模型,因此loss由多个部分组成。

(1)cell分类loss(式(2)):

(2)

(3)

(4)

(2)角度预测loss:

(5)

(3)条码长度loss:

(6)

(4)目标bbox中心点的回归loss:

(7)

最终模型的loss函数为:

(8)

2.3 模型结构设计

本文所设计的模型结构如表2所示。

表2 本文的模型结构

本文模型的基本设计思路是通过控制卷积核的移动步长以及采用max_pool结构将448×448图像输入映射为7×7×27模型输出。由于条形码主要由平行的线条组成,为此即便在“条”与“空”之间缺失部分像素,也不会对条码的整体形态有太大影响。因此在模型的第一个卷积层,本文设置卷积的步长为4,进行“跳跃式”的卷积。在YOLO的设计中,一个逻辑上的卷积层由多个子卷积过程组成,期间通过1×1的卷积核进行压缩,以减少运算。一方面条码的特征更为简单,同时为了减少运算量,本文并未采用这种卷积结构。

对于每层卷积核数的设置,参照YOLO的模型设计方法:随着网络深度的加大,逐渐减小特征图大小,并增加卷积核个数。因此,本文以N为增量逐层递增卷积核,设第一层的核数为N,则其后卷积层的核数分别为2N、3N…。

本文通过一系列实验确定N的取值。显然卷积核越多,则需要越多的运行时间和越多的迭代周期。

为了简化实验,本文将所有模型的训练周期固定设为20,仅从召回率和精确率入手考察N的不同取值对实验结果的影响,实验结果如图2所示。

图2 不同N值对比图

图4 模拟场景实验效果图

相比起误检,漏检将造成更大的损失,为此优先考虑召回率较高的模型。从图2可以看出,当N取16时,在提升模型精确率的同时没有引起召回率的下降。为此,本文选择N=16作为模型第一层的卷积核个数。

3 实验分析

3.1 数据集

由于网络上可用于进行训练的条形码样本稀少,而完全人工标注的方式进行数据集制作,工作量巨大,其数量也很难满足实验需求,为此,本文设计算法自动生成训练、测试数据集。

数据集制作步骤如下:

(1)采集背景图片。其途径包括上网下载和人工采集两种。上网下载的图片其题材、分辨率不限,尽可能多样。人工采集的图片主要源于日常拍摄、人工绘制(如网格、条纹)等。共得到背景图片约5 000张。将这些图片随机分为两个集合,其中较小的集合含图片约100张。较大的集合用于制作训练数据,较小的集合用于制作测试数据。

图3 真实场景实验效果图

(2)生成目标背景图片。如果只采用原始的图片作为目标图片的背景,在大量生成样本后难免出现背景重复的情况。为此,需要采用剪裁、缩放、加入随机文字、平行线条、翻转等手段为每一个样本独立地生成背景图片。

(3)通过程序生成大量条形码图片,将这些条形码进行不同程度的旋转、模糊后,不重叠地随机置于背景图片中,并详细记录它们的位置信息,如旋转角、宽、高等。

经过上述步骤理论上可产生任意多的训练数据,虽然不能够完全模拟现实场景,但足以用作理论验证。

3.2 实验结果

为验证模型效果,通过机器随机生成1 000张测试图片,每张图片包含2~4个大小不等的条形码,图片大小为448×448,每张图片包含2~4个目标。

经过试验,本文方法检出成功率约为96%,每张图片耗时约150 ms。

本文与其他方法进行了对比,部分效果如图3(真实场景)、图4(模拟场景)所示。

从实验结果可看出,在背景较为复杂、条码存在不同程度扭曲的情况下,文献[11]的检测效果较差(见图4(d)),主要原因在于,在复杂背景中阈值选取较为困难,同时图像的腐蚀、膨胀操作也在一定程度上增加了算法的误差。

YOLO算法虽然能够检出条码,但无法提供角度相关信息,且有一定概率将连续的条码分为多个检出(见图3(c))。本文所述方法不仅可以定位出条码的位置,同时还能给出条形码的旋转信息,且在复杂背景下能够较好地完成条码检测任务。

在不使用GPU加速的情况下,三者的召回率及耗时对比如表3所示。

表3 性能对比

经对比可见,本文所述方法能较好地完成复杂背景下的条码检测任务,且有较好的实时性。

4 结论

针对复杂背景下的多条码检测问题,本文提出基于深度学习的检测方法,不仅避免了复杂阈值设定带来的困扰,同时可直接提取条形码位置及扫描线,具有检测步骤简单、时效性好的特点。

猜你喜欢
倾斜角条码条形码
中国条码技术与应用协会
条码微站
创意条形码
以“倾斜角与斜角”为例谈概念教学
从条形码到二维码
从条形码到二维码
基于飞参Щp-4配电板的倾斜角故障研究
电子测试(2018年14期)2018-09-26 06:04:14
条形码大变身
基于固定条码与电子标签比对设备的设计
矽感: 打造我国自主知识产权的二维条码
分析仪器(2013年5期)2013-10-27 03:58:24