Soft NMS改进的非极大值抑制方法的pytorch cuda版本,可以用

2023-05-16

话不多说,直接上代码,代码是根据soft max论文提供的代码,修改的,原来的代码是cpu版本,且返回的keep参数并不是原来bbox的序列参数,所以做了部分修改,本人亲测pytorch版本的maskrcnn可用,提高了我的部分结果。

def mine_soft_nms(boxes, sigma = 0.05, Nt = 0.3, threshold = 0.001, method = 2):
	“ori list is an order to log the bbox order!”
	N = boxes.shape[0]
    ori_list = list(np.arange(N))
    for i in range(N):
        maxscore = boxes[i, 4]
        maxpos = i

        tx1 = boxes[i, 0]
        ty1 = boxes[i, 1]
        tx2 = boxes[i, 2]
        ty2 = boxes[i, 3]
        ts = boxes[i, 4]

        pos = i + 1
        # get max box
        while pos < N:
            if maxscore < boxes[pos, 4]:
                maxscore = boxes[pos, 4]
                maxpos = pos
            pos = pos + 1

        # add max box as a detection
        boxes[i, 0] = boxes[maxpos, 0]
        boxes[i, 1] = boxes[maxpos, 1]
        boxes[i, 2] = boxes[maxpos, 2]
        boxes[i, 3] = boxes[maxpos, 3]
        boxes[i, 4] = boxes[maxpos, 4]

        # swap ith box with position of max box
        boxes[maxpos, 0] = tx1
        boxes[maxpos, 1] = ty1
        boxes[maxpos, 2] = tx2
        boxes[maxpos, 3] = ty2
        boxes[maxpos, 4] = ts

        tx1 = boxes[i, 0]
        ty1 = boxes[i, 1]
        tx2 = boxes[i, 2]
        ty2 = boxes[i, 3]
        ts = boxes[i, 4]

        ori_list[i], ori_list[maxpos] = ori_list[maxpos], ori_list[i]

        pos = i + 1
        # NMS iterations, note that N changes if detection boxes fall below threshold
        while pos < N:
            x1 = boxes[pos, 0]
            y1 = boxes[pos, 1]
            x2 = boxes[pos, 2]
            y2 = boxes[pos, 3]
            s = boxes[pos, 4]

            area = (x2 - x1 + 1) * (y2 - y1 + 1)
            iw = (min(tx2, x2) - max(tx1, x1) + 1)
            if iw > 0:
                ih = (min(ty2, y2) - max(ty1, y1) + 1)
                if ih > 0:
                    ua = float((tx2 - tx1 + 1) * (ty2 - ty1 + 1) + area - iw * ih)
                    ov = iw * ih / ua  # iou between max box and detection box

                    if method == 1:  # linear
                        if ov > Nt:
                            weight = 1 - ov
                        else:
                            weight = 1
                    elif method == 2:  # gaussian
                        weight = torch.exp(-(ov * ov) / sigma)
                    else:  # original NMS
                        if ov > Nt:
                            weight = 0
                        else:
                            weight = 1

                    boxes[pos, 4] = weight * boxes[pos, 4]

                    # if box score falls below threshold, discard the box by swapping with last box
                    # update N
                    if boxes[pos, 4] < threshold:
                        boxes[pos, 0] = boxes[N - 1, 0]
                        boxes[pos, 1] = boxes[N - 1, 1]
                        boxes[pos, 2] = boxes[N - 1, 2]
                        boxes[pos, 3] = boxes[N - 1, 3]
                        boxes[pos, 4] = boxes[N - 1, 4]
                        ori_list[pos], ori_list[N - 1] = ori_list[N - 1], ori_list[pos]
                        N = N - 1
                        pos = pos - 1

            pos = pos + 1

    keep = [i for i in range(N)]
    mine_keep = ori_list[:N]
    print("soft nms N: ", N)
    # return torch.Tensor(np.array(mine_keep))
    return torch.LongTensor(mine_keep).cuda()

输入的参数都能看懂,和你的原来的NMS代码的输入输出对其就可以了!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Soft NMS改进的非极大值抑制方法的pytorch cuda版本,可以用 的相关文章

随机推荐

  • crontab之坑爹的环境变量

    title crontab之坑爹的环境变量 tags crontab环境变量envbash categories linux date 2017 07 25 18 18 53 如前文所述 xff0c 最近在做mysql的备份mysqldum
  • Webpack基本架构浅析

    文章webpack版本为3 6 0 前言 随着掌握的前端基础知识越来越多 xff0c 对技术的要求逐渐不满足于实现即可 xff0c 技术到了瓶颈期 xff0c 自己也曾尝试写过一些开源库 xff0c 不过很少有满意的作品 xff0c 通常没
  • Open***在linux上的完美实现

    Open 在linux上的完美实现 一 Open 的工作原理 技术通过密钥交换 封装 认证 加密手段在公共网络上建立起私密的隧道 xff0c 保障传输数据的完整性 私密性和有效性 Open 是近年来新出现的开放源码项目 xff0c 实现了
  • linux下查看uuid的三种方法及使用uuid的作用

    查看设备的uuid的三种方法 xff0c 总结如下 xff1a 1 命令查看 xff1a blkid 2 文件查看 xff1a ls l dev disk by uuid 3 命令查看 xff1a vol id dev sda1 UUID的
  • navicat 查看表的注释

    2019独角兽企业重金招聘Python工程师标准 gt gt gt navicat 不同于sqlyog 没有直接展示注释的地方 xff0c 通过查看DDL 来查看注释 查看DDL的方式 打开Navicat工具 xff0c 双击打开需要连接的
  • R语言ggplot2绘图设置X轴刻度,字体大小及绘图区大小

    gt colnames data1 seq 2 ncol data1 15 1 34 AAAA 34 34 AAGG 34 34 ATGC 34 34 ACGT 34 34 AGGA 34 34 TACG 34 34 TTCC 34 34
  • 无法连接虚拟设备sata0:1,因为主机上没有相应的设备

    打开虚拟机的时候 xff0c 弹出这个 xff0c 但是虚拟机可以正常使用 无法连接虚拟设备sata0 1 xff0c 因为主机上没有相应的设备 原因是因为开机连接CD DVD驱动器 去掉这个勾 OK 转载于 https www cnblo
  • 计算机网络第七版谢希仁知识点总结

    1 专有名词 xff1a 互联网服务提供商ISP xff08 Interest Service Provider xff09 互联网交换点 IXP xff08 Internet eXchange Point xff09 广域网WAN xff
  • SecureCRT 通过Xmanager 开启图形界面(root用户登录后,su登录oracle用户)

    一 安装了Xmanager软件 xff0c 在客户端上开启了Xmanager Passive 程序 二 SecureCRT的会话选项中 端口转发 远程 X11 里将转发X11数据包勾上 用root用户登录后运行xclock程序 xff0c
  • 多线程大串讲之二: 多线程同步的学习[1]

    一 CriticalSection 临界区 临界区 34 CriticalSection 当把一段代码放入一个临界区 线程执行到临界区时就独占了 让其他也要执行此代码的线程先等等 这和前面用的 Lock 和 UnLock 差不多 使用格式如
  • matlab练习程序(加权最小二乘)

    起本篇题目还是比较纠结的 xff0c 原因是我本意打算寻找这样一个算法 xff1a 在测量数据有比较大离群点时如何估计原始模型 上一篇曲面拟合是假设测量数据基本符合均匀分布 xff0c 没有特别大的离群点的情况下 xff0c 我们使用最小二
  • linux搜索一个文件

    find name filename 转载于 https www cnblogs com tiandsp archive 2012 07 15 2592088 html
  • VINS 回环检测与全局优化

    回环检测 VINS回环检测与全局优化都在pose graph cpp内处理 首先在pose graph node加载vocabulary文件给BriefDatabase用 xff0c 如果要加载地图 xff0c 会loadPoseGraph
  • gcc make 与cmake

    1 gcc xff08 1 xff09 是什么 xff1f 它是GNU Compiler Collection xff08 就是GNU编译器套件 xff09 xff0c 也可以简单认为是编译器 它可以编译很多种编程语言 xff08 括C C
  • server unexpectedly closed network connection

    在使用 ssh 登入 Linux 時 xff0c 卻發生了 server unexpectedly closed network connection 的狀況 解决方法 xff1a 1 修改 etc ssh sshd config 將 Us
  • 开源SDN控制器和商用SDN控制器一览

    以下是来自IT168收集的2014年可追寻到的开源SDN控制器和商用SDN控制器 xff0c 此处转载以供大家知悉 xff0c 更多控制器信息需要大家自己动手去查询和理解 开源SDN控制器组织 随机排序 xff0c 仅为了查看便利 1 组织
  • openstack 异常处理

    1 xff0c keystone 验证失败 xff0c 例如 xff1a Authorization failed The request you have made requires authentication from 172 16
  • [原]C++头文件的包含顺序研究

    作者 xff1a 朱金灿 来源 xff1a http blog csdn net clever101 一 xff0e Google C 43 43 编程风格指南 里的观点 公司在推行编码规范 xff0c 领导提议基本上使用 Google C
  • 使用badblocks检测坏块

    命令格式 badblocks svw b lt 区块大小 gt o lt 输出文件 gt 磁盘装置 磁盘区块数 启始区块 典型的命令如下 写测试 数据安全 sudo badblocks n b 4096 c 16 s dev sda o h
  • Soft NMS改进的非极大值抑制方法的pytorch cuda版本,可以用

    话不多说 xff0c 直接上代码 xff0c 代码是根据soft max论文提供的代码 xff0c 修改的 xff0c 原来的代码是cpu版本 xff0c 且返回的keep参数并不是原来bbox的序列参数 xff0c 所以做了部分修改 xf