APP下载

改进SSD算法在中国手语识别上的应用

2021-02-04王直杰

计算机工程与应用 2021年3期
关键词:手语手势损失

周 舟,韩 芳,王直杰

东华大学 信息科学与技术学院,上海201620

在聋校语言教学中,双语教学模式能有效提高聋童的语言学习效率,对于特殊教师们来说则需花费更多的耐心、时间和精力。面临着我国特殊教育学校的师资普遍薄弱的现状,手语识别技术便可帮助特教完成教学任务——聋童将手语录成视频输入计算机,进而能够学习输出的汉字和唇语,无需老师亲自教学就能完成汉语书面语的学习。另外,计算机只对标准的手语(以《中国手语》为标准)进行识别,借此还可纠正聋童手语方言化的问题。

目前手语识别方法大体分为两种:一是基于传统图像特征和机器学习的方法[1-2]:如首先利用传统的图像分割算法从手语视频的视频帧中分割出手部,再通过机器学习的方法(如SVM、Adaboost 算法)根据分割区域的图像特征(如HOG、SIFT特征)进行特征分类[3]。但由于这些特征的表征能力有限,难以从复杂内容中提取到具有代表性的语义信息,而且分步完成的手势识别实时性差。二是基于深度学习的方法[4]:如利用目标检测神经网络学习视频帧的特征,对手部进行定位并同时进行手势分类。相比传统图像处理和机器学习算法,基于深度学习的目标检测网络往往能得到更高的准确率和识别速度[5],其代表有Faster R-CNN[6],以及后来推出的Onestage目标检测方法,如YOLO[7]、SSD[8],能进行端到端检测,具有更好的实时性,因此成为动态目标检测的主流方法。

本文提出的手语识别算法利用深度学习中的目标检测网络SSD,相比基于图像特征和机器学习的大部分手语识别方法更简单,能同时完成手语视频中每个视频帧中的手部检测和手势分类。目前,大部分研究仅利用SSD 进行手部定位[9],或没有针对手势识别任务改进SSD[10],因而在检测小目标时仍存在漏检、误检等情况。本文对SSD网络进行网络结构、损失函数和训练方法上的改进,实验表明,本文算法在手语识别的任务上取得了更好的效果。

1 改进的SSD网络

1.1 SSD网络结构

SSD 网络是目前主流的目标检测网络之一。其网络结构大致如图1所示,输入是尺寸为300×300的图像,其基础网络是VGG16 网络,分别在基础网络中的6 个特征层(Conv4_3、Fc7、Conv6_2、Conv7_2、Conv8_2、Conv9_2)上预测目标,每个特征层都负责在该层的每个预选框下检测特定尺寸的目标。为了检测大型物体并增加感受野,在原始基础网络上增加了额外的卷积特征层。SSD将整幅图像分割成网格单元,并在每个网格单元中,生成一组具有多个尺度和纵横比的默认框,每个边界框都对应4 个反映其尺寸的值进行回归、C(类别数)+1个分类概率进行分类,再经过非极大值抑制删除一部分重叠或者不正确的边界框,生成最终的边界框集合。整个网络通过端对端的训练方案在所有预测图上用定位损失和分类损失的加权进行优化,最终的预测是通过合并来自不同特征层的所有检测结果来实现的。

SSD损失函数分为两部分:用于默认框位置回归的损失函数Lloc和置信度损失函数Lconf。位置回归损失Lloc为预选框l和真实边界框g的SmoothL1损失函数回归的参数是默认框d的中心偏移量,以及宽w、高h,见公式(1):

其中,N是与真实框相比满足交并比阈值的默认框数量,参数α用于调整Lloc和Lconf之间的权重比例,默认α=1。

借助特征金字塔的思想,预选框的生成是SSD的亮点之一。6 个特征层产生的特征图的大小分别为38×38、19×19、10×10、5×5、3×3、1×1。每个n×n大小的特征图中有n×n个中心点,围绕中心点产生一大一小的2个正方形框和2个或4个长方形框,其中,如果该层设置的长方形框的长宽比有一个(默认为2),则通过长宽互换产生2个长方形框;如果纵横比有两个:2和3,则产生4个长方形框。每个特征层的中心点对应的默认框数量k分别为4、6、6、6、4、4。在每层空间位置上,对这些默认框进行位置回归和置信度回归。当特征层尺寸越小,在该特征层上预选框中检测到的目标越大。

这些框的尺寸根据一定规律进行计算,得到每层的特征图上产生的默认框尺寸如表1所示,由于一只手的大小不可能超过整张图片的一半,因此在Conv8_2、Conv9_2 上产生的默认框对于手部检测的效果贡献不大,本文中将Conv8_2 和Conv9_2 去掉,在保证准确率不变的情况下最大限度减少网络的参数,提高检测速度。另外,浅特征层对手这种小目标的检测能力更强,本文将Conv4_3中的k改为6,最终每层默认框尺寸如表1。

图1 SSD网络结构图

表1 每层的特征图上对应的默认框大小

1.2 SE-Net的嵌入

SE-Net[11]通过对各通道之间依赖关系建模,以此对各通道特征进行重校准,选择性增强特征表达能力更强的通道,其结构如图2。其中U为任意卷积层的输出结构体,在该卷积层后嵌入SE-Net模块,计算各通道的权重,输出相同尺寸和维度的结构体。

图2 SE-Net网络结构

SE-Net 模块主要分成三步:用于全局信息嵌入的Squeeze部分、负责自适应重新校准的Excitation部分和将权重融合进原特征层的Scale层。

(1)首先根据空间维度进行特征压缩,将每个二维的特征通道变成一个实数,这个实数则携带着全局的信息,并且输出和输入的维度相匹配。它表征着在特征通道上相应的全局分布,而且使得靠近输入的层也可以获得全局信息,此部分的操作由全局平均池化操作完成,公式如下:

其中,uc表示U中第c个二维矩阵,下标c表示其中的通道。

(2)再采用门机制,利用参数W为每个特征通道生成对应的权重,其中参数被学习用来显式建立通道之间的相关性。为了限制模型复杂度和辅助泛化,此部分通过两个全连接层完成:在第一个全连接层按缩放因子r(默认为16)减少通道数为激活函数为Relu;在第二个全连接层恢复通道数为C,经过Sigmoid 激活后得到,其结构为C×1×1,具体公式如下:

其中W1、W2分别为两个卷积层的参数,且和

图3 改进的SSD网络结构

(3)此时s融合着各通道的特征图信息,其中的每个数值都代表该通道的二维特征矩阵的权重,将其与原特征层U按通道相乘,通过加权的方式,完成在通道维度上的对原始特征的重标定。公式如下:

为了更好地加强有效的特征而抑制贡献小的特征,将SE-Net嵌入剩下的4个特征层后,改进后网络的结构如图3所示。为了加强分类能力,嵌入的位置是置信度计算分支上,即在图3 中的全局平均池化(Global Pooling)层、两个FC池化层和Scale层。

1.3 损失函数的改进

SSD检测框中包含有检测目标的框为正样本,不包含则为负样本。一帧图像中检测目标只有1~2个,而且占整张图片的2%~5%,那么此时正样本的数量远远小于负样本,导致分类性能差。为了解决这一问题,本文将Lconf的交叉熵损失函数CE(pt)替换为焦点损失[12](Focal Loss)函数FL(pt),公式如下:

其中,pt为该类别分类正确的概率,且FL(pt)相比CE(pt)添加了两部分的权重αt和(1-pt)γ,αt主要用来处理正负样本不均衡问题,对于正样本,则设置较小的权重αt;对于负样本则使用称为调制参数,其中γ≥0,其作用则是将模型的注意力集中在难训练样本(即难例),所谓难例就是pt更接近0的样本,反之pt接近1,则说明该样本属于易分类样本。如图4 所示,横轴为pt,纵轴为损失函数值。当γ=0时,即为原始的交叉熵损失。通过调整γ,控制难易分类对总分类损失函数的贡献。

图4 在不同γ 下,损失函数值随pt 变化曲线

图5 本文数据集上mixup数据增强的效果图(1、2、3分别为不同的手势类别)

另外为了提升模型对检测目标的分类能力,将式(1)中置信度损失与位置回归损失的比例增大,即令参数α=0.8,使模型在学习时侧重于分类损失。

1.4 训练技巧

为了使模型在复杂的环境下得到很好的检测效果,往往可以采取数据增强的方法,通过从训练样本邻域中提取附加的虚拟样本以扩充对训练分布的支持。本文使用的数据增强方法为mixup[13],原本用于减轻分类网络中的对抗性干扰[14],其关键思想是以线性差值的方法构建新的虚拟训练样本和标签。公式如下:

另外,为了加速模型训练收敛的速度,使模型输出特征的分布更加稳定,训练时,本文在SSD 中每个卷积层后都添加Batch Normalization(BN)[15]层,以批数量(batch_size)为单位。并在每个特征层后特征归一化(Normalize)操作,即对每个像素点在通道上做L2 归一化,先将数据统一映射到[ ]0,1 区间上,再把像素点上的值放大到一定倍数,如20倍,加快基于梯度下降法或随机梯度下降法模型的收敛速度,提升模型精度。例如在每一个特征层及其后的网络结构如图6所示。

2 手语视频翻译

在手语视频中,最少在3 帧之内不会有超过2 帧包含有关键手势的关键帧,因此在每个手语视频中每隔3帧取出一帧进行SSD目标检测,得到每帧图片中所有检测目标的类别,经过相邻重复关键帧的去重和无意义手势的去除后,在已经建立好的中国手语标准关键手势模板数据库中搜寻结果匹配的汉语词汇,完成整个视频的手语-汉语翻译。在模板库中手语“前途”的关键手势类别名称如表2所示。

图6 每个特征图及其后的网络流程图

表2 手语“前途”的模板

SSD的检测类别(即手势类别)除关键手势外,还包含2 类非关键语义手势:过渡不清晰手势“background”(记作G)和无动作静止手势“static”(记作S),模板匹配具体流程见图7,L1为“前途”第一个关键帧的左手关键手势“1-qiantu-L1”的缩写,以此类推L2和R2。

图7 目标检测结果与标准手语库进行模板匹配

3 实验分析

3.1 实验配置、准备及训练

实验数据来源于中科院SLR Dataset数据集中不同手语词汇的彩色视频,每个手语词汇由50 个不同的手语者录制,每个手语时长都不相同,平均时长为3~5 s,从每个视频中随机抽取视频帧作为训练集,采集共计5 000 张720×720 的RGB 图像,其中25%作为测试集,75%作为训练集,使用标记工具LabelImg标注每只手的手势类别及位置。

实验配置为CPU:Inteli7 8700K,RAM:8 GB,GPU:Nvidia GTX 1080,GPU 加速库:CUDA 8.0.61,CUDNN6.0.21,实验系统为ubuntu16.04,算法使用Caffe深度学习框架。网络训练过程中,设置batch_size 为8,初始学习率为0.005,多分步策略学习,前置衰减系数为0.000 5,同时通过观察损失函数变化、训练与测试准确率差异等指标调整学习率和下调学习率时的步数。

3.2 改进的SSD实验对比

为了验证本实验各部分的效果,在本文算法的基础上分别单独去掉各模块进行实验,在这些实验中保持训练集和实验配置都相同,输入图像尺寸均为300×300,结果如表3。

表3 消去各模块后对网络的影响

由结果可以看出,各个部分都能单独对mAP有1%~2%的提升,SE-Net 计算不同通道的重要性权重并重新分配给各通道,增大了对手势识别发挥作用的特征层的权重。置信度损失函数替换为Focal Loss 使训练时模型参数的学习更倾向于正确的分类预测框。mixup 数据增强方法增加了训练时的扰动,使模型在更加复杂的环境下也能保持很好的检测精度,为了更直观地展示mixup 的效果,利用图5 中混合后的图像做不同模型的对比实验,结果如图8,没有使用混合方法训练的网络很难检测到所有的目标,相比之下,由于生成的视觉欺骗训练的模型更具鲁棒性。添加两种不同的归一化层后,引入了新的学习参数,模型参数会有所提高,但是由于其对神经网络中间层的数据进行重新归一化,使每一层的更新更为同步,减少了在某一层过拟合的可能性,对mAP的提升起到不小的作用。

本文任务实为分类任务,相比预测框位置的准确率,本算法更关注预测框类别,因此定义了两个检测指标来观察预测框分类的准确率:

图8 SSD-3和本文改进的SSD的检测结果对比

由于一帧图像中最多只可能有两个手势,如果检测出3 个及以上分数大于0.5 的目标,则选出的分数最大的两个预测框作为检测结果,并与原始SSD、文献[16]中的MobileNet-SSD 和文献[17]中的SE-MSSD 在以上指标上进行记录,其中MobileNet-SSD为将基础网络改成MobileNet[18],结果如表4所示。

表4 手势识别实验结果对比

通过表4 可以观察到本文改进的SSD 模型相比另外几个模型在mAP上提升了4~5个百分点,其中,FA越低,说明预测出的错误分类框更少,而在预测错误的时候则会使手语模板匹配失败,LA 越高,则说明没检测的目标更少,那么漏检的帧更少,手语关键帧的语义缺失的概率越少。MobileNet-SSD将6个特征图的尺寸只有本文算法的一半,对小目标的检测效果没有本文好。SE-MSSD的基础网络是MobileNet,SE-Net模块添加在MobileNet 的每个深度可分离卷积层后,深度可分离卷积虽可大量降低网络参数量,提高算法的运算速度,但也因此带来了精度上的损失,而在本文中SE-Net 仅加在产生默认框的特征层的置信度计算分支上,引入的额外计算量相比SE-MSSD 少很多,在尽可能减少参数的情况下增强了网络层通道间的相关性,提高分类准确率。另外,本文中增加了默认框的数量,并且通过归一化操作操作和mixup提升了模型泛化能力,对手部小目标的检测能力更强,预测框数量更接近于真实数量。

3.3 手语识别实验

为了验证本算法在手语识别上的有效性,与基于二级匹配策略的实时动态手语识别[19]做对比实验,对于本数据集的手语视频中的手语词汇进行识别,平均准确率如表5。

表5 本文算法与文献[19]的视频手语识别结果对比

通过表5比较可以看出,本文算法识别手语的精度相比文献[19]有一定的提升,而且在识别时间上也由于手部定位和分类的一步完成快于文献[19],文献[19]借助体感摄像头Kinect获取手心轨迹,首先根据轨迹的点密度分布设计了一种关键帧检测算法以提取手势的关键手型,再结合轨迹的曲线特征和提取关键手势特征进行二级匹配,步骤复杂,用于提取关键帧的时间耗费久,而且利用传统图像特征分割手部并进行特征提取,易受光照等不利因素的影响,因此准确率和识别速度受到影响。而本文算法只需借助一个单目摄像头,无需借助辅助技术,更不需要文献[19]中用到的颜色手套,脱离了其他技术和外物的限制,利用目标检测网络SSD一步完成手部定位和分类,并利用SE-Net 增强了图像深度信息的提取能力,为了更好地完成分类任务,利用Focal Loss 损失函数解决正负样本不均衡的问题并提升置信度损失的权重,使模型目标的分类更加准确,还利用多种训练技巧,例如mixup、归一化来提升模型的泛化能力。

4 结束语

本文提出了一种基于改进SSD 的手语识别算法。利用SSD目标检测神经网络实现视频手语的识别,复杂度低,避免传统图像处理算法分割手部效果不佳和机器学习分类准确率低的问题。本文对原始SSD 主要进行以下四方面的改进:(1)针对手部小目标,去掉SSD最后两个用于检测大目标的特征层,并在第一个特征层增加产生的默认框数量;(2)添加SE-Net模块学习每个特征通道的重要性,并加权到原特征上;(3)针对每张视频帧中正负样本极度不均衡的情况,选用Focal Loss 作为SSD损失函数中的置信度分类部分,并增大分类损失的权重,提升了网络针对手势的分类能力;(4)加上mixup数据增强和卷积层、特征层后的归一化操作等训练技巧,整体上提升了模型的泛化能力和鲁棒性。实验证明,本文方法不仅在识别率和速度上得到提升,而且仅使用单目摄像头,不借助数据手套、颜色手套或体感设备Kinect,更具价格优势和实用性。

猜你喜欢

手语手势损失
少问一句,损失千金
胖胖损失了多少元
挑战!神秘手势
自然手语在聋人大学生手语中的使用调查研究——以南京特殊教育师范学院为例
玉米抽穗前倒伏怎么办?怎么减少损失?
V字手势的由来
胜利的手势
一般自由碰撞的最大动能损失
奇怪的手语图
奇怪的手语图