检测后处理与框融合

检测后处理与框融合


一、目标检测后处理流程

完整后处理管线

多模型预测 → 置信度过滤(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后精度反而下降 变换选择不当 只用可逆变换(翻转/缩放)