NMS: 非极大值抑制

之前总是对这个东西理解错, 后来看了一遍code, 这次应该不会错~~

自己的理解:

在nms之前先进行一个大的top-N, nms之后在进行一个恰当的top-N, 这样可以非常好~

因为如果不进行后面的top-n 之前过大, 那么后面就可能很多, 之前过小, 那么后面可能就没几个了

 

1. 把框的信息和对应的目标得分传给函数(这里都是目标分数, 多少框多少分数, 不是背景的分数, 仅仅提取目标分数top-N传入nms)

框的信息是: [[x1, y1, x2, y2]1, ....., [x1, y1, x2, y2]n]

目标的分数是: [s1, s2...sn]

2. 然后开始处理, 我们先计算每个框的面积, 然后把分数从大到小排序, 然后返回未排序之前的数组索引.

order = score.sort(decending)[1]

 

3. 现在从分数最高的框开始处理

for _i = 1 to n

i = order[_i]

这个i就是最高得分的框.

获得框i的信息 box[i]

 

for _j = _i+1 to n

j = order[_j]: 不要以为这一步没有必要, 仔细考虑一下: 框i一定要找比他自己得分小的对

比, 如果不这样干, 那么可能一个高分框, 不加处理, 就可能被低分框抑制掉~~

 

如果这个框已经被抑制, 那么continue

否则, 我们看box[j] 和 box[i] 的IoU.

如果IOU大于阈值, 我们就要抑制掉这个框.

 

4. 最后 return at::nonzero((suppressed_t) == 0).squeeze(1);

根据后续代码推理, 这个返回值是: 没有被抑制的框(或者得分), 其原始排序(sort之前)的index

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

TWSF

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

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

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

打赏作者

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

抵扣说明:

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

余额充值