Advertisement

基于YOLOv8深度学习的智慧医疗咽炎自动检测与语音提醒系统

阅读量:

随着人工智能技术在医疗领域的快速增长,深度学习模型在疾病检测方面受到了广泛关注.本研究致力于开发一种基于YOLOv8深度学习算法的智慧医疗系统,该系统专门用于辅助咽炎自动检测并提供语音提醒功能.该系统通过高效分析患者的咽喉图像,能够准确识别"咽喉正常"与"咽喉炎症"两种状态.研究团队构建了一个包含多种咽喉病理图像的数据集,并对数据进行了预处理以确保高质量输入.在此基础上,我们设计了一种轻量化且高效的检测架构,并通过调节置信度阈值与交并比(IoU)阈值来优化模型性能.实验表明,该模型在测试集上的平均检测精度(mAP@0.5)达到了98%以上

基于PyQt5框架构建了友好的界面设计,并实现了在线数据展示功能的同时借助语音合成技术为患者输出即时反馈信息。主要功能涉及咽喉状态检测、病症预警和健康指导建议以及数据存储管理模块。该系统能够帮助医疗专业人员提升诊断速度并降低误判概率;同时也为患者提供了自我健康管理工具。本文的研究成果可作为智慧医疗发展的重要参考依据;也为其他疾病类型的自动检测与诊断系统的设计与开发积累了经验

算法流程

Tipps:全面剖析项目的算法流程,并系统地探讨实现核心技术的关键环节。项目的技术开发将从数据加载和预处理阶段入手,并一直到核心算法的设计阶段并进行相应的优化;最后通过直观的数据可视化展示结果。每个环节都将按照清晰的结构组织,并采用简明扼要的语言进行描述;最终旨在揭示其中的技术原理以及具体的实现思路。

项目数据

Tipps:为了获取不同类型的与咽喉炎相关的图片,并利用Labelimg标注工具对每一张图片进行标注,在分为两类别的基础之上分别确定‘咽喉健康状态’以及‘存在炎症状态’的分类标准。

目标检测标注工具
(1)labelimg: 这是一个免费开源的图像标注工具软件包,默认支持分类任务和目标检测功能。它是由Python编写,并以其 Qt图形界面作为主要界面。该软件包虽然是英文界面但操作起来非常简便且功能强大。它支持将注释以 PASCAL VOC 格式保存为 XML 文件文件格式这也是 ImageNet 采用的标准文件格式之一 此外该软件还支持 COCO 数据集格式文件的支持使其在不同数据集间迁移更加便捷
(2)安装 labelimg 在终端中输入以下命令即可完成安装:
$ pip install labelimg -i https://pypi.tuna.tsinghua.edu.cn/simple

结束后,在cmd中输入labelimg

初识labelimg

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

在View中勾选Auto Save mode

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

请先配置文件存储路径
随后启动标注流程
用矩形框选中目标并为其分配标签
转至下一图片继续执行上述操作
不断重复这一过程直至完成所有标注任务

Labelimg的快捷键

(3)数据准备
在此处推荐创建命名为data的数据集根目录(这通常被视为常规做法)。在其中创建images目录存放待标注的照片;接着构建labels目录以存储标注信息;最后建立classes.txt文本文件以记录需要分类的所有类别名称。

data目录下的组织架构如下:
├── image_data 存储所有待标记图像数据集
├── annotation_files 用于存储图像对应的标注信息
└── classes.txt 定义所有需分类的目标(此表单可选存于系统中;但建议在分类项目类别较多时应建立此表单以方便管理与查询各类别信息)

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

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

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

该文件用于存储与图片具有相同名称的标签信息,并包含N行5列的数据。每一条记录代表一个目标物体及其定位信息。通常包含五个数值字段:从左至右依次是目标类别标识符、中心坐标的X值、Y值以及目标框的宽度和高度。其中:类别标识符用于表示被标记的目标类型;中心坐标X和Y分别表示目标框在水平和垂直方向上的中点位置;剩余两个字段则分别表示目标框在水平方向上的宽度以及垂直方向上的高度。

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

该文件名用于存储创建的标签类别。

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

硬件环境

我们采用了两套硬件平台配置用于系统调试与训练:
(一)外星人 Alienware M16笔记本电脑:

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

该硬件环境配置提供了充足的计算能力,并能有效支撑大规模图像数据集的训练以及高效的运算过程。借助GPU技术的应用使得模型训练所需时间大幅缩减。通过在两个不同的硬件平台上运行测试与调试可以更加全面地评估系统的性能参数、适应性指标以及稳定性特征。这种方案不仅实现了系统性能参数的重大提升,在鲁棒性、泛化能力和开发成本等方面都展现出明显优势,并且显著降低了开发成本并提高了工作效率。

模型训练

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

1.YOLOv8的基本原理

YOLOv8属于SOTA级别的模型,在Yolo系列历史版本的基础上进行了优化与改进,并增添了一系列新型技术以进一步提高性能与灵活性水平。该系统能够高效地执行目标检测、图像分割以及人体姿态估计等多种任务需求。其主要创新包括引入了一种新的骨干网络架构、一种改进型Ancher-Free检测模块以及一种新型损失函数设计,在不同类型的硬件设备上均实现了良好的运行效果。

YOLOv8在Yolo系列中树立了新的标杆地位,在多个关键指标上全面超越当前的对象检测和实例分割技术。该系统成功实现了基于对改进YOLOv5架构的全面升级,并在此基础上实现了对YOLOv5工程化简洁高效特性的继承与优化保留。

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

2.数据集准备与训练

本研究采用了包含有咽喉炎症特征的数据集,并借助Labelimg标注工具完成了每张图像中标注目标边界框(Bounding Box)及所属类别的工作。在此数据集基础上,采用YOLOv8n模型进行了训练工作。随后对模型在验证集上的性能表现进行了全面评估和对比分析。整个流程包括以下步骤:首先是数据准备阶段;接着是模型训练阶段;最后是模型评估阶段。研究重点聚焦于涉及咽喉炎相关的类别指标。该数据集中共有5068张图像具体情况如下:
具体分布情况如下:

  1. 第一类别共计1234张
  2. 第二大类目包含1567张
  3. 第三大类则占用了987张
  4. 最后一小类拥有279张。

训练集:包含3547张图像,在模型的学习与优化过程中起到关键作用。
验证集:包含1014张图像,在评估模型对新数据的理解能力方面具有重要意义,并能有效避免过度拟合。
测试集:包含507张图像,在全面评估模型泛化性能方面提供了重要依据

数据集的分布直方图如下所示:该柱状图具体展示了训练集、验证集和测试集各自的样本数量分布情况。

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

部分标注如下图所示:

该种数据分布策略旨在确保在不同训练阶段的数据均衡性问题得到合理解决,并为YOLOv8n模型的构建与性能分析提供了可靠的基础。

图片数据的具体存放格式如下:首先,在项目目录中创建并新建一个名为datasets的子目录;其次,将待检测的所有图片按照训练集和验证集的比例进行分类存储;最后,并将这些分类后的图片放置于 datasets 子目录中。

接着需要建立一个data.yaml文件,并将其指定为存储训练数据路径及模型需进行检测的类别的重要文档。YOLOv8在完成模型训练的过程中会获取该文件中的相关信息,并利用这些信息来完成模型的训练与验证工作。具体来说:

  • 该 YAML 文件将详细记录下所有参与数据管理和分类检测的数据集路径
  • 指定哪些图像类别需要被重点识别并分类
  • 提供必要的配置参数来优化 YOLOv8 的性能

这个文件指定了用于训练与验证的数据集路径,并指定了模型将识别的目标类别。

在完成数据准备之后(段落数量不变),通过运行train.py文件来进行模型训练(此处可增加"来进行"使句子更加完整),其中epochs参数用于配置训练周期的数量(避免使用重复词汇),而batch参数则负责设置每个周期内处理的数据批量大小(根据内存容量设定,并且最低设置为1)。

CPU/GPU训练代码如下:

从存储中加载预训练好的YOLOv8模型文件yolov8n.pt,并将其配置数据集路径设为data_yaml_path。通过YOLO系列模型进行参数训练时,请注意以下设置:首先设定最大迭代次数为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)精确率-召回率(P-R)曲线

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

评估标准:
train/box_loss:
意义:边界框回归的损失函数值表示预测的目标边界框与真实边界框之间的差异程度。
变化趋势:随着训练进程的推进该指标持续减少表明模型的目标框定位能力得到了不断优化。

train/cls_loss:
含义:分类损失,表示预测类别和真实类别之间的差异。
趋势:损失逐步减小,说明模型在类别分类上的表现逐渐提高。

train/dfl_loss:
含义:该损失函数(Distribution Focal Loss)专门用于优化边界框的预测分布特性,在目标检测任务中具有重要的应用价值。
趋势:随着训练过程的推进,该损失函数持续减少表明模型在精确刻画边界框分布特征方面的能力不断增强。

评估指标:

val_cls_loss: 其含义为验证集的分类损失,并与训练集中cls_loss类似。趋势表明曲线呈逐步下降趋势,并且该趋势表明模型在验证集上的分类性能得到了显著提升。

val/dfl_loss:
含义:基于验证集的数据,在该方法中实现了边界框位置的精确度显著提升。
趋势:随着训练过程的进行,在测试数据集上的dfl_loss值稳步下降。

性能指标项如下:

  • metrics/precision(B):
    定义为训练过程中的准确率(accuracy),其表示将实际目标样本正确分类的比例。
    该指标的变化趋势显示,在测试集上的准确率迅速提升并趋于稳定状态,在最终阶段达到了理想水平(超过1.0)。

该指标(记为)metrics/recall(B)定义为:衡量系统在训练阶段对真实目标对象的识别能力的一种度量方法。具体而言,在此指标下计算的值代表了系统在所有真实目标对象中能够正确识别出的目标数量所占的比例。

metrics/mAP50(B):
含义:在验证集上计算得到的mAP score@50%,其定义基于IoU threshold为0.5时的平均精度指标。
趋势:随着模型训练过程的发展,该指标呈现稳步攀升至接近1.0的趋势,在分类与定位任务中展现出卓越的表现。

该指标在验证集上的表现(mAP@0.5-0.95)为:衡量多个IoU阈值下的平均精度水平。
从实验结果来看,在验证集上该指标呈现渐进提升趋势,并逐渐趋于平稳状态。
综合而言,在验证集上的性能表现稳步提升。

总结:
模型在训练与验证过程中均展现出一致的表现趋势。具体而言,在损失方面表现为稳定的下降趋势,在性能指标方面则逐渐趋近于理想水平。该模型在咽炎检测任务中不仅表现出良好的训练效果而且具备较强的泛化能力

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

曲线说明:
淡蓝色曲线:
其中一条特定颜色用于表示无咽炎区域。
该颜色对应的分类器输出结果表明:
其AUC值达到了0.986,
表明该模型在识别无咽炎类别时表现出高度准确性和可靠性,
其误诊率为较低水平,
漏诊率为极低水平,
整体上属于高度可靠的表现。

橙色曲线:
(1)对应类别:pharyngitis(咽喉炎症)。
(2)分类性能平衡值:基于AUC指标的分类性能达到0.979。
(3)性能特点:模型在咽喉炎症类别的识别上略低于预期水平,但仍展现出较强的分类效能。

深蓝色粗线标识:
(1)代表类别:所有类别的平均表现;
(2)数值表现:平均精度值为mAP@0.5 0.983;
整体来看,在所有类别上的性能都非常卓越,并由此可得该模型在咽喉检测任务中展现出出色的一般化能力

总结:
(1)不同颜色的线条分别代表了模型对no-pharyngitis和pharyngitis类别的检测效果。
(2)整体性能曲线展示了模型在多个类别上的综合表现,并证实了该模型在多类别检测任务中展现出优异的稳定性以及高度的准确性。

混淆矩阵(Confusion Matrix)是一种用于评估分类模型性能的关键分析工具。它通过展示预测结果与实际结果之间的对比情况,在每一类别上提供了清晰的视觉化反馈。

结论:总结而言,在对"咽喉健康状况"的分类任务中,该模型展现出较高的准确性以及良好的泛化性能。其中,在识别炎症特征方面能够有效提取关键指标。

4.检测结果识别

完成模型的训练后,我们能够获得一个最佳的最佳化模型best.pt文件,并且该文件位于runs/train/weights目录中。进而可以用该文件来进行后续的推理检测。

加载所需的库程序

加载模型路径和图片路径:
(1)模型加载路径设置为‘models/best.pt’:该模型被预先训练以执行目标检测任务。
(2)图像文件路径指定为‘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():通过OpenCV库将检测到的数据以图像形式呈现。
(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 个咽喉炎症 (pharygitis)。

处理速度:
(1)预处理时间: 4.3 毫秒
(2)推理时间: 8.5 毫秒
(3)后处理时间: 64.8 毫秒

总结:
模型能够正确识别咽喉炎症类别,表明其检测性能符合预期。

运行效果

– 运行 MainProgram.py

主要功能:
(1)能够实现对于目标图片中咽炎状态的实时识别;
(2)不仅能够处理图片、视频以及摄像头捕捉的画面信息,并且能够批量处理多张图片的检测工作;
(3)系统界面能实时展示待检区域位置坐标数据、待检样本总数统计结果以及各检测样本的置信度评分和所需时间数据;
(4)对于处理完成后的图像或视频数据文件能够自动完成结果存储。

2.检测结果说明:

(1)置信度阈值:目前设定为25%,这意味著系统只会输出那些置信度超过25%的目标。
(2)交並比阈值:当前设置在70%,即指两box object重疊区域占其自身面積的比例超過70%。這反映出兩个boxed object相似程度的好坏。

两个关键参数常用于目标检测系统中,在调节后能够显著影响模型在目标检测中的准确性和误报率

该图表展示了基于YOLOv8模型的目标检测系统的检测结果界面。具体来说,每个字段都有详细的含义说明。

(1)这表明模型完成检测所需的时间仅为0.094秒。
(2)该研究通过实验证明了模型在实时性方面的优势以及快速检测能力。

目标数目(Number of objects detected): (1)检测到的目标数量为一,并即当前已识别的目标总数为一。

此处提供一个可选列表,默认情况下展示所有目标类型供用户浏览。(1)此列表允许用户根据需要选择要查看的具体目标类型。(2)当当前设置为“全部”选项时,则会列出所有被检测到的目标信息。

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

目标检测类型:

当前选定的检测结果是 "扁桃体发炎" ,这表明系统正在突出显示已识别出的相关症状。

(1)这一指标表明,在被检测的目标被归类为“睡眠呼吸暂停”类别时,模型具有91.80%的置信度。
(2)置信度反映了模型对该检测结果的信心水平,在此情况下信心越大表明模型对该结果越有信心。

目标位置(Object location):
(1)该位置由(xmin, ymin)确定,在图像左上方。
(2)该区域右下方的位置由(xmax, ymax)定义。

这些坐标标记了图像中目标检测区域的范围,并确定了检测到的"咽喉炎症"的位置。

该图表呈现了咽喉炎症的一次检测记录,并详细列出了相关参数:包括采样时间、检出病原体种类、各项指标的具体数值以及目标部位的位置信息等数据。用户可通过系统提供的可视化界面观察和评估这些参数,并据此优化诊断流程以提高工作效率。

3.图片检测说明

(1)咽喉炎症

(2)咽喉正常

操作演示如下:
(1)在选择目标时,在目标下拉框中点击后即可选择指定目标的相关结果信息以显示。
(2)单击保存按钮将对检测结果进行存储,请注意存储路径位于save_data文件夹内。

检测结果:该系统能够识别图片中的咽喉炎情况,并呈现相应的检测结果。包含以下几点:总的目标数量;完成所需的时间;所识别的目标类型;检测的可信度;以及各目标的具体位置坐标。

4.视频检测说明

点击视频按钮后,在选项中选择需要检测的视频文件即可;再次操作可以选择关闭当前窗口或者继续下一步操作。使用保存按钮后,在指定位置可以看到完整的检测结果;如果需要可以选择重新加载数据进行后续分析。

检测结果:系统实时对视频进行分析,并识别出咽喉炎检查点及相应的结果置信度和位置信息。该表格列出了视频中多个检查点及其对应的结果置信度和位置信息

该界面展示了系统在视频帧中进行多目标检测的能力,并能精确识别咽喉炎情况的同时提供详细的结果数据和检测结果的可信度评估。

5.摄像头检测说明

单击启动摄像头按钮即可实现摄像头的开启,并支持持续性图像采集;操作简便且功能实用

检测结果:该系统通过摄像头实现实时数据分析功能,在分析过程中捕捉到了咽喉炎症状并将其直观地呈现出来。系统持续监控摄像头画面,并对识别出的行为位置进行标记。测试过程中,在每帧图像中都记录了相应的检查结果。

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

操作完成后会将当前选择的所有图片(包括批量图片)或视频的检测结果进行存储

(1)图片保存

(2)视频保存

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

(1)取自data_yaml_path文件中的数据集配置
(2)设定总共训练150个周期
(3)每一批次处理4幅图像
(4)模型训练完成后存储至train_v8目录下
(5)采用随机梯度下降算法(SGD)作为优化方法

尽管在大多数深度学习任务中 GPU 通常会带来更快的训练效率 然而 在某些情况下 受硬件限制或其他原因 用户可能需要在 CPU 上进行训练

温馨提示:使用CPU进行深度学习模型的训练一般会比使用GPU慢很多;特别是像YOLOv8这类计算密集型的任务。除非有特别的需求,请尽量在GPU上完成训练以提高效率。

2.训练日志结果

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

(1)经过150轮的训练后所用时间为2.502小时。
(2)本次训练基于NVIDIA GeForce RTX 3070 Ti GPU平台进行。
(3)归功于YOLOv8模型的优化设计以及高性能硬件的支持,该模型展现出较高的训练效率。

验证结果:
(1)mAP@50表现出了98.3%的水平,在目标定位与分类任务中均表现出色。
(2)mAP@50-95获得了89.5%的值,在不同IoU条件下具备良好的泛化能力但仍有提升余地。

速度:
(1)经过预处理步骤的时间为0.2\,\text{ms}
(2)模型推理过程所需的时间为1.3\,\text{ms}
(3)完成后续处理所需的时间为0.8\,\text{ms}
(4)验证该模型在推理速度方面表现出色,并且适用于实时检测场景。

Result stored in the runs\detect\train_v8 directory.

完成状态:(1)流程已成功完成:意味着整个验证过程顺利完成,并未出现错误。

模型推理速度极快,在实际应用中可以实现快速检测,在结合语音提醒功能的情况下能显著改善用户体验

全部评论 (0)

还没有任何评论哟~