基于YOLOv8深度学习的医学影像肝病检测系统研究与实现(PyQt5界面+数据集+训练代码)
本研究开发了一款基于YOLOv8深度学习算法的医学影像肝病检测系统。该系统以YOLOv8为核心算法模型,在实现快速且高效的物体检测的同时能够精准定位肝脏区域,并识别并分类可能存在的肝病变点。为了优化用户体验,本系统采用PyQt5框架设计了一个直观且简洁的用户界面。实现了对图像加载、处理及结果展示功能的支持,并提供多种功能模块包含实时目标检测、结果可视化等核心功能以及支持生成诊断报告
在数据预处理方面, 本系统通过医学图像数据集的预处理工作, 保证了模型训练过程中的数据质量。该预处理阶段包含以下内容: 图像灰度化、去噪以及增强对比度等操作, 进一步优化了图像特征提取的效果。系统整合了相应的训练代码, 用户可根据具体情况对模型进行二次开发与参数微调, 从而显著提升了系统的适应性和灵活性。该系统充分利用了大量医学影像数据库, 涵盖不同类型的肝病影像样本, 使得模型具备广泛的应用前景与适应能力
研究表明
本研究开发的医学影像肝病检测系统展现出显著的应用价值与创新特性,在结合深度学习技术和人性化的交互界面的基础上设计出了一种高效的肝病诊断方案。未来的研究工作可以通过优化模型性能来提升其适用范围,并将其应用延伸至更多医学影像分析领域。
算法流程

项目数据
通过涉及多种多样课堂行为相关的图像素材,并利用Labelimg标注工具对获取的所有图像进行标准化标记。这些图像将被划分为三个检测类别:ballooning: 细胞膨胀;fibrosis: 纤维化;inflammation: 炎症;steatosis: 脂肪肝。
该开源图像标注工具labelimg具有多项实用功能。标签不仅可以用于分类任务还可以实现目标检测功能。它基于Python开发并采用Qt作为图形界面实现简单好用的特点(虽然官方版本为英文)。其注释文件采用Pascal VOC格式存储为XML文件这种格式也是ImageNet所采用的标准。此外还支持COCO数据集格式的注释

结束后,在cmd中输入labelimg

初识labelimg

打开后,我们自己设置一下
在View中勾选Auto Save mode

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

请设置保存标注文件的文件夹路径(如上文所述Change Save Dir)。
开始执行标注流程:首先使用框选工具画出目标区域,在屏幕上对目标进行分类标记;然后切换至下一张图片继续操作。

Labelimg的快捷键

为便于后续操作,请在项目根目录下建立一个命名为data的主文件夹。在该主文件夹中,请依次设置以下三个子文件夹:名为images的用于存储待标注图片数据集;命名为labels的用于存放分类标签信息;最后在同级目录下创建命名为classes.txt的文本文件以记录各类别名称。
在数据目录结构中
首先,在images文件夹中放置待标注的一类图片。这一类图片属于手机使用中的照片。

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

(4)YOLO模式创建标签的样式
存放标签信息的文件文件名与图片名相同内容则由N行5列的数据构成每一行都对应一个目标具体包括五个字段按顺序排列分别是分类ID中心坐标的X轴与Y轴值以及标注框的宽度与高度
注意:这里的中心点坐标、宽和高都是相对数据!!!

该文件名被设置为classes.txt(固定),用于存储创建的分类标记。
完成后可进行后续的yolo训练方面的操作。
模型训练
模型的训练、评估与推理
1.YOLOv8的基本原理
YOLOv8是当前最先进的模型之一;它是基于Yolo系列历史版本构建的;并新增了一些功能与改进点;从而进一步提升了性能与灵活性;使其成为实现目标检测、图像分割以及姿态估计等多种任务的理想选择;其创新之处体现在采用了全新的主干网络架构;突破性的Ancher-Free检测模块以及创新性的损失函数设计上。

YOLOv8作为YOLO系列中的佼佼者,在各项评估指标上全面超越现有的物体检测和实例分割技术。该系统汲取了YOLOv5、YOLOv6以及YOLOX等模型的优点,并基于对YOLOv5结构的全面提升优化,在性能上实现了显著提升的同时继承了YOLOv5工程化简洁易用的特点。
Yolov8模型网络结构图如下图所示:

2.数据集准备与训练
本研究采用了包含多种肝病相关图像的数据集,并借助Labelimg标注工具完成了对每张图像中目标边界框(Bounding Box)及其分类标签的标注工作。在此基础上,主要基于YOLOv8n模型架构开展了一系列模型训练工作,在完成训练后我们对模型在验证集上的性能进行了全面评估与对比分析。具体而言,在整个实验流程中包含了以下三个关键环节:数据准备阶段、模型训练阶段以及模型评估阶段。实验中所涉及的目标分类类别主要包括细胞膨胀性状、纤维化过程、炎症状态以及脂肪肝类型等四个核心指标。根据实验数据显示,在所使用的数据集中总计包含3976张图像样本信息,在具体分布上表现为:用于训练的样本数量为2782张,在验证阶段使用了794张样本,在测试过程中则采用了400张新的样本作为代表进行分析比较

部分标注如下图所示:

图片数据的存储格式如下所示:在项目目录中创建一个 datasets 子目录,并将其分类为训练集和验证集存放在 datasets 目录下。

接下来需要创建一个data.yaml文件,并将其指定为保存训练数据路径以及明确标注的目标类别位置。YOLOv8算法在执行模型训练时会自动读取该配置文件中的相关信息,并据此指导模型完成相应的学习过程和验证环节。
data.yaml的具体内容如下:

train: E:/LiverDiseaseDetection_v8/datasets/train/images 训练数据集的位置
val: E:/LiverDiseaseDetection_v8/datasets/valid/images 验证数据集的位置
test: E:/LiverDiseaseDetection_v8/datasets/test/images 测试数据集的位置
nc: 4
names: [‘ballooning’, ‘fibrosis’, ‘inflammation’, ‘steatosis’]
此外, 该文件还指定了目标类别也将被模型进行检测
在数据完成准备之后, 为了实现模型训练的目的, 我们会调用train.py文件来进行操作. 其中, epochs参数主要负责调节整个训练过程中的迭代次数; batch参数则用于设定每批处理的数据量, 并根据内存容量进行调节(最小设置为1)
CPU/GPU训练代码如下:

导入名为yolov8n.pt的预训练YOLOv8模型,并将其模型文件名设为yolov8n.pt
3.训练结果评估
在对深度学习的研究中,
研究者通常通过分析损失函数的变化趋势来评估模型的表现。
YOLOv8网络的具体训练过程则包含定位误差(Box Loss)、分类误差(Classification Loss)以及动态特征误差(Dynamic Features Loss)三个关键组成部分。
完成后的训练日志及相关信息汇总存放在runs/目录中,

注
训练结果如下:

该图表详细描绘了YOLOv8模型在训练与验证过程中各关键指标的变化情况及其变动趋势。
(1)Box Loss的变化情况:在训练过程中不断演变。
(2)随着 epoch 的增加而逐步下降的趋势表明模型在定位物体的准确性方面逐步提升。
train/cls_loss:
(1)在训练阶段中观察到的分类损失(Classification Loss)变化趋势表明,在识别图像中的物体类别时所犯错误的数量和程度。
(2)该损失值持续减少,并且已经形成了相对稳定的下降趋势。这预示着模型在进行物体分类任务时表现出色。
train/dfl_loss:
(1)在训练过程中对分布式焦点损失(DFL Loss)的变化情况进行考察发现其主要影响了边界框预测的精度。
(2)此外在这一阶段的表现呈现逐渐下降的趋势值得注意的是这一趋势表明模型对物体边界细节的捕捉能力正在逐步提升。
metrics/precision(B):
(1)该指标量化了模型在预测正类样本时的实际准确性程度。
(2)观察发现该指标持续提升,并最终趋于稳定状态。这一趋势表明模型在降低误报现象(即减少假阳性分类)方面表现出色。
metrics/recall(B):
(1)具体而言,“召回率(Recall)”是指模型在正样本集合中正确识别出全部真实阳性样本的比例。
(2)该指标也持续提高,在最终趋于稳定水平之前不断优化模型对各类目标的识别能力(降低漏检率)。
val/box_loss:
(1)验证集上边界框回归损失的变化情况表明模型在验证集上预测边界框时的误差水平。
(2)最初阶段有所下降后略微回升的趋势可能反映了模型在验证集上的定位效果呈现周期性变化趋势。
val/cls_loss:
(1)验证集上分类损失的变化情况反映了模型在验证集上的分类任务表现。
(2)呈现出先下降后轻微上升的态势,并提示可能存在的过拟合风险。
val/dfl_loss:
(1)验证集上的分布式焦点损失变化,损失前期下降。
(2)同样先下降后略有回升,表明在边界的细化方面,验证集上的表现并非一直稳定。
metrics/mAP50(B):
(1)该指标代表了模型在物体检测任务中的整体检测效果,在阈值为0.50时计算得出。
(2)该指标在验证集上持续提升,并趋于平稳。
metrics/mAP50-95(B):
(1)不同阈值范围内的平均精度反映了模型的整体检测水平。
(2)随着数据量增加而稳步提升,并最终趋于平稳状态;然而整体数值仍然偏低。
总结:
(1)模型在训练过程中的损失及验证集损失均呈现下降趋势表明其训练效果显著。
(2)准确率与召回率均持续提升表明该模型在目标检测任务中表现出较强的效果。
(3)尽管在后期阶段出现轻微上升趋势这可能暗示着轻微的数据过拟合现象建议采取数据增强技术和正则化方法进行优化以进一步提升模型性能。

用于评估分类模型的关键性能指标,在数据分布失衡的情况下尤其重要的是PR曲线,在检测任务中具有重要的评价作用
Precision(精确率):
(1)Precision表示模型在预测为正类的所有实例中实际为正类的比例。
(2)当Precision越高时,模型将较少地将实际负类误判为正类。
召回率(Recall):
(1)表示所有真实正样本中被正确分类为正类的比例。
(2)当召回率越高时,则表明模型漏报(False Negative)的数量越少。
不同颜色的曲线:表示不同类别的PR曲线下图所示。
(1)每条曲线代表一个类别的精确率-召回率关系,在检测模型中通常存在精确率与召回率之间的权衡关系随着召回率的增加 精确率往往会下降
(2)气球样变(ballooning)对应的蓝色曲线表现出较高的精确率与召回率 其平均精度(mAP)达到了 0.805 这表明模型在该类别上的检测效果最佳
(3)橙色与绿色两条分别对应fibrosis与inflammation类别的曲线下其精确率与召回率均相对较低 分别达到 0.424 和 0.390 这表明模型对这两个类别的检测效果较为有限
(4)红色曲线代表steatosis类别的检测结果 其平均精度为 0.722 比气球样变对应的蓝色曲线略低
整体性能表现方面:(1)以粗蓝线标注的图表展示了各类别间的平均精确率与召回率的关系曲线图,在该指标下的mAP值为0.5849分(四舍五入至四位有效数字),这表明该模型整体上能在各类别间实现较好的平衡与适应性
总结
(1)通过查看图表可以发现,在"气球样变"与"脂肪变性"两个分类指标上的检测性能均高于"肝纤维化"与"肝炎症"指标。
(2)为了进一步提升模型在这些分类指标上的检测性能,建议增加相关类别的训练数据并进行数据增强操作。
4.检测结果识别
在完成模型训练后, 我们能够获取一个最优的结果, 即best.pt文件, 位于runs/train/weights目录中. 这些文件可用于后续的推理检测. imgTest.py 图片检测代码如下:

加载所需库:
(1)使用ultralytics库中的目标检测模型类,并用于执行目标检测任务。
(2)调用计算机视觉工具包cv2,并用于图像处理和显示功能。
指定模型路径及图片路径:
(1)path = ‘models/best.pt’:该变量将用于后续的目标检测任务。
(2)img_path = “TestFiles/image1.jpg”:该变量将用于指定待检测图片的完整文件路径。
加载预训练模型:
(1)model = YOLO(path, task=’detect’):通过指定路径加载YOLO模型,并将目标检测任务设为.detect。
(2)通过conf参数设定目标检测的置信度阈值,并设定非极大值抑制(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):暂停程序等待用户按下任意键以关闭结果显示窗口
此代码的作用是加载一个预训练的YOLOv8模型;用于对指定图片执行目标检测,并显示检测结果。
执行imgTest.py代码后,会将执行的结果直接标注在图片上,结果如下:

该段输出源自YOLOv8模型对图片' image.jpg '的检测结果
图像信息:
(1)该图像位于E:\LiverDisease_v8\TestFiles\imagetest.jpg文件中。
(2)该图像的大小为640×640像素。
检测结果:
(1)该系统识别出一个肝细胞出现扩张现象。
(2)计算速度达到每秒4.2千次。
处理速度:
(1)预处理时间:8.1毫秒。
(2)推理时间:4.2毫秒。
(3)后处理时间:132.8毫秒。
实验结果显示该模型在 LiverDiseaseDetection 项目中具有卓越的检测能力。该系统能够识别出特定病变特征,并迅速输出诊断结论。
效果

主要功能:
(1)具备对肝脏图像中的肝病类型进行实时识别的能力;
(2)支持使用图像、视频以及摄像头进行检测,并且能够处理单个样本的检测结果或整段视频的所有检测数据;
(3)提供实时显示目标位置坐标、总数统计以及置信度评分和所需时间的信息;
(4)能够存储单个样本的检测结果或整段视频的所有检测数据。
2.检测结果说明:

该图表利用YOLOv8算法展示了目标检测系统的检测结果界面。
本部分将详细阐述每个字段的作用及其重要性
(1)这表明模型完成检测所需时间为零点零四五秒。
(2)这体现了该模型运行的实时性的同时其检测速度也非常迅速。
目标数目(Number of objects detected):
(1)目前检测到的目标数量为1;即这是当前总共检测到了第三个目标。
此处配置了一个可调节的选择项列表框,默认状态下已预设"全部"选项值
目前所选中的行为属性为 "炎症" ,这表示系统正在对被检测出的 "炎症" 行为进行突出显示
置信度(Confidence):
(1)该系统评估检测到的目标类型属于"肝细胞膨胀"类别所得出的置信值为93.24%。
(2)该指标直接反映模型对该检测结果的信任程度,在数值上越高则表明模型信心越强。
(1)该点位于图像左上方的具体位置(xmin, ymin)为(50,123),即为该目标区域起始点。
(2)另一端位于图像右下方的具体位置(xmax, ymax)为(170,247),即为目标区域结束点。
这些坐标位置在图像中指定的目标区域范围内确定了肝细胞膨胀行为的具体位置
这张图呈现了一次肝病检测的数据样本,涉及时间戳、检测项目种类、行为特征置信度以及目标位置坐标等信息。患者可通过操作界面进行数据查看和行为分析,并以此提高肝病诊断效率。
3.图片检测说明
(1)肝细胞膨胀

(2)肝纤维化

(3)肝炎

(4)脂肪肝

单击图片按钮以打开并选择待检测的图像;此外,请单击文件夹按钮以选择包含批量待检测图像的文件夹目录。
具体操作如下:
- 在目标下拉框中设置指定的目标结果信息以显示所需内容;
- 单击保存按钮后将执行数据存储操作,并将结果设置为save_data文件夹路径。
检测结果:系统通过图像识别发现了肝脏病变,并呈现了详细的检测结果。该结果显示包括总的目标数量、耗时时间、各类别目标分类情况以及信心程度等关键指标信息
4.视频检测说明

单击视频按钮以启动并选择待检测的视频文件。系统将立即展示检测结果。再次单击即可关闭当前窗口。单击保存按钮以将当前检测到的结果进行持久化存储。存储路径位于save_data目录下。
系统对视频进行实时分析,并识别出肝病并呈现检测结果。详细信息表中记录了视频中多个检测结果的置信度及具体位置数据。
这个界面呈现了系统在视频帧处理时的多目标检测能力。该系统不仅能够准确诊断肝病患者,并能提供详细的检查结果信息以及相应的置信度评分。
5.摄像头检测说明

按下启动摄像头的按钮即可实现摄像头的开启,并在工作状态下持续进行实时监控。如果再次按下启动,则会关闭摄像头。
检测结果:摄像头实时对系统进行数据采集。通过精确的分析算法识别肝病症状,并将检测结果直观地呈现出来。系统持续监控摄像头画面,并对识别出的行为位置进行精准标记。每帧图像处理后的分析结果被详细记录在表格中。
6.保存图片与视频检测说明

点击"保存"按钮后, 会被当前选择的图片(包括批量图片)或者视频的检测结果所进行保存. 检测的结果会被存储在save_data文件夹中. 保存的结果文件如下:

(1)图片保存

(2)视频保存

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

(1)将使用data.yaml文件中的数据集进行训练。
(2)设置为150个训练周期。
(3)每个批次将包含4张图像(每批包含的样本数)。
(4)训练过程的结果将被保存至名为train_v8的目录中。
(5)选择随机梯度下降法(SGD)作为优化算法。
尽管大多数深度学习任务中GPU通常提供更快的训练速度,
有些情况下因硬件限制或其他因素导致用户不得不在CPU上进行训练
温馨提⽰:使用CPU进行深度学习模型的训练通常会比使用GPU慢得多,尤其是像YOLOv8这样的计算密集型模型.除非特殊情况要求,在GPU上的训练能够帮助提高效率.
2.训练日志结果

这张图展示了使用YOLOv8进行模型训练的详细过程和结果。
训练总时长:
(1)总共进行了 150 个周期 的训练,花费了 1.783 小时。
mAP50 和 mAP50-95:
(1)mAP@50:当 IoU 设定为 0.5 时计算得到的平均精度指标,在这一指标下整体表现达到了 0.586 的水平;其中,“脂肪变性”这一类目标项的表现尤为突出,在该指标下的得分达到了 72.3%。
(2)mAP@[49:99]:基于 IoU 范围从 49% 到 99% 的计算结果得出的整体平均精度指标,在这一较为严苛的要求下计算出的结果是 37.4%;其中,“气球样变”以及“脂肪变性”这两类目标项的表现相对较好,在 mAP@[49:99] 指标下分别获得了 62.2% 和 53.8% 的得分。
速度:
(1)0.2ms 预处理时间
(2)1.3ms 推理时间
(3)0.8ms 后处理时间
该模型在精度方面表现优异,在更严格的IoU阈值下仍存在提升潜力。通过进一步微调模型或增加训练数据量来提升性能是一个可行的方向。
