宋倩,黄德攒,覃秀美
(河池学院大数据与计算机学院,广西 河池 546300)
随着中国人口老龄化趋势显著,跌倒是老年人和残障人士面临的主要风险之一。因此,跌倒检测系统的研究和开发意义非凡。经研究发现,部分地区医疗保障体系不健全、老年人就医意识不强,又由于环境、住宅安全(光线昏暗、地板湿滑、不平、房屋老旧)以及身体激素的变化,老年人尤其是女性群体意外骨折概率高,还有长期卧床老人,这些群体需要格外注意跌倒。因此,跌倒检测在医疗保健和健康监测领域具有实用价值。
近年来,随着深度学习技术的发展,计算机视觉领域也取得了很大进展。当下流行的跌倒检测系统大致分为三大类:一类是穿戴传感器类的跌倒检测[1],另一类是计算机视觉类的跌倒检测[2-3],最后一类是基于视频分析类的跌倒检测[4-5]。现有穿戴传感器类的跌倒检测存在存储资源受限的弊端,而基于视频分析类的跌倒检测普遍资源消耗大且精度不高,故而本文提出一种基于PaddleDetection 的跌倒检测系统,该系统能够准确地检测出跌倒事件并及时自动推送消息,有助于提高老年人和残障人士的安全保障。
PaddleDetection是一个基于飞桨框架的目标检测工具箱,其具有高度灵活性和可扩展性,能够满足不同应用场景的需求。本文使用PaddleDetection来构建跌倒检测系统,系统流程见图1。
图1 基于PaddleDetection的老人跌倒预警系统流程图
为了训练模型,需要收集跌倒和正常行走的视频数据。跌倒视频可以通过模拟跌倒事件或在现实场景中拍摄得到。正常行走视频可以在公共场所或室内环境中拍摄。由于视频数据比较庞大,故而使用数据增强技术来扩充数据集,如旋转、缩放和翻转等。
因涉及目标检测,所以需要选择带有标注信息的数据集,常见的目标检测数据集格式有VOC 格式和COCO 格式,VOC 格式只有一个边界框来标记每个目标物体,而COCO 格式允许多个边界框标记一个目标物体,可以更准确地描述物体。COCO 格式的数据集不仅适用于物体检测和图像分类,还适用于目标分割和关键点检测等更复杂的任务。笔者将使用COCO格式的数据集进行模型训练。COCO数据集的标注方式是JSON 文件[6],在实际应用中,需要根据任务的不同选择不同的数据集以达到最佳效果。
图像预处理通过消除图像中无关的信息,进而提取或恢复有用的真实信息,增强与任务有关信息的检测性。不仅能精简数据,还能提高改进特征抽取、图像分割、匹配和识别的可靠性。一般地,图像处理流程如图2所示。
图2 图像处理流程图
1)灰度化处理
把彩色图像转换为灰度图像(图像呈现灰色的一种形态)的过程。在RGB模型中,若RGB的各个值相等,也就是R()=G()=B(),即是一种灰度颜色,此时R=G=B 的值称为灰度值,也被称为强度值或者亮度值。例如,RGB(125,125,125),该值就是一种灰度值。常见的彩色图像灰度化方法有分量法、最大值法、平均值法和加权平均法。
2)图像空间变换
将图像经过平移、转置、镜像、旋转、缩放等变换之后,然后进行处理,用于纠正图像采集系统的误差和设备位置(拍摄时的角度、人为无意间的倒放,甚至是拍摄的设备自身问题)的随机误差。此外,还可以根据任务需要,使用一种名为灰度插值的算法,如果按照这种变换关系进行计算,输出图像的像素可能会被映射到输入图像的非整数坐标上。通常在几何变换任务中采用的插值方法有最近邻插值、双线性插值以及双三次插值。
3)图像增强
该技术既可以是一种失真的过程,也可以是一种增强显示的过程,其目的是改变图像的视觉效果。根据给定图像的应用场景,强调图像的整体或局部特性,使原来不清晰的图像变得清晰(也被称为图像锐化),强调某些有效的特征,放大图像与不同物体特征之间的差异,抑制或去除无用的特征,换言之提高图像质量、放大有用的信息量、强化图像解读和识别效果,以满足任务的需要。
PP-YOLOE+是PP-YOLOE 的升级版本,从大规模的obj365目标检测预训练模型入手,在大幅提升收敛速度的同时,提升了模型在COCO 数据集上的速度。同时,PP-YOLOE+大幅提升了包括数据预处理在内的端到端的预测速度[7]。
在本项目中,鉴于原PP-YOLOE+模型使用大规模数据集进行训练,综合考虑数据集数量,选用PPYOLOE+_m-预训练模型在数据集上再次训练。在backbone 中block 分支中增加alpha 参数,并且模型优化了端到端推理速度,提升训练收敛速度。
模型训练使用的平台为百度AI Studio,该平台为在线云服务平台,支持云计算,采用开源的深度学习框架PaddlePaddle。在线Notebook环境分为经典版和BMLcode 版本,其中BMLcode 版本支持更多功能,所以选用BMLcode 进行环境搭建。在新建Notebook 文件后可使用命令克隆PaddleDetection或者在侧边栏进行一键下载解压。环境硬件配置信息如下:
4 Cores CPU,32GB RAM,32GB Video Mem,Tesla V100 GPU,100GB Disk,Python 版本为3.7,PaddlePaddle 版本为2.3.2,PaddleDetection 版本为2.5 开发版分支,Cuda compilation tools, release 11.2, V11.2.152,cuDNN7.6。
根据选择的模型,修改如下目录的配置文件/configs/ppyoloe/ppyoloe_plus_crn_m_80e_coco.yml 进行参数的设置,通常情况下修改的参数有以下几个:将待检测的类别数num_classes 设置为1,由于数据量小,将训练迭代数epoch 设置为30,学习率base_lr 设置为0.001。除此之外数据集路径的配置也是相当重要,如果数据集路径配置不当或者没有配置数据集路径将会导致整个项目无法运行。
在所有准备工作做好后,即可开始执行训练命令,在训练的同时,控制台会同步输出即时训练信息,同时,也可以对命令加入指令--eval--use_vdl=True --vdl_log_dir="(此处填写训练日志输出的文件夹)"进行数据输出可视化监控。
训练完成后,需要对模型进行评估以检验其性能。使用平均精度(Average Precision,AP)和平均召回率(Average Recall,AR)以及交并比(Intersection over Union,IoU)作为评价指标。
以下为部分指标的计算公式:
在训练30 个循环之后,笔者所训练的PP-YOLOE+_m模型效果见表1。
表1 PP-YOLOE+_m模型相关数据效果
选用测试集中的某张图片来进行推理,当最小置信度设置0.5时,输出效果见图3、图4。
图3 对单张图片进行检测
图4 对视频进行检测
在评估完成后,可以将模型部署到实际场景中进行应用。使用摄像头来获取视频流,并在跌倒检测系统中实时监测视频流中是否出现跌倒事件。当出现相应事件后将数据返回到服务器,并通过云服务进行消息推送。
在实际应用中,将模型部署到一台微型计算机或者智能监控摄像头上,并实时监测跌倒事件。当检测到跌倒事件时,系统会立即报警并通知相关人员。经过实际应用,发现该系统能够准确地检测出跌倒事件,并及时报警,有助于提高老年人和残障人士的安全保障。
下面将使用NVIDIA 推出的Jetson 边缘计算套件进行流程示例见图5。
图5 使用NVIDIA的Jetson边缘计算套件的流程图
但是在实际应用中,由于Jetson硬件过于昂贵,只有在特定场合下适用[8],所以通常是将模型部署到智能摄像头上进行跌倒检测。
使用PaddleDetection 框架来搭建跌倒检测系统,并使用自制数据集进行训练和测试。在训练集上,使用大约1 500张行人跌倒的图片。在测试集上使用约200 张图片作为测试集。经过训练和测试,对比原模型,得出如表2所示的结果。
表2 本模型对比PP-YOLOE+其他模型
建立一种基于PaddleDetection的老人跌倒检测系统,该系统能准确地检测出跌倒事件并及时报警,有助于提高老年人和残障人士的安全保障。使用了PP-YOLOE+作为跌倒检测模型,并使用PaddleDetection 框架进行模型训练和部署。通过实验结果证明了,该系统在自制数据集上和实际场景中都具有较高的准确性和实用性。未来,可以进一步改进模型网络,更换更大的数据集,提高跌倒检测的准确性和实时性,同时结合其他传感器数据,如加速度计和压力传感器等来进一步提高系统的可靠性和精度。