基于改进YOLOv5s算法的列车驾驶员手势识别

2023-02-13 03:48李泰国张英志张天策陈小强
铁道学报 2023年1期
关键词:先验手势内存

李泰国,张英志,张天策,陈小强

(兰州交通大学 自动化与电气工程学院,甘肃 兰州 730070)

随着我国铁路运输的高速发展,对于列车的运行安全也提出更高的要求[1]。我国铁路定义了一套用于行车安全的手语[2],在驾驶列车过程中要求驾驶员要做到“手比眼看口呼”,即在看到交通标志和收到控制中心的命令时必须及时做出相应手势并同时高声呼喊指令内容[3]。所以对行车过程中驾驶员手势进行精确识别显得尤为重要[4]。目前的识别方法需要通过观看监控摄像头记录的视频用肉眼去检查驾驶员手势的执行情况,检查效率较低,同时也不能兼顾高的准确率。而基于深度学习的算法能够实现对驾驶员手势的实时检测和识别[5],这对于保证列车安全运行和提高检查手势执行情况的效率都有着重要意义。

早期的手势识别方法主要是佩戴数据手套[6]和计算机视觉[7]。基于数据手套的识别方法有着较高的准确率,但是需要配合一定数量的传感器,较多的硬件设施导致较大的不便性[8]。计算机视觉降低了硬件成本,同时带来更多的便携性[9]。传统的计算机视觉手势识别分为3个步骤,首先是对手势进行检测和分割,其次对手势特征进行提取,最后是手势识别[10]。较多的研究人员将研究重心都集中在了手势特征的提取上,通过肤色纹理和形态姿势等将手势分割出来,利用支持向量机等分类方法实现手势识别。王龙等[11]使用肤色模型对手势进行检测,但是依然存在识别精度低、泛化能力较差等问题。文献[12-14]中通过利用手势边缘区域结构作为特征进行手势识别,虽然具有一定的适应性,但是模型的学习能力较弱,在样本数量增加时,其检测精度的提升幅度很低。Danilo等[15]提出了一种利于循环神经网络和跳跃运动控制器的手势识别算法,将手指骨形成的角度和指尖位置作为特征进行训练,最终在ASL数据集上能达到97.62%的准确率,但是这种方法对设备性能要求高,便携性较差。

随着深度学习中目标检测这一方向的发展,Girshick等[16]在2014年CVPR会议上提出R-CNN目标检测网络,该网络是将CNN方法应用于目标检测问题上的一个里程碑;次年又在ICCV会议上提出了改进版本Fast R-CNN[17]。何恺明等[18]在2016年NIPS会议上提出Faster R-CNN,同年CVPR会议上也诞生了经典的一阶段目标检测网络YOLO[19]。吴晓凤等[20]提出的基于Faster R-CNN 的手势识别算法,虽然较于传统算法有着更高的精确率,但是同时存在复杂背景下识别效果较差问题。Chang等[21]提出了一种改进的Faster R-CNN手势识别算法,最终在NUS-II手势数据集上识别精度能够达到99.89%,但是由于是二阶段的识别算法所以存在识别速度较慢的问题,这对于实现手势的实时检测是困难的。而一阶段的目标检测算法YOLO系列,凭借着较快的检测速度和较高的识别性能依然受到大多数研究人员的青睐。2017年CVPR会议上Redmon等[22]提出YOLOv2算法,紧接着在2018年又提出了YOLOv3[23]算法。张强等[24]提出了基于YOLOv3的手势识别算法,该算法仅对于静态手势有着较高的识别精确率,没有实现对动态手势的识别,且存在泛化能力差、网络模型内存占比较大难以实现工程部署等问题。王粉花等[25]在YOLOv3系列的快速版本YOLOv3-tiny上进行改进,提出了YOLOv3-tiny-T的手势识别算法,最终在UST数据集上相较于原始模型提升了5%的精确率,此算法虽然识别速度快,但是整体的平均精确率均值依旧不高。卢迪等[26]提出了YOLOv4-tiny的手势识别算法,虽然在NUS-Ⅱ手势数据集上能达到较高的识别精度,但是对于小目标手势的检测效果不好,预测框对目标定位依然会出现偏差和识别不准确的问题。

通过对以上手势识别算法的分析,可以发现其都存在一定缺陷和局限性,如识别性能不高,检测速度慢,网络模型较大等,且对于小目标手势识别和复杂背景下识别的效果也有待提高。为此本文提出改进的YOLOv5s算法,经实验验证本算法相较于之前算法有着较高的识别精度和较快的检测速度,并且最终训练的网络模型内存占比很小,易于实现工程部署,且网络模型对于小目标及复杂背景下手势识别表现较好,对于实现列车驾驶员的手势识别有重要意义。

1 YOLOv5s算法

YOLOv5s算法网络结构见图1,主要由主干网络(Backbone)、颈部(Neck)和输出端(Output)三部分组成。其中,主干网络对输入的图片进行特征提取,包括切片结构(Focus)、卷积模块(Conv)、瓶颈层(C3)和空间金字塔池化(SPP);颈部对提取的特征进行融合,将自顶向下传达强语义特征和自底向上传达强定位特征进行结合,实现从不同的主干层对不同检测层进行特征融合;在进行以上操作后传入检测层,通过非极大值抑制对多目标框进行筛选,最后输出置信度值最高的预测类别,并返回目标位置的预测框坐标。

图1 YOLOv5s算法网络结构

2 改进YOLOv5s算法

2.1 CBAM模块

CBAM是一种用于前馈神经网络的简单有效的注意力机制模块,其整体结构见图2,主要由通道注意力模块和空间注意力模块组成。CBAM模块在接收到中间特征图之后,会沿着通道和空间上的两个独立维度进行处理,将处理后得到的特征图与输入时的特征图相乘从而实现自适应的特征优化。CBAM为轻量级模块,可以在不增加过多计算量的前提下无缝集成至任何CNN架构中,并且可以实现与基础CNN结构一起进行端到端的训练。

图2 CBAM整体结构

在原始的YOLOv5s主干网络中,提取特征时卷积层主要计算每个特征图相邻位置的特征信息,由于特征图中每个通道都含有不同特征信息,所以卷积层会忽略通道信息之间的相关映射。列车驾驶员在驾驶室发出手势,会存在手势目标与检测设备距离不定、像素值相对较低等局限性。通过添加注意力机制模块,CBAM可以实现多尺度特征融合,加强通道间的特征信息训练。文献[27]充分论证了注意力机制模块CBAM可以在前馈神经网络中优化学习特定类别特征信息,有效提升检测和分类性能。故而本文将注意力机制模块CBAM添加到主干网络Backbone中的每个Conv模块之后,再输出给C3模块。引入CBAM注意力模块见图3。这样改进的主干网络,通过空间、通道注意力机制模块,加强对重要特征信息的关注度,同时抑制次要信息的关注度,可以更加有效地提取手势特征信息,训练完成的模型对于列车驾驶员的手势识别更具鲁棒性。

图3 引入CBAM注意力模块

给定中间特征图F作为输入,经过通道注意力机制Mc映射计算后得到F′,再经过空间注意力机制Ms后最终得到Refined特征图F′′。整个计算过程可以表述为

F′=Mc(F)⊗F

(1)

F′′=Ms(F′)⊗F′

(2)

图4 通道注意力模块结构

(3)

空间注意力模块结构见图5。空间上的注意力机制主要关注位置信息,对通道进行压缩,在通道维度上分别进行平均池化和最大池化[28]。其中,平均池化的操作就是在通道上提取平均值,提取的次数是高乘以宽;最大池化是提取最大值,提取次数与平均池化相同。将得到的这两个不同的背景描述基于通道进行concat操作,再经过一个卷积操作降为一个通道,使用Sigmoid函数生成空间注意力特征,然后与输入至空间注意力模块时的输入特征作乘法计算,最终生成新的特征。空间注意力的计算过程可表述为

图5 空间注意力模块结构

Ms(F′)=σ(f7×7([AvgPool(F′);MaxPool(F′)]))=

(4)

2.2 BiFPN模块

输入图片经过 YOLOv5s主干网络提取特征后需要经过颈部网络处理后输出到检测层。在原始YOLOv5s结构中采用 PANet 作为颈部网络,PANet网络结构见图6,其中C为输入特征图,P 为输出特征图。通过自底向顶和自顶向底双路径聚合,实现底层特征信息和高层强语义信息的特征融合,同时缩短底部与顶部之间信息路径。上采样与下采样中长宽相同的特征层进行堆叠,进一步保证小目标的特征和信息。

图6 PANet网络结构

原始的YOLOv5s网络中颈部 PANet 结构是特征金字塔中简单的双向融合[29],虽然可以实现浅层信息的传递和高层特征图强语义信息的融合,但是两部分融合时直接采用相加运算,并没有相关的权重设计。基于以上问题,本文引入BiFPN模块,其网络结构见图7。

图7 BiFPN网络结构

BiFPN模块在原始Neck中PANet结构上进行了改进:首先删除上下边线里面的中间节点,即图6中C5至P5和C3至P3之间的一个节点,因为较为单一的输入、输出节点对于融合不同特征的网络来说贡献较小。其次跳过删除的节点添加跳跃连接,只有存在中间节点并且输入、输出在同一层级时,使用残差的方式添加一条额外的边。由于YOLOv5s中只有3个尺度的特征信息融合,所以在删除两条边线中间节点后只剩C4和P4之间的节点有着同一层级的输入和输出,因此在C4至P4这条线上添加残差连接,其目的是在不增加计算开销的同时来融合更多的特征。最后直接将BiFPN作为一个基本单元,可以进行重复堆叠和在网路中添加。PANet只有一条top-down和bottom-up的路径,而BiFPN将一对路径视为一个特征层,可以进行多次的堆叠来得到更多高层特征融合。先前的特征融合方法大多数平等对待所有的输入特征,然而不同特征有着不同的分辨率,对特征融合的贡献度是不同的,为此BiFPN结构为每个输入都添加一个额外的权重,网络在训练过程中逐渐学习每个输入特征的重要性。基于此,通过实验3种不同的加权方法如下:

(5)

(6)

(7)

式中:O为节点输出值;Ii为来自i节点的输入值;wi为对应i节点输入的权重;j为输入节点个数的总和;ε为一个保证数值稳定的小量,ε=0.000 1。

FPN是传统的自顶向底的特征融合网络,受到单向信息沟通的限制;原始的YOLOv5s结构Neck中的PANet是自底向顶和自顶向底的简单双向特征融合网络,实现了双向的信息沟通;本文提出将性能更好的BiFPN模块添加至Neck中。原始的YOLOv5s网络结构中Neck部分是PANet特征网络,有4个concat操作,依照网络顺序最后3个为输出特征图之前的concat操作,因为BiFPN模块可以将其视为一个基本单元,故而在原始Neck中的后3个concat操作之后堆叠一层BiFPN模块。Neck部分改进对比见图8。

图8 Neck部分改进对比

2.3 先验框的设置优化

YOLOv5s原始算法在对目标物体进行预测时,会出现预测框偏离识别目标物,预测框在一定程度上超出目标物边界,或者预测框小于目标物等问题。先验框(Anchor)的设计就是预设一个宽高坐标都设定好的检测框,目的是减轻以上问题的程度并以此来更贴近Ground truth。

为了获得更加适合本文数据集的Anchors,利用K-means聚类算法进行计算。考虑到YOLOv5s算法中输出3种尺寸的特征图进行预测,因此先验框的尺寸也是不一样的。由于原始的K-means聚类算法以欧氏距离定义样本距离时产生的误差与先验框尺寸成正相关,且以此计算的IOUavg值较低[22],因此本文在原有的K-means聚类算法基础上进行优化,在定义样本距离的时候使用1-IOU的方法来代替原始的欧式距离算法,其样本间距离为

d(b,c)=1-IOU(b,c)

(8)

(9)

式中:d(b,c)为先验框b与聚类中心c之间的距离;A为标记框;C为预测框;B为标记框A和预测框C的交集;S为面积。

先验框的个数和宽高对IOU和网络的识别性能是有影响的,通过设计对比实验得出效果最佳的先验框个数为9;通过使用改进的K-means聚类算法,经过迭代3 000次后得到9个新的先验框宽高分别为(108,105) (105,153) (187,102) (152,156) (224,150) (167,257) (338,169) (209,331) (334,322)。

2.4 损失函数

在损失函数方面,采用分类损失函数clsloss、定位损失函数giouloss、置信度损失函数objloss三部分对模型进行指导和训练,将分类损失、定位损失、置信度损失进行求和得到最终的损失函数;采用二元交叉熵损失函数计算种类的概率和目标置信度得分损失,并使用giouloss作为bounding box的回归损失。

(10)

(11)

(12)

式中:y为预测类别;p为预测正例索引;i为预测框总索引;IOUp为预测正例框p与真实框的交并比。

2.5 改进思路

改进的YOLOv5s 网络结构见图9,整体改进思路如下:

图9 改进的YOLOv5s 网络结构

Step1在YOLOv5s网络的backbone中引入CBAM模块添加到Conv操作后面,这样给定的中间特征图就会依次通过通道注意力模块和空间注意力模块,在通道维度和空间维度上分别加强关注特征信息的“内容”和“区域”,从而提高表征能力,关注重要特征、抑制次要特征,有效地帮助网络内的信息流动。

Step2在Neck部分引入BiFPN特征金字塔网络,在3种尺寸特征图输出前的concat操作之后堆叠一层BiFPN模块。可以将BiFPN理解为带有权重的双向特征融合金字塔网络,与传统的FPN和PANet相比,不仅实现双向的特征信息流动,还添加了跨越连接,以同层特征信息的流动来融合更多特性,并且没有产生过多的计算成本。

Step3在原始的K-means聚类算法上对样本距离进行优化,使用1-IOU的方法替换原始的欧氏距离算法;通过实验得出最佳的先验框设置个数,计算出新的先验框宽高信息。先验框的设置,使网络模型的预测结果偏向先验框,网络训练过程中学习到的参数使预测框得以调整,使得先验框越来越接近标注框,这样就会解决模型学习的偏移量和系数变化较大的问题。

3 实验及分析

3.1 数据收集

由于列车驾驶员手势在国际上并没有统一标准,且我国目前针对列车驾驶员手势识别方面的研究也相对较少,无法直接获得高质量开源的列车驾驶员手势数据集,所以本文进行了自主数据集采集。

为使数据集更贴近真实手势动作场景,同时具有多样性,更有利于后期模型训练和提高检测性能,拍摄时考虑以下3个方面:

(1)手势多样化拍摄。从多个角度拍摄手势,并且手指可以稍微变形。

(2)复杂环境拍摄。因为现实手势动作场景中可能会因为不同时间、天气导致复杂的光线条件,所以设置不同的亮度来进行拍摄。

(3)多尺度拍摄。采集5名人员的手势,并且在一定范围内通过前后左右移动手势来调整与采集设备间的距离,充分保证数据集的多尺度特性。

每名人员采集5种手势,手势示例见图10。每个类大约有1 500个样本,总共7 532张图像,每张图像的尺寸为640×480。采集的实验数据集数量见表1。

图10 手势示例

表1 实验数据集数量 张

3.2 实验环境

实验环境配置为:操作系统,Linux Ubuntu 20.04.2 LTS;CPU,Intel Xeon Gold 6142;显卡,NVIDIA Geforce RTX 3080(10G);内存,16G×2;固态硬盘,480G;Pytorch,V1.10;CUDA,V11.2。相关训练参数设置为:初始学习率0.01;终止学习率0.2;Batch_Size为32;训练轮数300。

3.3 指标衡量

本文采用以下指标对模型性能进行衡量:准确率P,为模型对某类别正确预测的数量与该类别所有数量的比值;召回率R,为模型对某类别正确预测的数量与测试集中该类别所有数量的比值;平均准确率AP,为模型预测某类别的准确率均值;平均准确率均值mAP,为所有单类别的AP求和与类别数的比值,一般在IOU=0.5时计算mAP的值,即mAP@0.5;交并比IOU,为产生的预测框与真实框的重叠度,也就是预测框与真实框交集与并集的比值;WS为模型占用内存的大小;GFLOPs为用来衡量算法或者模型的复杂度;检测速度V为每秒可以处理图片的数量,FPS,V值越大说明模型的检测速度越快。所有指标的计算式为

(13)

(14)

(15)

(16)

(17)

式中:TP是真阳性,将阳性目标预测为阳性;FP为假阳性,错误地将阴性目标预测为阳性;FN为假阴性,错误地将阳性目标预测为阴性;N为图片数量;NC为样本类型数目;X为预测框;Y为真实框。

3.4 测试结果

采用改进的K-means聚类算法重新计算Anchors值,由于先验框个数对模型性能有所影响,所以将计算出的不同先验框个数的Anchors值替换到模型中训练输出结果。不同Anchors值对模型精度的测试结果见表2。由表2可见,5个模型的检测速度变化均较小;3Anchors和12Anchors相比较原始的YOLOv5s模型,精度分别降低了0.2%和1%,模型权重的内存占比相同,计算量上3Anchors降低了0.2 ,12Anchors没有变,所以Anchors值过少和过多都会影响模型的识别性能,且较低的Anchors值也同时缩减了模型的计算量;6Anchors和9Anchors值的精确度分别增加了0.3%和0.7%,权重内存占比同样不变,6Anchors值虽然减少了0.1的计算量,但是所带来的整体提升效果依旧不足。经过以上各指标性能对比筛选,选择精确度提升更高的9Anchors值作为本文网络的先验框设置。

表2 不同Anchors对模型精度的测试结果

3.5 消融实验

深度学习的模型中,在一定范围之内网络深度越深,其结构组成就越复杂,相对来说对目标的识别精度就会越高,但是同时会产生很大的计算量,也会需要更多的浮点运算,最终生成的模型权重文件内存占比也较大,从而导致对部署端硬件的要求会提高,包括CPU的运算能力、运行内存和储存空间。所以实现列车驾驶员手势识别的工程部署,更加倾向于轻量级模型。基于此,本文通过对模型检测性能和检测速度综合考虑,直接选用YOLOv5系列。在YOLOv5系列中又存在4种基础模型,YOLOv5x、YOLOv5l、YOLOv5m、YOLOv5s,由于v5s内存占比小、检测速度较快,同时还能保证较高的精确度,所以选用YOLOv5s作为原始模型。

本文在原始模型上提出3种改进,分别为单一改进、两两组合改进和整体改进,并依次进行性能对比。消融实验结果对比见表3。由表3可见:在单一改进中,添加新的两种模块带来的精确率提升更为明显,尤其是添加BiFPN模块后mAP增加了1.9%,添加CBAM模块后mAP增加了1.4%;重新计算9Anchors性能也增加了0.7%,这说明结构模块添加更有利于模型的识别。再对单一改进两两组合,结果显示双模型的添加提升精确率的效果更好,直接将mAP从0.907增加至0.945,平均精确率均值增加了3.8%;在添加CBAM模块和BiFPN模块的基础上重新计算9Anchors值,相对于单一模型添加分别增加了0.7%和0.5%,相比较未改进的YOLOv5s更分别增加了2.1%和2.4%。再将以上3种改进放至一起,mAP达到了最高0.955,相比较原模型的0.907平均精确率均值增加4.8%。由于添加了2种模块,所以带来了一定程度上的计算量增加和模型权重文件内存占比增加。但是相较于原始模型,权重内存占比只增加了2.2 MB,GFLOPs也仅仅只增加了1.4。在牺牲模型轻微的内存占比和计算量增加的情况下带来较大幅度的精确率增加也是值得的。由于YOLOv5s本身有较快的检测速度,再加上以上的改进,检测速度虽然从最初的90 FPS降到了71 FPS,但依然能够保持一个很高的值,同时也能够轻松达到实时检测的需求,即V30 FPS。

表3 消融实验结果对比

对最终改进模型使用测试集进行测试,每一类手势的AP值见表4。由表4可见,5类手势的整体AP都很高,其中发车信号手势AP最高为0.986,进站信号手势AP为0.932;由于不同类别的手势复杂程度不一,以及个别手势之间相似度较大,会导致各个类别手势AP存在差异,但是改进的模型对于所有类别的识别情况整体较好。

表4 不同手势的AP值

3.6 与目标检测算法对比

为进一步验证本文算法的检测效率和分类精度,与现阶段主流的目标检测算法进行对比实验。实验中采用本文自制的列车驾驶员手势数据集,设置相同的实验参数,以及相同的硬件、软件环境。本文算法与YOLOv3-tiny、YOLOv4-tiny、Mobilenet-SSD、PP-YOLO Tiny、YOLOX-S同时迭代300次进行训练,所得性能对比见表5。

表5 各算法性能对比

由表5可见:较早的Mobilenet-SSD网络模型mAP最低,同时图片处理速度也较低,仅为27 FPS,而网络模型权重文件内存占比却高达118 MB。传统YOLO系列中的YOLOv3-tiny和YOLOv4-tiny同为轻量级网络,mAP分别为0.873和0.882。在此基础上YOLOX系列中的S模型是对比的目标检测模型YOLO系列中mAP最高的为0.912,但是YOLOX-S的权重并不像tiny型占比较小,它的内存占比为69 MB。百度推出的PP-YOLO系列也同样有轻量级网络PP-YOLO Tiny,相比YOLO的tiny系列在mAP、检测速度上均有增加,分别为0.890、39 FPS。本文算法模型权重内存占比仅为15.9 MB,对比YOLOv4-tiny模型在识别性能上增加了7.3%,对于较新的YOLOX-S网络模型也增加了4.3%,同时在检测速度上也是远超YOLOX-S,达到71 FPS。手势检测结果可视化见图11。

图11 手势检测结果可视化

4 结论

(1)本文提出改进的YOLOv5s算法实现对列车驾驶员手势实时识别,通过添加CBAM注意力机制模块改进主干网络来加强有效的特征信息,采用BiFPN双向特征金字塔网络加强特征融合,使模型在分类和定位上取得更好的效果。使用改进的K-means聚类算法计算出适合自制数据集的9Anchors值,最终使得模型性能达到最佳。实验结果表明,改进的模型在测试数据集上的检测精度达到95.5%,在原始YOLOv5s基础上性能增加了4.8%。

(2)改进的YOLOv5s模型最终的权重文件内存占比仅为15.9 MB,预测一张尺寸大小640×640的图像也仅仅需要14 ms,处理速度可达71 FPS,可满足实时检测要求,同时对CPU等硬件条件要求较小,这有利于部署至嵌入式设备或移动端。

(3)将本文算法与现阶段主流的目标检测算法进行对比,如Mobilenet-SSD、YOLOv3-tiny、YOLOv4-tiny、PP-YOLO Tiny和YOLOX-S,实验表明,本文算法在识别精度、模型处理速度和网络模型权重文件大小上均具有优势,验证了本文算法的可行性和先进性。

猜你喜欢
先验手势内存
挑战!神秘手势
基于无噪图像块先验的MRI低秩分解去噪算法研究
“春夏秋冬”的内存
V字手势的由来
胜利的手势
基于自适应块组割先验的噪声图像超分辨率重建
基于平滑先验法的被动声信号趋势项消除
内存搭配DDR4、DDR3L还是DDR3?
先验的废话与功能的进路
基于内存的地理信息访问技术