目标检测|边框检测框转换,交并比计算 代码实现

news2024/11/26 2:46:11

文章目录

  • 1. 相互转换的函数
  • 2.交并比实现

在目标检测任务中,非常重要的一部分就是框出检测框

这就需要检测框的位置大小等一些信息

一般我们有如下两种方式标记一个检测的位置和大小

1 两点法 检测框左上角坐标(x1,y1),检测框右下角坐标(x2,y2)

2 中心法 检测框中心的坐标(x,y)和检测框的宽w,高h

这两种表述方式都可以表达一个检测框的位置

因而他们也可以相互转换

1. 相互转换的函数

我们实际中处理的往往是一批框

这时我们不用for循环依次转换,而是直接用张量的切片操作!

import torch
#两角表示法[x1,y1,x2,y2]
#中心表示法[x,y,w,h]
#模拟传入10个框,每个框有四维度
boxes=torch.rand(10,4)
#两点法转换为中心法
def corner_to_center(boxes):
    x1=boxes[:,0]
    y1=boxes[:,1]
    x2=boxes[:,2]
    y2=boxes[:,3]
    w=x2-x1
    h=y2-y1
    x=(x1+x2)*0.5
    y=(y1+y2)*0.5
    return torch.stack((x,y,w,h),axis=-1)#注意这里不能用cat,stack可以增加一个维度,我们在之前操作之后他们的维度都降低了,所以要用stack

#中心法转换为两点法
def center_to_corner(boxes):
    x=boxes[:,0]
    y=boxes[:,1]
    w=boxes[:,2]
    h=boxes[:,3]
    x1=x-w*0.5
    y1=y-h*0.5
    x2=x+w*0.5
    y2=y+h*0.5
    return torch.stack((x1,y1,x2,y2),axis=-1)

这里我第一次写这个函数的时候,在最后拼接的时候写成了torch.cat,这是有问题的

torch.cattorch.stack 都是PyTorch中用于组合张量(tensors)的函数,但它们在如何组合张量以及输出的形状方面有一些重要的区别。

  1. torch.cat(Concatenate):
    • torch.cat 用于沿着指定的维度(通常是现有维度)连接多个张量。
    • 你需要指定一个维度作为连接维度,这个维度必须在所有输入张量中具有相同的大小,除了连接维度外的其他维度可以不同。
    • 输出张量将在连接维度上沿着所有输入张量连接起来,不会创建新的维度。
    • 例如,如果你有两个形状为 (3, 4)(3, 5) 的张量,并使用 torch.cat 连接它们,你将得到一个形状为 (3, 9) 的输出张量。
  2. torch.stack:
    • torch.stack 用于在一个新维度上堆叠多个张量,它会为新的维度创建一个新的轴。
    • 所有输入张量必须具有相同的形状。
    • 你需要指定一个维度来堆叠这些张量,这将成为新的维度。
    • 输出张量的维度比输入张量的维度高一个。
    • 例如,如果你有两个形状为 (3, 4) 的张量,并使用 torch.stack 堆叠它们,你将得到一个形状为 (2, 3, 4) 的输出张量,其中新的维度是2。

总结:

  • 使用 torch.cat 来连接张量,通常是在现有维度上进行的。
  • 使用 torch.stack 来创建新的维度并堆叠张量。
  • torch.cat 不会增加张量的维度,而 torch.stack 会增加一个新的维度。根据你的需求,你可以选择使用其中之一。

2.交并比实现

交并比是判断两个检测框重叠大小的重要指标

交并比=两个框相交的面积/两个框并的面积

我们先看两个检测框的交并比计算怎么实现

两个框无非两种情况

1 有相交

在这里插入图片描述

2 无相交

在这里插入图片描述

对于第一种情况

我们需要知道两个框里左上角坐标更大的那个坐标,和右下角坐标更小的坐标,如下图的红点,知道这两个红点以后就可以求交的面积了

用右下角的红点坐标减去左上角的红点坐标即可,就得到宽和高了
在这里插入图片描述

对于第二种情况

我们同样求得两个框里左上角坐标更大的那个坐标,和右下角坐标更小的坐标

两个相减得到负数

在这里插入图片描述

既然如此,说明如果相减是负数,则不相交,这时候把他置0,这是交并比就会得0

如果是正数,说明得到相交的宽高,那么一乘即可

def box_iou(boxes1,boxes2):
    box_area=lambda boxes:((boxes[:,2]-boxes[:,0])*(boxes[:,3]-boxes[:,1]))#定义一个求面积的函数
    area1=box_area(boxes1)#求第一组边界框面积
    area2=box_area(boxes2)#求第二组边界框面积
    #获得左上角的坐标的较大值,右下角的坐标的较小值
    inter_upperlefts=torch.max(boxes1[:,None,:2],boxes2[:,:2])  #注意这里的boxes1和boxes2的数量不一定相等,因而这里用了None升高维度做匹配
    inter_lowerrights=torch.min(boxes1[:,None,2:],boxes2[:,2:])
    inters=(inter_lowerrights-inter_upperlefts).clamp(min=0)#.clamp函数将所有小于 0 的元素设置为 0,而保留所有大于等于 0 的元素不变,过滤掉不相交的情况
    inter_aress=inters[:,:,0]*inters[:,:,1]
    union_aress=area1[:,None]+area2-inter_aress
    return inter_aress/union_aress

这里可以理解为第一组框的每一个和第二组框依次求交并比

那么假如第一组框有10个,第二组框有5个

那么总共返回10×5=50个结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1056495.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023年最新云存储工具排行榜:找到适合你的云存储服务

随着数据规模的不断增长,传统的本地存储已经无法满足用户的需求。云存储工具通过提供灵活、安全和高效的数据存储服务,成为了现代化的数据管理方式。在众多云存储工具中,有一些在功能和性能方面表现出色,成为用户首选。下面是2023…

时间序列-AR模型与MA模型的原理与实现

文章目录 1 自回归模型AR Model1.1 自回归模型 vs 多元线性回归模型1.1.1 线性回归1.1.2 AR(1)模型1.1.3 AR(p)模型 1.2 AR建模问题 2 移动平均模型 MA Model2.1 MA模型的数学表示2.1.1 MA(1)模型2.2.2 MA(q)模型 2.2 MA建模问题 ARIMA模型是AR模型(自回归模型&…

计算机网络(二):物理层

参考引用 计算机网络微课堂-湖科大教书匠计算机网络(第7版)-谢希仁 1. 物理层的基本概念 物理层考虑的是怎样才能在连接各种计算机的传输媒体上传输数据比特流物理层为数据链路层屏蔽了各种传输媒体的差异,使数据链路层只需要考虑如何完成本…

levelDB引擎

一、背景 1.1、影响磁盘性能的因素: 主要受限于磁盘的寻道时间,优化磁盘数据访问的方法是尽量减少磁盘的IO次数。磁盘数据访问效率取决于磁盘IO次数,而磁盘IO次数又取决于数据在磁盘上的组织方式。磁盘数据存储大多采用B树类型数据结构&…

排序篇(三)----交换排序

排序篇(三)----交换排序 1.冒泡排序 基本思想: ​ 通过不断地比较相邻的元素,将较大的元素往后移动,从而实现排序的目的。 具体的步骤如下: 从待排序的数组中选择相邻的两个元素进行比较,如果前一个元素大于后一个元素&#…

Java编程技巧:swagger2、knif4j集成SpringBoot或者SpringCloud项目

目录 1、springbootswagger2knif4j2、springbootswagger3knif4j3、springcloudswagger2knif4j 1、springbootswagger2knif4j 2、springbootswagger3knif4j 3、springcloudswagger2knif4j 注意点: Api注解:Controller类上的Api注解需要添加tags属性&a…

在云服务器上打开ftp服务-踩坑及心得

我们产生这个需求的原因是因为打算搭建一个博客,选择了使用wordpress框架。然后,在安装插件的过程中,需要使用FTP服务进行操作。于是,我们决定搞清楚这个过程,并在其中遇到的困难进行记录。 一、安装vsftpd # 安装 s…

python生成中金所期权行权价

参考沪深300股指期权的合约表,写一个工具函数: 使用方法 def get_format_option_gap(value: float, deviation: int 0): # 根据中证1000指数获取点位"""根据标准的行权价,生成不同档位的期权列表,适合中金所:…

铁道货车通用技术条件

声明 本文是学习GB-T 5600-2018 铁道货车通用技术条件. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 90 mm90 mm。 B.2 制造要求 B.2.1 车体钢结构组成后: a) 敞车钢质侧、端板的平面度公差应小于或等于15 mm/m; 压型侧、端板的平面度…

S0003-Mac下iTerm2+zsh+ohmyzsh打造优雅美观终端

背景 优雅耐看的终端工具,必是每个程序员的追求。 本人也不例外,从业几年先后使用过: windows电脑:cmd、git bash、wsl zsh、terminal zshMac电脑: 自带terminal、iTerm2、terminal zsh 其中windows terminal zsh、mac ter…

数据结构——二叉树的基本概念及顺序存储(堆)

目录 一.前言 二.树概念及结构 2.1 树的概念 2.2 树的相关概念 2.3 树的表现 2.4 树在实际中的应用(表示文件系统的目录树结构) 三.二叉树的概念及结构 3.1 概念 3.2 特殊的二叉树 3.3 二叉树的性质 3.4 二叉树的存储结构 3.4.1 顺序存储 3…

Vitamin K

各位 比对 机制 --Mechanism of Action of Vitamin K Carboxylase (VKC).IV. Intermediates and Transition State-davis2007.pdf --Mechanism of Action of Vitamin K Carboxylase (VKC).IV. Intermediates and Transition State-davis2007.pdf -- 维生素K的作用机制-dow…

房子再小,也要有自己的装修设计!福州中宅装饰,福州装修

小空间 也要有好设计 小户型的房子现在越来越受欢迎了 但是面积不大的小户型 怎么装修才能更适合居住呢? 那么多的东西又应该如何收纳呢? 白色系装修 采用白色系为装修的主色调 白色在装修上能让视觉上显得更宽敞 让小面积的房子 变得更多简洁大…

91、Redis - 事务 与 订阅-发布 相关的命令 及 演示

★ 事务相关的命令 Redis事务保证事务内的多条命令会按顺序作为整体执行,其他客户端发出的请求绝不可能被插入到事务处理的中间, 这样可以保证事务内所有命令作为一个隔离操作被执行。 Redis事务同样具有原子性,事务内所有命令要么全部被执…

最新AI智能创作系统源码V2.6.2/AI绘画系统/支持GPT联网提问/支持Prompt应用

一、AI创作系统 SparkAi创作系统是基于国外很火的ChatGPT进行开发的AI智能问答系统和AI绘画系统。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图…

【C语言】IO流(文件操作)- scanf / printf没那么简单!

本篇文章目录 1. 为什么使用文件?2. 什么是文件?3. IO流的概念4. 操作文件的步骤文件指针4.1 打开文件和关闭文件4.2 读写文件(顺序读取)4.2.1 字符输入输出4.2.2 字符串(文本行)输入输出4.2.3 格式化输入输…

SSM - Springboot - MyBatis-Plus 全栈体系(十六)

第三章 MyBatis 三、MyBatis 多表映射 2. 对一映射 2.1 需求说明 根据 ID 查询订单,以及订单关联的用户的信息! 2.2 OrderMapper 接口 public interface OrderMapper {Order selectOrderWithCustomer(Integer orderId); }2.3 OrderMapper.xml 配置…

【【萌新的RiscV学习之在写代码之前对于关键路径的分析-11】】

萌新的RiscV学习之在写代码之前对于关键路径的分析-11 首先我们最简单的control 模块 全分段 因为只有分段 , 分开使用之后 , 各个阶段的具体功能才会合理使用 就像是为了后续 “气泡” 赋值 为 0 还有单独比较前递这种 EX : ALUOP ALUSrc …

Arcgis快速计算NDVI

Arcgis快速计算NDVI 一、问题描述 如何使用Arcgis像ENVI一样波段计算NDVI的值,事实上,Arcgis更快速一些。 二、操作步骤 首先准备好影像 打开窗口-影像分析 点击左上角 点击确定 (发现自己使用的遥感影像不对劲,是计算好了…

智慧公厕有多智能?智慧厕所黑科技揭秘

随着科技的不断进步,智能化已经渗透到了我们生活的方方面面,智慧公厕也成为了时代的产物之一。那么,智慧公厕究竟有多智能呢?本文将以智慧公厕专业厂家广州中期科技有限公司,大量精品案例项目,以实景实图实…