【YOLO学习】召回率(Recall),精确率(Precision),平均正确率(Average_precision(AP) ),交除并(Intersection-over-Union(IoU))

摘要

在训练YOLO v2的过程中,系统会显示出一些评价训练效果的值,如Recall,IoU等等。为了怕以后忘了,现在把自己对这几种度量方式的理解记录一下。
这一文章首先假设一个测试集,然后围绕这一测试集来介绍这几种度量方式的计算方法。

大雁与飞机

假设现在有这样一个测试集,测试集中的图片只由大雁和飞机两种图片组成,如下图所示:
这里写图片描述

假设你的分类系统最终的目的是:能取出测试集中所有飞机的图片,而不是大雁的图片。

现在做如下的定义:
True positives : 飞机的图片被正确的识别成了飞机。
True negatives: 大雁的图片没有被识别出来,系统正确地认为它们是大雁。
False positives: 大雁的图片被错误地识别成了飞机。
False negatives: 飞机的图片没有被识别出来,系统错误地认为它们是大雁。

假设你的分类系统使用了上述假设识别出了四个结果,如下图所示:
这里写图片描述

那么在识别出的这四张照片中:
True positives : 有三个,画绿色框的飞机。
False positives: 有一个,画红色框的大雁。

没被识别出来的六张图片中:
True negatives : 有四个,这四个大雁的图片,系统正确地没有把它们识别成飞机。
False negatives: 有两个,两个飞机没有被识别出来,系统错误地认为它们是大雁。

Precision 与 Recall

Precision其实就是在识别出来的图片中,True positives所占的比率:
这里写图片描述
其中的n代表的是(True positives + False positives),也就是系统一共识别出来多少照片 。
在这一例子中,True positives为3,False positives为1,所以Precision值是 3/(3+1)=0.75。
意味着在识别出的结果中,飞机的图片占75%。

Recall 是被正确识别出来的飞机个数与测试集中所有飞机的个数的比值:
这里写图片描述
Recall的分母是(True positives + False negatives),这两个值的和,可以理解为一共有多少张飞机的照片。
在这一例子中,True positives为3,False negatives为2,那么Recall值是 3/(3+2)=0.6。
意味着在所有的飞机图片中,60%的飞机被正确的识别成飞机.。

调整阈值

你也可以通过调整阈值,来选择让系统识别出多少图片,进而改变Precision 或 Recall 的值。
在某种阈值的前提下(蓝色虚线),系统识别出了四张图片,如下图中所示:
这里写图片描述
分类系统认为大于阈值(蓝色虚线之上)的四个图片更像飞机。

我们可以通过改变阈值(也可以看作上下移动蓝色的虚线),来选择让系统识别能出多少个图片,当然阈值的变化会导致Precision与Recall值发生变化。比如,把蓝色虚线放到第一张图片下面,也就是说让系统只识别出最上面的那张飞机图片,那么Precision的值就是100%,而Recall的值则是20%。如果把蓝色虚线放到第二张图片下面,也就是说让系统只识别出最上面的前两张图片,那么Precision的值还是100%,而Recall的值则增长到是40%。

下图为不同阈值条件下,Precision与Recall的变化情况:
这里写图片描述

Precision-recall 曲线

如果你想评估一个分类器的性能,一个比较好的方法就是:观察当阈值变化时,Precision与Recall值的变化情况。如果一个分类器的性能比较好,那么它应该有如下的表现:被识别出的图片中飞机所占的比重比较大,并且在识别出大雁之前,尽可能多地正确识别出飞机,也就是让Recall值增长的同时保持Precision的值在一个很高的水平。而性能比较差的分类器可能会损失很多Precision值才能换来Recall值的提高。通常情况下,文章中都会使用Precision-recall曲线,来显示出分类器在Precision与Recall之间的权衡。
这里写图片描述
上图就是分类器的Precision-recall 曲线,在不损失精度的条件下它能达到40%Recall。而当Recall达到100%时,Precision 降低到50%。

Approximated Average precision

相比较与曲线图,在某些时候还是一个具体的数值能更直观地表现出分类器的性能。通常情况下都是用 Average Precision来作为这一度量标准,它的公式为:
这里写图片描述
在这一积分中,其中p代表Precision ,r代表Recall,p是一个以r为参数的函数,That is equal to taking the area under the curve.

实际上这一积分极其接近于这一数值:对每一种阈值分别求(Precision值)乘以(Recall值的变化情况),再把所有阈值下求得的乘积值进行累加。公式如下:
这里写图片描述
在这一公式中,N代表测试集中所有图片的个数,P(k)表示在能识别出k个图片的时候Precision的值,而 Delta r(k) 则表示识别图片个数从k-1变化到k时(通过调整阈值)Recall值的变化情况。

在这一例子中,Approximated Average Precision的值
=(1 * (0.2-0)) + (1 * (0.4-0.2)) + (0.66 * (0.4-0.4)) + (0.75 * (0.6-0.4)) + (0.6 * (0.6-0.6)) + (0.66 * (0.8-0.6)) + (0.57 * (0.8-0.8)) + (0.5 * (0.8-0.8)) + (0.44 * (0.8-0.8)) + (0.5 * (1-0.8)) = 0.782.

=(1 * 0.2) + (1 * 0.2) + (0.66 * 0) + (0.75 * 0.2) + (0.6 * 0) + (0.66 * 0.2) + (0.57 * 0) + (0.5 * 0) + (0.44 * 0) + (0.5 * 0.2) = 0.782.

通过计算可以看到,那些Recall值没有变化的地方(红色数值),对增加Average Precision值没有贡献。

Interpolated average precision

不同于Approximated Average Precision,一些作者选择另一种度量性能的标准:Interpolated Average Precision。这一新的算法不再使用P(k),也就是说,不再使用当系统识别出k个图片的时候Precision的值与Recall变化值相乘。而是使用:
这里写图片描述
也就是每次使用在所有阈值的Precision中,最大值的那个Precision值与Recall的变化值相乘。公式如下:
这里写图片描述

下图的图片是Approximated Average Precision 与 Interpolated Average Precision相比较。
需要注意的是,为了让特征更明显,图片中使用的参数与上面所说的例子无关。
这里写图片描述
很明显 Approximated Average Precision与精度曲线挨的很近,而使用Interpolated Average Precision算出的Average Precision值明显要比Approximated Average Precision的方法算出的要高。

一些很重要的文章都是用Interpolated Average Precision 作为度量方法,并且直接称算出的值为Average Precision 。PASCAL Visual Objects Challenge从2007年开始就是用这一度量制度,他们认为这一方法能有效地减少Precision-recall 曲线中的抖动。所以在比较文章中Average Precision 值的时候,最好先弄清楚它们使用的是那种度量方式。

IoU

IoU这一值,可以理解为系统预测出来的框与原来图片中标记的框的重合程度。
计算方法即检测结果Detection Result与 Ground Truth 的交集比上它们的并集,即为检测的准确率:

IoU=DetectionResultGroundTruthDetectionResultGroundTruth

如下图所示:
蓝色的框是:GroundTruth
黄色的框是:DetectionResult
绿色的框是:DetectionResult GroundTruth
红色的框是:DetectionResult GroundTruth

这里写图片描述

要说的

1,本文参考了以下博客
https://sanchom.wordpress.com/tag/average-precision/
http://blog.csdn.net/eddy_zheng/article/details/52126641
2,在训练YOLO v2中,会出现这几个参数,所以在这总结一下,省得以后忘了。
3,本文只是一个学习笔记,内容可能会有错误,仅供参考。
4,如果你发现文中的错误,欢迎留言指正,谢谢!
5,之后会继续把训练YOLO过程中出现的问题写在博客上。

<think>嗯,用户问的是如何提高YOLOv11模型的召回率。首先,我需要回顾一下召回率是什么。召回率是模型正确检测到的正样本占所有实际正样本的比例,所以提高召回率意味着让模型尽可能多地找出所有真实的目标,减少漏检。 接下来,我应该考虑YOLOv11的特点。根据引用[2]和[3],YOLOv11是YOLO系列的最新版本,注重准确性和速度。所以优化时需要兼顾这两个方面。但用户的问题主要是召回率,可能需要调整模型参数、数据增强、损失函数等。 首先想到的是调整检测阈值。YOLO在预测时会有一个置信度阈值,降低这个阈值可以让更多候选框被保留,从而提高召回率。但这样可能会增加误检,所以需要权衡。 然后,数据增强。引用[4]和[5]提到应用在不同场景,比如农田和基建。可能数据增强方法如随机裁剪、旋转、色彩抖动等可以增加模型对目标的鲁棒性,尤其是在复杂背景下更好地识别目标,减少漏检。 模型结构方面,YOLOv11有不同的尺寸,如n/s/m/l/x。根据引用[3],较大的模型如l或x有更高的mAP,可能更适合提高召回率。不过大模型可能速度慢,需要用户根据实际需求选择。 损失函数优化也是关键。分类和定位损失可能会影响召回率。比如,Focal Loss可以关注难样本,而CIoU损失改进定位精度,可能帮助模型更准确地检测目标,减少漏检。 Anchor box调整也很重要。如果默认的anchor不适合特定数据集,重新聚类生成新的anchor尺寸和比例,能提高检测框的匹配度,从而提升召回率。 多尺度训练和测试,引用中提到YOLOv11支持多尺度,这样模型能检测不同大小的目标,尤其是小目标,容易漏检的部分。 后处理优化,比如NMS的参数调整。降低IoU阈值可以让更多重叠的框保留,但同样可能增加误检。需要实验找到平衡点。 数据质量方面,引用[4]和[5]的应用案例中可能涉及特定场景的数据。增加困难样本和平衡类别分布,避免模型偏向某些类别而忽略其他。 迁移学习和预训练模型,引用[3]提到官方有COCO预训练模型,使用这些作为起点,在特定数据上微调,可能提升召回率。 最后,集成学习和测试时增强(TTA)可以作为补充方法。虽然TTA会增加计算量,但能提升检测稳定性,可能发现更多目标。 需要检查用户的应用场景,比如农田杂草或基建裂缝,可能需要针对小目标或特定形状进行优化。例如,引用[4]中的甜菜杂草检测,可能需要关注小目标和密集场景,这时候多尺度训练和调整anchor会有帮助。 同时,用户可能希望保持一定的检测速度,所以模型大小的选择需要权衡。如果用户使用的是YOLOv11-x,虽然准确高,但速度慢,可能需要调整到合适的尺寸。 可能还需要考虑数据标注的质量,错误的标注会直接影响召回率,所以检查标注数据是否正确也很重要。 总结下来,步骤可能包括:调整阈值、数据增强、模型结构选择、损失函数优化、anchor调整、多尺度训练、后处理参数调整、数据质量提升、迁移学习、集成和TTA。需要一步步实验这些方法,监控召回率的变化,同时注意准确和速度的平衡。</think>### 如何提高 YOLOv11 模型召回率的优化方法 召回率Recall)是目标检测模型的关键指标,衡量模型检测真实目标的能力。以下是针对 YOLOv11 模型提升召回率的最佳实践和方法: --- #### **1. 调整检测阈值** - **降低置信度阈值**:默认阈值(如 0.25)可能过滤掉低置信度的有效目标。适当降低阈值(例如 0.1)可保留更多候选框,但需通过实验平衡精度和误检[^3]。 - **优化 NMS 参数**:非极大值抑制(NMS)的 IoU 阈值(如从 0.45 降至 0.4)可减少重叠框的误删,提升小目标召回率[^2]。 --- #### **2. 数据增强与预处理** - **多样化数据增强**:采用随机裁剪、旋转、Mosaic 增强等方法,增强模型对遮挡、模糊目标的鲁棒性[^4]。 - **小目标增强**:针对小目标,使用超分辨重建或复制-粘贴策略,增加小目标样本比例。 - **平衡类别分布**:对长尾分布的数据集进行重采样或过采样,避免模型忽略低频类别[^5]。 --- #### **3. 模型架构优化** - **选择更大模型尺寸**:YOLOv11 的 `l` 或 `x` 版本参数量更大,特征提取能力更强,适合复杂场景。 - **改进 Neck 结构**:在特征融合层(如 PANet)中引入注意力机制(如 CBAM),增强对小目标的特征响应。 - **多尺度训练与测试**:启用多尺度输入(如 640→1280),提升模型对不同尺寸目标的适应能力[^5]。 --- #### **4. 损失函数优化** - **分类损失改进**:使用 `Focal Loss` 替代叉熵,缓解类别不平衡问题,加强对难样本的关注。 - **定位损失调整**:采用 `CIoU Loss` 替代 IoU,优化边界框回归的精度,减少定位偏差导致的漏检。 --- #### **5. Anchor 优化** - **自定义 Anchor 尺寸**:通过 K-means 聚类分析目标数据集,生成匹配实际目标分布的 Anchor 尺寸。 - **动态 Anchor 分配**:引入自适应锚框分配策略(如 ATSS),提升 Anchor 与目标的匹配效--- #### **6. 后处理与推理优化** - **集成测试时增强(TTA)**:通过多尺度翻转图像推理融合结果,提升检测稳定性[^3]。 - **多模型集成**:融合 YOLOv11 不同尺寸模型的预测结果,覆盖更多潜在目标区域。 --- #### **7. 数据质量与标注** - **修正错误标注**:检查训练数据中漏标或误标的样本,确保标注完整性。 - **增加困难样本**:主动挖掘漏检案例,将其加入训练集重新训练。 --- #### **8. 迁移学习与微调** - **加载预训练权重**:使用官方 COCO 预训练模型初始化网络,加速收敛提升泛化能力。 - **领域自适应训练**:在目标场景(如农田、基建)数据上进行微调,优化模型对特定特征的敏感性[^5]。 --- ### 示例代码(数据增强配置) ```python # YOLOv11 数据增强配置示例(参考 YOLOv5 实现) augmentation = { "hsv_h": 0.015, # 色调增强 "hsv_s": 0.7, # 饱和度增强 "hsv_v": 0.4, # 明度增强 "translate": 0.1, # 平移增强 "scale": 0.9, # 缩放增强 "mosaic": 1.0, # Mosaic 增强概 "mixup": 0.1, # Mixup 增强概 } ``` --- ###
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值