孙国栋,李 超,张 航
湖北工业大学 机械工程学院,武汉 430068
目标检测作为计算机视觉领域中最基本、最具有挑战性的任务之一,已取得了令人瞩目的进展,被广泛应用于人脸识别[1]、行人检测[2]、自动驾驶[3-4]、智能监控[5]等计算机视觉领域。通用的卷积神经网络算法大多针对具有一定尺寸或比例的大中型目标,容易丢失小目标的特征,由于小目标尺寸小、特征弱、分辨率低等原因,网络能提取到的有效特征信息少,因此小目标检测一直是计算机视觉领域的研究难点。监控视频画面中工人佩戴的安全帽所占画幅较小,容易漏检,因此需要适用于小目标检测的算法。基于传统算法的安全帽识别主要通过对安全帽的形状与颜色特性进行判断来识别安全帽,如刘云波等[6]对施工现场工人进行检测与跟踪,统计目标上三分之一部分出现频率最高的色度值,与安全帽颜色相匹配,以此来判断安全帽佩戴情况;刘晓慧等[7]利用安全帽与头发色差来判断是否佩戴安全帽;Shrestha等[8]利用边缘识别算法判断人脸上方是否存在安全帽的半圆轮廓。此类方法由于施工现场的背景复杂性无法对目标进行有效识别,适用范围小,效果也不理想。得益于深度学习技术的发展以及工业需求,目标检测技术取得了突飞猛进的发展,因此产生了很多优秀的算法。
目前,基于深度学习的目标检测方法主要分为两大类:一是基于候选区域的双阶段目标检测算法,二是基于回归问题的单阶段目标检测算法。第一类是先由特定算法生成一系列样本的候选框,再通过卷积神经网络对样本进行分类,最后进行边界框的位置精修,主要有R-CNN[9-10]、Fast R-CNN[11]等;第二类则不用产生候选框,直接将目标边框定位的问题转化为回归问题处理,直接对预测目标进行回归、改进,代表有YOLO系列算法[12-13]以及SSD[14]算法。前者在检测准确率和定位精度上占优,而后者在检测速度上更具有优势,但这些方法在小目标上的检测效果都不尽人意。国内针对安全帽佩戴检测问题,目前属于起步阶段,研究的学者并不多。王兵等[15]利用改进GIoU后的YOLO v3进行安全帽佩戴检测,但是由于底层缺乏语义信息容易造成小目标漏检;张博等[16]通过先定位人体头颈部再通过Faster R-CNN检测安全帽的方法来进行识别,仍然是先识别人体再识别安全帽,存在两部分误差。
近几年来,注意力模型在深度学习各个领域得到了广泛的应用,大多是集中于使用掩码来形成注意力机制。掩码的原理是由一层新的权重来识别图片数据的关键特征,通过学习训练,让深度学习神经网络学到每一张新图片中需要关注的区域,从而形成了注意力。自注意力是一种特殊的注意力,是注意力机制的改进。由于卷积操作主要用于处理邻域之间的信息,因此单独的卷积层对图像中的全局依赖性进行建模在计算上是非常低效的。自注意力机制是通过计算跟自己相关的序列的相似度来挖掘信息,所以不存在这种依赖现象,可以很好地进行并行计算,大大提高了计算效率。基于此,本文对Faster R-CNN进行研究和改进,提出了融合自注意力机制(self-attention)的SAF-R-CNN改进算法,引入特征金字塔网络(feature pyramid networks,FPN)[17]达到多尺度目标检测的效果,同时在FPN中加入自注意力机制[18],使得模型聚焦于高层次特征,提取具有更丰富的高级语义信息和更大的接受域的特征,并且根据重要程度增强有用的特征抑制不重要的特征,使得有效的特征图权重大,不重要的特征图权重小,提高网络在复杂场景下对于小目标的辨识能力,以此提高小目标检测准确率。
SAF-R-CNN模型基于Faster R-CNN进行改进。模型采用ResNet-101残差网络结合FPN的方式用于提取语义信息更加丰富的特征图,并且将自注意力层加入到特征融合的过程中,提高目标关注度,将得到的特征图作为RPN(region proposal network)的输入。然后通过锚框补选增强的方法对输出的候选框进行进一步的校正,得到最终输出,具体结构如图1所示。
图1 SAF-R-CNN网络结构图Fig.1 SAF-R-CNN network structure diagram
在神经网络中,卷积层通过卷积核和原始特征的线性结合得到输出特征,由于卷积核通常是局部的,为了增加感受野,往往采取堆叠卷积层的方式,实际上这种处理方式并不高效。
自注意力机制本质上是根据注意对象的重要程度进行不同的资源分配,在神经网络中,注意力所要分配的资源就是权重。计算机视觉中的很多任务都是由于语义信息不足导致检测结果不理想,而自注意力机制可以捕获全局信息,并且选择出对当前任务目标更关键的信息,使得卷积提取的特征相关性更强,捕获更丰富的高级语义信息,更好地识别目标。
如图2所示,输入形状为c×h×w的特征图x,其中c代表特征图通道数,h代表特征图高度,w代表特征图宽度。特征图x一共经过三个1×1卷积核,首先通过其中两个1×1卷积核进行卷积,然后将h和w两个维度展开变成h×w,并将通道数缩减为原来的1/8,得到特征空间(通道数c1=c/8,维度c1×h×w)f(x)和特征空间g(x)(维度c1×h×w),矩阵f(x)用来提取像素特征,矩阵g(x)用来提取全局特征,第三次卷积不降低通道数,得到矩阵h(x)(维度c×h×w)。对f和g进行矩阵乘法得到尺度特征图矩阵Sij,然后在列方向上通过Softmax函数进行尺度归一化,得到注意力矩阵βj,i:
图2 自注意力机制原理Fig.2 Principle of self-attention echanism
其中,Sij=f(xi)Tg(xi),代表尺度矩阵图的各元素;βj,i表示注意力矩阵中的各元素,其中j代表区域,i代表位置,N代表尺度特征图矩阵中元素的个数。最后对注意力矩阵和特征空间h进行矩阵乘法运算得到自注意力特征图。输出的注意力层表示为O=(O1,O2,…,Oi,…,ON)∈RC×N,其中:
其中,h(xi)=Wh xi。最后将自注意特征图乘以一个权重,添加到输入特征图中,然后输出新的特征图。初始权重值为零,权重值的迭代更新依赖于神经网络的反向传播,即:
其中,y为最终返回的特征图,γ为自注意力特征图的预先给定的权重,Oi为展开后的自注意力特征图,xi为原始输入特征图。
原始Faster R-CNN算法采用顶层特征做预测,会丢失很多底层的位置信息导致检测精度不高。因此采用ResNet-101代替原本的VGG-16主干网络,并且引入特征金字塔网络(FPN),可以同时利用低层特征高分辨率和高层特征的高语义信,达到更好的检测效果。FPN实现过程如图3所示,自底向上路径实际上是网络的前向传播,在前向过程中由于池化层的作用,C1、C2、C3、C4、C5后一层都只有前一层的一半大小。然后通过横向连接和上采样,构建出一个自顶向下的特征金字塔网络。具体而言,自顶向下的过程对具有更丰富语义信息的顶层高级特征进行2倍上采样,同时将自底向上生成的特征图经过1×1卷积变换后的结果与上一层的上采样结果进行融合。并且在融合之后还要经过3×3卷积核对每个结果进行卷积,目的是用来消除上采样产生的混叠效应。并假设生成的特征图结果是P2、P3、P4、P5,和原来自底向上的卷积结果C2、C3、C4、C5尺寸相同且一一对应。
图3 特征金字塔网络结构Fig.3 Feature pyramid network structure
金字塔网络结构虽然可以通过提取不同尺寸的特征信息来增加感受野,但是金字塔网络在将高级语义信息通过上采样操作传递到其他层时,高级语义信息将会被逐渐淡化,而高级语义特征具有更强的代表性和区分性,能够更好识别物体类别。为了克服这个问题,可以通过在FPN中加入自注意力层。具体来说,该模块建立在自底向上路径的末端,将高级语义特征转换为不同的尺度,进一步扩大了模型的接受域。首先将自下而上路径生成的特征图转换为多尺度的特征区域,通过各自后面的自注意力层,对重要的语义信息给予更多的关注,这些包含有效语义信息的多尺度特征经过自注意力层的处理后,在自顶向下的过程中连接在一起以补充自上而下的高级语义信息。如图4所示。
图4 金字塔自注意力结构Fig.4 Pyramid self-attention structure
在区域建议网络(RPN)的训练过程中,锚框的选择是非常重要的一个环节,选择出的锚点越好后续的网络训练效果越好。但是由于锚框的数量极为庞大,在如此庞大的锚框中选择出优质的锚框是一件很困难的事情。同时,因为一张图中会存在大小不同的物体,锚框也会设计为不同的大小,这些尺寸不同的锚框也会形成激烈的竞争,小目标数量更多,回归难度更大,因此在网络训练过程中往往竞争不过大目标,这种不平衡的竞争关系,导致小目标更容易丢失。
针对小目标容易丢失的问题,采用锚框补选增强的方法。如图5所示,卷积神经网络经过分类置信度排序会丢弃大量分类置信度不够高的锚点,但是其中存在大量的锚框分类置信度都差不多,导致网络容易判断错误,准确回归难度大。本文方法在每轮的网络迭代中选择一部分被筛除的候选框重新加入到后续的网络迭代训练中,这样经过多次迭代后,大部分的候选框都能得到更多训练,小目标的信息也会被网络更好地学习,从而提高小目标的检测精度。
图5 锚框补选增强Fig.5 Anchor frame by-selection enhancement
本文所有实验采用Linux 16.04系统,以深度学习常用算法框架Tensorflow框架为基础并利用图像处理器(graphics processing unit,GPU)进行加速运算,实验环境为Intel®CoreTMi7-8750H CPU@2.20 GHz处理器,8 GB内存,Nvidia GeForce RTX 2080Ti显卡。
由于目前没有开源的安全帽佩戴检测数据集,所以本文通过整合一些现有的数据集和网络检索图像,建立安全帽数据集,一共7 580张图片。安全帽数据集主要包括两大类:一类是未佩戴安全帽的人(person),一类是佩戴安全帽的人(helemt),其中还包含多种施工场景、不同天气以及不同拍摄距离的图像,以满足实际检测的需要。
采用平均精度(average precision,AP),平均精度均值(mean average precicion,mAP),是评价检测模型准确性的直观评价标准。在计算这些指标之前,先需要计算几个基本的指标,这些指标是基于二分类的任务,根据模型检测到的类别和真实情况组合为四种情况:标签为正样本,分类为正样本的数目为true positive,简称TP;标签为正样本,分类为负样本的数目为false negative,简称FN;标签为负样本,分类为正样本的数目为false positive,简称FP;标签为负样本,分类为负样本的数目为true negative,简称TN。
精度(precision)表示的是被预测为正样本的样本中有多少是真正的正样本,其计算公式如式(4)所示:
召回率(recall)表示样本中的正例有多少被预测正确了,其计算公式如式(5)所示:
P-R曲线是以精度P为纵轴、召回率R为横轴的二维曲线,P-R曲线下的阴影面积为平均精度值(AP),其计算公式如(6)所示:
利用安全帽数据集对SAF-R-CNN目标检测算法进行验证,结果如表1所示。通过结合金字塔自注意力模块与锚框补选增强方法,SAF-R-CNN的mAP值比Faster R-CNN值提高了6.4个百分点,比YOLO V3的mAP值提高了2.9个百分点。
表1 在安全帽数据集上检测结果对比Table 1 Comparison of test results on helmet data set单位:%
从检测结果来看,图6(a)给出了不同遮挡和背景的测试图像,图6(b)、(c)、(d)显示了测试图像在Faster RCNN、YOLO V3、SAF-R-CNN的可视化检测结果对比图,其中绿色箭头所指都是改进效果明显的地方。SAF-R-CNN算法相对于YOLO V3、Faster R-CNN检测精度有一定的提升,并且当工人佩戴的安全帽出现变形和遮挡时,未优化的Faster R-CNN算法会出现漏检和错检的情况,但是SAF-R-CNN可以减少目标出现漏检的情况,具有较好的检测效果。
图6 模型对比效果Fig.6 Model comparison effect
为了更好地检验SAF-R-CNN的有效性,直观感受改进各个模块对于检测结果的影响,本文在安全帽数据集上进行消融实验,结果如表2所示,加入自注意力模块的特征融合可以捕捉更丰富的高级语义信息,为模型带来更大的感受野,对小目标的识别更加准确,与Faster R-CNN相比,mAP值提高了4.9个百分点;通过锚点补选增强的方法让小目标信息得到更多的训练,强化了网络对于小尺度目标的表达能力,使得检测精度从92.8%提高到了94.3%。结果表明,两次改进都能提高网络对于安全帽的检测精度。
表2 在安全帽数据集上的消融实验Table 2 Ablation experiments on helmet data set
选取不同场景不同目标数的检测结果进行检测效果验证。观察图7(a)到图7(f)知,对于包含各种大小目标和不同场景的图像,SAF-R-CNN能够表现出较好的检测效果。
图7 各种场景的检测结果Fig.7 Detection results of various scenarios
本文针对工人施工时的安全帽佩戴检测问题,提出了一种基于Faster R-CNN的改进算法SAF-R-CNN。构建FPN结构并且加入自注意力层,同时在RPN中采用锚框补选的方法增强模型对于小目标的检测能力,在自制安全帽数据集上进行测试,实验结果表明本文改进网络能较好实现安全帽佩戴检测功能。相较于原始Faster R-CNN算法mAP值提高了6.4个百分点,并且对于不清晰、有遮挡、光线不佳等场景下的小目标有较好检测效果,未来将继续优化网络结构提升检测精度。