基于YOLOv10深度学习的医学影像CT图像肾结石检测系统研究与实现(PyQt5界面+数据集+训练代码)
本研究开发了一款基于深度学习技术的创新性肾结石检测系统。面对医疗影像数据快速增长的趋势,在有效与准确的肾结石检测方面仍面临着亟需解决的关键挑战。针对这一挑战,在系统设计中我们采用了最新的YOLOv10算法。在本研究工作中,我们特意收集整理了大量具有高度代表性和多样性的临床图像数据集。
系统设计的关键模块涉及数据预处理、模型构建与训练以及用户界面开发等多个重要环节。在数据预处理阶段, 我们开发了一系列图像增强技术, 旨在提升模型在复杂背景环境下的检测能力。在模型构建与训练过程中,YOLOv10算法基于其独特的架构设计, 在确保高检测精度的同时, 有效降低了计算资源的需求。通过持续优化大量训练样本, 我们不断改进并调优算法参数, 最终验证结果显示该方法较传统检测手段表现出显著优势。经过多轮优化后, 该系统能够快速且精确地识别出患者的肾结石位置及其相关参数。
旨在提升系统实用性
旨在提升系统实用性
研究结果表明,所开发的系统在测试数据集上实现了各项关键指标均表现优异,在处理复杂背景及噪声较多的图像时展现出显著优势。此外,在医学图像分析领域中对YOLOv10算法进行了深入验证,并凸显了其卓越性能的同时也彰显了所开发系统的临床应用前景
本研究所研发出一种新型的肾结石检测系统,并将其成功应用于医学影像分析领域。该系统具有先进性高且稳定性好的特点,在临床应用中可能展现出巨大的潜力和价值。该技术将有助于提升医生对复杂病例的诊断能力,并通过引入先进的AI算法优化检测流程以确保更高的准确性与可靠性
算法流程

项目数据
通过收集包含多样化的脑肿瘤相关图像的数据集,并利用Labelimg软件对每张图片进行标注。具体来说,则将tumor标签定义为表示肿瘤。
LabelImg 是一个免费提供的图像标注工具,在支持分类标记与目标识别的同时,默认采用 Python 开发并以其 Qt 图形界面著称。该工具操作简便(虽为英文界面但非常易用),并提供了直观的操作界面以提高用户体验。其注释格式采用 XML 格式保存文件内容,并符合 ImageNet 的标准需求。此外 LabelImg 还支持常用的人工标注数据格式 COCO 格式数据集存储功能

结束后,在cmd中输入labelimg

初识labelimg

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

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

请配置存储标注文件的位置(如上图所示为Change Save Dir)。
启动注标流程后,请依次执行以下步骤:首先使用矩形工具进行对象框选;然后对目标进行分类标签标记;接着切换至下一图片进行注标操作;最后持续执行上述步骤。

Labelimg的快捷键

(3)数据准备
通常会建立一个命名为data的数据集(这一做法并非唯一),然后在此基础上规划以下子目录结构:首先,在data目录下内部创建images目录专门存储待标注的照片;随后建立labels文件夹以存储各个图像对应的标签信息;最后生成classes.txt文本文件记录需要分类的所有类别名称。
data目录下的文件组织架构如下:
为了更好地进行后续处理,请在images这个目录中放置可供标注处理的图片。这里的图片都是关于肾结石的具体实例。

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

(4)YOLO模式创建标签的样式
用于存储标签信息的文件名与图片名称一致,在文件中包含了N行5列的数据。每一行为一个标注目标提供信息,并具体包含以下五个字段:类别ID、x中心坐标、y中心坐标、宽度和高度。具体说明如下:
- 类别ID用于标识标注的目标类型;
- x中心坐标和y中心坐标表示标注框在图像中的位置;
- 宽度和高度则分别表示标注框在水平和垂直方向上的大小。
注意:这里的中心点坐标、宽和高都是相对数据!!!

保存标签类别的文件的文件名为classes.txt(固定不变),用于存储生成的标签类别
完成后可进行后续的yolo训练方面的操作。
模型训练
模型的训练、评估与推理
1.YOLOv10的基本原理
YOLOv10是YOLO系列中的最新版本的一种实时端到端目标检测算法。该算法基于YOLO系列的优化与改进的基础上进行了开发,并旨在实现性能与效率的最佳平衡。作者提出采用连续双分配方法来实现NMS-free训练,并通过系统优化各组件以大幅降低计算负担的同时提升了模型性能

研究表明,在不同尺寸的模型架构中进行测试后发现, YOLOv10展现了卓越的性能与高效的计算能力。具体而言,YOLOv10-S在运行速度上较RT-DETR-R18提升了1.8倍,不仅参数数量减少至原来的25%,同时FLOPs也显著降低;相较于YOLOv9-C而言,在保持同等性能的基础上, YOLOv10-B实现了46%的延迟缩减与25%的参数优化。
YOLOv10创新点
(1)双标签分配

主干网络部分应用改进型CSPNet模型进行图像特征提取,在优化梯度传输的同时降低了运算开销。
(2)模型设计改进

就模型架构设计而言,本文提出了一系列优化方案:首先是轻量级分类头,通过低复杂度的设计减少了运算开销但仍能维持良好性能;其次是空间通道解耦降采样算法,该算法通过将空间与通道操作分离来实现降采样,在此过程中成功提升了信息保持能力,并在效率与竞争力方面均表现出色;最后是基于不同重叠程度划分阶段的排名引导块设计,这种策略使得构建高效模块组合成为可能;此外还引入了大核深度卷积层与部分自注意力机制组成的关键组件,这些关键组件包括大规模深度卷积层与部分自注意力机制...在提升性能的同时仅增加微乎其微的计算负担
2.数据集准备与训练
本研究采用了包含一组CT扫描图像用于肾结石相关分析,并通过Labelimg软件对每张图像的目标边界框及其分类进行了精确标注。随后采用YOLOv5n算法作为基础模型进行了训练。经过训练后,在验证集中对模型性能进行了全面评估和比较分析。具体流程包括数据准备阶段、模型训练阶段以及评估阶段。本次研究关注的目标类别是肾结石,在实验中涉及的数据量较大。其中约65%来自训练集(共1054张图片),验证集占约9%(共123张),测试集同样占9%(共123张)。如图所示选取了几组具有代表性的样本

部分标注如下图所示:

图片数据的存储格式为:在项目根目录中创建datasets子目录;随后将待检测的所有图像按照训练集与验证集分类存储于Data子目录中。

随后应创建一个data.yaml文件以记录训练所需数据路径以及模型待检测类别YOLOv8在执行模型训练过程中会参考此数据文件的内容以完成相应的训练与验证工作

训练数据集的具体文件夹位置设为E:\KidneyStoneDetection_v10\KidneyStoneDetection_v10\datasets\Data\train;
验证数据集的具体文件夹位置设为E:\KidneyStoneDetection_v10\KidneyStoneDetection_v10\datasets\Data\valid;
测试数据集的具体文件夹位置设为E:\KidneyStoneDetection_v10\KidneyStoneDetection_v10\datasets\Data\test(此部分为可选项);
模型进行分类任务时所涉及的分类数目共计有nc个;
其中[‘KidnearySton**e’]表示该分类项对应于肾结石类别的特征描述信息。
该文件说明了用于模型训练与验证的数据集路径,并且指出了该模型将要识别的目标类别
完成数据准备后, 启动 train.py 文件来进行模型训练. epochs 参数被用来调节训练周期, batch 参数则决定了每个周期中的批量处理数量, 这个数值会受到内存容量的影响, 最低值设置为1.
GPU训练代码如下:

导入名为 yolov1.0.pt 的预训练YOLOv1.0模型,并将其存储在 yolov1.0.pt 文件中作为已训练好的模型资源。
CPU训练代码如下:

导入命名为yolov7n.pt的预 trained YOLOv7s模型.该文件用于存储已经过预先 training 的 YOLOv7s模型 parameters.通过指定data_yaml_path变量来设置数据路径;设定总迭代次数为 个周期;设置每个批次包含 个样本;通过指定name参数将整个 training process 命名为 'train_v9'.
3.训练结果评估
在深度学习过程中, 我们通常会通过观察其损失函数变化趋势来掌握模型的训练进展. YOLOv10模型的具体训练过程主要包括定位损失(box_loss)、分类损失(cls_loss)以及动态特征损失(dfl_loss)三种关键部分. 训练结束后, 所有相关的工作流程及结果数据将会被保存至runs/目录中, 具体而言, 在runs/目录中会记录完整的训练日志文件以及各阶段评估指标数据.

注
训练结果如下:

这张图呈现了YOLOv10模型在训练与验证过程中各关键性能数据的变化情况。
train/box_om:
(1)该图展示了模型在box regression损失方面的性能表现。
(2)随着训练进程推进,在box regression任务中测试集上边界框预测误差持续下降。
train/cls_om:
(1)该图展示了分类损失的变化情况。
(2)曲线急剧下降并趋向平稳,表明模型在训练初期迅速掌握了分类任务的核心特征。
(1)这涉及DFL(Distribution Focal Loss)相关的损失函数。
(2)随着训练进行而持续减少的趋势表明,在目标检测任务中模型的预测能力得到了显著提升。
train/box_oo:
(1)与box_om具有相似性。
(2)用于衡量另一部分边界框回归损失的变化情况,在其值逐步下降的过程中反映出预测精度逐步提高的趋势。
train/cls_oo:
(1)这是一个用于表示分类损失的图,在结构上与train/cls_om相似。
(2)它反映了训练过程中完成分类任务的学习效果。
metrics/recall(B):
(1)该图呈现了召回率(Recall)的趋势变化,并解释了召回率所代表的概念——即模型识别出所有真实目标的比例。
(2)该曲线持续提高表明,在训练过程中模型识别能力得到了显著增强。
metrics/mAP50(B):
(1)呈现了mAP50(当IoU为0.5时的平均精度)的发展情况。
(2)表明该模型的检测精确度持续提高。
metrics/mAP\textsubscript{50-95}(B):
(1)该图表反映了mAP\textsubscript{50-95}(在IoU范围从\textdollar 0.5至\textdollar 0.95的不同区间内计算得到的平均精度)。
(2)呈现上升趋势的曲线表明,在更加严格的IoU阈值下(即\textdollar 0.7至\textdollar 0.8),模型持续增强了其检测性能。
train/dfl_oo:
(1)与train/dfl\_om相仿。
(2)表示DFL损失的余下部分,在曲线下降时表明损失逐步减小。
metrics/precision(B):
(1)代表模型的精度(Precision),即真实为正类样本中被正确识别的比例。
(2)曲线呈上升趋势,表明模型的误报率逐步降低,检测准确性逐步提高。
这些图表显示模型在训练过程中各指标均展现出良好的收敛趋势,并且检测性能持续增强。

这张图呈现了Precision-Recall(精度-召回率)曲线,在全面评估模型在肾结石检测任务中的性能表现中具有重要意义。具体而言,这张图旨在体现模型在不同阈值下的准确率与召回率之间的关系。
横轴(Recall, 召回率):
(1)反映了模型在识别目标方面的准确性。
(2)召回率越高,则漏检目标就越少。
纵轴(Precision,精度):
(1)反映模型将实际为正类的数据正确分类的比例,在所有被预测为正样本中实际属于正类的比例。
(2)当Precision值越高时,则表明模型在误报方面表现越出色。
曲线含义:
(1)该曲线代表了Precision-Recall的变化趋势。
(2)一般而言,在大多数情况下随着召回率的提升会导致精度逐步下降。这是因为当模型倾向于识别更多被标记为正类的对象时可能会导致误报数量也随之上升。
mAP@0.5:
(1)图例中的‘mAP@0.5’具体说明了当Intersection over Union (IoU) 阈值设定为\text{ IoU }= 1/2 时模型的表现。
(2)此处计算得出的结果是mAP= 73\% ,这表明该模型在IoU阈值设定为 1/2 的情况下表现出了较高的准确度。
肾结石检测性能:
(1)该曲线呈现了模型在肾结石检测任务中的准确率和召回率表现。
(2)图例中的"KidneyStone 0.735"也反映了在肾结石检测中的mAP值为73.5%,表明模型在该任务中具有良好的检测效果。
这条曲线显示了该模型在诊断肾结石方面的性能,在高召回率水平下表现出较高的准确性,并证明了该模型在目标检测方面的卓越能力。
4.检测结果识别
在完成模型训练后, 我们能够获取一个最佳的结果, 即 best .pt 文件, 位于 runs / train / weights 目录中. 通过该文件, 我们能继续进行推理检测.

(1)通过接口实现 ultralytics 库中的 YOLOv10 模型类功能的调用。(2)加载 OpenCV 库以实现图像显示功能。
请指定模型与图像路径:
其中 path 指向预训练模型的位置;
img_path 指向待检测的图片位置。
其中 path 位于 models/best.pt 文件;
而 img_path 则指向待检测的具体图片。
加载预训练权重文件:
(1)利用 YOLOv10 指令加载 YOLOv10 预训练权重文件,并设置参数 task='detect'表示该模型被用于目标检测任务。
执行检测:
(1)调用模型model(img_path)完成对目标图像的检测。
(1)调用 results[0].plot() 方法生成包含检测结果的图像。
(2)随后,在 OpenCV 库中使用 cv2.imshow() 函数显示结果图像,并借助 cv2.waitKey(0) 确保窗口持续展示直至用户按下一个键。
该代码的作用是首先加载一个经过预训练的YOLOv10模型,并对该指定图片执行目标检测;随后系统会将检测结果以图形化的方式展示出来。
执行imgTest.py代码后,会将执行的结果直接标注在图片上,结果如下:

YOLOv10肾结石检测系统的推理结果日志。以下是对该结果的解析:
图像路径:
(1)E:\KidneyStoneDetection_v10\KidneyStoneDetection_v10\TestFiles\1-3-46-670589-33-1-63705540012391921600001-4673924283181105107_png_jpg.rf.feb0267fe02c47cc492e2d8366c61616.jpg
– 系统完成了对路径中所有图片的检查。
– 检测系统识别了多张图片并完成了检查。
– 系统完成了一系列检查任务并识别了肾石情况
检测结果:
(1)该系统在尺寸为544×640的图像中识别出一个肾结石(KidneyStone)。
(2)该系统对检测目标的识别精确度达到99.9\%。
处理速度:
(1)图像预处理所需时间为16.4毫秒(preprocess),包括将输入图像转换为模型能够识别的格式这一过程所需的时间。
(2)推理时间约为47.1毫秒(inference),即模型进行目标检测所需的时间。
(3)后处理时间为21.5毫秒(postprocess),包括对模型输出结果进行进一步分析和优化的时间。
检测结果对象:
(1)boxes: 此处包含边界框信息。
(2)names: 此处涉及目标识别及分类结果的具体情况:其中{0: ‘KidneyStone’}表示分类结果为肾结石。
原始图片信息:
(1)图片的原始尺寸为 320×391。
(2)orig_img 是图片的像素值,未显示完整。
保存目录:
(1)检测结果图片将保存到 runs\detect\predict 目录。
基于以下分析可知, 该模型有效地识别并标注了图片中的肾结石, 并提供了关于治疗时间和相关参数的详细信息
对此款智能检测系统的运行机制及编码实现进行了概述。在此基础上,在该模型的基础上通过Python语言及PyQt5框架构建了一个具有用户界面功能的测试平台。用于演示运行效果的部分能够有效地处理图像识别以及视频监控中的相关问题,并且实现了检测结果的数据存储功能。
运行效果
– 运行 MainProgram.py

主要功能:
(1)在CT扫描图像的实际应用场景中能够实现肾结石的自动检测;
(2)支持通过摄像头、图片以及视频进行目标检测,并且能够对单个图片执行快速识别;
(3)实时显示目标位置坐标、目标数量、检测信心值以及完成所需时间;
(4)能够将检测结果保存为图片或视频格式
2.检测参数设置:

(1)置信度阈值:当前设置为0.25,表示检测系统只会考虑置信度高于25%的目标进行输出,置信度越高表示模型对检测结果的确信度越高。
(2)交并比阈值:当前设置为0.70,表示系统只会认为交并比(IoU)超过70%的检测框为有效结果。交并比是检测框与真实框重叠区域的比值,用于衡量两个框的相似程度,值越高表明重叠程度越高。
这两个参数通常被用来于目标检测系统中,在改动时会影响模型在检测中的准确性和误报率。
2.检测结果说明:

该图表详细展示了基于YOLOv10模型的目标检测系统的结果显示界面。以下是对各字段含义的详细说明:
总目标数:
(1)表示系统检测到的目标总数,这里显示为1。
用时:
(1)表示检测耗费的时间,这里为0.039秒,说明检测速度较快
标识标签名称及其信心水平:(1)表示是否显示目标的标签名称和置信度,请确认。
改写说明
类型:
(1)表示检测到的目标类型,这里显示为肾结石。
(1)表示模型对该目标的的信心水平为83.79%,表明该检测结果得到了模型的高度认可。
指明目标物体在图像中的具体位置
这张图呈现了检测系统的核心内容——目标数量、耗时、目标类型、信心程度以及坐标位置等详细信息。此类界面主要用作展示模型在图像中对目标进行定位与识别,并提供相关信息。除了上述信息之外,请注意这些数据还包括坐标位置的具体数值与信心程度的量化指标等详细内容。
3.图片检测说明

单击图片按钮以打开并选择待检测的图片文件;或者单击文件夹按钮以打开并选择包含多个图像的文件夹以便批量处理。
具体而言:
(1)在目标下拉框中设置目标结果信息以便显示相关窗口;
(2)执行保存操作时将检测结果存储至指定路径即save_data目录中。
检测结果显示:该系统成功解析了图片中的肾结石,并呈现了详细的结果信息, 包含总目标数量, 耗时数据, 分类类型(为肾结石), 置信评分以及目标的具体位置坐标
4.视频检测说明

在操作完成后,请您打开一个需要进行检测的视频窗口。
系统会自动显示相应的检测结果。
如果您希望回到主界面或者关闭当前窗口,则请再次点击。
在操作完成后,请您在保存选项卡上完成设置。
系统会将当前的检测结果存储到指定位置。
具体存储路径位于save_data目录中。
检测结果:该系统能够实时对视频进行分析,并识别出肾结石并展示检测结果。该表格展示了视频中多个检测结果的置信度以及它们的位置信息。
该界面展示了系统在视频帧中进行多目标检测的能力;能够精确识别肾结石,并详细列出检测结果及置信度评分。
5.摄像头检测说明

通过点击摄像头控制按钮启动摄像头,并实现摄像头的开启;系统能够支持实时目标检测过程;当再次按下该按钮时可关闭摄像头
检测结果:系统通过网络实现了摄像头的实时连接,并识别出肾结石及其位置信息。为用户提供实时的画面展示,并对发现的肾结石进行标记和标注;同时,在表格中详细记录了每一帧的具体情况。
5.保存图片与视频检测说明

操作完成后会将已选中的图像文件(包括批量处理的图像集合)以及相关的视频检测数据一并进行本地存储

(1)图片保存

(2)视频保存

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

(1)epochs参数配置了模型的训练周期数。在此设置下,模型将在数据集上执行150次完整的训练周期。
(2)device参数设为0时会指定计算过程使用的硬件设备。其中数值0通常对应第一个可用的GPU。
(3)该配置将使模型在GPU上运行。
尽管大多数深度学习任务中 GPU 相比其他计算资源而言 提供了更快的训练速度。 然而 在某些特定场景下 受限于硬件条件或者其他因素的情况下 用户需要选择 CPU 作为计算平台
温馨提示:通常情况下,在CPU环境下进行深度学习模型的训练会耗时较长,并且尤其对于像YOLOv10这种计算密集型的任务而言,在GPU上的执行速度会明显提升。因此,在绝大多数场景下,默认情况下我们建议优先选择GPU来进行训练操作,并且这样做将会显著提高效率
2.训练日志结果

这张图展示了使用YOLOv10进行模型训练的详细过程和结果。
(1)利用GPU进行训练耗时仅需约一小时零五分完成150个epochs的迭代过程。
(2)评估结果显示,在该图中mAP值达到100%,表明模型在验证集上的表现达到了最佳水平。
通过这张图可以看出YOLOv10模型经过150个Epoch的持续训练已经实现了卓越的检测性能水平(mAP50-95值达到100%)。随着训练 epochs 的增加...损失指标持续下降这表明模型在训练过程中逐步达到了稳定的收敛状态
