Recall
召回率(也称灵敏度)是模型识别出的真实正类所占比例:TP / (TP + FN)。了解阈值如何影响召回率与精确率的权衡,以及检测器如何计算召回率。
召回率是模型正确识别出的实际正例占所有实际正例的比例。它回答的问题是:“所有本该找到的对象中,模型找到了多少?”计算方法是真正例除以所有实际正例:recall = TP / (TP + FN),其中假阴性 (FN) 是模型漏掉的正例。召回率范围为 0 到 1,因此召回率为 0.90 意味着每 10 个正例中会漏掉 1 个。当漏检代价很高时,召回率尤为重要,例如筛查扫描中未检测出的肿瘤,或警报系统未能标记的入侵者。敏感度、真正例率 (TPR) 和命中率都是召回率的同义词;漏检率,也就是假阴性率,等于 1 减去召回率。
召回率的计算方法#
召回率取自混淆矩阵中的两个单元格:真正例和假阴性;两者合起来涵盖所有实际正例。假阳性和真阴性不会参与计算,因此,将所有内容都标记为正例的模型可以达到完美召回率 1.0,却毫无实用价值。因此,召回率通常会与精确率 TP / (TP + FP) 一同报告,因为精确率恰好会惩罚这些误报。例如,在一个测试集中,筛查模型标记出 100 个肿瘤中的 90 个,其召回率就是 0.90,无论它还标记了多少健康扫描;精确率则显示这些标记中有多少是真实的。
类别数超过两个时,召回率会针对每个类别分别计算,将该类别视为正例、其他所有类别视为负例,然后再求平均值。宏平均召回率对每个类别赋予相同权重,因此能揭示模型在稀有类别上的较差表现;在单标签多分类任务中,微平均召回率等于准确率。
精确率-召回率权衡#
大多数模型都会输出一个分数,决策阈值则将分数转化为是或否。降低阈值会标记更多情况,从而提高召回率,通常也会降低精确率。下面的 scikit-learn 脚本以三个阈值对 15 个零件评分,其中 5 个有缺陷:
import numpy as np
from sklearn.metrics import precision_score, recall_score
# 5 defective parts (1) and 10 good parts (0), with the model's defect score for each
y_true = np.array([1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
scores = np.array([0.95, 0.80, 0.55, 0.40, 0.20, 0.60, 0.35, 0.30, 0.15, 0.10, 0.10, 0.05, 0.05, 0.05, 0.02])
# Lowering the decision threshold flags more parts as defective
for threshold in (0.7, 0.5, 0.3):
y_pred = scores >= threshold
recall = recall_score(y_true, y_pred)
precision = precision_score(y_true, y_pred)
print(f"threshold {threshold}: recall {recall:.2f}, precision {precision:.2f}")阈值为 0.7 时,模型能找出 5 个缺陷中的 2 个且没有误报,召回率为 0.40,精确率为 1.00。将阈值降至 0.3 后,模型能找出 4 个缺陷,召回率为 0.80,但 7 个标记中有 3 个是合格零件,因此精确率降至 0.57。绘制所有阈值下的结果即可得到精确率-召回率曲线,再通过 F1 分数或召回率加权的 F2 分数选取单个工作点。在 YOLO26 中,预测的 conf 阈值用于设定这种权衡,默认值为 0.25;例如将其降至 conf=0.1,可以找回更暗、更小或部分遮挡的对象,但会增加误检。
目标检测中的召回率#
在目标检测中,正例是每张图像中标注的对象。只有当同类别预测框与标注对象的交并比 (IoU)达到或超过阈值(通常为 0.5)时,才算找到了该对象。每个预测只能匹配一个对象,因此,一个覆盖人群中两个人的框只能找到其中一个,另一个会成为假阴性。
检测器召回率取决于置信度阈值、IoU 阈值和后处理。较严格的 IoU 阈值(如 0.75)会降低框位置不够准确时的召回率;非极大值抑制 (NMS)可能会删除高度重叠对象的正确框;每张图像的检测数量上限则会限制密集场景中的召回率。平均精度均值 (mAP)会整合所有召回率水平下的精确率,因此模型未能找到的每个对象都会拉低 mAP。COCO 评估还会报告平均召回率 (AR):在每张图像的检测数量固定时达到的最大召回率,并对 0.50 到 0.95 的 IoU 阈值取平均,结果表示为 AR@1、AR@10 和 AR@100。
提高召回率#
- 降低置信度阈值: 最快的修复方法,但会牺牲精确率。
- 收集并标注漏检样本: 为模型容易失败的情况补充训练示例,例如小目标、遮挡目标或夜间目标。检查验证数据中的假阴性,可以找出具体的漏检对象。
- 提高输入分辨率: 在低分辨率下缩小到只有几个像素的小目标,在更高分辨率下就能被检测到。
- 应对类别不平衡: 焦点损失等焦点损失函数以及对稀有类别进行重采样,可以防止模型忽略少数类。
召回率与相关术语#
- 精确率: 所有正类预测中正确预测所占的比例。召回率关注模型找到了多少目标,而精确率关注模型找到的目标中有多少是正确的。
- 特异度: 真负率,TN / (TN + FP),即正确排除的负类所占比例。医学检测通常会同时报告灵敏度和特异度。
- 受试者工作特征(ROC)曲线: 在不同阈值下,以真阳性率为召回率,对比假阳性率绘制曲线。曲线下面积(AUC)用一个数值概括该曲线。
- 准确率: 所有预测中正确预测所占的比例。当正类占比为 1% 时,始终预测为负类的模型准确率为 99%,召回率却为 0%。










