目标检测中的检测框合并策略:NMS和Soft-NMS

概述

目标检测中的Region Proposal动辄上千,会形成大量有重合的检测框,需要使用某些算法对检测框去重。

常用的两种算法是NMS和Soft-NMS。

NMS

全称‘非极大值抑制(non maximum suppression)’.

算法思想很简单,按照分类概率排序,概率最高的框作为候选框,其它所有与它的IOU高于一个阈值(这是人工指定的超参)的框其概率被置为0。然后在剩余的框里寻找概率第二大的框,其它所有与它的IOU高于一个阈值(这是人工指定的超参)的框其概率被置为0。依次类推。

最终所有的框相互之间的IOU都是小于超参阈值的,或者概率被置为0了。剩下的所有概率非0的框就是最终的检测框。

NMS的缺点

首先,NMS算法需要一个超参,超参这玩意是个玄学,大了不行,小了也不行,很难平衡。

其次,NMS会将相邻的两个大概率目标框去掉一个,造成漏检,比如:

在这里插入图片描述

Soft-NMS

NMS算法是略显粗暴,因为NMS直接将删除所有IoU大于阈值的框。soft-NMS吸取了NMS的教训,在算法执行过程中不是简单的对IoU大于阈值的检测框删除,而是降低得分。算法流程同NMS相同,但是对原置信度得分使用函数运算,目标是降低置信度得分,伪代码如下:

在这里插入图片描述

其中红框内是NMS的步骤,绿框内是Soft-NMS的步骤(这两个步骤不共存,二选一)。
Soft-NMS没有在上述流程删除任何框,最后如果框的概率还大于一定值(如0.001,这又是一个超参了),则认为是一个有效检测框。

经典的NMS算法将IOU大于阈值的窗口的得分全部置为0,可表述如下:

在这里插入图片描述

soft-NMS置信度重置函数f有两种形式改进,一种是线性加权的:

在这里插入图片描述

一种是高斯加权的(线性的不平滑,高斯的加权函数是连续且平滑的):

在这里插入图片描述

可以说NMS是Soft-NMS特殊形式,当得分重置函数采用二值化函数时,Soft-NMS和NMS是相同的。soft-NMS算法是一种更加通用的非最大抑制算法。

论文作者提供的代码实现:https://github.com/bharatsingh430/soft-nms

Soft-NMS缺点

Soft-NMS的阈值仍然要手动指定,作者提到Soft-NMS对SSD、YOLO v2性能提升不明显。

总结

除了这两者还有很多检测框合并策略,比如Softter-NMS,还有旷视出品的IOU-Net等等。

参考资料

Soft-NMS论文原文: Soft-NMS: Improving object detection with one line of code

目标检测算法中检测框合并策略技术综述

NMS与soft NMS

Soft-NMS(3)_总结_ICCV2017

目标检测之非极大值抑制(NMS)各种变体

csdn博客:Soft-NMS: Improving object detection with one line of code

<think>嗯,用户问的是SSD目标检测优化,我需要先回顾一下SSD的基本结构工作原理。SSD,全称Single Shot MultiBox Detector,是一种单阶段的目标检测算法,主要特点是速度快且能处理多尺度目标。它的核心是在不同层次的特征图上进行预测,使用预定义的先验框(prior boxes)来覆盖各种尺度长宽比。 接下来,用户想知道如何优化SSD,可能需要了解常见的优化方向。首先,我得想到SSD的一些局限性,比如小目标检测效果可能不佳,因为浅层特征图语义信息不足。另外,先验框的设计是否合理也会影响性能,还有损失函数的平衡问题。 优化方法可以从几个方面入手。首先是特征提取网络的改进,比如用更强大的Backbone,比如ResNet或者EfficientNet替换原来的VGG,提升特征提取能力。然后是特征融合,加入FPN(特征金字塔网络)结构,融合多层特征,增强小目标的检测能力。此外,调整特征层的选择,增加更多浅层特征图来捕捉小目标。 第二个方面是优化先验框的设计。调整不同特征层的先验框尺度比例,使其更匹配数据集中目标的分布。比如使用聚类算法分析目标尺寸,自定义先验框参数。另外,减少冗余先验框的数量,降低计算量,可能提升速度。 损失函数方面,分类定位任务的平衡很重要。Focal Loss可以解决类别不平衡问题,让模型更关注难样本。调整定位损失的权重,比如调整Smooth L1损失的参数,或者使用GIoU Loss替代,提高边界框回归的准确性。 数据增强也是关键,多样化的增强策略能提升模型泛化能力。比如随机裁剪、颜色变换、MixUp、CutOut等。不过要注意增强的强度,过强可能导致模型学习到不真实的模式。 训练策略优化包括学习率调整,使用余弦退火或Warmup策略,以及选择合适的优化器,如AdamW配合权重衰减。多尺度训练能让模型适应不同尺度的输入,提升鲁棒性。 模型轻量化方面,可以用深度可分离卷积减少参数量,或者使用模型剪枝、量化技术,在保持精度的同时提升推理速度。 后处理优化,如非极大值抑制(NMS)的改进,使用Soft-NMS或DIoU-NMS,减少重叠框的误抑制。调整置信度阈值,平衡召回率准确率。 最后,知识蒸馏模型融合可能进一步提升性能,但可能会增加计算成本。 需要确保回答结构清晰,分点说明,每个优化方向下给出具体方法,并解释原理。还要注意使用正确的中文术语,避免技术错误。比如提到FPN时,要准确说明其作用,或者Focal Loss解决类别不平衡的机制。同时,要符合用户给的格式要求,数学公式用$...$,独立公式用$$...$$,但例子中用户给的数学公式可能不需要太多,除非涉及到具体算法细节。现在需要检查是否有遗漏的优化点,比如最新的研究进展是否有补充,但可能用户需要的是经典方法,所以保持基础内容即可。</think>SSD(Single Shot MultiBox Detector)是一种高效的单阶段目标检测算法。其优化可从以下方面展开: $$ \text{SSD} = \text{Backbone} + \text{Multi-scale Feature Maps} + \text{Default Box Prediction} $$ ### 一、特征提取网络优化 1. **更强Backbone** - 替换VGG为ResNet、MobileNet或EfficientNet,平衡速度与精度 - 示例:ResNet-50提升小目标检测能力 2. **特征融合改进** - 添加FPN(特征金字塔网络),融合高层语义与底层细节 - 增加浅层特征图数量,如从Conv4_3扩展到更多层 3. **注意力机制** - 嵌入CBAM或SE模块,增强关键特征响应 - 通道注意力公式: $$s_c = \sigma(W_2\delta(W_1(\frac{1}{HW}\sum_{i,j}x_c^{ij})))$$ ### 二、先验框优化 1. **尺寸聚类分析** - 使用K-means对数据集标注框聚类,自定义先验框尺寸 - 改进匹配策略,如Softmax替代阈值匹配 2. **宽高比调整** - 根据目标分布调整比例(如行人检测增加1:3框) - 减少冗余先验框(如从6个/位置压缩到4个) ### 三、损失函数改进 1. **Focal Loss应用** - 解决正负样本不平衡问题: $$FL(p_t) = -\alpha_t(1-p_t)^\gamma \log(p_t)$$ 2. **定位损失优化** - 使用GIoU Loss替代Smooth L1: $$GIoU = IoU - \frac{|C-B_{gt}\cup B_p|}{|C|}$$ ### 四、训练策略优化 1. **数据增强组合** - 采用MixUp+CutOut组合增强 - 随机几何变换保持比例在[0.5, 2] 2. **多任务平衡** - 动态调整分类/回归损失权重 - 使用uncertainty weighting: $$L_{total} = \frac{1}{2\sigma_1^2}L_{cls} + \frac{1}{2\sigma_2^2}L_{loc} + \log\sigma_1\sigma_2$$ ### 五、推理加速 1. **层融合技术** - 合并Conv+BN+ReLU为单次计算 - 使用TensorRT进行算子优化 2. **量化压缩** - FP32→INT8量化,保持98%精度 - 通道剪枝减少30%参数量 ### 六、后处理优化 1. **NMS改进** - 采用DIoU-NMS: $$s_i = \begin{cases} s_i, & \text{DIoU} < \epsilon \\ 0, & \text{otherwise} \end{cases}$$ 2. **置信度校准** - 温度缩放法修正置信度偏差 ### 典型优化效果对比 | 优化方法 | mAP提升 | FPS变化 | |---------|--------|--------| | FPN融合 | +3.2% | -5 | | 量化压缩 | -0.7% | +40 | | GIoU Loss | +1.5% | 持平 | **实践建议**: 1. 优先优化数据质量与增强策略 2. 小目标场景重点改进特征融合 3. 部署时采用TensorRT+INT8量化组合 4. 使用NAS搜索最优锚框配置 最新趋势:Transformer与CNN混合架构(如DETR-SSD)正在成为新的优化方向。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值