OpenCV与AI深度学习 | 实战 | YOLOv10模型微调检测肾结石并提高准确率

本文来源公众号“OpenCV与AI深度学习”,仅用于学术分享,侵权删,干货满满。

原文链接:实战 | YOLOv10模型微调检测肾结石并提高准确率

前 言

    对YOLOv10模型进行微调以增强肾结石检测,将诊断时间从每份报告 15-25 分钟大幅缩短至每秒处理约150 份报告。这项研究面向医学研究人员、医疗保健专业人士和 AI 公司,通过以数据为中心的技术,无需改变模型架构,即可获得94.1 的 mAP50 。

NMS Free Training真的有效吗?

    Ao Wang、Hui Chen [1]等人最近发布了他们的 YOLOv10 实现。在他们的论文中,作者将 NMS Free Training 的概念融入到了 YOLO 检测流程中。然而,问题是——它是什么,它又有何不同?

    要理解这一点,重要的是要了解非最大抑制 (或) NMS 是什么,以及它是如何工作的。在Juan Terven 和 Diana Cordova-Esparza [2]的论文中,展示了 NMS 的工作算法。

    他们将其解释为对象检测算法中使用的后处理技术,用于减少重叠边界框的数量并提高整体检测质量。NMS 可以过滤掉冗余和不相关的边界框,只保留最准确的边界框。下方右显示了该算法的更好的可视化效果。

    然而,YOLOv10 的作者在他们的论文中使用了一种无 NMS 的方法进行对象检测。他们认为,YOLO 模型的先前变体严重依赖 NMS 进行后处理,这导致部署期间的推理效率不理想。为此,双标签分配和一致匹配指标是首选。为了更好地理解这一点,让我们检查一下图中的架构。

双标签分配

    传统上,一对多分配提供丰富的监督,但需要非最大抑制 (NMS) 后处理。相比之下,一对一分配更简单且无 NMS,但提供较弱的监督,影响准确性和收敛性。为了解决这些问题,双标签分配在传统的一对多头旁边引入了第二个一对一头。两个头在训练期间联合运行,通过一对多设置的全面监督增强模型。只有更高效的一对一头用于推理,从而减少计算开销。该方法利用一对一匹配中的前一选择,性能与匈牙利匹配相当,但训练复杂度降低。

一致性匹配度量

肾结石检测:数据集可视化

    在本研究文章中,我们使用了 Kaggle 的肾结石检测数据集来微调 YOLOv10 模型。数据集下载链接:

https://www.kaggle.com/datasets/safurahajiheidari/kidney-stone-images

我们还来看一下该数据集中的几个样本:

如上图所示,这是一个单类数据集,具有不同大小和形状的肾结石的边界框标注。数据集一共1300张,具体划分如下: 

  • 训练集:1054 张图片
  • 测试集:123 张图像
  • 验证集:123 张图片

步骤与代码3演示

    首先,需要将 YOLOv10 存储库克隆到您的本地开发环境中。在此之前,请确保返回到您的根目录,然后使用以下代码克隆存储库。

HOME = os.getcwd()
print(HOME)

下载源码: 

!pip install -q git+https://github.com/THU-MIG/yolov10.git

    注意:目前YOLOv10 模型有 6 种变体。请根据您的需求下载您选择的模型。

!mkdir -p {HOME}/weights
!wget -P {HOME}/weights -q https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10n.pt
!wget -P {HOME}/weights -q https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10s.pt
!wget -P {HOME}/weights -q https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10m.pt
!wget -P {HOME}/weights -q https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10b.pt
!wget -P {HOME}/weights -q https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10x.pt
!wget -P {HOME}/weights -q https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10l.pt
!ls -lh {HOME}/weights

    从这里,您只需要改变data.yaml 文件中的PATH变量并运行以下命令行参数即可开始训练过程。

!yolo task=detect mode=train epochs=100 batch=16 plots=True \
model=/weights/yolov10l.pt \
data=/data.yaml

    就是这样。这就是您启动此模型并准备进行训练所需的全部内容。

YOLOv10 模型 - 基准训练性能指标 

    那么这些模型在没有任何微调的情况下表现如何呢?让我们看看基准结果。在这个初始实验中,所有 YOLOv10 模型的变体都用于直接在肾结石检测数据集上进行训练。下图显示了所有这些模型实现的 mAP50 值的变化。

  从上图可以清楚地看出,作为基线基准,所有变体都实现了超过70 的 mAP50 。从同一图中显示的趋势还可以推断出YOLOv10-L模型实现了最高的mAP50 值 77.1。下面给出了从大型模型的训练运行中获得的详细分析。

基准推理可视化:YOLOv10L 模型

    前面我们推断出 YOLOv10-L 模型的 mAP50 值为77.1。首先想到的问题是为什么这个模型没有获得更高的分数。  

    现在让我们全面了解从该模型获得的推理结果,并将基本事实注释与预测进行比较。通过分析,我们可以了解模型到底在哪里失败。

    示例一:大肾结石(漏检)

    观察:在此示例中,模型无法从输入图像中检测到较大的肾结石。结石的形状比通常的结石要大,而且结石的形状看起来也不规则。

    示例二:小肾结石(错检)

观察结果:另一方面,一些样本包含白色像素伪影,类似于较小的肾结石的外观。在这个样本中,可以观察到模型将白色像素伪影误认为是真正的结石。这是不可接受的,特别是在医学诊断中。

    示例三:同一图像中有不同大小的肾结石(漏检+错检)

   观察结果:在如上所示的样本中,我们可以观察到同一样本中存在大小和形状各异的肾结石。这对任何检测模型都构成了威胁。在这里,模型未能检测到相对较大的结石。不仅如此,模型还将白色像素伪影误认为是真正的小结石。这同样是不可接受的。

微调 YOLOv10 模型:以数据为中心的方法

    前面我们研究了模型未能准确检测肾结石的三个样本。现在让我们探索一些以数据为中心的方法,这些方法可以缓解这些问题,并使 YOLOv10-L 模型实现更高的 mAP50 值。

    ROI 采样

    从一些初始推理样本的观察结果可以看出,该模型无法从验证集中检测到一些较大的不规则结石。肾脏图像中还有其他类似于大结石的结构。在这种情况下,实施这种称为 ROI 采样的技术非常重要。

    这里的基本思想是对感兴趣区域 (或 ROI)进行采样,在本例中为大石头,并在同一样本中引入未标注的实例。首先,可以将 ROI 样本放置在: 

  • 肾脏结构之外
  • 部分关于肾脏和背景
  • 一部分可见,另一半隐藏

    这使得模型能够从背景上了解此类结石的形状和位置,并防止其错误分类(或)遗漏肾脏内的大结石。

   随机椒盐噪声

    该模型面临的第二个难题是检测非常小的石头。在这里,样本中的白色像素伪影是罪魁祸首。因此,如果我们在此类样本中引入更多未标注的白色伪影,模型就会学会对其进行预测。   

    为此,我们随机在包含极小石头的几个样本中引入了大小为4px 且不透明度为 50%的白色伪影。我们还确保了它能够随样本广泛传播。

上图中中,左侧的样本代表突出显示实际石头的图像。在右侧,突出显示的区域显示了引入盐/胡椒噪声的部分。还可以看到,白色伪影与实际石头的大小相同,不透明度降低了一半。通过这样做,我们可以教会模型对检测实际的小石头有信心。

    上下文 ROI 采样 + 上下文椒盐噪声

    最后一个问题涉及同一样本中不同大小和形状的石头。现在,这是一个棘手的问题。在这种情况下,可能需要在同一样本中添加两种类型的图像处理。

    这里,在样本的三个部分添加了4px 白色伪影,其不透明度从 50% 到 75% 不等,类似于 ROI 采样部分中提到的位置。对 ROI 也进行了同样的操作。

 从上图可以看出,我们为模型提供了更多有关石头位置及其变化的背景信息。 

    注:在本实验中,这些技术应用于从数据集的训练集中获取的约 10 个样本,然后在修改后添加回同一训练集,未修改原始的标注文件。

性能指标:YOLOv10 模型微调后

    前面我们讨论了一些以数据为中心的技术。但现在的问题是:这有什么区别吗?下面显示的一系列实验将回答这个问题。 

    注意:本研究文章中显示的所有运行都是在具有24GB vRAM的Nvidia RTX A5000 GPU上完成的。

    实验1:修改数据集 + 100 EPOCHS

    在本次初始实验中,我们使用包含新修改样本的修改数据集对 YOLOv10L 模型进行了 100 个 EPOCHS 的训练。以下是本次实验的结果。

 从上图中显示的结果立即表明 mAP50 值的性能大幅提升,从77.1(初始基线)提高到89.0!看起来模型可以做得更好;让我们尝试训练更长时间。

    实验2:修改数据集+150个EPOCHS

    在本次实验中,训练 EPOCHS 的数量从 100 增加到了 150。下图展示了新获得的结果。

 已观察到 mAP50 值从89.0增加到92.3。让我们再进一步测试。

    实验3:修改数据集+200个EPOCHS

    在最后的实验中,训练 EPOCHS 的数量增加到了 200。让我们来看看这次运行的结果。

    本次运行的 mAP50 值为94.1,效果很不错!

    YOLOv10 模型的微调性能指标:

在上图 中,全面展示了基线结果与微调后的 YOLOv10 结果的 mAP50 值比较。

实验推断结果对比:基准与微调后

    上面我们全面展示了 mAP50 值的比较,并进行了讨论。那么,这些模型在现实世界中的表现如何呢?

    推理结果一:

    推理结果二:

     推理结果三:

     推理结果四:

    对比发现微调后的模型检测准确率明显提升。

关键要点

    以下几点总结了改进 YOLOv10 模型以提高物体检测性能和效率的关键研究成果。

    在肾结石检测数据集上对YOLOv10模型进行微调,显著提高了检测效率,达到了令人印象深刻的94.1的mAP50值,凸显了YOLOv10在医疗诊断方面的潜力。

    实施以数据为中心的方法,例如ROI 采样、随机盐/胡椒噪声和引入噪声的上下文 ROI 采样,提高了模型性能,解决了错误分类和肾结石漏检等问题。

    YOLOv10 的无 NMS 方法采用双标签分配和一致匹配度量,提高了推理效率并降低了计算开销,有助于更准确、更快地进行对象检测。

结论

    本研究论文探讨了一种以数据为中心的 YOLOv10 模型微调方法。通过一系列实验(包括增加训练次数),经过微调的 YOLOv10 模型表现出了显著的性能提升,mAP50 值从基线测试中的 77.1 上升到微调后的 94.1,证明了所应用技术的有效性。

参考链接

[1] Wang, A., Chen, H., Liu, L., Chen, K., Lin, Z., Han, J., & Ding, G. (2024)。Yolov10:实时端到端物体检测。arXiv 预印本 arXiv:2405.14458。

[2] Terven, Juan 和 Diana Cordova-Esparza。“YOLO 全面回顾:从 YOLOv1 到 YOLOv8 及以后。”arXiv 预印本 arXiv:2304.00501 (2023)。

[3] YOLOv10 官方仓库 :

https://github.com/THU-MIG/yolov10

THE END !

文章结束,感谢阅读。您的点赞,收藏,评论是我继续更新的动力。大家有推荐的公众号可以评论区留言,共同学习,一起进步。

  • 29
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值