Soft-NMS 与 DIoU-NMS 实战:在密集目标场景下将 mAP 提升 2.5%
Soft-NMS 与 DIoU-NMS 实战突破密集目标检测的性能瓶颈在目标检测任务中非极大值抑制NMS算法扮演着至关重要的角色。传统NMS通过简单的IoU阈值判断来消除冗余检测框但在密集目标场景下这种一刀切的处理方式往往会导致严重的漏检问题。本文将深入解析两种前沿改进算法——Soft-NMS和DIoU-NMS通过PyTorch实战演示如何在实际项目中提升mAP指标。1. 传统NMS的局限性分析标准NMS算法的工作流程可以概括为三个关键步骤首先对所有检测框按置信度排序然后选择最高分框作为基准最后剔除所有与该框IoU超过阈值的相邻框。这个过程循环执行直到处理完所有检测框。def standard_nms(boxes, scores, iou_threshold): # 按置信度降序排序 order scores.argsort()[::-1] keep [] while order.size 0: i order[0] keep.append(i) # 计算当前框与其他框的IoU iou calculate_iou(boxes[i], boxes[order[1:]]) # 保留IoU低于阈值的框 inds np.where(iou iou_threshold)[0] order order[inds 1] return keep这种机制在简单场景下表现良好但在面对密集目标时暴露出明显缺陷阈值敏感性问题当目标间距较近时固定IoU阈值会导致阈值设置过高如0.7无法有效消除冗余框阈值设置过低如0.3可能抑制真实目标框置信度单一依赖仅凭分类得分决定框的取舍忽略了定位精度因素。实验数据显示在COCO数据集中约15%的情况下更高置信度的框反而具有更差的定位精度。相邻目标抑制对于重叠度高的不同目标如人群场景高分框会直接抑制相邻的真实目标框导致漏检率上升。下表展示了传统NMS在不同IoU阈值下的性能表现基于COCO val2017数据集IoU阈值mAP0.5召回率误检率0.30.7120.6830.1420.50.7340.6520.0980.70.7010.5870.0632. Soft-NMS渐进式抑制策略Soft-NMS的核心创新在于将硬删除改为软惩罚。当检测框与高分框重叠时不是直接剔除而是降低其置信度给予它们后续被保留的机会。这种机制特别适合处理密集场景中目标间距较近的情况。算法采用两种惩罚函数线性衰减 $$ s_i \begin{cases} s_i(1 - \text{IoU}(M, B_i)) \text{IoU}(M, B_i) \geq N_t \ s_i \text{IoU}(M, B_i) N_t \end{cases} $$高斯衰减效果更平滑 $$ s_i s_i e^{-\frac{\text{IoU}(M, B_i)^2}{\sigma}} $$def soft_nms(boxes, scores, iou_thresh0.3, sigma0.5, score_thresh0.001): boxes: [N,4] scores: [N] N boxes.shape[0] keep [] for i in range(N): max_pos i np.argmax(scores[i:]) boxes[[i, max_pos]] boxes[[max_pos, i]] scores[[i, max_pos]] scores[[max_pos, i]] keep.append(i) for j in range(i1, N): iou calculate_iou(boxes[i], boxes[j]) if iou iou_thresh: # 高斯衰减 scores[j] * np.exp(-(iou**2)/sigma) # 移除低分框 inds np.where(scores[i1:] score_thresh)[0] (i1) boxes boxes[inds] scores scores[inds] return keep实际部署时需要注意参数调优σ控制衰减幅度通常设置在0.3-0.6之间。在VisDrone密集人群数据上σ0.5时mAP提升最明显。计算开销相比标准NMS增加约15%的计算时间但无需重新训练模型。与模型协同当模型本身存在大量低质量候选框时Soft-NMS效果会打折扣。建议先通过置信度阈值如0.01进行初步过滤。3. DIoU-NMS几何感知的抑制准则DIoU-NMS在IoU基础上引入中心点距离惩罚项解决了传统NMS仅考虑重叠面积的局限性。其核心公式为$$ \text{DIoU} \text{IoU} - \frac{\rho^2(b_{pred}, b_{gt})}{c^2} $$其中ρ表示两框中心点的欧氏距离c是最小包围框的对角线长度。def diou_nms(boxes, scores, iou_thresh0.5, beta1.0): boxes: [N,4] (x1,y1,x2,y2) scores: [N] beta: 距离惩罚权重 order scores.argsort()[::-1] keep [] while order.size 0: i order[0] keep.append(i) # 计算DIoU diou calculate_diou(boxes[i], boxes[order[1:]], beta) # 保留DIoU低于阈值的框 inds np.where(diou iou_thresh)[0] order order[inds 1] return keep def calculate_diou(box1, boxes, beta): # 计算IoU iou calculate_iou(box1, boxes) # 计算中心点距离惩罚 c_x1 np.minimum(box1[0], boxes[:,0]) c_y1 np.minimum(box1[1], boxes[:,1]) c_x2 np.maximum(box1[2], boxes[:,2]) c_y2 np.maximum(box1[3], boxes[:,3]) c_dist (c_x2 - c_x1)**2 (c_y2 - c_y1)**2 1e-7 b1_cx, b1_cy (box1[0]box1[2])/2, (box1[1]box1[3])/2 b2_cx, b2_cy (boxes[:,0]boxes[:,2])/2, (boxes[:,1]boxes[:,3])/2 center_dist (b1_cx - b2_cx)**2 (b1_cy - b2_cy)**2 return iou - (center_dist / c_dist) * betaDIoU-NMS的优势主要体现在几何敏感性对中心点偏移更敏感能更好区分相邻目标。在COCO数据集的拥挤场景测试中相比标准NMS将误检率降低了23%。参数自适应β参数控制距离惩罚的强度β→∞退化为标准NMSβ→0仅考虑中心点距离兼容性可直接替换现有NMS模块无需修改模型结构。4. 实战对比与调优指南我们在COCO 2017 val数据集上对比了三种算法性能基于YOLOv5s模型方法mAP0.5推理时间(ms)密集场景召回率标准NMS0.7342.10.587Soft-NMS0.7522.40.642DIoU-NMS0.7592.30.668参数调优建议Soft-NMS初始设置σ0.5score_thresh0.01密集场景适当增大σ至0.6-0.8计算敏感型应用可降低至σ0.3DIoU-NMS通用设置β1.0高密度场景β0.5-0.8大目标主导场景β1.2-1.5# 综合优化示例 def optimized_nms(boxes, scores, methoddiou, iou_thresh0.5, sigma0.5, beta1.0): if method soft: return soft_nms(boxes, scores, iou_thresh, sigma) elif method diou: return diou_nms(boxes, scores, iou_thresh, beta) else: return standard_nms(boxes, scores, iou_thresh)部署注意事项在嵌入式设备上Soft-NMS可能带来不可忽略的计算开销建议使用CUDA优化版本。对于小目标检测如遥感图像DIoU-NMS的β值需要调小0.3-0.5。两种算法可以组合使用但要注意计算成本与收益的平衡。5. 前沿扩展与工程实践Softer-NMS进一步考虑了定位不确定性通过预测框的方差来加权融合相邻框的坐标。其核心公式为$$ \text{Var}(b_i) \frac{1}{1 - \text{IoU}(b_i, b_{max}) \epsilon} $$Cluster-NMS则利用矩阵运算并行化处理大幅提升计算效率。其伪代码如下def cluster_nms(boxes, scores, iou_thresh): # 计算IoU矩阵 iou_matrix pairwise_iou(boxes, boxes) # 构建抑制关系图 suppress iou_matrix iou_thresh # 并行处理 keep (~suppress).all(axis1) return keep在实际项目中我们通过以下策略实现了mAP 2.5%的提升训练阶段增加定位损失权重提高框的初始质量推理时采用DIoU-NMSβ0.8作为主流程对特定类别如行人启用Soft-NMS二次处理使用TensorRT加速控制总延迟在3ms以内工程经验在部署到Jetson Xavier设备时发现原始实现存在内存瓶颈。通过将IoU计算改为分块处理内存占用从1.2GB降至400MB帧率提升至28FPS。

相关新闻

AI自我进化:从代码生成到研发飞轮,开发者如何应对工作流变革

AI自我进化:从代码生成到研发飞轮,开发者如何应对工作流变革

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 1. 先搞清楚“AI自我进化”到底在说什么,以及为什么现在被频繁提起 最近关于“AI自我进化”或“递归自我改进”的讨论突然…

2026/7/6 12:21:20阅读更多 →
ctf竞赛解题1

ctf竞赛解题1

题目1:Web安全挑战题目描述: 本次实验目标地址为 http://example.com/login,页面部署了基础登录功能,通过用户名和密码表单校验用户身份。本次任务旨在挖掘页面安全漏洞,绕过登录验证机制,成功获取系统 Fla…

2026/7/6 12:21:20阅读更多 →
Windows Administrator账户:开启、使用与安全关闭的完整指南

Windows Administrator账户:开启、使用与安全关闭的完整指南

1. 为什么需要Administrator账户?Windows系统中的Administrator账户就像一把万能钥匙,拥有对系统的完全控制权。这个账户默认处于禁用状态,主要是出于安全考虑。想象一下,如果每个人都能随意使用这个账户,系统就像一座…

2026/7/6 12:21:20阅读更多 →
huggingface注册失败418

huggingface注册失败418

1.官网地址 https://huggingface.co/2.解决方法: 手动开启代理,切换wanwan的代理可以直接注册成功

2026/7/6 13:36:27阅读更多 →
Decoupled and Reusable Adaptation for Efficient Cross-Modal Transfer

Decoupled and Reusable Adaptation for Efficient Cross-Modal Transfer

Abstract跨模态迁移方法在将基于 RGB 的基础模型扩展到非 RGB 模态方面取得了显著进展。然而,现有的迁移范式主要是面向任务的,这意味着一旦任务发生变化,就需要重新训练并重新存储模型,从而在数据、计算和存储方面造成大量冗余。…

2026/7/6 13:36:27阅读更多 →
使用Lambda表达式编写递归函数

使用Lambda表达式编写递归函数

例如&#xff0c;我们想要使用Lambda表达式编写一个计算递归的fac函数&#xff0c;一开始我们总会设法这样做&#xff1a; <span style"color:#333333"><span style"background-color:#ffffff"><span style"color:#2b91af">Fu…

2026/7/6 13:36:27阅读更多 →
阶段二:AI手工测试3 敏捷开发与APP发布全攻略

阶段二:AI手工测试3 敏捷开发与APP发布全攻略

目录 1 软件开发方法 1.1 敏捷开发&#xff08;scrum&#xff09;模型 2 项目上线发布策略 3 APP发布简介 3.1 APP软件包类型 3.2 APP测试包如何发布和管理 3.3 APP如何发布给客户 1 软件开发方法 迭代速度不同&#xff1a;开发模型不一样 传统行业&#xff1a;瀑布模…

2026/7/6 13:36:27阅读更多 →
huggingface下载模型

huggingface下载模型

1.浏览器输入网址&#xff0c;登录huggingface官网 注册huggingface失败的&#xff0c;请看&#xff1a;https://www.cnblogs.com/Leonardo-li/p/19769436 https://huggingface.co/ 2.创建access token 首次创建access token需要先按照它的提示给注册邮箱发送连接&#xff0…

2026/7/6 13:36:27阅读更多 →
Spring Boot Actuator 暴露 heapdump,内存里的密码可能全漏了

Spring Boot Actuator 暴露 heapdump,内存里的密码可能全漏了

Spring Boot Actuator 暴露 heapdump&#xff0c;内存里的密码可能全漏了线上开了 Actuator&#xff0c;本来是为了方便排查问题。 结果 /actuator/heapdump 也暴露出去了。 一份堆转储文件下载下来&#xff0c;数据库连接串、Redis 密码、Token、用户请求参数&#xff0c;都可…

2026/7/6 13:31:26阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述&#xff1a;从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目&#xff0c;叫 skills4/skills &#xff0c;它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景&#xff1a;一个旨在展示或教授某种技能的仓库&#xff0c;本身却成了安…

2026/7/6 4:26:20阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示&#xff1a;因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战&#xff1a;从“黑箱预测”到“可信推理”2026年6月&#xff0c;第7届机器学习与趋势国际会议&#xff08;MLT 2026&#xff09;将在悉尼召开。会议议程中&#xff0c;“因果与可解释机器学习…

2026/7/6 2:48:33阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时&#xff0c;通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中&#xff0c;是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/6 0:10:35阅读更多 →
Seraphine:基于LCU API的英雄联盟智能游戏助手技术解析与应用指南

Seraphine:基于LCU API的英雄联盟智能游戏助手技术解析与应用指南

Seraphine&#xff1a;基于LCU API的英雄联盟智能游戏助手技术解析与应用指南 【免费下载链接】Seraphine 英雄联盟战绩查询工具 项目地址: https://gitcode.com/gh_mirrors/se/Seraphine 技术架构先行&#xff1a;官方接口的合规应用 你是否曾在BP阶段手忙脚乱&#x…

2026/7/6 0:03:39阅读更多 →
多协议远程连接管理工具mRemoteNG:告别混乱,统一你的远程桌面管理

多协议远程连接管理工具mRemoteNG:告别混乱,统一你的远程桌面管理

多协议远程连接管理工具mRemoteNG&#xff1a;告别混乱&#xff0c;统一你的远程桌面管理 【免费下载链接】mRemoteNG mRemoteNG is the next generation of mRemote, open source, tabbed, multi-protocol, remote connections manager. 项目地址: https://gitcode.com/gh_m…

2026/7/6 0:03:39阅读更多 →
COUNT(DISTINCT) 与 GROUP BY 去重统计:5 亿数据量下的性能实测与选型指南

COUNT(DISTINCT) 与 GROUP BY 去重统计:5 亿数据量下的性能实测与选型指南

COUNT(DISTINCT) 与 GROUP BY 去重统计&#xff1a;5 亿数据量下的性能实测与选型指南在数据分析和处理领域&#xff0c;去重统计是最基础也是最频繁使用的操作之一。当数据量达到亿级规模时&#xff0c;不同的去重统计方法在性能上可能产生天壤之别。本文将基于 5 亿行数据的实…

2026/7/6 0:03:39阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时&#xff0c;发现推理速度只有可怜的 1-2 FPS&#xff0c;而别人的演示视频却能跑到 30 FPS 以上&#xff0c;那么问题很可能不在模型本身&#xff0c;而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后&#xff0c;会直接使用官方示例…

2026/7/6 4:45:01阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一&#xff1a;为什么你需要了解 Coze 和 Dify&#xff1f;如果你对 AI 应用开发感兴趣&#xff0c;但一看到“大模型”、“智能体”、“工作流”这些词就头疼&#xff0c;觉得门槛太高&#xff0c;那这篇文章就是为你准备的。很多开发者&#xff0c;包括我自己&#…

2026/7/6 4:45:01阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会&#xff1a;配图一直是个让人头疼的问题。2026年&#xff0c;AI生图工具已经非常成熟了&#xff0c;但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1&#xff1a;速度之王2026年6月11日&#xff0c…

2026/7/6 4:45:03阅读更多 →