Advertisement

基于YOLOv8深度学习的医学影像颅内出血类型自动检测与分类系统

阅读量:

颅内出血是一种致命的急性病症,在现代医学中实现对其早期诊断具有至关重要的意义。手动诊断不同类型的颅内出血往往耗时长且依赖丰富经验。本研究开发了一种基于YOLOv8深度学习算法的自动化系统,在医学影像分析方面展现出高效的识别能力,并能精确分类出以下五种常见的颅内出血类型:包括硬膜外出血、脑实质内外 bleeding、脑室内 bleeding、蛛网膜下腔 bleed以及硬膜下 bleed。

该系统基于标注完善的颅内出血CT图像数据集进行了训练,并利用PyQt5开发出用户友好的界面功能。该界面不仅支持医学影像的上传以及自动检测与分类结果的可视化展示,并且还集成了一种高效可靠的检测算法——YOLOv8模型,在实际应用中展现出显著的优势与可靠性。此外,在通用性和扩展性方面表现突出,并能够适应多种医疗场景的需求

研究表明,在利用YOLOv8算法进行颅内出血类型的检测系统开发出来后(具体细节),这一创新系统的开发与应用将在临床诊断方面发挥重要作用。(注:此处可能需要进一步优化句子之间的衔接)

算法流程

Tipps:建议对项目的算法流程进行详细分析,并系统地探讨核心技术的实现路径。以数据加载和预处理作为起点,在涵盖核心算法的设计及优化过程的同时,并非仅仅停留在表面分析层面,请确保每个环节都将通过清晰的组织结构和简明扼要的语言进行阐述,并最终深入揭示技术和其背后实现思路的本质

代码讲解

Tipps:我们专注于为您提供全面的项目代码解析服务,并深入剖析核心实现、关键逻辑及优化策略,助力您快速掌握项目运行机制。此外,在您使用过程中可能遇到的各种问题上,我们提供高效的一对一答疑支持服务。
不论您是新手还是资深开发者,请随时与我们沟通交流!如果您有任何需求或疑问,请随时联系我们!

1.服务优势

2.联系方式

信息与技术的支持服务合作方与公司之间建立了长期稳定的合作关系。
公司将尽最大努力实现客户的技术需求。
公司将根据客户需求提供定制化的解决方案,并协助客户完成技术方案的设计和实施。

项目数据

Tipps:为了收集多样化的颅内出血相关图像数据集,并借助Labelimg标记工具对每幅图像进行标注。随后将这些图像划分为五个检测类别:包括'颅内硬膜外出血'、'颅内脑实质内出血'、'颅内脑室内出血'、'颅内蛛网膜下腔出血'以及'颅内硬膜下 bleed''。

目标检测标注工具
(1)LabelImg:一种开源的图像标注工具。其标签不仅适用于分类任务与目标检测任务,并且基于Python编写,并以其直观易用的图形界面著称(虽然为英文界面设计)。它提供的注释结果采用XML文件形式存储PASCAL VOC格式数据,并与ImageNet兼容。
此外 LabelImg 还支持COCO数据集格式。
(2)在CMD中安装LabelImg 请输入以下命令:
pip install labelimg -i https://pypi.tuna.tsinghua.edu.cn/simple

结束后,在cmd中输入labelimg

初识labelimg

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

在View中勾选Auto Save mode

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

指定标注文件存储的位置(如上图所示),开始执行标注流程。首先用矩形框选中目标区域,并对目标添加标签;随后切换至下一张图片继续操作。

Labelimg的快捷键

(3)数据准备
为数据处理方便起见,请创建一个名为data的目录结构(这一做法并非唯一),其中包含images子目录用于分类存储图片文件;随后将所有相关图片存入images目录下;并建立labels文本文件用于存储标注信息;最后创建classes.txt文本文件记录各类别名称。

data目录下的文件组织架构如下:

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

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

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

标记信息文件的名称与图片名称一致。
其中包含N行5列的数据项:每一行为一个标注目标。
每个条目代表一个标注的目标。
–类别ID表示被标注的目标类型;
–x中心和y中心表示标注框在图像中的相对位置;
–宽度和高度表示标注框在图像中的相对大小。

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

存储标签类别相关文件(其名称被设定为classes.txt且保持不变),并用于存储生成的标签类别。

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

硬件环境

我们采用了两种硬件平台配置来进行系统的开发与测试:
(1)异星生物 Alienware M16台式电脑用于开发与测试

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

硬件环境具备了充足的计算资源,并能支撑大规模图像数据的训练以及高效的运算。显而易见的是,引入GPU显著减少了模型训练所需的时间。通过采用两种硬件平台进行调试与训练,在一定程度上能够更全面地验证系统的性能、适应性和稳定性。这种方法既提升了系统的鲁棒性和泛化能力,并且优化了开发成本和效率,在实际应用部署中也奠定了良好的基础

模型训练

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

1.YOLOv8的基本原理

YOLOv8被视为当前目标检测领域中的顶尖解决方案,在Yolo系列历史版本的基础上进行了进一步优化,并新增了一系列创新组件以显著提升了检测速度与计算资源利用率。主要创新集中在三个关键模块:第一层神经网络架构的革新、全新的检测模块设计以及改进后的损失函数计算方法。这些改动使其能够高效处理从CPU到GPU等多种硬件平台的任务需求

YOLOv8作为YOLO系列中的最新版本,在各方面表现尤为出色。它不仅在多个关键指标上实现了显著超越,在设计上也充分汲取了YOLOv5、YOLOv6以及YOLOX等模型设计上的精华。基于对改进YOLOv5结构的全面升级实现这一目标的同时保留了工程化简洁高效的特点。

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

2.数据集准备与训练

在本研究中,我们采用了包含了颅内出血图像目标的数据集,并通过Labelimg标注工具对每张图像的目标边界框(Bounding Box)及其类别进行了标注。基于该数据集使用YOLOv8n模型进行了训练,并对模型在验证集上的性能表现进行了全面评估与对比分析。整个流程包括以下步骤:首先准备数据集;接着进行模型训练;最后进行模型评估。本研究主要关注的目标类别集中在颅内出血图像目标上。该数据集中总计包含42210张图像的具体分布情况如下:

训练集:包含29546张图像的数据集,默认情况下用于模型的学习与优化;验证集:拥有8442张图像的数据集,默认情况下主要用于评估模型对新数据的泛化能力,并防止过拟合;测试集:包含4222张图片的数据集合,在最终阶段用来评估机器学习算法的泛化性能

数据集的分布直方图
该柱状图呈现了训练数据集、验证数据集以及测试数据集中的图像数量分配情况

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

部分标注如下图所示:

该数据分布策略确保了样本在整个训练、验证以及测试过程中的均衡分布,并为YOLOv8n模型的开发提供了可靠的技术支撑。

图片数据的存储格式为:在项目根目录下创建一个名为datasets的子目录,并将收集到的所有图像按照训练集和验证集进行分类,并将其放置于该子目录中。

随后应创建一个data.yaml文件,并将其用于存储训练数据路径以及模型需检测的类别。YOLOv8在执行模型训练过程中会调用该文件中的信息以实现模型的训练与验证。

该文件指定了用于训练与验证的数据集路径,并包含模型需要检测的目标分类类型。

在完成数据准备后, 我们将利用train.py文件来启动模型训练过程. 其中, epochs参数将被用来指定训练循环的数量, 而batch参数则将决定每个循环中处理的数据批量数量(该值会根据可用内存容量来决定, 最低设置为1).

CPU/GPU训练代码如下:

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

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

当进行深度学习时, 为了了解模型的学习进度, 我们通常观察到损 shuffled 函数下降曲线的变化趋势. YOLOv8模型的学习过程主要关注于三个关键指标: 定位误差(box_loss)、分类准确率(cls_loss)以及动态特征误差(dfl_loss). 优化这些指标对于提升目标检测性能至关重要.

损失函数作用说明:
(1)定位损失 (box_loss):衡量预测框与标定框之间的差异(GIoU),数值越小则定位精度越高。
(2)分类损失 (cls_loss):评估锚框与其对应的真实类别的一致性,结果越小表明分类精度更高。
(3)动态特征损失 (dfl_loss):DFLLoss通过计算预测框与目标框之间的距离提升回归精度,并结合特征图的尺度信息优化结果,从而显著提高目标检测的定位准确性。

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

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

(1)损失函数图形(Loss Function Graphs)
(2)评估指标变化趋势图(mAP、精确度与召回率)
(3)分类效果表格(Confusion Matrix)
(4)精确率-召回率曲线图(Precision-Recall Curve)

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

训练指标:
Box Loss:
描述表示训练过程中边界框回归损失的变化趋势。
趋势逐渐趋于平稳表明模型边界框定位能力逐渐提升并收敛。

train/cls_loss:
描述:该指标反映了训练过程中类别分类损失(Classification Loss)的演变情况。
趋势:该损失持续稳步下降直至趋于平稳状态,这表明模型在各类别预测上的准确性不断提升。

train/dfl_loss:
描述:描述分布焦点损失(Distribution Focal Loss)的变化趋势,用于优化边界框位置的准确性。
趋势:稳步下降并最终趋于稳定,表明模型在预测分布质量上的能力逐渐增强。

验证指标:
val/box_loss:
描述: 反映了验证数据集上边界框损失(Box Loss)的变化情况。
趋势:与 train/box_loss 类似,在整个训练过程中 val/box_loss 值呈现出稳步下降并最终趋于平稳的特点,这表明模型在验证集上的定位能力得到了持续提升。

val/cls_loss:
描述: 代表验证集上类别分类损失(Classification Loss)的发展变化情况。
趋势:如同 train/cls_loss 的表现一样,在持续下降直至平稳的过程中体现了验证集上的分类能力与训练集的一致性

val/dfl_loss:
描述: 该指标反映验证集上分布焦点损失(DFL Loss)的变化情况。
趋势:与训练同步进行,并呈现一致性的变化模式,在持续降低后趋于平稳。

性能指标:
Precision (B):
描述: 反映了模型在训练集上关于正样本分类任务的精度变化情况。
趋势: 从较低水平稳步提升至接近完美水平(1),表明模型对正样本分类任务的区分能力不断增强

metrics/recall(B):
描述: 该指标量化模型在训练集上对真实正样本的识别能力(Recall),反映其分类性能的表现。
趋势: 指标值呈现出稳步提升的趋势,并逐渐趋近于饱和状态(1),这表明随着训练过程的推进,模型在捕获有效正样本数量占比方面取得了显著进展。

metrics/mAP50(B):
描述: 该指标代表验证集上iou值大于等于50%时的平均精度(mAP@50)。
趋势显示该值稳步上升,并逐渐逼近1。这表明模型在验证集上的整体检测性能持续增强。

指标mAP_{50\sim95}(B)
描述:该指标衡量的是在验证集上IoU从50%到95%时的综合平均精度(mAP@50-95)。
趋势:该指标的趋势显示其逐渐上升并趋于稳定,并仅稍低于mAP_{@50}水平。这表明模型在更严格IoU条件下的表现依然较为出色。

总结:
(1)总体趋势:各损失指标持续稳步下降,在训练阶段观察到精确率、召回率以及 mAP 指标逐步提升直至趋近于饱和值。这一现象表明模型在训练数据集和验证数据集上均展现出良好的收敛特性。
(2)验证集与训练集一致性:通过分析验证集上的表现趋势可知,在测试场景下模型的性能特征与实际训练过程高度一致。这不仅反映出模型具有较强的泛化能力,并且进一步证实了其在不同数据分布下的稳定性能特征。

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

蓝色线条:
Epidural 类别,mAP@0.5 为 0.994。

橙色线条:
Intraparenchymal 类别,mAP@0.5 为 0.995。

绿色线条:
Intraventricular 类别,mAP@0.5 为 0.944。

红色线条:
Subarachnoid 类别,mAP@0.5 为 0.994。

紫色线条:
Subdural 类别,mAP@0.5 为 0.980。

深蓝色线条:
all classes(所有类别综合),mAP@0.5 为 0.981。

通过 Precision-Recall 曲线可以看出该模型的整体表现非常出色,在 Epidural 和 Intra-par鞍状结节类别上取得了最优效果。值得注意的是,在 Intraventricular 类别中,精确率与召回率出现了下降趋势。为了进一步提升其性能水平,请考虑通过优化数据集的质量及分布情况来进一步提升其性能水平。

混淆矩阵 (Confusion Matrix) 分析

解释

结论:
(1)矩阵显示模型在Epidural类�别上的分类效果最为突出且误差最低。
(2)少数几个类�(如Intraventricular和Subarachnoid类�)存在少量分类错误,并可通过应用数据增强手段或优化模型参数来提高分类精度。

4.检测结果识别

在模型完成训练后, 我们能够获得最优训练结果模型best.pt文件, 位于runs/train/weights目录中. 在完成这一阶段后, 我们可以通过该文件实现后续检测流程.

加载所需库:

加载模型路径和图片路径:
(1)path = ‘models/best.pt’:该路径指向预训练目标检测模型的位置。
(2)img_path = “TestFiles/imagetest.jpg”:图片文件位于TestFiles文件夹中,并将被用于目标检测任务。

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

图像处理:其中 results = model(img_path) 表示通过模型进行目标检测,并且 results 包含目标检测结果。

(1)res = results[0].plot():通过调用results[0].plot()函数来呈现检测结果。
(2)cv2.imshow(“YOLOv8 Detection”, res):调用cv2.imshow函数来可视化显示检测结果,并设置窗口标题为"YOLOv8 Detection"。
(3)cv2.waitKey(0):调用cv2.waitKey(0)函数来实现对程序流程的暂停,并根据用户的按键操作来控制窗口关闭。

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

这段输出基于YOLOv8模型对图片"imagetest.jpg"进行了检测,并详细描述了具体结果。

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

模型在图像中识别出:1个 Epidural(硬膜外)、1个 Subarachnoid(蛛网膜下腔)。

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

YOLOv8模型通过成功完成对图像中两个类别的检测任务, 从而表明该模型在这些分类任务上的性能表现稳健.

运行效果

– 运行 MainProgram.py

1.主要功能:
(1)该系统具备在线处理颅内出血检测的能力;
(2)它不仅支持通过输入图像进行检测,
还支持从视频流中提取特征,
并且能够处理批量输入的多幅图像;
(3)该界面不仅显示目标定位坐标,
还动态呈现"数量统计图",
并提供"信心评分"和"时间消耗统计表"
以便直观了解处理过程;
(4)系统能够将处理结果存储至本地存储空间。

2.检测结果说明:

(1)置信度阈值:目前设定为0.25,在此基准下系统仅输出满足或高于25%置信度的目标。较高的置信度意味着模型对检测结果的信任程度更高。(2)IoU阈值:目前设定为0.70,在该标准下该系统仅将达到或超过70% IoU的检测框视为有效结果。该指标是衡量两个区域之间相似性的重要参数,在图像处理中常用于评估目标定位的质量。

这两个重要参数通常在目标检测系统中被用来评估模型的表现。通过调整这些参数的变化后会对模型的检测精确度和误报率产生显著影响。

该图表展示了采用YOLOv8模型的目标检测系统的检测结果界面。具体而言,以下是各字段的具体含义说明:

该图表展示了采用YOLOv8模型的目标检测系统的检测结果界面。具体而言,以下是各字段的具体含义说明:

(1)此表明模型完成检测所需时间为0.125秒。
(2)此则体现了模型展现出极高的实时性能。

目标数目(Number of objects detected):
(1)识别出的目标数量为2个,并即意味着这是当前识别出的第1个目标。

目标类型选择(下拉菜单):全部:
(1)这里有一个下拉菜单项用于让用户选择要查看的目标类型。
(2)在当前情况下,默认选项设置为“全部”,这表示系统将呈现所有检测到的目标信息。

结果(Result):"颅内脑组织内部出血"表示系统正在突出显示检测到的"Intra-par鞍膜"

置信度(Confidence):
(1)表明模型对于检测出的目标属于"颅内脑实质内出血"类别的判断具有88.46%的信心水平。
(2)置信度衡量了模型对检测结果的信任程度,在该值较高的情况下表明模型对该判定结果具有较高的可靠性。

目标位置(Object location):
(1)x坐标:275, y坐标:343处:图像中该点位于左上方位置处。
(2)x坐标:398, y坐标:321处:图像中该点位于右下方位置处。

这些坐标被用来标定图像中的目标区域范围,并确定了检测到的"颅内脑实质内出血"的位置。

该图表展示了颅内出血图像检测的一次测试案例,并详细记录了以下关键数据:包括测试时间、所识别的具体类型、各行为对应的置信度值以及目标的具体位置信息等关键数据。研究人员可通过图形界面直观查看并深入分析这些测试结果,并有助于提高颅内出血目标自动识别系统的性能水平

3.图片检测说明
(1)颅内脑实质内出血

(2)颅内脑室内出血

(3)颅内硬膜外出血

(4)颅内硬膜下出血

(5)颅内蛛网膜下腔出血

单击图片按钮以打开,并从待检图片中选择一个图像;此外,请您单击文件夹按钮以打开,并从待检文件夹中选择一个图像用于批量检查。操作步骤如下:(1)在目标下拉框中单击后即可查看选定目标的结果信息。(2)单击保存按钮以执行,并将检测结果保存到 save_data 目录

检测结果:系统解析出图片中颅内出血图像的目标特征,并呈现检测信息。该信息包括目标总数、所需时间、目标类型、置信度评分以及各目标的具体位置坐标数据。

4.视频检测说明

启动视频播放器后会自动弹出一个窗口供用户选择要检测的视频文件

分析与思考:

  1. "检测结果"改为"分析结果"以提升专业性
  2. "系统对视频进行实时分析"改为"系统实时对视频进行分析"以增强描述性
  3. "检测到颅内出血图像目标并显示检测结果"改为"系统识别出颅内出血影像特征并展示相关数据"
  4. "表格显示了视频中多个检测结果的置信度和位置信息."改为"表格列出了视频中多个检测结果的置信度及发生位置信息."以优化表达清晰度

该界面能体现系统在视频帧处理过程中的多目标检测性能。被系统准确识别出颅内出血相关图像。同时提供了详细的结果分析及相应的置信度评分。

5.摄像头检测说明

启动或开启摄像头设备;启动或开启后即可开始实时检测;再次操作关闭摄像头设备

检测结果:系统接入摄像头进行实时解析,并识别出脑内出血影像并呈现相关结果。动态呈现摄像头的画面,并对发现的行为位置进行标记定位,在表格下方完整记录每一帧的具体信息如各帧的检测数据、位置坐标等。

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

单击"保存"按钮后, 将对所选中的图片(包括批量处理的多张图片)或视频进行检测结果的存储操作. 检测到的所有图像与视频数据会被系统一并存放在位于'save_data'目录下的特定位置. 生成的结果文件信息如下:

该CSV文件记录了图片数据。该数据表包含以下字段:图片路径;目标在图像中的索引号;目标分类;置信水平;目标坐标范围。注:具体来说,在表格中‘目标坐标范围’字段记录了每个检测框的起始和结束位置。这些位置由左上角(x1,y1)和右下角(x2,y2)两个点组成。

(1)图片保存

(2)视频保存

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

(1)data = \text{data\_yaml\_path}:基于数据集配置文件\text{data.yaml}运行。
(2)\text{epochs} = 150:确定训练周期为150个周期。
(3)\text{batch} = 4:每一批次处理4幅图像。
(4)\text{name} = \text{'train\_v8'}:模型训练完成后会被存储至特定路径\text{train\_v8}中。
(5)\text{optimizer} = \text{'SGD'}:采用SGD算法来进行优化。

然而,在多数深度学习任务中 GPU 通常能带来更高的效率。 当遇到特定情况时(主要因素包括硬件限制以及其他问题),用户可能会被迫选择使用 CPU 进行训练。

温馨提示:一般情况下,在CPU上训练深度学习模型的速度较GPU慢出许多。特别地,在处理如YOLOv8这类计算密集型的任务时,速度差距更加明显。如果非得要节省时间,则建议优先选择GPU来进行训练以提高效率。

温馨提示:一般情况下,在CPU上训练深度学习模型的速度较GPU慢出许多。特别地,在处理如YOLOv8这类计算密集型的任务时速度差距更加明显。如果非得要节省时间则建议优先选择GPU来进行训练以提高效率

2.训练日志结果

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

(1)在经过150轮的持续训练后, 模型总耗时为13.647小时数。
(2)本次训练采用了NVIDIA GeForce RTX 4070 Ti SUPER, 显存配置为16GB。
(3)该训练过程展现出较高的效率水平, 这归功于YOLOv8模型的优化设计以及高性能硬件的技术支持。

验证结果:
(1)mAP50(平均精度,IoU阈值为0.5):0.981
(2)mAP50-95(平均精度,IoU阈值为0.5到0.95):0.834

速度:
(1)预处理所需的时间为0.1毫秒;
(2)推理所需的时间为0.8毫秒;
(3)后处理所需的时间为0.6毫秒;
(4)整体推断速度约为每张图片约1.5毫秒,则说明该模型非常适合用于实时检测任务

结果被保存在 runs directory under detection folder中 train version 8 目录下

Process finished with exit code 0表明整个验证任务已完成且无误通过

模型性能表现优异,在准确率与召回率指标均较高情况下适用于实际部署。然而,在严格的IoU评估标准下,某些特定类别(如Subarachnoid和Intraventricular类别)的表现略显不足。建议通过增加训练数据量或优化算法策略来进一步提升性能。

全部评论 (0)

还没有任何评论哟~