APP下载

基于人体姿态估计的泳池溺水检测算法

2023-08-21于中阳杨文辉

科技创新与应用 2023年23期
关键词:泳池关键点姿态

于中阳,杨文辉

(上海旺链信息科技有限公司,上海 200443)

游泳是一项非常受欢迎的运动,但是泳池溺水事故频发。目前的泳池防溺水措施大多依赖于人工观察,人力成本高,并且容易出现人工疏忽,救援不及时的现象。因此,研究人员提出了许多有效的泳池防溺水措施。

目前的泳池防溺水研究主要分为2 类:①基于可穿戴式防溺水设备的研究,如手环、泳帽等[1-3]。通过可穿戴式防溺水设备实时监测游泳者的生命体征,出现异常,发出警报[4-6]。这种方法需要额外佩戴设备,影响了游泳者的游泳体验,并且设备存在易受环境干扰、需要经常维护保养的问题。②基于计算机视觉的泳池防溺水研究[7-9],通过摄像头获取游泳者的游泳图像,利用目标检测、人体姿态估计等深度学习模型分析游泳者的运动状态,判断游泳者是否溺水,这种方法游泳者不需要佩戴设备,可以带来更好的游泳体验。但是,当前的基于计算机视觉的泳池防溺水技术大多利用目标检测算法(如YOLO 系列)研究游泳者的头部、人体与水面的位置关系,人为设置溺水判定规则,主观因素太强,模型参数过多且难以确定,准确率有待提高[8,10]。

具有研究意义的泳池防溺水研究主要有:Prakash[11]提出一种新方程(NEPTUNE)泳池溺水检测系统,先合并处理视频序列的图像,再利用K-means 聚类算法提取合并的图像的特征,利用每个图像的变量识别出溺水情况,检测速度快,误报率低。青岛大学乔羽[12]设计了一种基于Mask R-CNN 泳池中溺水行为检测系统,采用Mask R-CNN 算法对游泳者图像进行目标检测,训练出的分类器模型能够检测出游泳者的多种游泳行为,该系统的检出率为91.2%,误检率为7.5%。Dulhare等[13]使用Faster R-CNN 目标检测模型和数据增强算法检测人们在水下的行为。东华大学张修念[14]设计了一种基于边缘计算平台与计算机视觉的泳池溺水预警系统,利用改进的轻量级OpenPose 模型先对游泳者图像进行人体姿态估计,将姿态标记后的图像送入目标检测模型YoLov4 进行溺水行为检测。

现有的基于计算机视觉的泳池防溺水技术漏检、误检率高。因此,本文提出一种基于人体姿态估计的泳池溺水检测算法,利用人体姿态估计模型OpenPose 对游泳者的图像进行人体姿态估计,通过比较游泳者的关键点距离向量与溺水状态的关键点距离向量的相似性来判断是否溺水。

1 基于人体姿态估计的泳池溺水检测算法

为了能够准确地发现泳池溺水游泳者,本文提出一种基于人体姿态估计的泳池溺水检测算法,利用游泳者的关键点距离变化来检测溺水行为,算法流程如图1 所示,步骤如下。

图1 基于人体姿态估计的泳池溺水检测算法

步骤1:对游泳者视频数据每隔10 帧截取一张图片,输入到训练好的OpenPose 姿态估计模型进行人体姿态估计(如有关键点缺失,则进行填充),获取图片中游泳者的18 个关键点坐标。

步骤2:重新建立坐标系,以脖子关键点为原点,水平向右方向为x 轴,竖直向下方向为y 轴更新其他关键点的坐标。计算其他17 个关键点与原点的距离,构造游泳者的关键点距离向量。

步骤3:如果当前截取的游泳者图片的关键点距离向量与之前计算好的一个或多个溺水状态关键点距离向量集合(总共有13 个)的首个距离向量的R2大于等于0.6,则继续对截取的下一帧游泳者图片与对应的溺水状态关键点距离向量集合的第二个距离向量进行比较,以此类推,若连续20 次关键点距离向量的R2都大于等于0.6,即截取的游泳者的20 帧图片关键点距离变化与其中一种溺水状态(不会同时匹配多种溺水状态)的关键点距离变化相似,则判定为溺水。否则,重新进行关键点距离向量比较判断。

1.1 游泳者关键点检测

OpenPose[15]是当前热门的自底向上的多人人体姿态估计模型,先利用深度学习方法检测图像中所有人的关键点,再将关键点划分给不同的人。相比于其他目标检测模型获取游泳者的类别与边框,通过人体姿态估计模型OpenPose 获取游泳者的18 个关键点坐标,能够更准确地描述游泳者游泳过程中的肢体动作变化。

如图2 所示,OpenPose 模型的主干网络VGG19的前10 层提取图片的特征图F,特征图F 进入两分支多阶段卷积神经网络,其中上分支用来预测人体关键点位置置信度图(Part Confidence Maps,PCM),下分支用来预测人体关键点的亲和力域(Part Affinity Fields,PAF)。第一阶段的ρ1和φ1两个推理网络生成关键点置信度图S1和关键点亲和域L1,后面阶段将特征图F 和t-1 阶段的预测结果一起作为输入,预测该阶段的关键点置信度图和关键点亲和域。

图2 OpenPose 模型网络架构图

每个阶段的PCM 和PAF 都会进行Loss 求解,最后总的Loss 是所有Loss 的和。OpenPose 模型使用匈牙利算法进行最大值匹配,将关键点连接成骨架。OpenPose 模型获取的18 个关键点如图3 所示。

图3 OpenPose 模型获取的18 个关键点

由于泳池摄像头的拍摄角度、泳池水面的反光、游泳者溅起的水花等影响因素,通过OpenPose 模型对截取的游泳者的图片进行关键点标记,有时会丢失部分关键点信息,影响溺水检测的结果。因此,本文根据空缺关键点的前后帧的对应关键点的均值来填充丢失的关键点。填充游泳者丢失的关键点的计算方法如式(3)和式(4)所示。xf和yf分别代表填充的关键点的横坐标和纵坐标,xa,ya代表关键点出现空缺的前一帧对应关键点的横坐标和纵坐标,xb,yb代表关键点空缺结束的视频帧对应关键点的横坐标和纵坐标。

1.2 构造关键点距离向量集合

通过OpenPose 模型获取游泳者的18 个关键点坐标,18 个关键点坐标的坐标系以图片左上角为原点,水平向右方向为x 轴,竖直向下方向为y 轴。因为游泳者游泳过程中脖子的变化幅度小,因此,重新建立坐标系[16],如图4 所示,以脖子关键点(x1,y1)为原点,水平向右方向为x 轴,竖直向下方向为y 轴,更新游泳者18个关键点的坐标

图4 重新建立坐标系

利用除脖子关键点之外的其他17 个关键点与原点的距离来描述游泳者的动作,其他17 个关键点与原点的距离计算公式

构造17 个关键点与原点的距离向量D=[d1,d2,…d17],此时d1表示关键点0 到原点的距离,di(i≥2)表示关键点i 到原点的距离。

由于游泳是个连续的动作变化过程,因此,连续计算20 帧游泳图片(对游泳者视频数据每隔10 帧截取一张图片)的关键点距离向量,构成游泳者关键点距离向量集合Sw={D1,D2,…D20},描述了截取的20 帧游泳图片的关键点距离变化过程。

1.3 构造溺水状态关键点距离向量集合

本算法的重点是将游泳者的关键点距离向量与溺水状态关键点距离向量进行相似性比较从而判断是否溺水。因此,构造能够表征溺水状态肢体动作变化的关键点距离向量集合是溺水判断的关键。

本文定义了13 种不同的溺水状态,将13 个不同类型的游泳者溺水视频分别每隔10 帧截取一张图片,利用训练好的OpenPose 模型对每个溺水视频截取的20 帧图片进行人体姿态估计(如有关键点缺失,则进行填充),获取溺水游泳者的18 个关键点坐标,重新建立坐标系,分别计算每个溺水游泳者视频截取的20 帧图片的关键点距离向量,构造出13 个溺水状态关键点距离向量集合。

溺水检测过程中需要对游泳者的关键点距离向量与溺水状态关键点距离向量进行相似性评估,本算法利用R2来衡量2 个向量的相似性,R2定义如下

2 算法评估实验

2.1 实验数据集和过程

本文的实验环境包括:Windows11 操作系统,12th Gen Intel(R)Core(TM)i7-12700F 2.10 GHz、16 GB内存,GTX 3060 显卡,PyCharm。

由于人工对数据集中的游泳者进行人体关键点标注,费时费力,因此,采用COCO2017 数据集的前五万个样本按照训练集∶验证集∶测试集=8∶1∶1 的比例对OpenPose 人体姿态估计模型进行训练。

使用自制的20 条溺水游泳者视频(溺水动作为人工模拟)和80 条正常游泳者视频(包括蛙泳、仰泳等各类正常游泳动作)对本文提出的基于人体姿态估计的泳池溺水检测算法进行评估。对游泳者视频每隔10 帧截取一张图片,利用训练好的OpenPose 模型对截取的图片进行人体姿态估计(如有关键点缺失,则进行填充),获取游泳者的18 个关键点(关键点信息包括关键点坐标和置信度,保存为json 文件),重新建立坐标系,以脖子关键点为原点,构造截取的每帧图片的关键点距离向量,利用游泳者连续20 帧图片的关键点距离向量与溺水状态的关键点距离向量的R2(使用sklearn.metrics 计算)进行溺水判定。

2.2 实验结果

为了验证本文提出的基于人体姿态估计的泳池溺水检测算法的有效性,用准确率accuracy、精确率precision、召回率recall 评估算法的性能。将溺水状态作为正类,正常的游泳状态作为反类,TP 为真正例(预测正确的溺水类别),TN 为真反例(预测正确的正常游泳类别),FP 为假正例(预测错误的溺水类别),FN 为假反例(预测错误的正常游泳类别)。

算法评估实验中部分游泳者视频帧的关键点检测如图5 所示。从图5 可以看出,OpenPose 模型对截取的图片进行人体姿态估计,有时会丢失部分关键点信息,而本文根据空缺关键点的前后帧的对应关键点的均值来填充丢失的关键点,可以有效地减小误差。

图5 部分游泳者视频帧的关键点检测图

基于人体姿态估计的泳池溺水检测算法的评估实验结果见表1。

表1 基于人体姿态估计的泳池溺水检测算法的评估实验结果

由表1 可以看出,对于用来测试的20 条溺水游泳者视频和80 条正常游泳者视频,本文提出的基于人体姿态估计的泳池溺水检测算法检测出了17 条溺水游泳者视频和78 条正常游泳者视频,错检了3 条溺水游泳者视频和2 条正常游泳者视频,准确率为95%,精确率为85%,召回率为89.47%。实验结果表明,本文提出的基于人体姿态估计的泳池溺水检测算法可以有效地检测出溺水游泳者。实验过程中,影响本文提出的基于人体姿态估计的泳池溺水检测算法的因素有泳池摄像头拍摄的游泳者照片的角度、泳池的水面反光、游泳者溅起的水花等,在后续的研究中,可以对截取的游泳者图片进一步预处理,如图片矫正、水下图像处理、剔除反光和水花区域等。另外,为了提高OpenPose 模型标记游泳者关键点的速度,可以对OpenPose 模型进行轻量化处理,如将OpenPose 模型的主干网络替换为轻量级网络、合并预测分支等。

3 结束语

为了准确地检测出泳池溺水游泳者,本文提出了一种基于人体姿态估计的泳池溺水检测算法,利用OpenPose 模型对游泳者的图像进行人体姿态估计(如有关键点缺失,则进行填充),获取游泳者的18 个关键点坐标,构造游泳者的关键点距离向量,通过计算游泳者关键点距离向量与溺水状态关键点距离向量的相似性来判断游泳者是否溺水。利用20 条溺水游泳者视频和80 条正常游泳者视频评估本文提出的基于人体姿态估计的泳池溺水检测算法。实验结果表明,本文提出的基于人体姿态估计的泳池溺水检测算法的准确率为95%,精确率为85%,召回率为89.47%,可以准确地检测出溺水游泳者。

猜你喜欢

泳池关键点姿态
聚焦金属关键点
肉兔育肥抓好七个关键点
攀爬的姿态
如何成为泳池里最抢镜的小学生
全新一代宋的新姿态
跑与走的姿态
泳池派对
医联体要把握三个关键点
锁定两个关键点——我这样教《送考》
杀人的泳池