彭 婷, 沈精虎, 乔 羽
(1.青岛大学 机电工程学院,山东 青岛 266071;2.烟台创迹软件有限公司青岛分公司,山东 青岛 266071)
近年来泳池溺水事故多发,主要原因是没有及时发现溺水者,错过最佳急救时间所致,因此开发准确率高、检测时间短的溺水检测系统十分必要。对于泳池溺水者检测系统,现有的是基于背景减法的游泳者检测系统[1],利用背景减法对游泳者进行检测, 通过判断水下游泳者像素范围判断溺水者和正常游泳者,但该法在人员较多的泳池中,由于聚类效果不佳而严重影响高斯混合模型建立的准确性。除此之外,其他的运动检测法,类如光流法和帧间差分法,光流法运算公式复杂,计算量大, 不能满足溺水检测的实时性。帧间差分法很难检测出静止或移动缓慢的前景,不能识别出静止站立在水中或泳池边上的游泳者,均不满足需求。
为了提升泳池溺水检测系统的准确率和检测速度,及时发现溺水者,本文对Mask R-CNN算法进行优化,通过实验验证了该算法的可行性,弥补了溺水检测在深度学习领域的空缺。
本文提出的基于Mask R-CNN泳池中溺水行为检测系统组成如图1所示,主要部分为:1)信息采集:选用4个高清筒形网络摄像机采集信息,为检测过程提供视频帧序列;选用可移动摄像头拍摄视频,读取照片制作数据集用于训练过程。2)目标检测:采用改进的Mask R-CNN算法实现泳池中人物姿势识别。3)可视化界面:采用PyQt设计软件,基于Python编程语言设计了交互界面,将泳池中的信息和处理结果反馈给用户;安装报警器,在检测到溺水行为后发出警报。
本系统采用的是海康威视型号为DS—2CD1021FD—IW1,选用水上摄像头获取泳池画面,将4个摄像头分布在游泳池的四边中线上,协同拍摄泳池的整体画面,主要技术
图1 溺水行为检测系统组成
参数如表1所示。
表1 摄像头主要参数
目标检测算法众多,综合考虑识别速度、准确率以及使用便利原则,本文采用改进后的掩模区域卷积神经网络(Mask R-CNN)网络框架进行泳池中溺水者检测。本系统的目标检测模块分为两部分:离线训练检测模型以及使用训练好的检测模型进行检测。目标检测工作流程如图2所示。
图2 目标检测工作流程图
本系统的可视化界面共分为3个页面:监控主页面、记录查询页面、视频查询页面。由这三个页面协同完成溺水行为实时检测显示如下:1)监控主页面用于显示摄像头实时拍摄画面、游泳者登记信息以及标记泳池中人员位置。2)记录查询页面用于查询显示泳池视频信息以及查询显示游泳者个人纪录。3)视频展示页面用于展示并测试检测效果。通过本地视频对溺水行为进行检测,展示效果。
传统的Mask R-CNN[2]采用ResNet50/ResNet100作为特征提取器提取低级特征,采用特征金字塔网络(feature pyramid networks,FPN)提取小特征并输出多层特征,采用区域建议网络(region proposal network,RPN)对FPN输出的特性图进行特征框选,并在兴趣区域(regions of interest,ROI)对齐层上进行分类提议并生成边框与掩码。Mask R-CNN的损失函数为
L=Lds+Lbox+Lmask
(1)
式中Lds为分类计算损失值,Lbox为边框计算损失值,Lmask为掩膜计算损失值,L为网络整体损失值。
本文针对泳池中游泳者溺水检测任务,对传统的Mask R-CNN做出一些改进。为提高网络精度和运算速度,将ResNet替换为优化后的ResNeXt[3]。增加了级联特征金字塔网络(concatenated feature pyramid network,CFPN)模块和分支,使得上下文语义信息得到了更好的利用。
2.2.1 改进的网络结构
改进的网络结构如图3所示,与原网络结构不同的,用ResNeXt代替了ResNet,特征金字塔网络(FPN)生成的特征图通过区域建议网络(region proposal network,RPN)和ROI对齐层,仅用来输出分类和边框结果,新增的CFPN分支,结果ROI层单独生成Mask。虽然FPN和CFPN分别经过了ROI层,但得出的候选框任然是一一对应的。
图3 改进的Mask R-CNN网络结构
2.2.2 卷积主干优化
传统Mask R-CNN算法的卷积主干采用深度残差卷积网络ResNet,解决了梯度消失的问题,提升了识别精度。多维残差网络ResNeXt[4]在结构上对ResNet进行了优化设计,通过多分支网络分组卷积结构进一步提高了网络精度且运算速度得到提升。
He等人在Mask R-CNN中采用ResNeXt101,ResNet50和ResNet101作为卷积主干,分别进行对比试验,证明ResNet101的平均精度(AP值)为35.4高于ResNet50的AP值33.6,但低于ResNeXt101的AP值36.7。
2.2.3 CFPN分支
传统的Mask R-CNN网络结构,采用的FPN以自顶向下的方式,通过上采样和横向的特征相加使较高级特征到达金字塔的较低层,但较低层的特征无法到达金字塔的较高层,使得语义信息利用不充分。与此同时,FPN的多维特征都是通过逐个元素相加的方式依次添加到后续图层中,在这个加法过程中,没有层包含高层特征和低层特征之间的相关性。实验[5,6]表明,利用不同层的特征之间的相关性有可能进一步改善网络的性能,与逐元素加法相比,级联更为灵活,可以改善网络性能。本文采用的CFPN[7]分支如图4所示,改进Mask R-CNN网络结构,使其用于Mask分支,改善网络性能,充分表达语义信息。
图4 CFPN结构
以ResNeXt为基本结构,使用P2,P3,P4,P5表示由FPN产生的自上而下的路径层,使用N2,N3,N4,N5表示由CFPN产生的自上而下的路径层。CFPN为解决在高级特征和低级特征之间发现的相关性问题,对FPN路径层和CFPN生的路径层加入了卷积层,其中最低层不参与此操作,Inception模块[8]输出将连接到CFPN的最底层。在对新生成的CFPN路径层进行3×3卷积计算,即可得到新生成的特征组,这些特征组将用于Mask分支。
2.2.4 评价标准
为了评价泳池中溺水检测系统的性能,本文用召回率、准确率[9]以及多个类的平均精度三个指标来评估。计算公式分别如下
(2)
(3)
(4)
式中TP为真阳性样本,代表实际和检测结果均为正样本的样本;FN为假阴性样本,代表实际为真,检测结果为假的样本;FP为假阳性样本,代表实际为假,检测结果为真的样本;AP为平均精度,Q为类的数目。
本文采用MIT开源的标注软件Labelme[10]对图像进行语义分割,勾画图像中所用游泳者轮廓并标注其状态,样本按照游泳者状态分类。对Labelme标记得到的.json文件进行格式转换得到Mask R-CNN训练所需的COCO数据集格式。COCO数据集结构主要包括图像基本信息、标记信息以及分类信息三部分内容,如图5所示。
图5 数据集结构
本算法模型在Python2+Caffe2[11]框架下运行,部分底层代码采用C++;开始训练之前的超参数设置为:学习率(base_lr)设置为0.001;下降策略设置为随机梯度下降(stochastic gradiant descent,SGD),采用多分布形式(multistep);前200 000次迭代loss与accuracy下降较快,采用较小的学习率,再设置一个参数stepvalue,multistep根据这个参数值值进行变化;在训练过程中,将真实的掩码缩小至28×28,在预测过程中将预测的掩码放大至ROI边框的尺寸[12],得到最终的掩码结果。
本文检测各类人物姿态各200个样本,共计800个样本,待测样本图像分辨率被压缩至640×360,界面运行结果如图6所示,泳池中各类别人物姿势检测准确率结果,如表2所示。可以得出,检出率为93.3 %,误检率为6.4 %,检测速率为5 FPS,检测效率和检测质量均有较好的效果,达到了预期效果,且对于游泳者姿势不断变化的挑战具有良好的鲁棒性。
图6 界面运行结果
表2 各类别检测结果
本文设计了基于Mask R-CNN的溺水检测系统,通过判断游泳者姿势来判别溺水者并发出警报,实验表明检测速度为5 FPS,满足泳池的安全警报作用,检出率为93.3 %,误检率为6.4 %,基本满足预期要求。细分人物姿态类别,增加泳池背景样本,提高人物遮挡更严重时的检出率是今后算法改进的重要内容。