Advertisement

基于YOLOv8深度学习的医学影像脑中风自动检测与语音报警系统

阅读量:

脑卒中(中风)不仅对个人健康构成严重影响。及时的早期检测不仅有助于提升患者的生存几率,并且可以在症状出现较早时采取干预措施从而降低致残率。尽管如此,在实际应用过程中面临着主观判断不足以及耗时较长等挑战。为了提高诊断效率并减少误诊可能性,在本文研究中我们开发了一种基于YOLOv8深度学习算法的自动化脑卒中医学影像识别系统,并集成语音报警功能

本系统采用YOLOv8目标检测算法,并基于医学影像数据(CT/MRI),实现对脑中风的实时检测。该数据集分为两类:‘Normal’表示健康状态而‘Stroke’代表发病状态。通过Pyqt5开发用户界面并整合了医学影像上传功能、模型推理能力以及结果可视化界面,并在识别脑中风时通过语音播报技术发出警报。

研究结果表明,在脑中风检测任务方面

算法流程

Tipps:详细解析项目的算法流程,并系统地探讨其技术实现的核心逻辑。首先从数据加载与预处理入手,在随后的核心算法构建阶段进行设计并持续优化;最后通过结果展示完成可视化呈现过程。在每个环节中均采用清晰的组织架构和简明扼要的语言进行阐述,并揭示技术背后的原理以及实现思路的关键点。

硬件环境

我们使用的是两种硬件平台配置进行系统调试和训练:
(1)外星人 Alienware M16笔记本电脑:

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

上面的硬件配置设置了充足的计算资源,并支持大规模图像数据的训练以及高效的运算。引入GPU后显著降低了模型训练所需的时间。
通过采用两种不同的硬件平台进行调试与训练操作,能够更加全面地验证系统的性能、适应性和稳定性等关键指标。
这种方法不仅提升了系统的鲁棒性与泛化能力,并且降低了开发成本与效率消耗,在为实际应用提供技术支持方面具有良好的基础保障。

模型训练

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

1.YOLOv8的基本原理

YOLOv8被视为当前目标检测领域的最佳解决方案,并且它在Yolo系列的历史版本基础上进行了全面升级。该系统新增了一系列创新组件,在保证高性能的同时显著提升了模型的适应能力。特别适合用于目标检测、图像分割以及人体姿态估计等应用场景。主要创新包括三个关键组件:一个是改进后的主干网络模块;另一个是全新的 anchor-free 检测器;第三个是优化后的损失函数设计。

YOLOv8被视为yOlo系列中的最强版本,在各项指标上均超过现有的目标检测与实例分割模型,并融合了来自yOlov5、yOlovy6以及yOloX等模型的优点;基于对yOlov5结构的全面优化,在提升改进的基础上实现了这一目标的同时保留了工程化设计中的简洁性和易用性

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

2.数据集准备与训练

本研究采用了涉及脑中风的数据集,并通过Labelimg标注工具对每张图片的目标边界框及其类别进行了标注。在此数据集中利用YOLOv8n模型进行了训练工作。经过训练后,在验证集中进行了全面的性能评估和对比分析。整个流程主要分为三个环节:数据准备、模型训练和性能评估阶段。本次标注任务主要关注的是脑中风相关类别问题。该数据集中共有6118张图片,在各个分类领域具有均衡分布特征

该训练数据集包含4282张图像,并被用来进行模型学习和优化过程。
该验证数据集用于评估模型在未见过数据上的性能表现,并防止过拟合问题。
该测试数据集包含612张图像,并被用来评估模型在 unseen 数据上的泛化能力。

数据集的分布直方图

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

部分标注如下图所示:

这种数据分配策略确保了各类数据在模型训练、验证及测试阶段实现了均匀分布,并对YOLOv8n模型架构的设计与性能评估提供了可靠的技术基础

图片数据采用特定存储结构,在项目根目录创建datasets文件夹,并将收集到的图像按照训练数据集和验证数据集进行分类整理并归类放置于该文件夹内。

随后,应创建一个data.yaml文件用于存储训练数据的路径及模型需要进行检测的类别。YOLOv8在进行模型训练时将读取该文件的信息以完成相应的训练与验证过程。该文件将包含必要的信息以指导模型完成相应的训练与验证工作。

该文档指定了在模型训练与验证过程中所使用的数据集路径,并同时说明了模型旨在识别的目标类别。

在数据完成准备之后,在 train.py 文件中运行模型训练过程。其中 epochs 参数用来调节模型训练周期的数量(其中最小值设定为 1),而 batch 参数则用来设定每次输入的数据批量大小(根据内存容量来确定)。

CPU/GPU训练代码如下:

导入名为yolov8n.pt的预训练YOLOv8模型文件,并命名为'yolov8n.pt'

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

在深度学习的各个阶段中,我们通常通过分析损失函数下降曲线的变化轨迹来评估模型的学习效果。YOLOv8模型的训练过程主要由三个关键部分构成:位置损失项(box_loss)、分类损失项(cls_loss)以及动态特征损失项(dfl_loss)。这些不同类型的损失优化构成了目标检测技术性能提升的核心要素。

损失函数作用说明:
(1)定位损失 (box_loss):表示预测框与标注框之间的误差(Generalized IoU),数值越小表示定位精度越高。
(2)分类损失 (cls_loss):用于衡量锚框对应的标注分类一致性程度,在此情况下数值越小表示分类准确性越高。
(3)动态特征损失 (dfl_loss):DFLLoss通过回归预测框与目标框的距离进行优化,并结合多尺度特征图进行参数微调以提升检测定位效果。

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

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

(1)损失函数图像
(2a)mAP性能指标
(2b)精确率与召回率分析
(3)混淆矩阵图表
(4)精度-召回率(P-R)曲线

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

训练指标体系中包含以下关键指标: train/box_loss 代表的是衡量预测目标边界框与真实边界框之间差异的标准;其含义是指衡量预测目标边界框与真实边界框之间差异的标准;该指标的变化趋势显示该指标逐渐向理想值靠拢;具体而言,在训练过程中观察到 train/box_loss 值持续下降的趋势;

train/cls_loss: 表示训练过程中交叉熵损失函数的表现。
其含义是衡量模型预测结果与真实标签之间差异的程度。
从训练曲线来看, 该损失值呈现逐渐下降的趋势。
这表明模型在分类任务中的性能持续提升

train/dfl_loss:
作用:该方法旨在优化边界框的位置和尺寸估计,并采用一种新的损失函数以提升模型对中间位置目标的检测精度。
变化趋势:观察到训练过程中该损失值呈持续下降态势,在第1000轮达到最低点后又逐渐回升至初始水平附近。

评估标准:val/box\_loss;定义为:表示在验证集上的边界框回归损失值,并与训练集中类似的box\_loss值进行比较;用来评估模型在未知数据上的表现;趋势呈现平稳下降(表明模型在验证集上的目标定位性能持续优化)。

val/cls_loss:测试集上的分类损失与训练集中 cls_loss 相近;变化情况:持续下降表明模型在测试集上的分类能力得到增强。

该损失函数用于衡量基于分布聚合机制的模型在验证集上的性能表现。具体而言:

  • 该损失函数的值持续下降,并且在验证集中的分类精度显著提高。

性能指标:
关键性能指标:
预测准确率(metrics/precision(B)):
表示预测结果与真实标签的一致性程度,并用于评估模型表现质量的关键指标。
趋势:
呈稳步提升趋势,并逐渐趋于平稳状态(逐步上升并趋于稳定)。

metrics/recall(B):
含义:该指标衡量的是训练过程中被正确识别的目标占所有真实目标的比例。
趋势:显示出稳步提升的趋势,并逐渐趋于平稳状态,这表明模型在捕获目标方面的能力不断增强。

metrics/mAP50(B):
含义:基于验证集的 mAP@0.5 表示当IoU阈值设为0.5时的平均精度。
趋势:呈持续增长并渐趋稳定的状态表明模型在目标检测任务中的整体表现较为出色。

metrics/mAP50-95(B):
含义:验证集上的 mAP@0.5-0.95 体现多个 IoU 阈值下的平均精度。
趋势:持续提升并渐趋平稳,说明模型在不同 IoU 情况下表现出较强的预测稳定性。

总结:
(1)损失下降:训练和验证集的所有损失项(box_loss、cls_loss、dfl_loss)均呈下降趋势,表明模型在定位、分类和分布预测方面逐步优化。
(2)性能提升:precision、recall、mAP50 和 mAP50-95 均逐步上升并趋于稳定,说明模型不仅在训练集上表现良好,在验证集上的泛化性能也较强。

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

曲线说明:该浅蓝色曲线标记为(Normal 0.993),用于表示当分类结果为"Normal"类别时的精确度与召回率之间的关系。其面积值(AP)为0.993,在"Normal"类别上的分类性能表现出色。

橙色图形代表了分类为"Stroke"的准确性和召回率之间的关系。该区域面积值(AP)达到0.992,并能体现模型归类能力同样卓越。

蓝黑色加粗线条代表各类别(Normal与Stroke)的整体精确率与召回率关系。
该蓝黑色加粗线条达到平均精度为0.992mAP@0.5),说明模型在这一指标上表现出优异的表现,并且接近完美水平。

总结:
(1)当曲线位于右上角区域时(即精确率与召回率均较高),这表明分类器的性能较好。
(2)其中浅蓝与橙色线条分别代表两种不同类别,在测试集上的表现相当平衡。
(3)深蓝线条则全面反映了该分类模型在各类别上的总体表现。

对混淆矩阵进行研究(Research)

结论:
该模型在脑中风检测任务中的性能卓越,在实际应用中表现出色。其准确率达到96.7%,同时展现出高精确度(96.1%)与高召回率(96.9%)。通过优化算法设计,在减少误报的同时也降低了漏检现象相对的数量,在实际医学影像分析场景中具有良好的适用性。

4.检测结果识别

完成模型训练后, 我们将获得一个最佳的训练结果模型best.pt文件, 位于runs/train/weights目录中. 该文件可用于后续的推理检测工作. imgTest.py 图片检测代码如下:

加载所需库:
(1)import YOLO from ultralytics:导入YOLO模型类,并可用于目标检测。
(2)import OpenCV库,并用于图像处理与显示。

请提供模型路径和图片路径。
(1)在代码中使用 path = ‘models/best.pt’:此处应指定预训练目标检测模型的权重文件路径。该处应指定预训练目标检测模型的权重文件路径。(2)使用 img_path = “TestFiles/imagetest.jpg”:此处应指定待检测图像的完整文件路径,请确保文件名与实际名称一致并带有正确扩展名。

加载预训练模型:
(1)model = YOLO(path, task='detect'):该模型将被根据指定路径进行加载,并将执行目标检测任务。
(2)该代码块中将通过 conf 参数设定目标检测的置信度阈值,并利用iou参数配置非极大值抑制(NMS)中的交并比(IoU)阈值。

图像检测:
(1)results = model(img_path):完成目标检测任务,并将结果存储于 results 中。

显示检测结果:
(1)res = results[0].plot():将检测到的结果绘制至图像中。
(2)cv2.imshow(“YOLOv8 Detection”, res):通过OpenCV库显示检测结果,并设置窗口标题为“YOLOv8 Detection”。
(3)cv2.waitKey(0):暂停程序等待用户按下任意键以关闭显示窗口

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

利用YOLOv8模型对文件名为imagetest.jpg的图片进行检测的输出结果如下:

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

检测结果:检测到 1 个 Stroke(中风)

处理速度:
(1)预处理时间: 5.0 毫秒
(2)推理时间: 9.0 毫秒
(3)后处理时间: 73.8 毫秒

总结如下:
系统能够正确识别出图像中的脑卒中相关特征(CVA),其完成时间为 87.8ms(约需 0.0878 秒),完全满足快速检测的要求。检测结果已可靠地保存在指定目录中,并将为后续的验证工作以及实际应用提供便利条件。

运行效果

– 运行 MainProgram.py

主要功能:
(1)适用于临床场景中的脑卒中检测;
(2)能够识别图像、视频以及摄像头捕捉的画面,并提供批量图像分析功能;
(3)动态呈现目标位置坐标、目标总数统计、检测置信度评估以及完成时间记录;
(4)能够将检测结果存储为图像或视频文件格式

2.检测参数设置:

(1)信心阈值:目前设定为0.25,在这种情况下系统仅会输出信心超过25%的目标结果;信心越高的目标表示模型对该目标检测结果越有信心。
(2)交并率阈值:目前设定为0.70,在这种情况下系统只会将交并率(IoU)达到70%以上的检测框视为有效结果;该指标用于评估两个框之间的相似性程度。

这两个关键参数在目标检测系统中常被用来调节模型性能,在此过程中它们能够平衡地影响模型的检测精度和误检率。

语音提醒(Voice Reminder):
(1)异常语音提醒:(警告:脑中风,请立即就医!)

这张图表呈现了基于YOLOv8模型的目标检测系统的检测结果界面。以下是对各字段含义的详细说明:

(1)该模型完成检测所需时间为Time=0.051s。
(2)这一结果体现了模型的实时性特征,并且其检测速度极快。

目标数目(Number of detected objects):
(2)该系统检测到了一个目标,并表明这是系统当前探测到的第一个目标。

该菜单允许用户配置目标类型设置。在当前状态下,默认已将目标类型设置为'全部'状态, 表示系统将展示所有已检测的目标信息。

3.检测结果说明:

这张图表呈现了基于YOLOv8模型的目标检测系统的检测结果界面。其中各个字段的含义说明如下:

目标选择:
(1)列出供选择检测目标的选项,并说明当前显示的是所有已检测的目标。

结果(Result):“脑中风”,表示系统正在高亮显示检测到的“Stroke”。

(1)该模型对于检测到的目标归类为"性阑尾炎"类型的信心程度达到了98.44%。
(2)该模型对于其检测结果表现出信心水平较高。

目标位置(Object location):
(1)x坐标为0;y坐标为15:用于标识目标区域在图像中的具体位置。
(2)x坐标为639;y坐标为639:用于确定目标区域所占据的空间范围。

这些坐标表示在图像中的目标区域范围,框定了检测到的“脑中风”的位置。

此图表展示了检测系统的具体表现数据。它涉及的目标类型、置信度数值以及目标在图像中的精确位置坐标数据。这类界面一般用于展示模型在图像中定位并识别出的目标对象,并提供与这些目标相关的具体位置信息及准确性评分。

4.图片检测说明
(1)脑部发生了中风

(2)脑部未发生中风

单击图片按钮以打开并选择待检测的图片;或者单击文件夹按钮以打开并选择包含多个待检测图片的文件夹。
操作步骤如下:
(1)请单击目标下拉框以展开选项列表,并在此处指定结果信息;
(2)若要保存当前检测结果,请单击保存按钮以执行操作;其存储路径位于save_data目录中。

检测结果表明, 系统进行了精确识别脑中风的区域, 并呈现了详细的检测报告. 其中包含了以下信息: 总共发现了若干个目标点(具体数量由参数配置决定), 完成时间为多少分钟(根据图像大小自动调整), 涉及的目标类型有几种分类标准定义的类型(如急性、亚急性等), 每个目标点的置信度均达到设定阈值以上, 并标示了其在图像中的坐标位置.

5.视频检测说明

单击视频按钮即可启动视频播放,并开始挑选需要检测的视频;检测系统立即显示结果;再次单击按钮即可关闭当前播放的视频。
单击保存按钮,则会将当前的检测结果存入指定位置;具体存储路径位于save_data目录下。

检测结果:自动化处理系统对视频进行在线处理,并在第一时间识别出脑卒中事件并记录相关信息。详细列出了每个检测点的概率值及其对应的位置坐标数据的表格进一步明确了各检测指标的关键参数信息

该界面呈现了系统在视频帧中的多目标检测能力,并输出了详细检测结果及相应的置信度评分。

6.摄像头检测说明

按下启动摄像头按钮,则能够实现摄像头的开启,并支持持续性监控功能。多次按下该按钮,则会停止工作。

系统通过网络建立通信连接摄像头,并实时采集数据;识别出腹股沟区周围存在异常结节,并将初步发现以图形化界面呈现;动态更新监控画面内容,并将识别出的位置标记于相关区域;表格下方记录了每一帧中检测结果的详细信息

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

当用户点击保存按钮时

(1)图片保存

(2)视频保存

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

(1)遵循数据集配置文件data_yaml_path中的参数设置:数据加载将依据数据集定义完成。
(2)设定训练迭代周期为150次:模型将经过150个完整的训练周期。
(3)每个批量处理4张图像:每个批次仅包含4张待处理图像。
(4)存储在命名为train_v8的结果文件夹里:训练结果将被保存至名为train_v8的目标目录中。
(5)基于随机梯度下降算法(SGD):本系统采用随机梯度下降法进行优化计算。

虽然在常见深度学习任务中能够显著提高训练速度 GPU通常会被采用 但在某些特定情况下 可能因硬件限制或其他因素导致用户不得不使用CPU进行计算

温馨提醒:就深度学习模型而言,在CPU上的训练速度通常较之GPU较低。其中像YOLOv8这类计算密集型的任务表现尤为明显。除非特定情况下,推荐优先选择GPU进行训练以便节省时间。

温馨提醒:就深度学习模型而言,在CPU上的训练速度通常较之GPU较低。其中像YOLOv8这类计算密集型的任务表现尤为明显。除非特定情况下,则不建议使用CPU而应优先选择GPU以节省时间

2.训练日志结果

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

训练总时长:
(1)系统在经过150轮训练后,总共需要1.967小时。
(2)本次任务配备NVIDIA GeForce RTX 4070 Ti SUPER显卡,并拥有16GB显存。
(3)该任务展现出较高的效率水平,在YOLOv8优化架构与高性能硬件配置的协同作用下得以实现。

mAP50和mAP50-95:
(1)mAP50: 99.2%
(2)mAP50-95: 96.9%

速度:
(1)0.1ms 预处理时间
(2)0.8ms 推理时间
(3)0.6ms 后处理时间

结果存储:(1)Results saved to runs\detect\train_v8:验证数据位于 runs\detect\train_v8 目录下

完成状态:整个验证过程顺利完成且无异常。

总结:

全部评论 (0)

还没有任何评论哟~