检测后处理与框融合
一、目标检测后处理流程
完整后处理管线
多模型预测 → 置信度过滤(OOF选阈值) → 框融合(NMS/WBF/Soft-NMS) → 最终结果
| 步骤 |
方法 |
作用 |
| 1. 置信度过滤 |
OOF选最优阈值 |
平衡精确率与召回率 |
| 2. 框去重 |
NMS/Soft-NMS/WBF |
消除重叠框 |
| 3. 结果融合 |
多模型/多尺度结果合并 |
提升最终精度 |
二、NMS(非极大值抑制)
标准NMS
| 维度 |
说明 |
| 问题 |
同一目标被多个框检测,需要去重 |
| 流程 |
1.按置信度排序 2.取最高分框保留 3.计算其余框与该框IoU 4.删除IoU>阈值的框 5.重复直到无框 |
| 阈值 |
通常0.5~0.7,IoU>阈值则抑制 |
| 缺点 |
密集目标场景下误删相邻真实目标 |
Soft-NMS
| 维度 |
说明 |
| 问题 |
标准NMS对密集目标误删 |
| 改进 |
不直接删除IoU>阈值的框,而是降低其置信度 |
| 公式 |
score_new = score * (1 - IoU) 或 score * exp(-IoU^2/sigma) |
| 效果 |
密集目标场景下比标准NMS更好 |
| 参数 |
sigma通常0.5 |
| 适用 |
小麦穗检测等密集目标场景 |
NMS变体选择
| 场景 |
推荐方法 |
理由 |
| 稀疏目标 |
标准NMS |
简单高效 |
| 密集目标 |
Soft-NMS |
不误删相邻目标 |
| 多模型融合 |
WBF |
见下节 |
三、WBF(加权框融合)
WBF原理
| 维度 |
说明 |
| 问题 |
NMS只保留高分框丢弃低分框,信息损失 |
| 核心思想 |
将多个模型预测的重叠框融合为一个框,而非丢弃 |
| 流程 |
1.按置信度排序 2.匹配重叠框 3.加权平均坐标和置信度 4.输出融合框 |
| 与NMS区别 |
NMS丢弃低分框,WBF融合所有框 |
| 效果 |
多模型融合时比NMS/Soft-NMS更好 |
WBF vs NMS vs Soft-NMS
| 方法 |
处理重叠框方式 |
信息利用 |
适用场景 |
| NMS |
丢弃低分框 |
低 |
单模型稀疏目标 |
| Soft-NMS |
降低低分框置信度 |
中 |
单模型密集目标 |
| WBF |
加权融合所有框 |
高 |
多模型融合 |
WBF参数
| 参数 |
说明 |
建议值 |
| iou_thr |
框匹配IoU阈值 |
0.55~0.7 |
| skip_box_thr |
跳过置信度低于此值的框 |
0.1~0.3 |
| weights |
各模型权重 |
按模型表现分配 |
| conf_type |
置信度融合方式 |
'avg'或'max' |
四、OOF(最优置信度阈值选择)
OOF原理
| 维度 |
说明 |
| 问题 |
置信度阈值影响精确率和召回率的平衡 |
| 阈值太高 |
精确率高但召回率低(漏检) |
| 阈值太低 |
召回率高但精确率低(误检) |
| OOF目标 |
找到使最终评价指标最优的阈值 |
OOF实现方法
| 方法 |
说明 |
| 网格搜索 |
在[0.1, 0.9]范围内以0.01步长搜索最优阈值 |
| 验证集优化 |
在验证集上计算不同阈值下的mAP,选最优 |
| 贝叶斯优化 |
用贝叶斯方法高效搜索阈值空间 |
阈值选择建议
| 场景 |
建议阈值范围 |
理由 |
| 稀疏目标 |
0.3~0.5 |
避免漏检 |
| 密集目标 |
0.4~0.6 |
平衡精确率和召回率 |
| 多模型融合后 |
0.3~0.5 |
融合后置信度分布变化 |
五、伪标签在CV中的应用
伪标签使用场景
| 场景 |
说明 |
效果 |
| 模型精度较高时 |
用模型对测试集预测,高置信度样本加入训练 |
小麦检测中提分明显 |
| 比赛规则允许时 |
确认比赛允许使用测试集伪标签 |
需确认规则 |
| 深度学习模型 |
伪标签对深度学习模型效果更好 |
- |
伪标签实现流程
1. 用当前最优模型对测试集预测
2. 筛选高置信度(>0.9)预测结果
3. 将高置信度样本加入训练集
4. 重新训练模型
5. 重复2~4直到收敛
伪标签注意事项
| 注意点 |
说明 |
| 置信度阈值 |
过低引入噪声,通常0.9+ |
| 迭代次数 |
1~2轮即可,过多过拟合 |
| 模型选择 |
用融合模型生成伪标签,单模型噪声大 |
| 数据量 |
伪标签数据量不宜超过原始训练集 |
| 规则确认 |
部分比赛禁止使用测试集伪标签 |
六、分割后处理
分割后处理方法
| 方法 |
说明 |
适用场景 |
| 连通域分析 |
去除小面积碎片,保留大面积区域 |
去除噪声预测 |
| 空洞填充 |
填充预测掩码中的空洞 |
医学图像 |
| 边界细化 |
用CRF(条件随机场)细化分割边界 |
边界精度要求高 |
| 形态学操作 |
腐蚀+膨胀去除毛刺 |
去除边缘噪声 |
| 阈值优化 |
在验证集上搜索最优二值化阈值 |
概率图→二值掩码 |
医学大图后处理流程
1. 切片预测结果拼回大图坐标空间
2. 重叠区域取平均或取最大值
3. 连通域分析去除碎片(面积<阈值)
4. 空洞填充(医学结构通常是连通的)
5. 形态学操作平滑边界
6. 输出最终分割掩码
七、检测融合实战流程
1. 各模型独立预测 → 得到各自的框集合
2. 合并所有模型的框集合
3. 用WBF/NMS进行框融合
4. OOF选择最优置信度阈值
5. 过滤低置信度框
6. 输出最终结果
融合多样性保证
| 维度 |
方法 |
| 架构多样性 |
EfficientDet + YOLOv5 + Faster R-CNN |
| 尺度多样性 |
不同输入尺寸(512/640/768) |
| 折数多样性 |
不同折训练的模型 |
| 增强多样性 |
不同TTA变换的预测结果 |
八、SAHI(切片辅助推理)
| 维度 |
说明 |
| 核心问题 |
小目标在大图中占比极小,直接推理容易漏检 |
| 核心思想 |
将大图切片后逐片检测,再将切片检测结果合并回原图坐标 |
| 切片方式 |
滑动窗口切片,有重叠区域(如overlap=0.2~0.3) |
| 合并策略 |
切片检测结果坐标偏移回原图 + NMS/WBF去重 |
| 与医学大图区别 |
医学大图是训练时切片,SAHI是推理时切片 |
| 效果 |
小目标检测mAP提升5~15个百分点 |
| 实现 |
sahi库,支持YOLOv5/EfficientDet/MMDetection等 |
| 竞赛建议 |
小麦穗检测、海星检测等小目标场景几乎必须使用 |
SAHI实战流程
1. 加载训练好的检测模型
2. 将测试大图切片(如1024x1024, overlap=0.25)
3. 每个切片独立推理
4. 将切片检测结果坐标偏移回原图
5. 用WBF/NMS合并重叠区域的检测框
6. 输出最终检测结果
九、检测竞赛常见踩坑点
| 坑点 |
原因 |
解决方案 |
| 小目标漏检 |
输入尺寸太小或未用SAHI |
增大输入尺寸 + SAHI切片推理 |
| 密集目标误删 |
标准NMS删除相邻目标 |
Soft-NMS替代标准NMS |
| 置信度阈值不对 |
默认0.5非最优 |
OOF网格搜索最优阈值 |
| 多模型融合不提升 |
模型缺乏多样性 |
跨架构融合(EfficientDet+YOLOv5) |
| 医学大图显存溢出 |
TIF图太大无法一次推理 |
切片训练+切片推理+拼接 |
| 框融合后精度下降 |
WBF参数不当 |
调整iou_thr和skip_box_thr |
| TTA后精度反而下降 |
变换选择不当 |
只用可逆变换(翻转/缩放) |