torchvision.ops.nms实现NMS

避免目标检测中的重复框:torchvision.ops.nms参数详解与调优技巧 本文深入解析了torchvision.ops.nms在目标检测后处理中的关键作用与调优技巧。重点探讨了iou_threshold参数如何平衡检测精度与召回率,并详细介绍了置信度预过滤、多类别Batch NMS处理以及针对密集场景的性能优化策略,帮助开发者有效避免重复框,提升模型输出质量。 阅读详情
AI摘要

NMS(非极大值抑制)用于目标检测模型中去除重复的检测框,主要步骤包括概率筛选、按概率排序和IOU计算。torchvision.ops.nms函数执行NMS操作,输入包含框坐标和概率,返回保留的框索引。在Yolov8的例子中,通过batchedNMS处理多类别检测,避免不同类别间的误删。

nms原理:
当目标检测模型对一个目标有多个检测框时,需要滤掉多余的框,留下最接近真实目标的框。

在这里插入图片描述

步骤是这样的:
1.先把目标框初筛一波,比如设阈值为0.25, 把预测概率 < 0.25的目标框滤掉。
2.把 每个类别的 目标框 按预测概率从大到小排序。
3.每个类别的目标框 两两计算 IOU,当IOU > 阈值时,说明这两个目标框高度重合,没必要都留着,留概率较大的那个。注意这里是同类别的框计算IOU,不同类别的即使高度重合也不滤掉。

这样每个类别就滤掉了多余的框。因为已经按照预测概率从大到小排序,所以两两计算IOU时优先计算的是概率较大的框。

下面看下torchvision.ops.nms的用法,
这里假设有N个目标框。
传入参数boxes为Tensor,shape为[N,4], 每个box坐标格式是(x1,y1,x2,y2),即左上角右下角坐标。
如果你的目标框为(x,y,w,h), 需要做格式转换。
score: Tensor, shape为[N], 每个目标框检测的概率,如果是COCO,预测了80个类别的概率,就把最大的概率取出来。
iou阈值:float型,每个类别内两两目标框IOU > 这个阈值时,扔掉概率小的那个。

用它之前先用概率阈值初筛一波box, 把预测概率很低的box去掉。
需要把box的坐标转为左上角右下角坐标格式。
把box按概率从大到小排序。
提取每个box的预测概率。

torchvision.ops.nms的注释:
```python
def nms(boxes: Tensor, scores: Tensor, iou_threshold: float) -> Tensor:
    """
    Performs non-maximum suppression (NMS) on the boxes according
    to their intersection-over-union (IoU).

    NMS iteratively removes lower scoring boxes which have an
    IoU greater than iou_threshold with another (higher scoring)
    box.

    If multiple boxes have the exact same score and satisfy the IoU
    criterion with respect to a reference box, the selected box is
    not guaranteed to be the same between CPU and GPU. This is similar
    to the behavior of argsort in PyTorch when repeated values are present.

    Args:
        boxes (Tensor[N, 4])): boxes to perform NMS on. They
            are expected to be in ``(x1, y1, x2, y2)`` format with ``0 <= x1 < x2`` and
            ``0 <= y1 < y2``.
        scores (Tensor[N]): scores for each one of the boxes
        iou_threshold (float): discards all overlapping boxes with IoU > iou_threshold

    Returns:
        Tensor: int64 tensor with the indices of the elements that have been kept
        by NMS, sorted in decreasing order of scores
    """

下面以yolov8为例,说明如何用torchvision.ops.nms来计算nms, 过滤掉多余的目标框。

这里yolov8的prediction是(1,116,5460), 其中5460是anchor的数量,
116的前4个是目标框坐标(x,y,w,h), 中间80个是COCO数据集中80个类的预测概率,
后面32个是mask coeff, 分割mask用的,nms这里不用。只用到前面84个。

正常情况下每个类别都要算一次nms, 这里用了batched nms, 用了小技巧把所有类别的nms一起计算。

PyTorch目标检测实战:用torchvision.ops.nms优化YOLOv8预测结果(附完整代码) 本文详细介绍了如何利用PyTorch的torchvision.ops.nms函数优化YOLOv8目标检测模型的后处理流程。通过解析NMS原理、解码YOLOv8输出格式,并提供了完整的代码实现,帮助开发者高效去除冗余检测框,提升模型最终预测结果的精度与整洁度。 阅读详情

相关推荐

YOLOv8目标检测实战:如何用torchvision.ops.nms优化检测框(附完整代码)

本文详细介绍了如何利用torchvision.ops.nms优化YOLOv8目标检测模型的输出,通过实战代码演示从原始预测到最终结果的全流程处理。文章深入解析NMS原理、YOLOv8输出预处理、坐标转换及多类别处理技巧,帮助开发者提升检测精度与效率。

weixin_29053383的博客 279

PyTorch中Non-Max Suppression(NMS)原理与工程实践

非极大值抑制(NMS)是目标检测后处理的核心算法,用于消除冗余边界框,其本质是基于IoU交并比与置信度分数的贪心筛选过程。在PyTorch生态中,torchvision.ops.nms提供了高效CUDA加速实现,但要求输入坐标格式规范、score严格降序且张量类型为float32,否则易触发静默错误或性能断层。理解NMS的坐标编码方式(如x1y1x2y2)、IoU鲁棒性处理(零面积框、边界重叠)及多类别扩展能力,直接关系到模型部署时的精度与吞吐表现。本文聚焦PyTorch原生NMS的调用约束、常见陷阱与真实

weixin_30565327的博客 385

PyTorch目标检测NMS实战:从原理、优化到TensorRT部署

非极大值抑制(NMS)是目标检测后处理的核心技术,本质是在高重叠候选框中依据置信度与IoU进行贪心筛选的决策过程。其原理依赖交并比(IoU)量化空间重叠,技术价值在于平衡检出率与误检率,广泛应用于YOLO、SSD等模型的工业部署场景。实际工程中,经典NMS存在O(N²)计算瓶颈,需结合Fast NMS向量化加速、Soft-NMS密集目标适配及DIoU-NMS长宽比优化等变体;在PyTorch中须严守float32输入、CPU执行、xyxy坐标格式等关键约束,而面向嵌入式与实时系统时,更需通过TensorRT

a5199519的博客 477

PyTorch目标检测NMS实战:从原理、调优到CUDA加速与ONNX部署

非极大值抑制(NMS)是目标检测模型落地的关键后处理技术,其本质是基于IoU和置信度的框筛选机制,而非简单删除。理解IoU阈值的业务语义、坐标格式规范与浮点精度影响,是保障mAP稳定与部署可靠的前提。在PyTorch工程中,torchvision.ops.nms提供高效CUDA实现,但需严格满足设备一致、float32输入、一维score等隐式契约;面对ONNX导出失败、Jetson低延迟或小目标漏检等场景,则需结合Soft-NMS、分层NMS或自定义CUDA内核。本文聚焦工业级实践,覆盖PyTorch N

weixin_30266885的博客 715

PyTorch目标检测NMS实战:从原理到GPU加速部署

非极大值抑制(NMS)是目标检测后处理的核心技术,用于消除冗余边界框、提升检测结果唯一性与可用性。其本质是基于IoU(交并比)的贪心筛选算法,在保持高召回率的同时抑制重叠预测。在PyTorch生态中,torchvision.ops.nms提供了高效、稳定、GPU原生支持的工业级实现,相比手写Python或OpenCV方案提速超200倍。该算子以索引返回机制保障数据关联安全性,天然适配YOLO、Faster R-CNN等主流模型流水线。本文聚焦工程落地,详解score_thresh与iou_threshold

a5199519的博客 471

手写可调试NMS:目标检测后处理的工程实践与避坑指南

非极大值抑制(NMS)是目标检测模型输出后处理的核心环节,其本质是基于IoU的冗余框筛选机制,涉及坐标系对齐、浮点精度控制、排序稳定性及设备一致性等底层原理。作为影响mAP、召回率与推理延迟的关键技术节点,NMS不仅决定检测结果质量,更深度耦合预处理、模型输出格式与部署环境。在小目标密集、多类别共存、边缘设备低精度等真实场景下,标准NMS易引发漏检、跨类误抑、NaN崩溃等问题;而Soft-NMS、DIoU-NMS等变体则通过score衰减或几何约束提升鲁棒性。本文聚焦PyTorch生态下的NMS工程实现,覆

weixin_30516243的博客 575

【python】yolov5的torch与torchvision环境问题

1.可用环境 torch==1.7.1+cu110 torchvision==0.8.2+cu110 2.错误环境遇到的问题 (1)情况一 torch==1.7.0+cu110 torchvision==0.8.0 训练yolov5时,训练就会开始报错: return torch.ops.torchvision.nms(boxes, scores, iou_threshold) RuntimeError: Could not run 'torchvision::nms' with argu

聿默的博客 8246

SugarNMSTool:面向工业检测的轻量可扩展NMS后处理工具

非极大值抑制(NMS)是目标检测 pipeline 中关键的后处理步骤,其核心原理是基于 IoU 重叠度与置信度排序实现冗余框抑制。在工业缺陷检测等高可靠性场景中,通用 NMS 实现常面临字段丢失、抑制逻辑不可控、嵌入式部署不友好等技术瓶颈。SugarNMSTool 以纯 Python 实现为基座,支持多字段保留、自定义排序键(key_func)、分组抑制(grouped NMS)及可审计的抑制关系追踪,兼顾确定性、可调试性与低资源开销。特别适用于 PCB 检测、焊点识别、表面划痕定位等边缘部署任务,为算法

weixin_28221501的博客 276

NMS算法简单优化

修改了NMS的算法的一些内容,优化了IOU的运算速度,提供了简单的思路

普源精电DHO系列示波器选购指南:从学生党到工程师的完整对比

本文深入评测普源精电DHO系列示波器,从DHO800到DHO4000各型号的核心参数、功能特点及适用场景进行全面对比,帮助学生党和工程师根据实际需求选择最佳型号。重点分析带宽、采样率、存储深度等关键指标,并提供实用的选购建议和进阶使用技巧,帮助用户充分发挥示波器性能。

weixin_30485379的博客 166

(3万字深度解析)Kaggle《房价预测:高级回归技巧》详解复现攻略

在这篇教程式文章中,我们从零开始完成了 Kaggle《房价预测:高级回归技巧》比赛的复现工作,涵盖了数据预处理、特征工程、模型训练、调优、解释和融合的完整流程。深入理解数据:阅读数据描述,结合常识对每个特征作出合理处理(如缺失值填充’None’表示无此设施 、异常值剔除 等)。对目标和偏态特征进行对数变换,使分布更平滑,从而更好满足模型假设并提升准确度。特征工程:我们创造了总面积、总浴室等新特征,整合信息提高模型可学习性。

qq_38334677的博客 1768

01 Python学习总结:Python简介及入门

Python 是一门高级编程语言,以其简洁、易读和强大的功能而广受欢迎。它适用于多种应用场景,包括 Web 开发、数据分析、人工智能、自动化脚本等。以下是 Python 的简介及入门知识总结,帮助你快速了解并开始学习 Python。

数据知道的博客 1万+

hwasan实例分析踩内存之一:camx进程stack tag-mismatch的三种解决方案

hwasan实例分析踩内存之一:camx进程stack tag-mismatch的三种解决方案。

1291

ATE FT ChangeKit学习总结-20250630

半导体封装测试中的ChangeKit是Handler测试机的关键配套治具,主要用于适配不同芯片封装尺寸的FT测试。其主要特点包括:1)适应性,可快速切换不同测试设置;2)精准性,确保器件测试安全;3)高效性,减少停机时间。主要组件含Shuttle传送机构、HotPlate预热盘、DockPlate连接件和Contactor压头。设计需考虑Handler型号、芯片规格及PCB匹配(如140mm标准孔位),特别在低温测试时需注意吹气块布局。ChangeKit实现了测试设备的灵活配置,提升了半导体测试效率。

歌颂苦难的行为是无耻的; 1745

使用lighttpd和开发板进行交互

本文介绍了如何在嵌入式开发板上使用Lighttpd Web服务器实现硬件交互功能。主要内容包括:Lighttpd通过CGI程序间接控制硬件的基本原理;lighttpd.conf配置文件的详细解析;开发板文件目录结构设计;用C语言编写控制GPIO的CGI程序示例;网页调用CGI实现按钮触发控制的HTML代码;常见问题调试建议。最后通过效果图展示了网页按钮点击后成功控制LED灯的实际效果,验证了Lighttpd+CGI方案在嵌入式设备Web控制中的可行性。

m0_49476241的博客 1423

KEPServerEX 6 之驱动协议(UDD)实战 HTTP协议对接OpenWeatherMap天气 API全流程指南

本文分享了基于 KEPServerEX 6 的通用设备驱动(UDD)对接OpenWeatherMap天气API的实战方案。该方案针对工业物联网场景进行了深度优化,具有动态城市切换、运行时热配置、老旧JS引擎兼容等核心特性。文章详细介绍了从环境准备、脚本部署到Tag配置的全流程,重点解析了Legacy JS语法适配、Float类型安全处理等关键实现细节,并提供了完整的避坑指南和故障排查方法。该方案经过生产环境验证,可稳定实现气象数据采集与动态切换功能,适用于SCADA/MES系统集成场景。

-雲飛兄-博客 712

VS2019项目使用CGAL6.1配置教程详细步骤

在VS2019项目中使用CGAL详细步骤

插件开发 331

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

上一篇: leetcode 1161. Maximum Level Sum of a Binary Tree(二叉树最大层和)
下一篇: leetcode 2090. K Radius Subarray Averages(半径为k的子数组的平均)
蓝羽飞鸟
博客等级 码龄8年 1万+粉丝 727原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝羽飞鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值