Advertisement

基于YOLOv8深度学习的医学影像脑肿瘤检测与诊断系统

阅读量:

随着医学影像技术的进步,在脑部肿瘤的早期诊断和治疗中发挥着越来越重要的作用。然而,在这一领域中仍有一些传统的方法值得商榷——它们通常依赖人工干预进行检查,并且存在一定程度的人为干扰和局限。为了弥补这些不足,在本研究中我们开发了一种基于YOLOv8深度学习算法的新一代医学影像脑肿瘤检测与诊断系统;该系统采用了PyQt5图形用户界面(GUI)设计,并结合了先进的图像处理技术以提升操作效率。此外,在实际应用中我们发现——这种新型系统的显著优势在于能够快速识别复杂的病变区域并生成清晰的表情图谱;这不仅有助于提高临床判断力——还能在一定程度上减少误诊风险。

系统首先通过YOLOv8模型实现脑部影像的自动化 tumor 检测功能。基于训练集中的深度学习算法能够迅速识别并分类 tumor 位置(归类为“无 tumor”或“存在 tumor”)。其次,在 Pyqt5 界面中展示了处理后的医学影像,并标注出所有发现的 tumor 位置及其诊断信息。为了提高 model 的训练效果, 我们采用了带标注的标准医学影像数据库, 并包含不同类型的 brain tumor MRI 数据。

研究表明,在这项肿瘤检测任务中,所提出的系统表现优异。它显著提升了医生们的诊断速度,并且通过降低操作失误的可能性,在实际临床运用中展现了良好的可靠性与精确度。此外,在这一领域内首次开发出一种适用于脑肿瘤自动化的检测与早期识别工具,并为深度学习技术在医学图像分析方面提供了创新的应用模式与实践经验

算法流程

Tipps:全面解析项目中的算法流程,并逐步探讨技术实现的关键逻辑。从数据加载和预处理阶段入手,在每一阶段都会采用清晰的组织结构和简洁明了的语言进行阐述。涵盖从核心算法的设计阶段及优化过程到结果展示的过程,在每个环节中都将深入剖析其内在机理及具体实施细节。

项目数据

Tipps:为了收集多样化的脑肿瘤相关图像数据集,并借助Labelimg标注工具对每张图片进行标注操作;随后将其分为两类别进行检测分析;其分类结果主要分为'无肿瘤'和'肿瘤'两种类别。

目标检测标注工具
(1)labelimg:一款免费开源的图像标注工具,默认支持用于分类任务和目标检测任务的标签注释,该工具采用Python编写实现,并基于Qt框架构建了直观易用的可视化界面(尽管是英文界面)。其输出注释将采用PASCAL VOC格式并以XML文件形式保存,这种XML文件格式与ImageNet项目兼容。此外还支持COCO数据集格式。(2)安装labelimg 在cmd输入以下命令 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目录结构如下:

  • img_data文件夹用于存储待标记的图片数据
  • images文件夹存放图片数据
  • labels文件夹存放对应的标签信息
    classes.txt文件用于定义需要标注的所有类别(此文件可有可无,在类别数量较多时建议创建该文件以清晰记录各类别)

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

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

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

存放标签信息的文件文件名与图片名相同内容由N行5列的数据构成每个条目代表一个目标具体包括以下五个字段类别IDx中心坐标y中心坐标宽度和高度其中类别ID用于标识目标类型x中心和y中心表示标注框在图像中的位置中心点宽度和高度则分别表示标注框在图像中的大小比例

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

恒定不变地存储分类标记的文件名为classes.txt(固定设置),用于保存生成的分类标记。

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

硬件环境

我们使用的是两种硬件平台配置进行系统调试和训练:
(1)外星人 Alienware M16笔记本电脑:

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

上面的硬件环境具备了充足的计算能力,并能有效支持大规模图像数据的训练以及高效的运算需求。引入GPU后将显著缩短模型的训练周期。

模型训练

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

1.YOLOv8的基本原理

YOLOv8被视为当前目标检测领域的最佳模型之一,并基于Yolo系列的所有先前版本进行了持续优化与改进。该系统特别适合用于目标检测、图像分割以及人体姿态估计等多种应用场景,并通过引入新的功能模块与优化设计来提升效率与适应性。它的主要创新包括:(1)引入了一种全新的主干网络结构;(2)采用了无锚框(Ancher-Free)检测头部设计;(3)开发了一种新型的目标损失函数。这些改进使YOLOv8能够在不同类型的硬件平台上稳定运行并提供优异性能表现

YOLOv8属于Yolo系列模型的最新版本的领军者,在多个关键指标上实现了显著超越。该技术继承了前代如Yolov5等模型的优势,并在此基础上进行了创新性设计。通过提升现有基础结构的同时实现了改进目标,并成功继承了工程化简洁高效的特性。

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

2.数据集准备与训练

本研究采用了包含脑肿瘤图像目标的专用数据集,并利用 Labelimg 标注工具对每张图像中的目标边界框(Bounding Box)及其类别进行了精确标注。在此基础上,研究人员选择 YOLOv8n 模型进行训练。完成模型训练后,在验证集中对其表现进行了全面的性能评估和对比分析。具体流程包括三个主要阶段:数据准备、模型训练以及模型评估。该数据集共计包含 3841 张图像,并详细分布如下:

训练集:作为基础数据被用来训练并优化模型。验证集:768张图像被用来评估模型对新数据的适应能力,并避免其过度拟合。测试集:385张图像主要用来测试模型的应用能力。

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

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

部分标注如下图所示:

这种数据分布方式确保了数据在模型训练、验证和测试阶段的均衡性,并为YOLOv8n模型的开发与性能评估奠定了坚实基础

在项目目录中创建datasets目录,并将检测到的图片按照训练集与验证集分为两部分归类于该目录下。

随后应创建一个data.yaml文件,并将其用于存储训练数据的具体路径信息以及明确指定模型所需进行检测的所有类别信息。YOLOv8系统在执行模型训练过程时能够读取该配置文件中的详细参数设置,并据此指导模型完成相应的训练与验证工作。

此份文件指定了用于模型训练与验证的数据集路径以及被用来识别的目标类别

在数据准备完成之后,在调用train.py文件的过程中执行模型训练任务。其中epochs参数则决定了训练循环的数量;而batch参数则负责设置每次批量处理的数据量,并且这个值会根据内存容量来决定,默认情况下设为1。

CPU/GPU训练代码如下:

导入名为yolov8n.pt的预训练YOLOv8模型,并确保该文件属于预先训练好的模型资源库

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

在训练深度学习模型的过程中,我们通常通过分析损失函数的变化趋势来评估模型的学习效果。YOLOv8模型的训练涵盖的主要方面包括定位损失(box_loss)、分类损失(cls_loss)以及动态特征损失(dfl_loss)。这些不同类型的优化任务对提升目标检测系统的性能具有核心作用。

损失函数作用说明:
(1)定位损失 (box_loss):反映预测边界与真实边界之间的差异程度(GIoU),其值越低,则定位精度越高。
(2)分类损失 (cls_loss):用于评估锚框所对应的目标类别是否正确识别,请注意其值越小则分类效果越好。
(3)动态特征损失 (dfl_loss):DFLLoss则用于估计预测边界与其对应的目标边界之间的差距大小,并通过结合相应特征图的尺度信息来优化目标检测的几何精度。

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

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

(1)损失图形
(2)性能评估图表
(3)混淆矩阵
(4)PR曲线下文

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

训练指标:
training box_loss:
描述该指标表示训练过程中边界框回归损失(Box Loss)的变化趋势。
趋势该曲线呈逐步下降趋势, 说明模型在定位目标的边界框上逐渐变得更准确。

对于train/cls_loss而言:
详细说明了训练过程中类别分类损失(Classification Loss)的变化情况。
随着训练的进行,分类损失持续下降,并且模型在识别不同类别(如‘无肿瘤’和‘有肿瘤’)方面的性能得到了显著提升。

train/dfl_loss:
描述:体现分布焦点损失(Distribution Focal Loss)的变化情况。
变化情况:该损失值持续减少表明模型对定位框的定位精度表现出持续提升。

验证指标:
val/box_loss:
描述:具体而言,在验证集上Box Loss的变化趋势反映了模型在目标定位任务中的表现情况。
趋势:随着训练过程的推进,在验证集上的Box Loss逐渐呈现下降态势,这表明模型在目标检测任务中的定位能力得到了逐步提升。

val/cls_loss:
描述: 该指标代表了验证集上类别分类损失(Classification Loss)的变化趋势。
趋势:随着训练过程的进行,在Validation\_Loss方面观察到持续下降的趋势,并且随着模型参数的优化更新,在Validation\_Set上表现出分类性能的显著提升。

val/dfl_loss:
描述: 反映验证集上分布焦点损失(DFL Loss)的变化情况。
趋势:验证损失减少,表明模型在验证集上的边界框定位精度持续提升。

性能指标:
metrics/precision(B):
描述:表示模型在训练集上精度(Precision)的变化趋势。
趋势:精确度提升明显,表明模型预测效果更加稳定。

metrics/recall(B):
描述: 该指标衡量了模型在训练集上对真实正样本的识别能力(Recall)。
趋势: 该指标持续上升表明模型在正确识别真实正样本方面的能力不断增强, 错误识别为负的现象不断减少.

metrics/mAP50(B):
描述: 该指标(mAP@50)代表验证集上IoU≥50%时的平均检测精度。
趋势: 曲线呈上升趋势,并趋近于1,这表明模型在验证集上的检测性能不断提升。

metrics/mAP50-95(B):
描述: 表示验证集上当IoU阈值介于50%至95%时的平均检测精度(mAP@50-95)。
趋势: 曲线持续攀升, 反映出该模型在面对更高IoU阈值时的检测性能持续提升

模型训练与验证过程均取得良好效果,在逐步趋近于稳定状态的过程中展现出较强的学习概括能力。

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

浅蓝色曲线被标注为 No Tumor 类别:
(1)该曲线代表无肿瘤类别的Precision-Recall曲线。
(2)该模型在无肿瘤类别上的平均精度达到98.1%

橙色图形(归类为 Tumor category: 0.978):
(1)代表 Tumor 类别的 Precision-Recall 曲线。
(2)mAP@50 = 0.978 表明模型在肿瘤类型上的检测效果显著但略低于无肿瘤类型的表现。

该指标(标记为 all classes 的深蓝色粗线): (1)代表所有类别间的综合表现;(2)mAP@50 = 0.979 表明该模型在50个检测阈值上的整体性能良好。

该模型的整体 mAP@50 达 0.979,表明其在脑肿瘤分类与检测方面表现出色。

通过混淆矩阵进行分析
混淆矩阵是一种评估分类模型性能的关键指标
它展示了模型在每个类别上的预测结果与实际结果之间的对比

结论:
基于混淆矩阵分析的结果表明,在所有测试案例中该模型表现出色,在肿瘤类别检测方面准确率与召回率指标都较为理想;然而,在干净样本与背景噪声的区分上仍存在一定局限性。具体而言,在优化数据集质量、改进模型损失函数以及调节模型超参数等方面取得了显著进展。

4.检测结果识别

完成模型训练后,我们可获取到一个最优的训练成果模型best.pt文件,并存于runs/train/weights目录中.该文件可用于后续步骤中的推理检测.imgTest.py 图片检测代码如下:

加载所需的库程序:
(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)的阈值。

对于指定的图片进行目标检测操作后得到的结果为 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)处理的图像路径为:TestFiles/imagetest.jpg。
(2)图像尺寸为640×640像素。

检测结果:
(1)模型在图片中检测到:1 个肿瘤 (Tumor)。

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

该系统基于YOLOv8模型,在医学影像脑肿瘤检测方面已获得较高水平的能力,并可用于将其应用于实际临床诊断场景。

运行效果

– 运行 MainProgram.py

主要功能:
(1)该系统能够实现对目标图片中脑肿瘤图像的实时检测;
(2)不仅支持通过摄像头进行实时监控与分析,并且能够实现批量处理图片数据;
(3)该界面不仅实时显示目标定位位置、目标数量统计以及检测置信度等关键数据,并能记录所用时间;
(4)并且能够将检测结果存储至本地存储空间中。

2.检测结果说明:

置信度门槛:目前设定为0.25意味着该系统只会输出信心程度超过25%的目标,并且信心越高的目标代表模型对预测结果越有信心。
重合率门槛:已设置为0.70表明系统只认可重合率(IoU)达到70%及以上的检测边界框作为有效结果。重合率即为检测边界框与真实边界框重叠区域的比例指标,在衡量两个边界框相似程度方面发挥重要作用;数值越大则表明两边界框之间存在更高的相似性。

两个关键参数在目标检测系统中常被用来调节模型的检测准确率与误报率

该图表呈现了基于YOLOv8模型的目标检测系统及其检测结果界面。其中各字段的具体含义如下:

(1)这表示模型完成检测所用的时间为Time taken Time taken Time taken Time taken Time taken Time taken Time taken Time taken Time taken
(2)这显示了模型的实时性, 检测速度非常快。

(1)该时间即为模型进行检测所需耗时Time taken = 0.050s。
(2)该数据体现了模型运行效率高及检测极快速度。

Object count: (1)The number of detected objects is 1, indicating it is the first object currently being detected.

该下拉菜单允许用户设定所需的目标类型。

结果(Result):“肿瘤”,表示系统正在高亮显示检测到的“Tumor”。

置信度(Confidence):
(1)该模型将目标归类为"肿瘤"的概率达82.35%。
(2)反映的是模型对该检测结果的信任程度;信心越强,则表明该结果越可靠。

目标位置(Object location):
(1)坐标原点:365, 326:目标区域的起始坐标(xmin, ymin)。
(2)边界点:461, 518:目标区域的终止坐标(xmax, ymax)。

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

这张图呈现了一次脑肿瘤图像检测的结果展示,其中包括了执行时间、检出的病变类型、各行为的概率值以及病变位置信息等内容。通过图形界面的操作者可查看并分析检验报告以提高脑肿瘤图像目标自动识别的技术水平

3.图片检测说明

(1)无肿瘤

(2)肿瘤

单击图片按钮以打开相关功能,并选择待检测的图片;或者单击文件夹按钮以选择包含批量检测任务文件夹的文件夹。
操作指南如下:

  1. 单击目标下拉框以显示可选目标列表,并选择所需结果信息进行显示。
  2. 单击保存按钮以执行保存操作;系统会将检测结果存储至save_data文件夹中。

检测结果:系统识别出图片中的脑肿瘤图像目标情况,并呈现检测信息,包含总数信息、耗时数据、目标类型划分以及位置坐标数据。

4.视频检测说明

单击视频控制按钮后,在线启动选择待检测的视频播放器,并系统会即时呈现检测报告;再次单击可切换回主界面以继续操作。单击存储按钮后将当前检测数据进行持久化存储,并具体存储位置设置于save_data文件夹内。

该系统能够实现对视频流的实时分析功能,在运行过程中识别出脑肿瘤图像目标并呈现检测结果。统计表则列示了视频中多个检测结果的相关置信度及发生位置

这个界面呈现了系统在视频帧中的多目标检测性能,并具有精确识别脑肿瘤图像的能力

5.摄像头检测说明

按下摄像头按钮以启动摄像头设备,并提供实时监控功能;通过该按钮操作即可完成开关键作用;再次按下该按钮则可关闭摄像头设备。

检测结果:系统接入摄像头以实现实时分析,并识别出脑肿瘤图像以呈现检测结果。同时展示摄像头画面,并将行为位置标注在图像上。详细记录了每帧中的检测信息。

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

点击保存按钮时, 被告知当前选择的图片(包括批量图片)以及视频的检测结果。
检测到的结果会被存储在save_data目录中。
保存的结果文件如下:

该CSV文件存储了关于图片文件的信息如下:包括以下内容:图片路径等数据项;每个数据项的具体描述如下:图片路径是指存储在本地设备上的原始图像文件路径;目标编号是指识别出的目标对象在其所在图像中的唯一标识符;目标类别是指通过分类算法识别出的目标对象所属的具体类型;置信度是指模型预测结果对目标类别的可信程度;目标坐标位置用于表示检测框的位置信息(以x,y表示)。注释:其中坐标位置用于表示检测框的位置信息(以x,y表示)。

(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轮的训练后,总共所用时间为1.869小时。
(2)本次训练基于NVIDIA GeForce RTX 3070 Ti显卡。
(3)该训练方案展现出较高的效率,并且YOLOv8模型的优化设计与高性能硬件为这一方案提供了有力支持。

验证结果:
(1)mAP@50:达到97.8%。
(2)mAP@50-95:达到75.5%,表明在不同IoU阈值下模型的检测性能较好。

速度:
(1)预处理所需时间为0.2毫秒
(2)推理所需时间为1.5毫秒
(3)后处理所需时间为0.7毫秒
(4)整体推断速度为每张图片约2.4毫秒,并充分支持其在实时检测方面的高效应用

结果已保存:(1)验证结果位于 runs\detect\train_v8 目录内。

完成情况:(1)该程序验证过程顺利完成且无错误发生:整个验证过程顺利完成且无错误发生。

通过YOLOv8模型的训练结果观察可以看出,在脑肿瘤检测任务中该模型表现出色,并且在无肿瘤情况下的检测精度和召回率均达到了较高水平。

全部评论 (0)

还没有任何评论哟~