Advertisement

基于YOLOv8深度学习的医学影像脑中风病症自动诊断系统

阅读量:

随着医学影像技术迅速发展

本研究开发了一款基于YOLOv8深度学习模型的智能系统用于脑中风自动化诊断。该系统通过Pyqt5构建了图形用户界面(GUI)实现了医学影像数据集的有效融合。首先,在模型训练阶段选择了适合的脑中风影像数据集进行了系统的训练过程利用YOLOv8的强大目标检测技术帮助识别出相关脑中风影像特征。随后我们利用Pyqt5开发出了一个直观易用的用户界面系统这样医生只需上传医学影像即可实时获得诊断结果。为了提升系统的性能我们还采用了数据增强与迁移学习等技术手段提升了模型的整体精度与鲁棒性从而保证系统在多源异构数据环境下展现出良好的适应性和较高的准确性

研究结果表明,在多组公开测试数据上的检测准确率表现优异的基于YOLOv8的脑中风自动诊断系统,在多个公开数据集上展现了卓越的表现能力。该系统的响应速度迅速且符合实时医疗诊断需求,并且其界面设计简洁直观。此外,在人机交互方面展现出显著优势。本文所提出的人工智能辅助诊断系统在临床应用方面展现出显著优势,并可显著提升医生在脑中风诊断阶段的决策效率。该系统不仅有助于降低误诊率并提高诊疗效率水平,并且具备良好的人机交互体验和操作便利性

算法流程

全面解析项目的算法流程,并深入探究技术实现的关键逻辑。从数据加载和预处理阶段入手;经过核心算法的设计与优化工作展开;最终聚焦于结果的可视化展示。

硬件环境

我们使用的是两组不同的硬件平台配置来进行系统的调试与训练过程: (1)外星人 Alienware M16笔记本电脑:

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

当前所使用的硬件配置配备了充足的计算能力,并非仅用于支持大规模图像数据的训练与高效计算;借助GPU技术的应用使得模型训练所需的时间得到了显著缩减。通过在两种不同硬件平台上运行测试与分析工作流程, 我们得以从性能、兼容性以及稳定性等多个维度对系统进行全面评估与验证, 这种方法不仅实现了系统性能与适应性的显著提升, 同时也降低了开发成本并优化了整体效率, 从而为实际应用场景中的部署工作奠定了坚实的基础。

模型训练

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

1.YOLOv8的基本原理

YOLOv8被视为当前目标检测领域的顶尖模型,并基于前代模型Yolov7所奠定的基础之上进行了全面升级与优化。该系统通过新增一系列创新组件与优化措施(如新型主干架构设计(Backbone)、一种改进型 anchor-free探测器(Detection Head)以及全新的损失计算机制(Loss Function)),旨在通过性能优化与计算效率提升来增强其适应能力。经过全面优化后已成为实现多目标感知任务的理想方案之一。其主要创新包括采用新型主干架构设计(Backbone)、一种改进型 anchor-free探测器(Detection Head)以及全新的损失计算机制(Loss Function),这些组件能够在不同计算平台上稳定运行。

YOLOv8是Yolo系列模型的最新版本的领军人物,在多个方面都超过了现有的对象检测与实例分割模型;它不仅继承了前作的优势,并且实现了改进后的网络架构;该系统基于并实现了提升后端推理速度的同时保证了精确度与计算资源占用率之间的平衡

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

2.数据集准备与训练

本研究采用了包含脑中风相关数据的集合,并借助Labelimg标注工具对每张图像的目标边界框(Bounding Box)及其类别进行了精确标注。基于此数据集合的基础之上,我们采用了YOLOv8n模型来进行训练过程,并经过训练后,在验证集中对模型的表现进行了全面评估和详细对比分析。具体而言,在整个训练与评估流程中涉及的主要步骤包括:数据预处理阶段、模型训练阶段以及模型评估阶段。在本次标注过程中,所关注的目标类别主要集中在脑中风相关区域。该数据集合中共包含了1842张图像样本,在各个区域的具体分布情况如下:在头部区域占约35%,在胸部区域占约25%,在腹部区域占约20%,而在尾部区域仅占约10%。

本研究采用了1289张图像作为训练数据。验证数据集包含368张图片,在独立的数据上进行准确率评估以防止过拟合问题。测试阶段使用了185张图片来评估模型的泛化性能。

以下直方图详细描述了训练集合、验证集合以及测试集合中的图像数量分布情况:

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

部分标注如下图所示:

这种数据分布策略确保了各阶段数据的均匀分布,并支撑了YOLOv8n模型开发与性能评估的过程。

图片数据的存储格式如下,在项目目录下创建 datasets 目录,并将检测出的图像按照训练集与验证集分类存放在 datasets 目录中。

随后需创建一个data.yaml文件来记录训练数据目录以及模型需检测的目标类别。YOLOv8引擎在执行模型训练时将依据该文件中的信息来指导模型的训练与验证过程。

该文件确定了用于模型训练及验证的数据集路径,并指定了该模型将要在以下类别中进行目标检测。

在完成数据准备之后,在完成数据准备后

epochs参数决定着训练周期的数量

batch参数则决定了每个批量处理的数据量(根据内存容量来设定,默认值通常为1)

CPU/GPU训练代码如下:

从文件路径yolov8n.pt加载预先训练好的YOLOv8模型,并将其作为目标检测任务的基础架构使用。通过指定训练参数进行模型训练时,请注意以下设置:(1)数据集配置:指定用于训练的数据集配置文件路径;(2)最大迭代次数:设定为150个迭代周期;(3)批量大小:设置为4个样本组成一个批量;(4)优化算法选择:选择SGD优化器并配置学习率衰减策略;(7)实验命名:为当前实验设置名称为'train_v8'以便于后续结果追踪比较。

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

在深度学习的过程中,在训练模型时,我们一般通过观察损失函数下降的趋势来评估模型的表现。对于 YOLOv8 模型来说,在训练过程中需要关注三种关键误差:定位误差(loc_error)、分类误差(cls_error)以及动态特征偏差(dfl_bias)。这些误差项的优化对于提高目标检测性能至关重要。

损失函数作用说明:
(1)定位损失 (box_loss):该损失函数主要用来评估预测边界框与真实边界框之间的差异程度,在度量上采用广义交并比(GIoU)指标来表征两者的差距大小。数值越小则表明定位精度越高。
(2)分类损失 (cls_loss):该类别的损失函数旨在量化锚框所对应的类别标签与其真实类别的一致性程度,在技术上通过测量两者之间是否存在匹配关系来实现对分类准确性的影响评价。
(3)动态特征损失 (dfl_loss):DFL Loss作为一种新型的特征回归方法,在计算边界框回归误差的同时还结合了多尺度特征图的信息提取机制。这种设计使得在提升边界框精确度的同时也能够更好地适应不同层次的目标细节需求,在实际应用中显著提升了目标检测的整体性能

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

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

(1)损失变化趋势图(Loss Curves)
(2)性能评估曲线图(mAP、精确率、召回率)
(3)混淆矩阵(Confusion Matrix)
(4)Precision-Recall 曲线

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

训练指标:
train/box_loss:
定义:边界框回归的损失函数值(Box Regression Loss),用于量化预测的目标边界框与真实边界框之间的差异程度。
变化趋势:随着训练过程的推进(Progression of Training),观察到Box Regression Loss逐渐减小(Diminishes),这表明模型在目标定位任务上的表现持续改进(Improvement)。

含义:该分类损失函数衡量了预测结果与真实结果之间的差距。
趋势:随着训练过程的推进,分类损失持续下降,表明模型对各类别识别的准确性不断提高。

train/dfl_loss:
该损失函数的作用是实现分布聚合以优化边界框的预测分布。
变化趋势显示该方法中分布焦点损失稳步减少,并且模型在目标细节定位能力上逐步提升。

评估指标为:val/box\_loss;其含义是在验证集上计算的边界框回归损失;类似于训练集中的 box\_loss;但其主要作用是评估模型在未知数据上的表现;随着模型训练进程的发展;其对应的边界框回归损失呈下降趋势;表明该模型在测试阶段的表现得到了显著提升。

表示为 val/cls_loss 的指标旨在衡量模型在验证集上的分类性能表现。具体含义在于它是基于验证集的分类损失计算得出,并与训练阶段的 cls_loss 指标具有相似的表现。从趋势来看,在优化过程中分类损失持续减少的同时(同时),验证集上对应的分类性能持续提升

val/dfl_loss:
定义:基于验证集的分布聚合误差。
趋势分析表明,在验证集上,随着训练过程的进行,分布焦点损失持续下降。

性能指标:
metrics/precision(B)
定义为训练过程中对目标实例的准确识别比例。
随着模型优化,precision持续提升并达到平稳状态。

metrics/recall(B):
含义:在训练过程中计算得到的召回率指标Recall(B)表示所有真实的目标中被正确识别的比例。
趋势:随着模型优化Recall(B)呈现稳步提升趋势,并最终趋于稳定状态表明模型在识别正类目标方面的能力得到了显著增强。

该指标定义为验证集上的 mAP@0.5(mean average precision at intersection-over-union threshold of 0.5),其反映了目标检测系统在该阈值下表现的有效性度量。观察到,在训练过程中该指标表现出持续增长的趋势,并最终趋向于稳定状态。这表明模型在目标检测任务中展现出逐步优化的能力,并最终达到较高的准确率水平。

该指标(metrics/mAP50-95(B))基于验证数据集计算得出:
含义:该指标代表平均精度(mAP)在0.50.95之间的情况。
趋势:随着模型优化,在不同IoU阈值下的检测性能稳步提升并最终趋于平稳状态。

总结:
(1)损失指标的持续下降:分别在训练集和验证集上计算得到的所有损失指标均呈现持续下降趋势,在Box_loss方面表现尤为突出。该过程说明模型在不断优化过程中表现出色,并且显著提升了目标检测的准确性以及对细节部分的预测能力。
(2)性能表现持续提升:各项评估指标如precision、recall以及mAP50和mAP50-95均持续上升,在训练过程中展现出明显进步趋势。
(3)是否存在过拟合问题:整体呈现出平稳上升的趋势,并未表现出明显的过拟合迹象

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

曲线说明:蓝色曲线(Hemorphic 0.978)代表出血性中风(hemoradic)类别下的精确度与召回率关系。其中mAP@0.5值为0.978, 表明该类别模型在精确度与召回率方面均表现出色

橙色曲线图(Ischemic 0.984):
(1)代表缺血性中风(Ischemic)类别在准确性和召回率之间的关系表现。
(2)mAP@0.5值为0.984,则表明该类别模型的准确性和召回率相较于出血性中风类具有更好的性能表现。

蓝色曲线(all classes 0.981 mAP@0.5):
(1)展示了模型在各类别间的整体性能。
(2)mAP@0.5值为0.981,表明该模型在各类别间的分类精度均达到较高水平。

总结:
(1)Ischemic models exhibit only a slight improvement over hemorrhagic models, yet overall performance remains exceptionally high.
(2)The deep blue curve demonstrates the model's strong generalization capability, making it suitable for various detection scenarios.

该方法用于评估分类模型性能的重要工具 混淆矩阵 (Confusion Matrix) 展示了模型在各类别上的预测结果与实际对比情况

结论:该模型在Ischemic中风分类任务中的性能表现尤为出色,在能够正确识别大部分病例的基础上,在Hemorrhagic中风分类任务中仍存在一定数量的误诊率较高和检出率偏低。为了解决这一问题,请建议进一步优化该类别以提升其诊断能力。

4.检测结果识别

完成模型训练后, 我们能够获得位于runs/train/weights目录中的最佳训练结果模型best.pt文件. 该文件可用于后续推理检测的实施.

加载所需库:
(1)通过从ultralytics导入YOLO模型类来实现目标检测。
(2)调用OpenCV库来进行图像处理和显示。

请指定模型和图片的路径:
(1)path = ‘models/best.pt’:定义预训练模型的位置,并指出该位置存放的是一个执行目标检测任务的理想选择。
(2)img_path = “TestFiles/imagetest.jpg”:确定待检测图像的位置,并提醒该图像将在后续处理中被用于目标检测分析。

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

图像检测流程如下:首先将输入的图片路径传递给模型进行推理操作(Step 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个物体属于"person"类别,并具有数量为1、位置坐标信息为(x=53, y=69)的数据记录;识别出2个物体属于"car"类别,并具有数量为2、位置坐标信息分别为(x=10, y=20)和(x=30, y=40)的数据记录;识别出3个物体属于"background"类别,并具有数量为3、位置坐标信息分别为(x=5, y=5)、(x=15, y=15)和(x=25, y=25)的数据记录。

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

检测结果:检测到 1 个 Ischemic(缺血性脑中风)

处理速度:
(1)预处理时间: 11.5 毫秒
(2)推理时间: 11.5 毫秒
(3)后处理时间: 122.7 毫秒

总结:
系统成功检测到图像中的缺血性中风(Ischemic)类型。

运行效果

– 运行 MainProgram.py

主要功能:
(1)适用于临床中脑卒中的检测场景;
(2)能够实现对图像、视频以及摄像头设备进行检测操作,并且能够处理批量图像分析任务;
(3)系统界面实时呈现目标定位坐标、目标数量统计、检测信心评分以及所需时间数据;
(4)能够存储生成的图像分析结果或视频处理后的数据

2.检测参数设置:

(1)置信度阈值:当前设置为0.25,表示检测系统只会考虑置信度高于25%的目标进行输出,置信度越高表示模型对检测结果的确信度越高。
(2)交并比阈值:当前设置为0.70,表示系统只会认为交并比(IoU)超过70%的检测框为有效结果。交并比是检测框与真实框重叠区域的比值,用于衡量两个框的相似程度,值越高表明重叠程度越高。

这两个参数常被用来在目标检测系统中应用,并且调整后会直接影响模型的检测精度与误检率

此图表详细呈现了基于YOLOv8模型的目标检测系统的核心检测结果界面。具体说明各字段含义如下:

用时(Time taken):
(1)这表明模型完成检测所需时间为0.014秒。
(2)这表明模型的实时性得到体现,并且检测速度极快。

目标数目(Number of objects detected): (1)检测到的目标数目为1,则表示这是当前检测到的第一个目标。

目标类型选项框:所有类型:
(1)此处提供了一个下拉列表让用户可选择要查看的目标类型。
(2)若当前设置为"全部"则会显示系统检测到的所有目标信息。

3.检测结果说明:

该界面展示了基于YOLOv8模型的目标检测系统运行的结果。具体而言,请参阅以下字段及其相应的意义说明。

目标设置:(1)设置可供选择的目标检测参数。当前已列出所有可能的目标,并表明目前系统识别到的所有潜在目标。

结果(Result):“缺血性脑卒中”,表示系统正在高亮显示检测到的“Ischemic”。

(1)该模型对检测到的目标归类于‘缺血性脑中风’类别具有98.85%的置信度。
(2)置信度直接体现了模型对于检测结果的信心水平。

(1)x_min值设为1, y_min值设为0:用于确定目标区域起始点坐标的参数值。
(2)x_max值设定为638, y_max值设定为638:用于确定目标区域结束点坐标的参数设置。

这些坐标点在图像中所指定的目标区域范围内进行了精确的定位,在此区域内能够明确地识别出'缺血性脑卒中'的存在位置。

这张图呈现了检测系统的一个具体结果集,其中涵盖了检测到的目标类型、信心程度以及目标在图像中的位置坐标等关键信息。这一类界面通常用于展示模型在图像中定位并识别出的目标及其相关信息,并提供与这些目标相关的位置数据及可信度评估。

4.图片检测说明
(1)出血性脑卒中

(2)缺血性脑卒中

单击打开图片按钮,并选择待检测的图片;或单击打开文件夹按钮,并选择待批量检测图片的文件夹。
操作步骤如下:
(1)单击目标下拉框后即可选择指定目标的相关结果信息进行显示。
(2)单击保存按钮将对当前检测结果进行存储,并将其存储位置设置为 save_data 文件夹内。

检测结果显示为系统解析出图片中的脑中风并呈现检测结果。具体信息包括总目标数用时目标类型置信度以及目标的位置坐标信息。

5.视频检测说明

单击视频按钮后会打开供检测的视频文件,并自动呈现检测结果;操作流程则分为两个步骤:第一次操作完成检测并显示结果;再次点击则会关闭当前窗口并返回初始界面。单击保存按钮后会完成对视频检测结果的存储;其中指定路径位于save_data文件夹内。

检测结果:该系统能够对视频实施实时分析,并识别出脑中风的存在并展示了相关结果。通过表格形式展示了视频中的多个检测点及其相应的置信度和位置坐标。

该界面向用户呈现了该系统在处理视频帧时具备多目标检测功能,并提供了详细的检测结果及相应的置信度评分。

6.摄像头检测说明

按下启动摄像头按钮,则会启动摄像头设备,并实现实时监控功能;在完成操作后,请您再次按下关闭按钮以释放资源。

检测结果:系统通过摄像头实现对实时数据的采集与分析功能。系统能够识别出腹股沟区域的异常组织变化并及时反馈分析结果。监控员通过实时捕捉监控画面后,在相关区域自动标记病变部位。每帧图像处理完成后,在指定位置生成详细的分析报告。

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

通过点击该按钮后(按住Shift键),系统会将当前选择的所有图像(包括批量处理的图像)以及视频中的检测结果进行保存。这些检测到的图像与视频结果会被存储在save_data目录中。保存的操作记录将在后续界面中展示。

图片文件存储的csv文件内容如下, 包括图片路径, 目标在图片中的编号, 目标类别, 置信度, 目标坐标位置. 注: 其中坐标位置代表检测框左上角与右下角两个点对应的x,y坐标.

(1)图片保存

(2)视频保存

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

(1)根据数据.yaml文件配置的数据集:该系统将根据预定义的数据.yaml文件中的参数进行初始化和运行。
(2)训练迭代次数设定为150次:系统将执行150次完整的训练迭代过程。
(3)每一批次包含4幅图像(batch size):在每次模型前向传播过程中输入4幅图像进行特征提取。
(4)模型训练完成后会保存到train_v8目录下:所有模型参数将被存储在名为train_v8的特定目录下以便后续访问和管理。
(5)本模型采用了随机梯度下降法作为优化算法:该算法通过计算损失函数梯度并对权重参数进行更新来最小化预测误差。

然而,在许多常见的深度学习任务中 GPU 通常能够带来更快的训练速度

温馨提示:就深度学习模型而言,在CPU上的训练效率通常低于GPU。尤其是一些计算密集型的模型如YOLOv8,在其情况下完成同样的任务所需的时间会显著多于在GPU上的表现。除非特殊需求,请尽量选择在GPU上进行训练以便提高效率

2.训练日志结果

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

(1)经过了150轮的持续训练后,该模型累计耗时为0.922小时。
(2)本次实验采用了NVIDIA GeForce RTX 4070 Ti SUPER显卡,并拥有高达16GB的显存配置。
(3)该实验达到了较高的训练效率水平,在很大程度上得益于YOLOv8模型优化设计以及高性能硬件的强大支持。

mAP50和mAP50-95:
(1)mAP50: 98.1%
(2)mAP50-95: 93.6%

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

结果存储:(1)Result located in runs\detect\train_v8: 在 runs\detect\train_v8 中存储验证结果。

该进程结束并以退出码0成功终止。

总结:该模型在脑卒中检测任务中的整体表现优异,在测试集上的平均精确率达到0.981。特别值得注意的是,在缺血性中风(Ischemic)分类方面,该模型的准确率和召回率均显著高于其他现有方法,并且其性能特征使其非常适合用于实际应用环境。

全部评论 (0)

还没有任何评论哟~