首页 > 其他分享 >常用代码段-nms操作

常用代码段-nms操作

时间:2023-08-25 09:22:58浏览次数:36  
标签:常用 nms 代码段 current boxes indices sorted NMS

非极大值抑制(Non-Maximum Suppression,NMS)是一种常用于目标检测和计算机视觉任务的技术,用于从重叠的检测框中选择最佳的候选框。以下是使用 PyTorch 实现标准的 NMS 算法的示例代码:

import torch

def nms(boxes, scores, iou_threshold):
    sorted_indices = scores.argsort(descending=True)
    selected_indices = []

    while sorted_indices.numel() > 0:
        current_index = sorted_indices[0]
        selected_indices.append(current_index.item())

        if sorted_indices.numel() == 1:
            break

        current_box = boxes[current_index]
        other_boxes = boxes[sorted_indices[1:]]
        ious = calculate_iou(current_box, other_boxes)

        valid_indices = (ious <= iou_threshold).nonzero().squeeze()
        if valid_indices.numel() == 0:
            break

        sorted_indices = sorted_indices[valid_indices + 1]

    return selected_indices

def calculate_iou(box, boxes):
    x1 = torch.max(box[0], boxes[:, 0])
    y1 = torch.max(box[1], boxes[:, 1])
    x2 = torch.min(box[2], boxes[:, 2])
    y2 = torch.min(box[3], boxes[:, 3])

    intersection_area = torch.clamp(x2 - x1 + 1, min=0) * torch.clamp(y2 - y1 + 1, min=0)
    box_area = (box[2] - box[0] + 1) * (box[3] - box[1] + 1)
    boxes_area = (boxes[:, 2] - boxes[:, 0] + 1) * (boxes[:, 3] - boxes[:, 1] + 1)

    iou = intersection_area / (box_area + boxes_area - intersection_area)
    return iou

# 示例数据:框坐标和置信度得分
boxes = torch.tensor([[100, 100, 200, 200], [120, 120, 220, 220], [150, 150, 250, 250]])
scores = torch.tensor([0.9, 0.8, 0.7])

# NMS 参数
iou_threshold = 0.5

# 执行 NMS 算法
selected_indices = nms(boxes, scores, iou_threshold)
print("选择的索引:", selected_indices)

在此示例中,我们首先定义了 nms 函数来执行 NMS 算法。然后,我们实现了一个简单的 calculate_iou 函数来计算两个框的交并比(IoU)。最后,我们使用示例数据 boxes 和 scores 运行 NMS 算法,并打印出选定的索引。

 

标签:常用,nms,代码段,current,boxes,indices,sorted,NMS
From: https://www.cnblogs.com/chentiao/p/17656004.html

相关文章

  • 【图像处理】图像处理常用操作
    去除背景色参考文章:Python3,4行代码实现去除图片背景色,从此告别PS!!_python去除图片背景色_Carl_奕然的博客-CSDN博客在线抠图软件_图片去除背景|remove.bg–remove.bg修改图像尺寸参考文章:如何缩小图片,降低图片kb-知乎(zhihu.com)对于纯无底色的白色图片,用画图工具res......
  • 防火墙常用命令(Centos)
    开放端口firewall-cmd--zone=public--add-port=80/tcp--permanent#开放80端口systemctlrestartfirewalls.service#重启防火墙查看已开启的端口firewall-cmd--list-ports启动与停止firewall-cmd--state#查看防火墙状态systemctlstopfirewalls.service......
  • Git 常用命令
    Git基础部分配置用户gitconfig--globaluser.name'USERName'gitconfig--globaluser.email'USEREmail'初始化仓库#初始化一个git仓库gitinit#克隆远程仓库gitclone<url>[directory]上传仓库将文件添加到缓存#将所有文件添加到缓存gitadd.#......
  • 工作常用脚本
    一、执行某些只运行一遍命令的镜像使用某个docker镜像,运行一遍某个命令,参考以下#run.shdockerrun-v/root/select_scripts_diff_review:/select_scripts_diff_review-it$1/bin/bash-c$2执行:shrun.shimage:v1"cd/select_scripts_diff_review&&python3test.py"......
  • docker 常用命令--todo....
    docker常用命令docker设置开机自启docker-v启动dockersystemctlstartdocker查看docker状态systemctlstatusdockerdocker设置开机自启systemctlenbaledocker修改docker仓库的地址---------------------------基础设置--------------------------开机自启su......
  • 华为ENSP学习之常用命令总结
    system:进入配置模式quit:退出当前窗口return:退回到用户模式ctrl+c:结束当前显示undoinfo-centerenable:关闭信息提示displaycurrent-configuration:查看设备配置信息displayvlan:查看vlan相关信息displaymac-address:查看交换机管理的mac地址列表displayinterface:查看接......
  • java stream常用方法
    1、筛选数据单条Studentstudent=students.stream().filter(o->o.getStuNo.equals(1001)).findAny().orElse(null);.orElse(null) 表示如果没有符合条件的学生则返回null多条List<Integer>stuNoList=students.stream().map(Student::getStuNo).collect(Collectors.to......
  • wow常用宏
     常用宏:/follow狂练级之战/target狂练级之战/assist狂练级之战/cast猎人印记/petattack/cast!雄鹰守护/target狂练级之德/assist狂练级之德/cast猎人印记/cast!蝰蛇守护/dismount/use[nomounted,flyable]迅捷紫色驭风者;[nomounted,noflyable]迅捷森林狼  ......
  • java常用知识
    提取对象数组里面的某个字段List<String>lastTask=lastTasks.stream().map(HistoricActivityInstance::getActivityId).limit(1).collect(Collectors.toList());对象数组排序notEmptyList.sort(Comparator.comparing......
  • find常用命令
    #找出目录下大于30M的文件find*-typef-size+30M-print0|xargs-0du-sh#批量删除日志文件find*-typef-size+30M-print0|xargs-0du-sh|grep'/diff/root/logs/csp/sentinel-record.log'|awk'{print$2}'|xargsrm-rf#删除系统大于1G的日志文件......