为了在低算力的边缘设备上部署基于深度学习的姿态检测网络,综合考虑网络识别效果和实时性的需求,实现基于姿态检测的人体行为识别,本文研究并设计了一种轻量级OpenPose模型。在特征提取层使用改进的MobileNet替换原本的主干特征网络,通过在浅层使用ResNet进一步降低模型训练的参数量,同时为了保证模型的检测效果,在网络深层引入卷积块注意力模块(convolutional block attention module,CBAM)[9],在姿态估计层重新设计网络结构。改进后的轻量级OpenPose模型能够在边缘设备上实时部署,并准确识别目标场景下的人体行为。
1 行为识别平台设计
平台使用的嵌入式设备为英伟达旗下的 Jetson TX2设备。Jetson TX2设备包含256个并行计算架构(compute unified device architecture,CUDA),可以对神经网络模型进行推理。平台与网络摄像头需接入同一局域网内,平台通过交换机读取摄像头的实时视频流,并将其逐帧输入模型,运行在Jetson TX2设备的CUDA加速核心上。在完成神经网络的优化、部署工作后,将结果输出至显示界面,该系统的工作原理如图1所示。
<G:\武汉工程大学\2024\第3期\黄瑜豪-1.tif>
图1 系统工作原理
Fig. 1 Operating principle
2 姿态检测算法
2.1 OpenPose姿态检测模型
OpenPose模型是2016年由卡耐基梅隆大学开源的一项人体姿态检测模型,其在多人图像中使用自底向上的方法对人体姿态进行识别。首先确定骨骼关键点的位置信息,并将其标记为关节热度图,然后通过计算每个关节热度图对应的局部亲和场(part affinity fields,PAF)将各个关键点连接构成向量。传统的OpenPose模型使用视觉几何组网络(visual geometry group network,VGGNet)[10]作为输入层,VGGNet包含16个卷积层以及3个全连接层。原始图像输入网络后在前10层生成特征图F,并将特征图F作为后续神经网络的输入。后续网络中每个阶段的姿态检测层会分出2个分支层,在每个阶段,分支层1用来预测关节热度图St,分支层2用来预测局部亲和场Lt,其中t表示网络推理过程中的阶段数,具体如式(1)所示:
[St=ρt(F, St-1, Lt-1),?t≥2Lt=φt(F, St-1, Lt-1),?t≥2] (1)
式(1)中:ρt和φt分别表示两个分支层在第t阶段用于推理的卷积网络,每个阶段的输入为F和前一阶段预测的结果,使用本阶段的卷积网络分别预测出本阶段的关节热度图和PAF。
VGGNet在整个网络中全部使用3×3大小的卷积核堆叠神经网络。使用VGGNet的OpenPose模型网络结构如图2所示,其中,h,w分别表示输入图像的高和宽;h′,w′分别表示输出图像的高和宽;C表示卷积操作;P表示池化操作。
2.2 改进的轻量级OpenPose模型
2.2.1 深度可分离卷积 由于Jetson TX2设备的推理性能不高,基于VGGNet的OpenPose模型在该设备上无法正常运行,本文将原本的主干特征网络全部替换为MobileNet[11],后者使用深度可分离卷积的思想,将标准卷积拆分成1个普通卷积层和1个1×1的点阵。假设输入层特征矩阵为DF×DF×M,输出层特征矩阵为DF×DF×N,卷积核为K×K,其中DF表示拆分成方形的输入特征图像和输出特征图像的边长,M和N分别表示输入特征和输出特征的通道数,K表示卷积核尺寸。标准卷积的计算量S1和深度可分离卷积的计算量S2如式(2-3)所示:
[S1=DF×DF×M×N×DF×DF] (2)
[S2=K×K×M×DF×DF+M×N×DF×DF]
(3)
对比S1和S2的参数量可知,深度可分离卷积的计算量仅为标准卷积计算量的1/N+1/K2,N通常是一个很大的值,因此当K=3时,深度可分离卷积的计算开销仅为标准卷积的1/9。
2.2.2 特征融合 在网络浅层使用倒置残差(inverted residuals,IR)结构,该结构具有瓶颈设计,如图3所示,其中c表示通道数,a表示扩张倍率,图3中公式表示传递过程中F通道数的变化。特征图F作为输入首先通过一次卷积将通道扩张a倍进行升维,实现特征从低维到高维的表征,然后使用激活函数分配各通道信息的权值,抑制非特征通道,再经过一次卷积将通道缩减为1/a进行降维,将高维通道信息映射回低维通道[12],残差块经过“升维-卷积-降维”的步骤,使输出特征图F′随着卷积层的加深,实现层间跨通道的信息传递,有效保留通道特征[13-14]。
深度可分离卷积的引入虽然能极大减少模型运算量,但同时也很容易导致卷积过程中特征信息的丢失,为了保证网络深层中姿态检测层PAF的拼接效果,在网络的深层添加CBAM,CBAM结构如图4所示。
<G:\武汉工程大学\2024\第3期\黄瑜豪-4.tif>
图4 CBAM结构
Fig. 4 CBAM structure
输入特征图先后经过通道注意力模块和空间注意力模块,通道注意力模块通过并行的最大池化操作和平均池化操作生成通道注意图,调整F通道内的特征信息;空间注意力模块通过先后进行的最大池化操作和平均池化操作生成空间注意力图,调整F坐标间的特征信息。通过为通道注意力模块和空间注意力模块分配不同的权重,对各通道和不同坐标下特征图中特征信息的表征能力进行调整,有效提高网络对特征图中特征的关注度。
CBAM可以加强通道和空间特征信息的表征[8],其计算量仅与通道数和卷积核大小相关,不会带来过大的计算开销,非常适合部署在边缘设备的神经网络中。
2.2.3 姿态估计层的改进 原本的姿态检测层在PAF的拼接过程中使用多个7×7的卷积核,本文使用3个3×3的卷积核等效替代1个7×7的卷积核,假设输入尺寸相同的图片,输入尺寸为M×M,卷积核的大小为K×K,填充为P,步长为S,则输出尺寸M′如式(4)所示:
[M’=(M+2×P-K)/S+1] (4)
从式(4)可以看出,在相同的填充和步长下,使用3个3×3的卷积核等效替代1个7×7的卷积核时感受野不变,同时减少卷积带来的计算量。
改进后的轻量级OpenPose模型使用深度可分离卷积MobileNet替换VGGNet;在特征提取的浅层使用IR结构,深层添加CBAM,将浅层特征降采样后与深层特征融合再送入姿态检测层中的各个分支层;分支层中PAF拼接网络使用3个3×3卷积核代替7×7卷积核减少计算开销。重新设计的网络结构如图5所示,其中Cd表示深度可分离卷积操作。
3 结果及讨论
3.1 数据集
使用COCO数据集验证改进网络效果,在有人体的图片中定义了18个骨骼关键点。网络训练过程中将含有人体的4万张图片分别设置为训练集、测试集和验证集,比例为8∶1∶1。
在边缘设备上验证基于姿态检测的人体行为识别效果时,使用自行录制的行为数据集,通过骨骼关键点的空间位置差异描述不同的行为,数据集共包括 8类行为,分别是拳击、鼓掌、挥手、坐、跑、走、站立、弯腰。从视频中一共提取12 000张图片,平均每类行为有1 500张图片,以在COCO数据集上训练完成的模型为预训练模型对每张图片标注骨骼关键点制作成数据集,并按照8∶2的比例制作训练集和验证集。
3.2 训练结果分析
改进后的轻量级OpenPose模型在Pytorch2.1平台上训练,平台的硬件配置包括英特尔酷睿i5-13600KF,32 GB内存和型号为英伟达RTX4080的GPU,Python版本为3.9.16。在COCO数据集上的训练效果以正确关键点百分比(percentage of correct keypoints,PCK)、平均精度(average precision,AP)和均方误差损失(mean squared error,MSE)作为评估模型性能的指标。PCK指的是当检测的骨骼关键点位置与标注的人体关键点位置之间的距离低于某个阈值时,认为该点被正确检测到,本文中阈值设定为5像素值;AP是单类别检测精度,其计算公式如式(5)所示:
[PA=01TPTP+FP(TPTP+FN)d(TPTP+FN)] (5)
其中,TP表示单样本中PCK值为1的数量,即检测到的关键点数量与标签中关键点数量一致, FP表示单样本中PCK值在1.0以下的数量,即检测到的关键点数量小于标签中关键点数量,FN表示单样本中PCK值在1.0以上的数量,即检测到的关键点数量大于标签中关键点数量。
MSE分为局部亲和场损失值PLoss和热度图损失值HLoss两部分,计算方法如式(6)所示:
[LMSE=t=1T(PLoss+HLoss)] (6)
其中,T表示总时间周期,PLoss表示在第t阶段姿态检测层中预测PAF产生的误差,计算公式如式(7)所示:
[PLoss=W·||St-S*t||2] (7)
HLoss表示在第t阶段姿态检测层中预测关节热度图产生的误差,计算公式如式(8)所示:
[HLoss=W·||Lt-L*t||2] (8)
式(7-8)中:W表示二值化矩阵,当目标中关键点的标签存在时,W值为1,否则为0;St和[S*t]分别表示第t阶段姿态检测层中关节热度图预测的和实际的关键点坐标值,Lt和[L*t]分别表示第t阶段姿态检测层中PAF预测的和实际的关键点坐标值。
MSE表示模型中每个分支层的损失值之和,该值越低,表示预测结果与目标结果越接近,模型的预测效果越好。
为了证明改进算法的优越性,在同样的数据集上进行不同主干特征网络下的对比实验,在部分图片上的检测结果如图6所示,对比结果如表1所示。从表1中可以看出本文方法对比原方法PCK提升了2.8%,AP提升了2.0%,MSE值减小了12.4%,有效提高了骨骼关键点的检测效果,降低了预测结果与目标结果的损失;从图6中可以看出本文方法在多人场景下的姿态估计效果更优。
表1 各模型性能评估指标对比结果
Tab. 1 Comparison results of performance evaluation
indicators for different models
[主干特征网络 PCK / % AP / % MSE MobileNetV1 76.8 53.7 146.4 MobileNetV2 77.1 54.4 138.5 MobileNetV1+IR 75.9 54.0 135.7 MobileNetV1+CBAM 77.9 55.2 133.7 本文方法 79.6 55.7 130.2 ]
3.3 模型移植结果分析
以在COCO数据集上训练过的改进模型为预训练模型,对行为数据集标记骨骼关键点做分类训练,将训练完成后的模型移植至Jetson TX2设备上,该设备在行为数据集上推理结果的混淆矩阵如表2所示,矩阵对角线上的数值表示该行为识别的准确率,计算方法如下:只输出识别正确行为的数量占总数量的比例,不统计漏检的情况。从表2中可以看出模型对8类行为的综合识别率达到96.4%。
表2 行为识别混淆矩阵
Tab. 2 Behavior recognition confusion matrix
[行为
种类 识别率 / % 拳击 鼓掌 挥手 坐 跑 走 站立 弯腰 拳击 99.6 0 0.4 0 0 0 0 0 鼓掌 0 93.4 3.4 0 1.6 0.4 1.2 0 挥手 0.4 1.8 95.6 0 0.2 0.2 1.8 0 坐 0 0 0 96.4 0 0.2 0 3.4 跑 0 1.2 1.6 0 95.4 1.4 0.4 0 走 0 0 0 0 3.2 95.6 1.2 0 站立 0 0 1.0 0 0.8 1.6 96.6 0 弯腰 0 0.2 0 0 0 1.2 0 98.6 ]
将本文的改进方法与包含相同行为类别的相关行为识别研究方法进行对比,结果如表3所示。从表3中可以看出本文方法对比相关研究方法在站立和走路行为的识别准确率上略微不足,但是对坐和弯腰行为的识别效果明显提升(“/”表示对应方法中的行为识别不包括该类行为)。
本文的改进方法与原始模型及相关行为识别研究方法的平均识别效果如表4所示,可以验证本文改进方法在平均识别效果上的优越性。
表3 相关行为识别研究结果对比
Tab. 3 Comparison results of research on related behavior recognition
[方法 识别率 / % 站立 坐 走 弯腰 参考文献[6] 87.7 83.5 79.3 / 参考文献[15] 100.0 / 97.3 83.3 参考文献[16] 100.0 89.0 95.3 / 本文方法 96.6 96.4 95.6 98.6 ]
表4 相关行为识别研究平均识别率对比
Tab. 4 Comparison of average recognition rates in related behavior recognition research
[方法 行为数量 平均识别率 / % MobileNetV1 8 89.25 参考文献[6] 5 82.56 参考文献[15] 11 96.04 参考文献[16] 9 95.05 本文方法 8 96.40 ]
部分行为的识别效果如图7所示,可以看出在简单场景下无干扰物遮挡时,行为识别模型的推理基本可以实现对骨骼关键点的检测,并且较准确地识别出人体的行为,平均速度可以达到8.8 帧/s。
4 结 论
本文面向边缘设备提出了一种改进的轻量级OpenPose姿态检测模型,在边缘设备上兼顾实时性和识别效果。在特征提取层使用轻量级的MobileNet替换VGGNet,降低推理时的参数量;在网络的浅层使用IR结构,深层添加CBAM,融合浅层和深层的特征信息;在姿态估计层使用3个3×3卷积代替1个7×7卷积,保证感受野不变的同时降低运算量。在COCO数据集上的验证结果表明,改进方法与原方法相比,PCK提升了2.8%,AP提升了2.0%,MSE值减小了12.4%。
将该模型作为预训练模型在行为数据集上标记骨骼关键点进行分类训练,使用完成分类训练的模型部署在边缘设备上进行推理测试,可以较准确地分辨出数据集中的8类行为,平均识别率达到96.4%,平均速度达到8.8 帧/s,能够在提升识别效果的同时满足模型推理的实时性需求,但是该模型在复杂场景下的效果并未验证,未来可以作进一步的研究和优化。