杨庆江,臧佳琦,杨少辉
(黑龙江科技大学 电子与信息工程学院, 哈尔滨 150022)
1994年,日本的DENSO WAVE公司首先推出二维码,由于其可以存储更多的信息被广泛应用到各个领域。随着应用场景的多变复杂,二维码可能会产生反转、扭曲、磨损等状况,加大了二维码定位的困难,因此,二维码在复杂场景中快速准确定位是一个难点。在利用传统图像处理方式中,赵健雄等[1]为解决二维码失真的问题提出了新型QR码自适应定位算法,解决了二维码20°以内扭曲的检测。屈德涛等[2]为提高复杂场景中的识别效果提出了先使用Viola-Jones 快速目标检测框架粗略定位出候选区域,通过二位码定位标志从候选区域中定位出二维码的位置。在传统图像处理中需要人为确定二维码的有限个特征,通过这些特征确定二维码的位置,如果特征因为外部环境的不确定性被损坏,则检测精度会有所下降。
近年来,基于深度学习的目标检测有了突出的进展[3],深度学习的方法是使神经网络自动学习目标特征,避免人为提取特征的不确定性,因此,文中沿用了深度学习的方法定位二维码。基于深度学习的检测算法大致分为两种,第一种是二阶段检测算法,主要有R-CNN[4]、fast R-CNN[5]、faster R-CNN[6],这种方式利用滑动窗口和特征图做卷积操作,生成候选框,将候选框生成等长的特征向量,送入分类器和回归器得到分类结果和回归结果。第二种是一阶段算法,主要有YOLO[7]、SSD[8]、YOLOv2[9]、 YOLOv3,这种算法主要是将输入图像划分成不同大小的网格后进行检测,每一个网格只负责检测这一区域的目标。Mobilenetv2是Mobilenet[10]的改进版,是一种轻量级网络,其可以在稍微降低精度的情况下大大减小模型的参数量。
笔者将提出的算法称为YOLOv3-ms,主要包括重新配置的Mobilenetv2、SPP结构块和轻量特征金字塔(DW-FPN)。算法在YOLOv3的基础上进行改进,将Mobilenetv2和YOLOv3相结合,提出轻量特征金字塔,使用SPP结构块以获得丰富的感受野信息,运用Mosaic数据增强方法来扩充数据集,采用K-means算法对anchor box进行重新聚类,实验对比分析YOLOv3-ms检测模型比YOLOv3检测精确。
YOLOv3是一阶段检测算法,不需要中间步骤,将图片送入网络中直接得到目标的偏移信息和类别信息,因此,在速度上远超二阶段检测算法。YOLOv3相较YOLO和YOLOv2算法创新的使用了特征金字塔(FPN),结构如图1所示。将不同输入融合,使用三个不同尺度的特征图进行预测。
图1 特征金字塔Fig. 1 Feature pyramid network
YOLOv3主要分三步完成检测:第一步先将输入的图像进行数据增强,并且resize到416×416大小;第二步将图像通过主干特征提取网络darknet53,经过FPN特征金字塔和预测模块最终得到重复的预测框;第三步经过非极大值抑制(NMS)去除重复的预测框得到预测结果。YOLOv3将图片划分成网格,每个网格只负责此网格中可能存在的目标,进而得到每个类别的边框偏移量(4个坐标偏移信息)和类别概率(每个类别的概率),并且每个网格分配3个不同尺度的anchor,最终每一个网格输出的张量为
T=S×S×(3×(4+1+N)),
(1)
式中:T——输出张量;
S——划分的网格数;
N——类别个数。
Mobilenetv2是轻量级网络其网络结构如表1所示,其中:t为深度可分离卷积中特征图深度的控制系数,c为通道数,n为结构块重复次数,s为第一个结构块的卷积步长。该网络主要利用深度可分离卷积代替原始卷积,大大减少模型参数量,提升模型的运行速度。其提出了一种倒残差结构,原理是先利用1×1的卷积核进行通道升维,然后用深度可分离卷积(DW卷积)进行特征提取,最后用1×1卷积核进行通道降维。结构如图2所示,图中,Dwise表示深度可分离卷积,Stride表示卷积步长,Conv表示卷积,3×3表示卷积核大小。
由图2可见,Mobilenetv2 倒残差块共两种,分别是倒残差结构块A和倒残差结构块B,倒残差结构块A利用残差边将输入等价映射,和末尾卷积进行相加输出,提高了梯度跨层传播的能力。倒残差结构块B中没有使用残差连接,原因是在此结构块中要进行特征图的缩小,并且保证输入和输出特征图的大小相匹配。这两个残差结构的重复有序排列组成了Mobilenetv2网络。
图2 Mobilenetv2 倒残差块Fig. 2 Basic block Mobilenetv2
由表1可知,Mobilenetv2一共包含7个不同卷积通道的Bottleneck结构块,为深度可分离卷积中特征图深度的控制系数、为通道数、为结构块重复次数、为第一个结构块的卷积步长。1-8层主要用提取图像的特征信息,9层用于调整通道,10和11层组成了分类层。
表1 Mobilenetv2 网络结构
SSP结构是在SppNet网络中提出,为了保证经过SPP结构后通道数不会发生改变,在头部和尾部分别添加了卷积层来调整通道,其结构如图3所示。先将特征图送入到卷积层调整通道,然后将特征图分别进行步长分别为5、9、13的最大池化操作,将这三个池化的结果与自己的特征图在channel这一维度进行堆叠,堆叠之后通道数会是原先的4倍,之后送入下一个卷积层,将通道再次调整回原先的通道。
图3 SPP结构Fig. 3 SPP structure
Mosaic数据增强参考了CutMix数据增强方式,理论上具有一定的相似性,CutMix数据增强利用两张图片进行拼接,Mosaic数据增强利用四张图片进行拼接。Mosaic方法实现思路是:利用了四张图片,分别对这四张图片进行翻转、缩放、色域变换等,按照四个方向摆好位置,最终将四张图片进行拼接,使模型在复杂的环境中也有较好的检测效果。
为提升网络的推理速度,减少模型参数量,使用轻量级网络Mobielnetv2作为主干特征提取网络。为获得不同的感受野信息,增加SPP结构块,利用改进后的DW-FPN进行特征融合,利用YOLOv3的head进行检测。以上就是YOLOv3-ms算法的基本设计思想,在主干特征提取网络中,InvertedResidual是倒残差结构、BN是批归一化、ReLU是激活函数、Dwconv是深度可分离卷积。算法的详细结构如图4所示。
输入的图片首先被送入图4中的主干特征提取网络进行特征提取,特征图在4_3、6_3、9层输出,将得到的三个特征图分别输入到SPP结构块,同理将SPP结构块输出的特征图输入到DW-FPN中进行特征融合,输出三个不同尺度大小的特征图分别是13×13×T、26×26×T、52×52×T,通过此特征图对二维码进行预测。
图4 YOLOv3-ms结构Fig. 4 YOLOv3-ms structure
2.1.1 配置Mobilenetv2网络
Mobilenetv2是一种轻量级卷积神经网络,其结构简单、模型参数量小、可以在不减少模型精度的前提下大幅提高模型的运行速度。Mobilenetv2网络结构如表1所示。表1中,Mobilenetv2共11层。因为在目标检测中只用Mobilenetv2作特征提取器,因此只保存了1~9层,去掉了分类层(10和11层)。剩下的层作为YOLOv3-ms的主干提取网络,结构如图4中Mobilenetv2所示。
2.1.2 SPP结构块
SPP结构块由三个SPP结构组成,保证网络进行多尺度训练以适应不同分辨率图片的输入,并且它提高了网络的感受野。为了进一步提高网络的预测精度,本文将特征提取网络中4_3、6_3、9这三层的特征并排输出到三个SPP结构中来获得不同层的感受野信息,结构如图4中的SPP结构块。此结构块的优点是使主干特征网络提取到的三个有效特征都能获得丰富的感受野信息。
2.1.3 轻量特征金字塔
YOLOv3中使用特征金字塔(FPN)进行底层特征和高层特征的融合,提高了小目标的检测性能,并且降低了误检率。FPN中用于调整通道数的卷积核参数量较少,用于特征提取的卷积核参数较多。为了使模型更加轻量化,利用深度可分离卷积(Dwconv)代替FPN中用于特征提取的卷积核,将替换后的FPN称之为DW-FPN,结构如图4中的轻量特征金字塔(DW-FPN)所示。 DW-FPN实现方法是:将底层特征a经过深度可分离(Dwconv)卷积,之后上采样和上层特征b特征堆叠得到c,以此类推得到d。最终a、c、d经过两个深度可分离卷积(Dwconv)得到三个不同大小的特征图e、f、g。
Anchor box重聚类是利用K-mean聚类算法,利用两个框之间的IOU值作为距离参量,对数据集的真实框进行聚类,将距离最为接近的框聚成几个集合。YOLOv3算法中共聚类出9个中心框,并且聚类出的anchor box是在coco数据集或者voc数据集中得到,这两个数据集目标类别较多,形状差异较大,与二维码数据集存在较大差异,因此,重新聚类了anchor box。K-means算法的流程是随机选取几个质心,然后将数据集中的每一个点分配到一个距其最近的簇中,这一步完成后将每个簇的质心更新为该簇所有点的平均值,直至中心不再变化。而在anchor聚类中,则是将真实框之间的交并比(ηIOU)作为距离进行度量,度量公式为
d(A,B)=1-ηIOU(A,B),
(2)
式中;A——真实框的集合;
B——聚类中心框的集合;
d——A和B的距离;
ηIOU——交并比。
文中针对二维码图像进行聚类,得到9个anchor分别是[372,362]、[234,231]、[164,165]、[125,116]、[87,89]、[68,62]、[47,81]、[44,48]、[23,25]。
文中使用的环境是anaconda+python3.7+pytorch1.5+cuda10.2,显卡是NVDIA GTX2080。
实验的数据来源有三部分,共2 073张图片,第一部分数据集网上下载,共1 000张;第二部分人工采集,共500张;第三部分用Mosaic方法生成并保存了相应的.xml文件,共573张。针对人工采集的图片,用labelImg工具对其进行人工标注,命名为QR,标签数据保存为A.xml格式文件。在拍摄标注的过程中,将二维码在不同环境、角度进行拍摄,并且拍摄了部分模糊图像以使模型更具有泛化性能,如图5所示。之后将数据集分成训练集、测试集、验证集之比为8∶1∶1的比例提供训练、测试和验证。训练完成后生成的A.pth权重文件提供给推理脚本进行推理,最后用验证集验证模型的好坏。
图5 人工拍摄模糊图像Fig. 5 Take a blurry image manually
一共训练了三个模型,分别是YOLOv3、YOLOv3-ms、没有anchor聚类的YOLOv3-ms。为加快网络收敛速度,采用迁移学习的方法。使用BCELoss和MSELoss作为损失函数,自适应Adam优化损失函数,采用pytorch框架中StepLR作为学习率下降算法。初始学习率设为0.001,最大迭代150个epoch,批量大小设为64,迭代80个epoch后批量大小改为32,120个epoch后,将学习率改为0.000 1。
3.2.1 测试集评估模型
模型训练完成之后在测试集完成测试。使用精确率P、召回率R和平均精度αAP作为模型最终评价指标,结果如表2所示。
表2 模型评价指标结果
表2中YOLOv3-ms*未对二维码数据集进行anchor box聚类,Fps在NVIDIA 920M显卡上得出。由表可知,由于YOLOv3-ms使用了SPP模块,检测的准确率高于YOLOv3。由于Mobilenetv2参数量较少,特征提取能力微弱与darknet53,因此召回率略低于YOLOv3。因为使用了轻量级模型nMobilenetv2和DW-FPN,因此较YOLOv3,Fps提高了近3倍,模型大小缩小了5倍多。
3.2.2 检测效果可视化
检测效果在NVIDIA GeForce 920M显卡的笔记本上进行可视化,刷新率为5.804 847,如图6所示。
图6 检测效果可视化Fig. 6 Detection effect visualization
图6a用手机设置了不同的背光亮度来模拟强光和弱光下的二维码情况,从检测效果看出,在复杂环境中有比较好的检测效果,图6b展示了二维码被部分遮挡、形变等情况下的检测效果,可以看出在这种情况下模型依然有较好的检测效果。
为了使二维码在复杂环境下仍然具有较好的检测性能,提出一种YOLOv3-ms 二维码定位算法。
(1)利用修改后的 Mobilenetv2网络作为主干特征提取网络,大大减小了模型的参数量,并且在Mobilenetv2后添加了SPP结构块,丰富了特征层感受野信息。
(2)利用轻量特征金字塔(DW-FPN)进行特征融合,为网络的预测部分提供丰富的上下文特征的同时提高了模型运行效率,并且有利于小尺寸二维码的检测。
(3)针对二维码定位这一特定任务,对YOLOv3的anchor进行重新的聚类,得到更适合二维码定位的anchor box,使网络更容易准确预测目标位置。
通过实验对比和可视化分析表明,在灯光较强、灯光较暗、被遮挡、形变等复杂环境下仍然有良好的检测效果,尽管召回率低于YOLOv3,但是在精度和速度上均有大幅提升。