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,它们又变成正确检测了。
所以调参的顺序很重要:
- 先定 IoU 阈值:根据任务对框位精度的要求确定
- 再调类别权重:解决样本不平衡问题
- 最后调置信度:在精确率和召回率之间找平衡
我曾经犯过的错:同时调三个参数,结果改了 A 后 B 的效果变了,改了 B 后 C 又变了……来回折腾了两天,最后发现还不如从默认值开始,一个一个调。
下面这张图展示了三个参数在标注任务中的协作关系:
3.5 实战:一个调参案例
去年我做了一个 PCB 缺陷检测项目,三类缺陷:短路(5000 张)、断路(300 张)、划痕(50 张)。
初始参数(默认值):置信度 0.5,IoU 0.5,无类别权重。
结果:
- 短路 AP:0.95(很好)
- 断路 AP:0.72(还行)
- 划痕 AP:0.18(惨不忍睹)
调参过程:
- IoU 阈值:缺陷检测要求框位精确,提到 0.7
- 类别权重:按逆频率加权,划痕权重设为 33.3,断路设为 5.6
- 置信度:降到 0.4,提高召回率
最终结果:
- 短路 AP:0.93(略有下降,但可接受)
- 断路 AP:0.85(提升)
- 划痕 AP:0.62(大幅提升)
我的经验:调参不是追求每个指标都最高,而是让最差的指标达到业务可接受的水平。划痕从 0.18 到 0.62,这个提升比短路从 0.95 到 0.93 的损失值多了。