【目标检测】NMS、SoftNMS

一、NMS

1. 作用

非极大值抑制(Non-Maximum Suppression)会根据IoU筛选出一定区域内属于同一种类得分最大的框。

关于IoU及其变种的介绍请参考IoU、GIoU、DIoU、CIoU、EIoU。一个简单的通过一次NMS直接筛选所有类别的方法,推荐参考视频18:52处讲解的PyTorch中的处理方法

我们的以下内容均仅针对一张图像的一个类别。

2. 步骤

NMS需要4个参数:预测框坐标( N × 4 N\times 4 N×4)、预测分数( N N N)、分数阈值( 1 1 1)、IoU阈值( 1 1 1
(1) 将预测分数低于分数阈值的预测结果滤除;
(2) 将剩余预测结果按照预测分数降序排列,假设排序为 A ( 0.9 ) > B ( 0.8 ) > C ( 0.7 ) > D ( 0.6 ) > E ( 0.5 ) A(0.9)>B(0.8)>C(0.7)>D(0.6)>E(0.5) A(0.9)>B(0.8)>C(0.7)>D(0.6)>E(0.5)
(3) 保留最大分数框 A A A,计算 A A A与剩余框 B , C , D , E B,C,D,E B,C,D,E间的IoU,假设分别为 0.5 , 0.6 , 0.7 , 0.8 0.5,0.6,0.7,0.8 0.5,0.6,0.7,0.8
(4) 将IoU大于IoU阈值的预测结果滤除,假设IoU阈值为0.6,则仅剩下 B , C B,C B,C
(5) 对剩余框执行(3)、(4),直至无剩余预测框,返回所有被保留的预测结果。

3. 实现

import torch


def IoU(boxs1, boxs2, x1y1x2y2=False):
    # boxs1.shape = 1 * 4  boxs2.shape = m * 4
    # return iou.shape = m

    if x1y1x2y2:
        b1_x1, b1_y1, b1_x2, b1_y2 = boxs1[:, 0], boxs1[:, 1], boxs1[:, 2], boxs1[:, 3]
        b2_x1, b2_y1, b2_x2, b2_y2 = boxs2[:, 0], boxs2[<
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Fulin_Gao

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

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

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

打赏作者

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

抵扣说明:

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

余额充值