Advertisement

基于YOLOv8深度学习的医学影像肺炎自动检测与语音提醒系统

阅读量:

肺炎作为一种常见且严重的呼吸系统疾病,在临床诊疗中实现早期发现与干预能够显著改善患者的预后结果。传统的人工医学影像分析主要依赖经验丰富的专业放射科医生的专业判断,并容易受到主观认知差异的影响且耗时较长。为此,本研究旨在通过提升检测效率与准确性这一目标为临床提供支持,在此基础上我们设计了一种基于YOLOv8深度学习算法的智能化肺炎自动检测系统,并结合PyQt5框架构建了用户友好的图形界面系统,同时实现了智能语音提醒功能以辅助临床工作者开展日常诊疗工作

基于胸部X光图像数据集构建了该系统,并将其分为两类:一种是“正常肺部表现”(NORMAL),另一种是“有炎症肺部表现”(PNEUMONIA)。通过迁移学习优化YOLOv8模型后发现,在医学影像分析方面表现出显著的高效性。研究者首先进行了数据预处理,并将所有样本划分为训练集与验证集两部分;随后对模型架构进行优化并完成模型训练;最后对模型性能进行了全面评估。实验结果表明,在检测准确率、召回率以及推理速度等多个关键指标上,所构建的系统均展现了卓越的表现。

集成语音播报模块,并能实时向用户提供检测结果信息以提高临床操作的便捷性。在界面设计中允许用户加载胸X光图像并实时显示分析结果涵盖分类结果、检测信心度及视觉标记。实验结果显示该系统能实现对肺炎的快速自动检测,并展示了较高的准确性。

算法流程

全面解析项目的算法运行机制,并系统性地探讨实现环节的关键步骤。项目初期的数据获取及预处理阶段作为基础工作开展得较为完善,在随后的核心算法设计阶段及其优化过程均取得显著进展。最终通过可视化手段展示分析结果的同时,并非仅仅停留在表面观察层面而是深入剖析其工作原理及具体实现路径

项目数据

Tipps:为了收集各种肺炎相关图像的数据集,并借助Labelimg标注工具对每张图片进行标注;采用二分类检测技术将所有图片分为两类:一类是肺部正常影像,另一类是肺部炎症影像。

目标检测标注工具
(1)labelImg: 一款开源的图像标注工具软件, 其标签不仅适用于分类任务, 还特别适合目标检测. 安装该软件后, 操作者可以通过简单的图形界面进行标注操作. 软件采用Python编写, 并基于Qt框架构建图形界面, 使用起来非常直观方便. 虽然软件是英文界面, 但其注释文件采用PASCAL VOC格式存储为XML文件, 这种格式与ImageNet所采用的形式一致. 此外, labelImg还支持COCO数据集格式.
(2)在CMD窗口中执行以下命令即可完成labelImg的安装:
$pip install labelimg -i https://pypi.t tuna.tsinghua.edu.cn/simple

结束后,在cmd中输入labelimg

初识labelimg

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

在View中勾选Auto Save mode

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

请根据上图中的指示进行以下操作:

  1. 设置好标注文件存储路径
  2. 开始进行图像注解工作
  3. 使用矩形框选择目标区域
  4. 对选定的目标添加相应的标签
  5. 按住快捷键"d"切换至下一幅图片
  6. 重复上述步骤直到所有图片完成注解

Labelimg的快捷键

(3)数据准备 为便于操作管理,请您按照以下步骤进行:首先,在项目根目录下新建data文件夹(这一做法具有灵活性与可扩展性),然后在其中依次建立images子目录用于存储待标注图片、labels子目录用于存放对应的标签信息,并最终创建classes.txt文本文件以记录需要进行标注的所有分类名称。

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

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

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

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

存储标签信息的文件名称与图片相同。该文件包含N行5列的数据。每一行为一个待注标的对象,在这一行中包含了五个数据项:从左至右依次是类别的ID(类别的标识)、x中心坐标(水平居中位置)、y中心坐标(垂直居中位置)、宽度以及高度。其中:
– 类别ID用于标识待注标的类型;
– x中心坐标用于确定注标框在水平方向上的居中位置;
– y中心坐标用于确定注标框在垂直方向上的居中位置;
– 宽度则表示注标框在水平方向上的跨度;
– 高度则表示注标框在垂直方向上的大小。

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

该文件用于存储标签类别的集合

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

硬件环境

我们采用了两组不同的硬件平台配置进行系统调试与训练:
(1)外星 craft Alienware M16笔记本电脑:
(2)黑寡妇系列 Sony PS4 Pro主机:

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

上面的硬件环境配备了丰富的计算资源,并具备支持大规模图像数据训练和高效计算的能力。引入GPU后明显缩短了模型训练所需时间。

通过两个不同的硬件平台进行调试与训练操作,能够实现对系统性能、适应性和稳定性的全方位验证。该方法不仅大幅提升了系统的鲁棒性与泛化能力,并且在优化开发成本与效率方面表现突出,在实际应用部署方面具有良好的基础保障。

模型训练

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

1.YOLOv8的基本原理

YOLOv8属于SOTA级别的模型,并基于Yolo系列的历史版本进行了优化与增强。通过这些改进提升了性能与灵活性, 旨在成为目标检测、图像分割以及人体姿态估计等多种任务的理想方案。具体创新之处在于新增了一种主干网络结构, 引入了无锚框检测头部结构, 并设计了一个适用于多种任务场景的新损失函数框架。

作为Yolo系列中的最强版本,在各项指标上均超过现有对象检测与实例分割模型,并通过汲取其他相关模型的优点,在原有基础上进行全面优化。

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

2.数据集准备与训练

本研究采用了包含引流袋状态的图像数据集作为基础,并通过Labelimg标注工具完成了对每张图像中目标边界框及其类别的标注工作。在此基础上,利用YOLOv8n模型完成了训练过程,并经过系统性的测试与对比分析后得到了最终结果反馈。整个训练与评估流程涵盖以下步骤:首先进行数据准备阶段;接着开展模型训练阶段;最后实施模型评估阶段以获取准确结果反馈信息。本次实验的主要关注点集中在引流袋状态这一类别上进行分类识别任务的研究与实现。所收集的数据总量共计8632张图片,在具体分布情况如下:引流袋处于打开状态的数据占比约为45%,关闭状态占约32%,部分变形状态占约15%,其他异常状态占约9%

训练样本库:共包含7103张图像数据样本信息, 旨在通过系统学习来提升模型性能。
验证样本集:共计1020张图片, 该组数据用于检验模型对新数据的泛化能力, 同时有助于防止过拟合问题的发生。
测试样本库:包含509张图片, 该组数据主要用于全面检验模型在未知数据上的性能水平。

该数据集中各类样本的分布情况分析通过直方图表示

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

部分标注如下图所示:

这种数据分布方式确保了数据在模型训练、验证和测试阶段的均衡性,并为其开发及性能评估提供了坚实的保障

图片数据的具体存储格式为:在项目根目录中创建一个datasets目录,并将所有检测到的图像按照类型区分成训练集和验证集,并将其组织并存放在datasets目录内。

为了便于后续操作管理,
主要涉及存储训练数据路径和模型待检测类别。
YOLOv5s算法在执行模型训练过程中,
能够读取该文档中的相关信息内容。
其作用在于辅助完成模型参数优化以及性能评估。

说明

该文件确定了用于模型训练和验证的数据集路径,并特别指出模型将要检测的目标类别。

数据准备好后,在模型训练时可调用train.py文件进行操作。其中,epochs参数可用来调节模型的训练周期数;而batch参数则用于控制每次批量处理的数据量(通常受内存限制,最低设置为1)。

CPU/GPU训练代码如下:

导入预训练的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)损失函数曲线图
(2)评估指标曲线图(mAP、精确度、召回率)
(3)混淆矩阵表
(4)Precision-Recall (PR) 曲线

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

训练指标体系:
train box loss:
含义:衡量预测目标边界框与真实边界框之间差异的关键指标。
趋势:持续降低,预示着模型在学习过程中对目标边界的定位误差不断缩小。

train/cls_loss:
作用:衡量预测结果与实际标签之间的差距。
趋势:迅速降低并稳定下来。这表明模型的分类能力不断提升,并且错误率逐步减少。

train/dfl_loss:
含义:集合聚合损失(Set Distribution Focal Loss),用于优化边界框预测的概率分布特性。
趋势:持续下降并趋于稳定状态,表明模型在边界框质量预测方面的性能持续提升。

验证指标:
val/box_loss:
含义:在验证集上的边界框回归损失,在验证集中与训练集的 box_loss 类似,在评估模型在未见数据上的表现而被设计用于评估模型在测试数据上的表现能力。
趋势:持续下降,在验证集中随着模型训练过程的推进其预测边界框的质量也在不断提高。

val/cls_loss:含义:验证集上的分类损失相当于训练集的 cls_loss。趋势:急剧下降且趋于平稳表明模型在验证集上的分类错误率逐步减少。

val/dfl_loss:
该变量表示在验证集上衡量模型边界框质量的一个指标。
其趋势显示该指标呈下降趋势,并表明模型在边界框预测方面不断改进。

性能指标:
metrics/precision(B)
具体来说,在训练过程中精确率反映了预测结果为目标类样本中实际为该目标类的比例。该指标的趋势显示其值呈稳步增长趋势并最终稳定于接近1.0的水平(即约99%),这表明模型在识别正类方面的判别能力持续增强并达到较高的稳定水平。

metrics/recall(B):
意义:在训练阶段的召回率代表了所有真实目标中被正确识别的数量与总数量的比例。
趋势:该指标持续提升直至趋于平稳(接近1.0),表明模型能够更准确地捕捉正类实例。

metrics/mAP50(B):
具体含义:验证集上的mAP@0.5值,在IoU阈值为0.5时衡量目标检测任务的平均精度表现。
变化趋势:该指标从初始阶段缓慢提升至峰值水平后趋于稳定,在测试过程中始终保持在99.5%以上。

metrics/mAP50-95(B):
含义:在验证集上计算得到mAP@0.5-0.95的平均精度指标(Average Precision),该指标通过多个不同的交并比(IoU)阈值进行评估以体现模型对目标检测任务的整体表现。
趋势:该指标从初始阶段的较低水平持续提升并趋于稳定在较高的数值(约为0.914),这表明即使采用更高IoU阈值的标准时,模型依然展现出良好的检测性能。

总结:
(1)损失指标:无论是训练集还是验证集,在线框损失(box_loss)、分类损失(cls_loss)以及方向预测损失(dfl_loss)均稳步降低并最终趋于平稳状态,这表明模型在整个训练过程中的收敛效果较为理想。
(2)性能指标:在精确率(Precision)、召回率(Recall)以及mAP50和mAP50-95等关键性能指标方面均持续提升并稳定在较高水平以上,充分体现了模型在训练阶段表现出的良好的一致性与稳定性特征。
(3)验证结果可靠性:通过对验证集的表现进行考察发现,在关键损失及性能指标上其趋势特征与训练集表现高度一致,并未出现过拟合现象。

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

曲线图示:
淡蓝色线条: NORMAL:
(1) 该标记体现精准度较高的P-R(NORMAL)曲线上。
(2) 该P-R(NORMAL)曲线上标出数值: 其精确率达到0.994, 该值表明在预测结果为NORMAL时, 模型具有极高的准确性。
(3) 曲线显示其表现出极高的性能水平, 证明模型在处理NORMAL类别时具有卓越的分类效果

橙色线条 – PNEUMONIA:
(1)反映肺炎(PNEUMONIA)的精确率-召回率曲线。
(2)精确度值为0.995,在判定为PNEUMONIA时模型误判率极低。
(3)该曲线接近最佳位置左上角坐标点,表明对肺炎病例具有高度识别能力。

深蓝色粗线条 – every category:
(2)mAP@0.5 = 0.995 represents the comprehensive performance evaluation index for the entire category set, indicating the model's average precision and recall across different threshold levels.

总结:通过不同颜色区分得清晰展示了各分类的表现,并借助精确率与召回率的均衡体现模型的高度可靠性和稳定性。以深蓝色线条整体趋势显示,在两类主要任务中均展现了接近完美的性能水平。

混淆矩阵 (Confusion Matrix) 评估 混淆矩阵作为评估分类模型性能的重要工具,在展示模型对各类别预测结果与实际值的对比情况方面具有显著作用。

结论:
该模型在肺炎检测任务中的表现非常出色,在准确区分正常与肺炎样本方面具有显著优势,并且其误分类样本数量相对较少。下一步可以通过综合考虑召回率与精确率等指标来进一步量化评估模型性能,并深入分析极少数异常情况的原因(例如数据分布或特征重叠)。

4.检测结果识别

模型训练完成后, 我们能够获取一份最优的训练结果模型best.pt文件, 位于runs/train/weights目录中。我们有此文件可用以执行后续阶段的推理检测。
imgTest.py 图片检测代码如下:

加载所需的库程序:
(1)从ultralytics导入YOLO类,该类主要用于目标检测。
(2)导入OpenCV库, 该库常用于图像的处理与显示。

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

加载预训练模型:
(1)model = YOLO(path, task=’detect’):通过指定路径加载YOLO模型,并通过单引号替代双引号后将任务设定为'detect'的目标检测任务。
(2)通过conf参数设定目标检测的置信度阈值;并通过iou参数设定非极大值抑制(NMS)中的IoU阈值。

图像检测:
(1)results = model(img\_path):基于输入图像进行目标识别;其中包含模型识别的所有信息

展示检测结果:
(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)检测到 1 个 PNEUMONIA(检测出图像中含有肺炎特征)。

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

总结:
模型识别出肺炎特征,并在完成预处理、推理和后处理的过程中实现了高效的速度。该系统展示了快速响应能力,在实际应用场景中具有良好的适用性。

运行效果

– 运行 MainProgram.py

主要功能:
(1)适用于实时分析目标图像中的肺炎情况;
(2)能够处理图片、视频以及摄像头捕捉的画面,并支持批量分析图片数据;
(3)系统界面实时呈现目标定位坐标、检测数量、置信水平及所需时间等关键数据;
(4)能够将检测结果存储为图像或视频文件格式。

2.检测结果说明:

(1)置信度门限:目前设定为0.25,在这种情况下系统只会在目标的置信度超过25%时才进行输出处理。模型对各个检测结果的信任越大则信心就越强。
(2)交并比门槛:系统目前设定为0.7,在这种情况下只有那些达到70%以上IoU的候选矩形才会被视为有效的预测结果。IoU指标反映了两个矩形之间重叠区域所占的比例大小。

这两个参数常用于目标检测系统中,在调节后会对模型的检测精度及误检率产生影响

这张图表展示了基于YOLOv8模型的目标检测系统的检测结果信息图。具体说明了各个字段的具体含义。

(1)这表明模型完成检测所需时间为0.147秒。
(2)这一结果体现了模型具有良好的实时性能,并且检测速度极快。

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

目标选择(下拉菜单):全部:
(1)此处提供一个下拉菜单选项。
(2)在此时情境中,默认状态下会显示所有目标信息。
(3)用户可以选择查看的目标类型。
(4)此技术方案默认情况下会显示所有目标信息。
(5)此处提供一个下拉菜单选项。
(6)此技术方案默认情况下会显示所有目标信息.
(7)此技术方案默认情况下会显示所有目标信息.

语音提醒(Voice Reminder):
(1)异常语音提醒:(警告:肺部有炎症,请及时就医!)

目标检测类型:

所选中显示的结果为 "肺炎"

(1)这表明该模型将检测到的目标归类于“睡眠呼吸暂停”类别,并具有90.53%的置信度。
(2)置信度反映了模型信心的程度,在此情境下表明该模型对于这一检测结果的信心程度。

(1)该目标的起始点坐标为xmin:75,\:ymin:108;具体表明了其在图像中的位置。\n\n(2)该目标的目标终点坐标为xmax\:567,:ymax\:585;具体说明了其在图像中的边界。\n

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

这张图表记录了肺炎的一次诊断结果信息包罗万象地显示了检测时间样本类型各步骤的成功率以及目标定位数据用户可在图形界面进行查看与分析从而显著提高肺炎诊断效率

3.图片检测说明

(1)肺部炎症

(2)肺部正常

请看操作指南:首先,在界面中选择目标下拉框时,请注意以下步骤——您可以根据需求选择特定结果信息,并将其显示出来。其次,在完成检测后,请您单击保存按钮以将结果存储到指定位置。具体来说,请确保将检测结果存储到 save_data 文件夹中。

检测结果:系统识别出图片中的肺炎情况,并呈现检测信息;该信息包含总目标数、用时、目标类型、置信度以及目标的位置坐标信息。

4.视频检测说明

单击播放器中的"视频"按钮以开始操作

分析结果显示:系统实时对视频内容进行了详细检查。在这一过程中,系统发现了肺炎相关特征。详细的数据表列出了每个检查点的位置、置信度以及相关特征信息。

这个界面呈现了系统在视频帧中进行多目标检测的能力,并且能够精准地识别出肺炎;同时提供详细的检测结果以及相应的置信度评分。

5.摄像头检测说明

按下启动摄像头按钮即可启动摄像头运行,并具备实时监控能力;再次按下该按钮即可关闭摄像头。

系统连接摄像头进行实时监控分析,在发现肺炎时会即时呈现检测结果。实时呈现摄像头的画面,并在图像中标注出被识别出的行为位置,在表格下方记录了每帧的详细检测信息。

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

保存

(1)图片保存

(2)视频保存

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

(1)该数据源由data_yaml_path指定:该数据集由预定义的数据配置文件data_yaml_path提供。
(2)训练将经过150个完整的训练周期:此处设定训练迭代次数为150次完整周期。
(3)每个批次包含4张图像(batch size):每批输入样本的数量设定为4张图片(batch size)。
(4)训练后的模型参数将被保存至名为train_v8的目标文件夹中:模型训练结束后,默认参数会被保存到名为train_v8的目标文件夹中进行存储。
(5)本模型采用随机梯度下降法(SGD)作为优化算法:在当前模型架构中,默认选择使用随机梯度下降法(SGD)来进行参数更新与优化计算。

对于大多数深度学习任务而言,在GPU上运行通常能带来较快的训练速度。然而,在某些情况下(如受限于硬件限制或存在其他制约因素),用户则需在CPU上执行训练过程。

在CPU上训练深度学习模型通常会比在GPU上运行得较慢得多,在处理像YOLOv8这样的计算密集型任务时尤为明显。除非有特别需求,在大多数情况下建议选择GPU来进行训练以提高效率。

2.训练日志结果

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

(1)经过150轮的持续训练后,在线所用时间总计为4.341小时。
(2)本训练过程主要采用了NVIDIA GeForce RTX 3070 Ti GPU作为计算平台。
(3)该过程展现出卓越的效率水平,并归功于YOLOv8模型经过优化的设计方案以及高性能硬件的强大支持。

验证结果:
(1)模型在50% IOU阈值下的检测效果表现出色;
(2)在更高程度的检测精度要求下仍能保持较高的表现

速度:
(1)预处理所需的时间仅为0.2毫秒;
(2)模型的推理速度达1.3毫秒;
(3)后处理所需时间为0.8毫秒;
(4)经测试显示该模型推理效率卓越,完全适合实时检测应用。

结果已保存:
(1)Result has been saved to runs\detect\train_v8:
验证结果保留在 runs\detect\train_v8 目录中。

完成状态信息如下所示:
(1)进程以退出码0顺利完成运行;
表明整个验证过程已完成并成功通过。

总结:
该系统基于YOLOv8架构实现了高效的训练过程。针对肺炎检测任务,在该系统中实现了以下性能指标:高识别精度(超过99%)、高检出灵敏度(超过90%)以及迅速的推理速度(每图像平均27毫秒)。该系统表现出色的同时也具有广泛的应用前景。

全部评论 (0)

还没有任何评论哟~