4、参数初探:标注任务中的核心参数(置信度、IoU阈值、类别权重)

调参这件事,说白了就是跟三个数字打交道:置信度、IoU阈值、类别权重。

我刚入行那会儿,觉得参数嘛,默认值跑一跑就行了。结果第一次做工业质检项目,模型把螺丝上的划痕全漏了,召回率惨不忍睹。后来才发现——不是模型不行,是参数没调对。

今天咱们就把这三个参数掰开揉碎,看看它们到底在干什么。

3.1 置信度:模型到底有多「自信」?

置信度(Confidence Score),就是模型对自己预测结果的「信心指数」。取值范围 0~1,越接近 1 越自信。

举个例子:模型检测到一张图里有「猫」,同时输出一个置信度 0.92。意思是「我有 92% 的把握这是猫」。

核心逻辑:置信度阈值决定了「多自信的预测才算有效」。

  • 阈值设得高(如 0.9):只保留高置信度结果,精确率高,但容易漏检
  • 阈值设得低(如 0.3):保留更多结果,召回率高,但误检也会增多

我在项目中遇到过最典型的场景:自动驾驶的行人检测。置信度设 0.5 时,模型把路边的垃圾桶当成了人(误检);设到 0.8 时,远处穿深色衣服的行人又漏了(漏检)。

怎么选?看业务容忍度。

业务场景 推荐置信度 原因
医疗影像病灶检测 0.3~0.5 宁可误检,不可漏检
安防人脸识别 0.7~0.9 误报代价高,宁缺毋滥
工业缺陷检测 0.5~0.7 平衡精确率和召回率
通用目标检测 0.5 COCO 等基准数据集默认值

我的习惯:先用 0.5 跑一轮,看 Precision-Recall 曲线。曲线拐点附近的置信度,往往是最优解。

3.2 IoU 阈值:框得「准不准」谁说了算?

IoU(Intersection over Union),交并比。衡量预测框和真实框的重叠程度。

公式很简单:IoU = 交集面积 / 并集面积

IoU 阈值的作用是:判定一个预测框算不算「正确」。

  • IoU ≥ 阈值 → 预测正确(True Positive)
  • IoU < 阈值 → 预测错误(False Positive)

嗯,这里要注意:IoU 阈值直接影响 mAP 的计算方式。mAP@0.5 和 mAP@0.75 的差距,本质就是 IoU 阈值不同。

我曾经踩过的坑:做卫星图像目标检测时,用了默认的 IoU 阈值 0.5。结果模型框出来的建筑物边缘歪歪扭扭,但 IoU 刚好过线,全被判对了。后来把阈值提到 0.7,模型才真正学会「框准」。

不同任务对 IoU 的敏感度不一样:

任务类型 常用 IoU 阈值 说明
通用检测(COCO) 0.5~0.95(步长 0.05) 综合评估,mAP 主流标准
精细检测(文字、缺陷) 0.7~0.8 要求框位精准
粗略定位(行人、车辆) 0.4~0.5 允许一定偏差
NMS 去重 0.4~0.6 用于抑制重复框

3.3 类别权重:样本不平衡的「解药」

类别权重(Class Weight),解决的是「有的类别样本多,有的类别样本少」的问题。

你想想看,一个检测数据集里,「汽车」有 10000 张,「救护车」只有 50 张。模型学完会发现:反正全预测成「汽车」也能有 99% 的准确率。那「救护车」呢?直接被忽略了。

类别权重就是给少数类「加钱」——让模型误分类少数类时,损失函数惩罚更大。

常见做法:

  • 逆频率加权:权重 = 总样本数 / (类别数 × 该类样本数)
  • 中位数频率加权:用样本数中位数代替总样本数,更鲁棒
  • 自定义权重:根据业务重要性手动调整

举个例子,假设三个类别的样本数分别是 [1000, 100, 10]:

# 逆频率加权计算
total = 1000 + 100 + 10 = 1110
num_classes = 3

class_0_weight = 1110 / (3 × 1000) = 0.37
class_1_weight = 1110 / (3 × 100)  = 3.70
class_2_weight = 1110 / (3 × 10)   = 37.00

看到没?样本最少的类别,权重是样本最多的 100 倍。这样模型才会「重视」那些稀有类别。

我建议:别一上来就调权重。先跑 baseline,看各类别的 AP 值。如果少数类的 AP 明显低于多数类,再考虑加权。权重从 2 倍开始试,别直接拉到 100 倍——容易过拟合。

3.4 三个参数的联动关系

这三个参数不是孤立的。它们互相影响,牵一发而动全身。

举个例子:你把置信度从 0.5 降到 0.3,预测框变多了。这些多出来的框里,有些 IoU 很低(比如 0.2)。如果 IoU 阈值是 0.5,这些低质量框会被判为误检,拉低精确率。但如果 IoU 阈值也降到 0.3,它们又变成正确检测了。

所以调参的顺序很重要:

  1. 先定 IoU 阈值:根据任务对框位精度的要求确定
  2. 再调类别权重:解决样本不平衡问题
  3. 最后调置信度:在精确率和召回率之间找平衡

我曾经犯过的错:同时调三个参数,结果改了 A 后 B 的效果变了,改了 B 后 C 又变了……来回折腾了两天,最后发现还不如从默认值开始,一个一个调。

下面这张图展示了三个参数在标注任务中的协作关系:

核心参数协作关系图 置信度阈值 IoU 阈值 类别权重 影响 影响 反馈调整 共同影响:精确率、召回率、mAP、F1-Score 推荐调参顺序 ① 先定 IoU 阈值 ② 再调类别权重 ③ 最后调置信度

3.5 实战:一个调参案例

去年我做了一个 PCB 缺陷检测项目,三类缺陷:短路(5000 张)、断路(300 张)、划痕(50 张)。

初始参数(默认值):置信度 0.5,IoU 0.5,无类别权重。

结果:

  • 短路 AP:0.95(很好)
  • 断路 AP:0.72(还行)
  • 划痕 AP:0.18(惨不忍睹)

调参过程:

  1. IoU 阈值:缺陷检测要求框位精确,提到 0.7
  2. 类别权重:按逆频率加权,划痕权重设为 33.3,断路设为 5.6
  3. 置信度:降到 0.4,提高召回率

最终结果:

  • 短路 AP:0.93(略有下降,但可接受)
  • 断路 AP:0.85(提升)
  • 划痕 AP:0.62(大幅提升)

我的经验:调参不是追求每个指标都最高,而是让最差的指标达到业务可接受的水平。划痕从 0.18 到 0.62,这个提升比短路从 0.95 到 0.93 的损失值多了。