Advertisement

基于YOLOv8深度学习的睡眠呼吸暂停综合症自动检测与语音提醒系统

阅读量:

Sleep Apnea Syndrome (SAS) is a relatively common sleep disorder that often goes unnoticed. It is characterized by occasional interruptions in breathing during sleep, which may lead to serious cardiovascular issues or other health complications. This study developed a comprehensive system utilizing the YOLOv8 deep learning model to automate detection and provide audio alerts, aiming to ensure timely identification and warning of sleep apnea events.

基于心电图(ECG)及相关睡眠数据集(包括'NoApnea'和'SleepApnea'的数据集),系统采用优化后的YOLOv8模型对数据进行训练与检测。该模型不仅能够精准识别呼吸异常事件发生的时间段,并借助PyQt5框架设计出友好的人机交互界面;实时更新检测结果,并配备语音报警功能以确保用户的睡眠质量。
实验结果显示,在准确性、实时性和用户体验等方面均表现突出;该系统成功提供了早期筛查及预警方案。

算法流程

Tipps:详细解析项目的整体算法架构,在组织架构上采用模块化设计,在表达方式上力求简洁明了;系统性地探讨其核心技术机制;以数据加载和预处理作为起点;延伸至核心算法的设计阶段并进行优化工作;最终过渡至结果展示环节;深入剖析其内在原理及具体实现路径

项目数据

Tipps:为了收集包含多种不同类型的睡眠呼吸暂停综合症相关图片的数据集,并借助Labelimg标记工具对每张图片进行标记;具体分为两类:一是'无呼吸中断',二是'有呼吸中断'。

目标检测标注工具
(1)LabelImg:一款开源的目标检测标注工具,支持分类任务和目标检测功能。该版本为英文界面设计,并采用Python编写实现图形界面功能。相比而言较为简单易用(尽管为英文界面)。其标注结果以Pascal VOC数据格式存储为XML文件的形式呈现(这也是ImageNet采用的数据格式)。此外该工具还支持COCO数据集格式的操作(CO CO数据集常用于目标检测任务)。
(2)在CMD窗口中执行以下命令安装LabelImg:pip install labelimg -i https://pypi.tuna.tsinghua.edu.cn/simple

结束后,在cmd中输入labelimg

初识labelimg

打开后,我们自己设置一下

在View中勾选Auto Save mode

接下来我们打开需要标注的图片文件夹

配置存储位置(Change Save Dir)并启动标注流程:画框对象、标记目标的label;然后切换到下一张图片进行同样的操作。

Labelimg的快捷键

(3)数据准备 为了方便后续操作,在 industry 标准中推荐新建一个命名为 data 的文件夹(虽然并非强制要求但通常会采用这种方式),其中会建立 images 文件夹用于存储待标注图片;随后设置 labels 文件夹用于存储对应的标注信息;最终在 classes.txt 文件中记录所有需要识别的类别名称。

data目录的具体组织架构如下:
├── img_data
├── images 用于存储待标记的图片文件
├── labels 用于存放标注好的标签文件
└ classes.txt 指定需标注的所有分类类别(此文档并非必要项;建议在类目较多时为此创建一个分类列表txt文档)

首先在images这个文件夹放置待标注的图片。
生成文件如下:

“classes.txt”定义了你的 YOLO 标签所引用的类名列表。

(4)YOLO模式创建标签的样式

存放标签信息的文件名与图片名一致,并且内容由N行5列的数据块组成。
每一行为标注的目标提供详细信息。
通常包括五个关键参数:
具体参数如下:
类别id表示目标类别;
x_center和y_center表示目标框的中心坐标;
width和height分别代表目标框的宽度与高度。
其中各项参数说明如下:

注意:这里的中心点坐标、宽和高都是相对数据!!!

将文件存储为classes.txt(固定),用于存储创建的分类标记

完成后可进行后续的yolo训练方面的操作。

硬件环境

在系统调试与训练过程中,我们采用了两种不同的硬件配置方案:
(1)外星人 Alienware M16笔记本电脑:该设备配备有第8代Intel Core i5处理器,并支持高达4GB内存的内存扩展;
(2)戴尔Dell XPS 15双核处理器的工作站版本:该工作站搭载了第八代Intel Core i7四核处理器,并提供高达32GB内存的可扩展性

(2)惠普 HP暗影精灵10 台式机:

上面的硬件环境具备充足的能力满足大規模圖像數據的訓練與高效計算需求;显式引入GPU後能顯著降低模型訓練所需的時間成本。采用兩種硬體平 Taylor & Francis Journals platform for testing and training, which can more comprehensively verify the system's performance, adaptability, and stability.该方法在提高系統 resilience 和 generalization performance方面具有顯著優勢;不但能降低開發成本並提高運行效率;為實際應用場景中的部署奠定了堅實的基础。

模型训练

Tipps:模型的训练、评估与推理

1.YOLOv8的基本原理

YOLOv8被视为当前目标检测领域的最佳解决方案。它继承自Yolo系列的所有前代,并新增了若干创新组件。这些改进显著提升了其处理速度与适应性。此模型已被广泛认可,在多个关键应用领域表现突出。其核心创新包括:一个高效的主干网络架构;一种全新的 anchor-free 检测模块;以及一种优化后的损失函数设计。这些设计元素使其能够在多种硬件设备上稳定运行。

YOLOv8在YOLO系列中树立了新的标杆地位,在多个关键指标上实现了超越现有的物体检测与实例分割技术。该系统通过汲取YOLOv5、YOLOv6以及YOLOX等模型的优点,在基于对提升YOLOv5架构的深入优化的基础上实现,并通过持续的技术演进过程保持并强化了YOLOv5工程化的简洁性和实用性。

Yolov8模型网络结构图如下图所示:

2.数据集准备与训练

本研究采用了包含了具有睡眠呼吸暂停综合症的图像数据集,并通过Labelimg标注工具对图像中的目标边界框及其类别进行了精确标注。在此基础上,利用YOLOv8n模型进行了系统性训练工作。随后,在完成模型训练后,我们对其在验证集上的性能表现进行了全面系统的评估和对比分析。具体流程涵盖以下关键环节:首先是数据预处理阶段;其次是模型训练过程;最后是模型评估阶段。研究结果表明,在所涉及的目标类别中占比最大的便是具有典型睡眠呼吸暂停特征的病例群。该数据集共计包含3150张图像的具体分布情况如下:

训练集包含了约两千二百零五幅图片,并被用来进行模型的学习与优化;验证集共有六百三十幅图片,并被用来评估模型在未见过的数据上的性能的同时也能够防止过拟合现象的发生;测试集由三百一十五幅图片组成,并被用来全面地检验所构建的深度学习模型的泛化能力

数据集的图像分布直方图
该柱状图详细展示了训练数据集、验证数据集以及测试数据集所包含的图像数量分布情况:

部分数据集图像如下图所示:

部分标注如下图所示:

通过该数据分布策略,在模型训练期间的数据均衡性得到了充分展现,并且在验证与测试过程中也保持一致。这不仅为YOLOv8n模型的开发提供了可靠的基础支持,并且显著提升了对该模型架构进行优化和评估的能力。

图片数据应按照指定存储格式组织,在项目根目录处创建一个datasets文件夹,并将待检测的图像按照训练集与验证集两类进行分类,并放置于datasets文件夹中。

为了存储训练数据的相关信息及模型检测所需的分类类别

该文件明确了用于模型训练与验证的数据集路径设置以及模型对目标类别进行检测所需的相关参数。

在完成数据准备之后, 通过调用train.py文件来进行模型训练. epochs参数用于调节模型训练的周期数量, batch参数则用于决定每个周期中处理的数据量(根据内存容量设定, 最小值设置为1).

CPU/GPU训练代码如下:

导入名为 yolov8n.pt 的预训练YOLOv8模型,并将该模型文件路径指定为经过专业训练的高质量模型文件。随后使用YOLO模型进行训练,并详细说明各项关键参数设置如下:首先设定数据集路径为 data_yaml_path;接着将总训练轮数设定为 150 轮;然后将批次大小设为 4;选择SGD算法作为优化器;最后设定实验名称为 train_v8

3.YOLOv8模型训练结果与性能评估

在进行深度学习的过程中, 我们一般通过分析损失函数下降曲线来评估模型的学习进度. 对于 YOLOv8 模型而言, 其训练过程主要包含定位、分类以及动态特征三个方面的损失. 这些分别为定位损失 (box_loss)、分类损失 (cls_loss) 以及动态特征损失 (dfl_loss). 优化这些关键指标对于提升目标检测性能至关重要.

损失函数作用说明:
(1)定位损失 (box_loss):衡量预测框与标定框之间的差距(GIoU指标),值越小表示定位精度越高。
(2)分类损失 (cls_loss):用于判断锚框所对应的分类是否准确。值越小则分类结果越精确。
(3)动态特征损失 (dfl_loss):DFLLoss通过回归技术计算预测框与目标框间的距离,并结合特征图尺度进行优化调整以提升检测精度。

训练和验证结果文件存储:

训练完成后,相关的训练过程和结果文件会保存在 runs/ 目录下,包括:

(1)损失性能图表
(2)性能评估指标分析图表(包括mAP、精确度与召回率三项指标)
(3)混淆矩阵
(4)Precision-Recall 曲线

损失曲线(Loss Curve)和性能指标分析:

训练指标:
train/box_loss:
衡量预测目标边界框与真实边界框差异程度的一个重要指标是box\_loss值。
该指标反映了模型在目标边缘检测任务中的表现程度。
从训练过程中的数据可以看出,在每一轮迭代中box\_loss值持续下降(持续下降),这表明模型逐渐掌握了如何更精确地定位目标物体(逐步提升)。

《train/cls_loss》: 该损失衡量了预测类别与真实类别之间的差异程度;
趋势方面, 随着训练的进行, 该损失值持续下降。

train/dfl_loss:
定义:分布聚合损失(Distribution Focal Loss),其主要应用于优化边界框的位置预测过程。
变化趋势:随着训练过程的推进,损失曲线持续下降并趋向平稳状态,这表明模型在边界框检测任务中的回归精度得到了显著提升。

验证指标:
validation/box_loss:
含义:在验证集上的边界框回归损失项与训练集上的 box_loss 类似,在测试过程中用于评估模型泛化能力的表现。
趋势:曲线呈现稳步下降的趋势并趋于平稳状态表明,在验证集上模型定位精度逐步提升。

val/cls_loss:该指标主要表示验证集上的分类损失情况,并与训练集的 cls_loss 值表现得较为接近。从趋势来看,在测试过程中损失值持续减少这一现象表明模型在验证集上的分类性能得到了不断优化和提升

val/dfl_loss:
含义:该损失指标基于验证集的数据进行计算。
趋势:随着训练的进行,在早期阶段该指标表现出较快的下降速度,并随着迭代次数的增加而逐渐趋于稳定状态。

性能指标项:
metrics/precision(B):
定义:在训练过程中计算出的精确率,其数值反映了当被预测为目标类别的样本中实际确实属于该类别所占的比例。
变化趋势:从数值变化来看,精确率曲线呈现出逐渐上升并趋于稳定的态势。

metrics/recall(B):
意义:在训练过程中反映的召回率是衡量该模型是否成功识别所有真实目标的关键指标。
趋势:该指标的曲线持续提升直至趋于平稳。

metrics/mAP50(B):
定义:在验证集上计算得到的 mAP 值为 0.5(mAP@0.5),该指标反映了当IoU阈值设定为0.5时的平均检测精度水平。
趋势:随着训练迭代次数增加,曲线呈快速增长趋势并最终稳定在较高的数值水平上(约82%),这表明模型在整个验证集上的检测性能表现优异。

mAP@0.5-0.95: 该指标基于验证集计算得出,并代表不同IoU阈值下的平均精度;随着模型训练的深入进行,在更严格的IoU阈值下该指标持续提升并趋于稳定状态

验证集和训练集的性能曲线趋近于一致,并未出现明显的过拟合或欠拟合现象。

Precision-Recall(P-R)曲线分析:

曲线说明:
蓝色曲线(NoApnea, 精确率:0.984):
(1)呈现出无呼吸暂停(NoApnea)类别在精确率与召回率上的变化趋势。
(2)该曲线趋近于右上角坐标点表明模型在该类别上的检测性能表现出色,并且其精确率与召回率均接近理想值1。

橙色曲线(sleepApnea,精确率:0.968):
(1)反映了睡眠呼吸暂停相关类别在检测中的性能平衡。
(2)同样位于右上方区域,并略微逊于NoApnea类别,在此情况下仍可视为较为优秀的检测效果

深蓝色曲线(all classes, mAP@0.5: 0.976):
(1)其体现各类别间的综合表现。
(2)mAP@0.5是指在交并比(IOU)阈值为 0.5 条件下的平均精度指标,
是衡量模型在各类别上的分类能力的重要参数。

该曲线表明模型在两个类别上均表现出色,在准确性和召回率之间达到了良好的均衡。

混淆矩阵 (Confusion Matrix) 是检验分类模型性能的核心工具。它通过呈现预测结果与实际结果之间的差异来揭示分类模型的性能特征。

该模型对于 NoApnea 和 sleepApnea 的分类任务表现出色,在此任务方面总体上分类误差较小,并且适用于部署至实际检测系统中。

4.检测结果识别

在模型训练完成后,在模型训练完成后

预置所需库资源

加载模型路径及图片路径:
(1)path = ‘models/best.pt’:该模型被用来执行目标检测任务。
(2)img_path = “TestFiles/imagetest.jpg”:该图片文件将被用作检测对象。

加载预训练模型:
(1)model = YOLO(path, task=’detect’):采用指定路径配置YOLO模型,并将其设为目标检测任务 (detect)。
(2)利用 conf 参数配置目标检测的置信度阈值;借助 iou 参数设定非极大值抑制(NMS)中的交并比(IoU)阈值。

图像检测:
(1)通过模型对指定图片进行目标检测...其中的结果字段记录了相关检测信息。

显示检测结果:
(1)res = results[0].plot():将提取出的结果图像绘制到展示窗口中。
(2)cv2.imshow(“YOLOv8 Detection”, res):通过OpenCV库向窗口展示解析后的图像数据。
(3)cv2.waitKey(0):暂停程序运行等待用户按下任意键以退出该窗口。

执行imgTest.py代码后,会将执行的结果直接标注在图片上,结果如下:

此段结果源自YOLOv8模型对图像imagetagtest.jpg的分析过程

图像信息:
(1)处理的图像路径为:TestFiles/imagetest.jpg。
(2)图像尺寸为640×640像素。

检测结果:
(1)检测到 1 个 “sleepApnea” 睡眠呼吸暂停。

处理速度:
(1)预处理时间: 4.2 毫秒
(2)推理时间: 4.0 毫秒
(3)后处理时间: 53.7 毫秒

该模型能够准确识别出图像中存在睡眠呼吸暂停的关键部位。该模型的性能能够适应实时应用需求,在基于GPU的硬件加速场景下表现突出。

运行效果

– 运行 MainProgram.py

主要功能:
(1)该系统旨在实现目标图片中睡眠呼吸暂停综合症的实时检测。
(2)系统不仅支持单个图片、视频文件以及摄像头设备的检测工作,
还能执行批量处理图片数据的工作。
(3)该界面能够实时呈现目标定位信息,
包括目标位置坐标数值及其置信度与检测时间参数。
(4)系统具备将检测结果进行存储与管理的功能。

2.检测结果说明:

(1)置信度门限:已设定为25%,这意味著模型仅输出置信度超过该门限的目标,并且其数值越大则表示模型越有信心支持该结论。
(2)交并比门限:系统已设定该参数值为70%,因此仅当计算出的交并比率高于此数值时才被视为有效的目标边界框。值得注意的是这一指标反映两个边界框之间的相似程度,在实际应用中数值越大则表明两边界框越接近。

这两个变量常用于目标检测系统中,在调整时会影响模型的正确率和误检率。

该图表展示了基于YOLOv8模型进行目标检测系统的检测结果界面,并且其中每个字段均具有特定的意义

(1)该模型完成检测所需时间为0.009秒。
(2)该模型在检测过程中展现了极高的实时性和快速响应能力。

Object detection count: (1)当前检测到的目标数量为1个,即表示这是当前被检测出的第一个目标。

(1)此处提供了一个可选的设置选项。
(2)用户可以选择目标类型。
(3)在当前状态下,默认设置为'全部'。
(4)默认设置会呈现所有检测出的目标信息。

语音提醒(Voice Reminder):
(1)异常语音提醒:(警告:呼吸暂停,请注意!)

目标检测类型:

当前选定的结果是 "睡眠呼吸暂停",表明系统正在突出显示检测到的 "sleepApnea"。

置信度(Confidence):
(1)这表明模型将被检测的目标类别判定为"睡眠呼吸暂停"类别的置信度达到了95.09%。
(2)置信度衡量了模型的自信程度,在此情况下,该值越高表明模型对检测结果越有信心。

目标位置(Object location):
(1)xmin: 3, ymin: 7:目标区域的位置参数(xmin, ymin),用于确定目标在图像中的起始点坐标。
(2)xmax: 1062, ymax: 1059:目标区域的位置参数(xmax, ymax),用于确定目标在图像中的结束点坐标。

这些坐标数值位于图像处理后的特定区域范围内,并且确定了识别出的"睡眠呼吸暂停事件"的空间位置

这张图呈现了睡眠呼吸暂停的一次详细数据检测结果,并包含多个关键指标如测量时间、检出类型、行为分类的准确性以及关键点位置的信息等。通过操作界面进行查看与分析后可显著提升对睡眠呼吸暂停事件识别能力。

3.图片检测说明

(1)呼吸没有暂停

(2)睡眠呼吸暂停

单击图片按钮以打开相关功能选项菜单,并从待检测的图片中选择目标图像;此外,请单击文件夹按钮以打开相关功能选项菜单,并从待批量检测的图片文件夹中选择目标图像进行处理。
操作步骤如下:
(1)请确保已正确配置参数设置后,请您依次单击目标下拉框以选择所需结果信息展示;
(2)完成参数设置后,请您继续单击保存按钮以执行数据存储操作;系统会将处理结果自动存储至指定位置:save_data目录下。

检测结果:系统完成识别图片中的睡眠呼吸暂停情况,并呈现检测结果。该结果将详细列出总目标数量、获取所需时间以及分类依据,并提供各目标的具体位置坐标信息。

4.视频检测说明

单击视频按钮后会启动并选择待检测的视频文件;系统会自动生成检测报告并将其显示在界面上;再次单击可关闭当前视频窗口。
单击保存按钮后会将生成的检测报告进行本地存储;请确保文件会被保存在$save_data目录下。

该系统能够实现对视频流的实时分析,并识别出 sleep apnea 的相关数据。通过表格展示了各个检测点的置信水平及具体位置坐标。

该界面呈现了系统在视频帧中实施的多目标检测性能,并具备精确识别睡眠呼吸暂停的能力。同时提供了详细的结果数据以及相应的检测结果可信度评分。

5.摄像头检测说明

通过点击摄像头控制按钮来启动摄像头设备;该装置能够实现摄像头的开启;支持持续性图像采集与实时分析;再次按下该按钮后会关闭摄像头设备

检测结果:该系统通过摄像头实现了实时数据分析。识别出 sleep apnea 并记录相关数据。实时捕捉并展示摄像头画面,并对行为位置进行标记。详细信息被完整记录在表格中

6.保存图片与视频检测说明

操作后将实现对所选图片(包括批量处理)以及视频内容的检测结果保存

(1)图片保存

(2)视频保存

– 运行 train.py
1.训练参数设置

(1)取自data_yaml_path中的数据集配置:从data_yaml_path文件中读取数据集配置参数并进行处理。
(2)训练迭代总共进行150次周期:将训练迭代次数设定为150个完整周期。
(3)每个批次包含4张图像:设置每个批次包含4张图像。
(4)存储在命名为train_v8的目标目录下:将训练结果存储在命名为train_v8的目标目录下。
(5)采用SGD算法作为优化器:选择随机梯度下降法(SGD)作为优化算法。

尽管在大多数深度学习任务中 GPU 通常会带来更高的效率 GPU 的速度优势并非绝对。但在某些特定场景下 可能是因为硬件限制或其他因素 导致用户不得不选择使用 CPU 进行训练

温馨提示:使用CPU进行深度学习模型的训练通常会耗时较长……特别是在处理像YOLOv8这样的计算密集型任务时表现尤为明显……除非有特殊需求……一般情况下建议选择GPU来进行训练以提高效率

2.训练日志结果

这张图展示了使用YOLOv8进行模型训练的详细过程和结果。

训练总时长:
(1)模型经过了150轮的训练后,总共所需时间为1.544小时。
(2)本次训练配备的是NVIDIA GeForce RTX 3070 Ti GPU。
(3)表现出了比之前更高的效率,并归功于YOLOv8模型的优化设计以及高性能硬件的支持。

验证结果:
(1)mAP@50值达到 0.976(即 97.6%),这表明在较低水平的 IoU 阈值下模型展现出卓越的表现能力。
(2)mAP@50-95 的性能则为 0.974(即 97.4%),进一步证明了该模型在更为严格的 IoU 标准下的依然表现出色。

速度:
(1)预处理阶段所需时间为0.2毫秒
(2)模型推理所需时间为1.4毫秒
(3)后处理阶段所需时间为0.8毫秒
(4)研究表明该模型具有较高的推理效率,并且适用于实时检测场景

Resultant data is stored in runs\detect\train_v8, and validation results are stored at the same location.

完成情况(1)Process finished with exit code 0:表明整个验证过程已完成且无异常,并未出现错误。

总结:
(1)该模型在 "NoApnea" 和 "SleepApnea" 的检测任务中具有良好的检测能力,在训练及验证过程中表现出稳定性。
(2)该模型可应用于实际系统中用于实时监测睡眠呼吸暂停事件,并通过语音提醒功能提升用户体验。

全部评论 (0)

还没有任何评论哟~