当前位置: 首页 > news >正文

13.3 目标检测和边界框

锚框的计算公式

假设原图的高为H,宽为W
在这里插入图片描述

详细公式推导

在这里插入图片描述

以同一个像素点为锚框,可以生成 (n个缩放 + m个宽高比 -1 )个锚框

在这里插入图片描述
在这里插入图片描述

锚框的作用:

不用直接去预测真实框的四个坐标,而是:
1.先生成多个锚框。
2.预测每个锚框里是否含有要预测的目标。
3.如果是,预测从这个锚框到真实框的偏移(一般是中心点的偏移)。

计算锚框与真实框的IOU

def box_iou(boxes1,boxes2):''':param boxes1: shape = (boxes1的数量,4):param boxes2: shape = (boxes2的数量,4):param areas1: boxes1中每个框的面积 ,shape = (boxes1的数量):param areas2: boxes2中每个框的面积 ,shape = (boxes2的数量):return:'''# 定义一个Lambda函数,输入boxes,内容是计算得到框的面积box_area = lambda  boxes:((boxes[:,2] - boxes[:0]) * (boxes[:3] - boxes[:0]))# 计算面积areas1 = box_area(boxes1)areas2 = box_area(boxes2)# 计算交集 要把所有锚框的左上角坐标 与 真实框的所有左上角坐标 作比较,大的就是交集的左上角 ,加个None 可以让锚框与所有真实框作对比inter_upperlefts = torch.max(boxes1[:,None,:2],boxes2[:,:2])# 把所有锚框的右下角坐标 与 真实框的所有右下角坐标 作比较,小的就是交集的右下角坐标 ,加个None 可以让锚框与所有真实框作对比inter_lowerrights = torch.min(boxes1[:,None,2:],boxes2[:,2:])# 如果右下角-左上角有元素小于0,那就说明没有交集,clamp(min-0)会将每个元素与0比较,小于0的元素将会被替换成0inters = (inter_lowerrights - inter_upperlefts).clamp(min=0) # 得到w和hinter_areas = inters[:,:,0] * inters[:,:,1] # 每个样本的 w*h# 求锚框与真实框的并集# 将所有锚框与真实框相加,他们会多出来一个交集的面积,所以要减一个交集的面积union_areas = areas1[:,None] * areas2 - inter_areasreturn inter_areas/union_areas

给训练集标注锚框

每个锚框包含的信息有:每个锚框的类别 和 偏移量。
偏移量指的是:真实边界相对于锚框的偏移量。

预测时:为每张图片生成多个锚框,预测所有锚框的类别和偏移量。

举例

假设有4个真实框 B1,B2,B3,B4。
9个锚框A1,A2,A3,A4,A5,A6,A7,A8,A9。

在这里插入图片描述
如上,每个真实框都要与所有的锚框计算IOU,如X23,在第三列,拥有最大的IOU,如果该IOU大于阈值,那么第2个锚框的类别就是B3,分配完类别之后,第二个锚框和第3个真实框将不再参与,表现为上面的矩阵去掉第二行第三列。

补充:

训练集不是光使用标注的真实的框做标签来训练吗?为啥要锚框当做训练样本?

应该是扩大训练集的方式,如果只有一张图片,上面标注上了一个真实的框,那么就只有一个训练样本,如果生成一些锚框,根据真实的框,计算IOU,来给生成的锚框标记上相应的类别和与真实框的中心值偏移量,那么这些锚框也成为了训练样本。

lambda匿名函数

它可以用于简洁地定义一个单行的函数

add = lambda x, y: x + y
print(add(2, 3))  # 输出结果为 5

torch.max(boxes1[:, None, :2], boxes2[:, :2])

import torch # 定义两个张量
boxes1 = torch.tensor([[1, 2, 3, 4], [5, 6, 7, 8]]) # 形状为(2, 4)
boxes2 = torch.tensor([[2, 3,4,5], [6, 7,8,9]])
print(boxes1.shape, boxes2.shape)

torch.Size([2, 4]) torch.Size([2, 4])

print(boxes1[:, None, :2])
print(boxes1[:, None, :2].shape)
tensor([[[1, 2]],[[5, 6]]])
torch.Size([2, 1, 2]) 变成了两个通道,每个通道有个一行两列的元素
boxes2[:,:2]
tensor([[2, 3],[6, 7]])
print(torch.max(boxes1[:, None, :2], boxes2[:, :2]))
torch.max(boxes1[:, None, :2], boxes2[:, :2]).shape
tensor([[[2, 3],[6, 7]],[[5, 6],[6, 7]]]) 
torch.Size([2, 2, 2]) 变成两个通道,每个通道有两行,每行有两列的元素
print(torch.max(boxes1[:, :2], boxes2[:, :2]))
tensor([[2, 3],[6, 7]])

相关文章:

13.3 目标检测和边界框

锚框的计算公式 假设原图的高为H,宽为W 详细公式推导 以同一个像素点为锚框,可以生成 (n个缩放 m个宽高比 -1 )个锚框 锚框的作用: 不用直接去预测真实框的四个坐标,而是: 1.先生成多个锚框。 2.预测每个锚框里是否含有要预测…...

TCP/IP网络江湖初探:物理层的奥秘与传承(物理层上篇-基础与本质)

〇、引言 在这个数字时代,计算机网络如同广袤的江湖,数据在其中畅游,信息传递成为了生活的常态。然而,在这个充满虚拟奇观的网络江湖中,隐藏着一个不容忽视的存在,那就是物理层,这个江湖的基石。就如同江湖中的土地一样,物理层作为计算机网络的基础,承载着数据的最初转…...

计算机视觉五大核心研究任务全解:分类识别、检测分割、人体分析、三维视觉、视频分析

目录 一、引言1.1 计算机视觉的定义1.1.1 核心技术1.1.2 应用场景 1.2 历史背景及发展1.2.1 1960s-1980s: 初期阶段1.2.2 1990s-2000s: 机器学习时代1.2.3 2010s-现在: 深度学习的革命 1.3 应用领域概览1.3.1 工业自动化1.3.2 医疗图像分析1.3.3 自动驾驶1.3.4 虚拟现实与增强现…...

linux -- centos -- cmake 留坑

安装Cmake 在Linux一个目录下: touch poj.cpp touch CMakeLists.txtpoj.cpp的内容:随便输出一点东西啦 CMakeLists.txt的内容: cmake_minimum_required(VERSION 3.6) project(Test) add_executable(Test test.cpp)cmake_minimum_required:c…...

【100天精通python】Day33:使用python操作数据库_SQLite数据库的使用与实战

目录 专栏导读 1 SQLite 简介 2 SQLite数据库安装及使用 2.1 检查 SQLite 支持 2.2 创建数据库文件 2.2.1 使用 Python 创建数据库文件: 2.2.2 使用命令行创建数据库文件: 2.3 连接到 SQLite 数据库: 3 SQLite 中常用的SQL语句…...

通过将信号频谱与噪声频谱进行比较,自动检测适当的带通滤波器转折频率研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

【Sklearn】基于多层感知器算法的数据分类预测(Excel可直接替换数据)

【Sklearn】基于多层感知器算法的数据分类预测(Excel可直接替换数据) 1.模型原理2.模型参数3.文件结构4.Excel数据5.下载地址6.完整代码7.运行结果1.模型原理 多层感知器(Multilayer Perceptron,MLP)是一种前馈神经网络,用于解决分类和回归问题。它包含输入层、若干个隐…...

在 Windows 中恢复数据的 5 种方法

发生数据丢失的原因有多种。无论是因为文件被意外删除、文件系统或操作系统损坏,还是由于软件或硬件级别的存储故障,数据都会在您最意想不到的时候丢失。今天我们重点介绍五种数据恢复方法,以应对意外情况的发生。 1.从另一台机器启动硬盘 如…...

配置使用Gitee账号认证登录Grafana

三方社会化身份源 集成gitee第三方登录 第三方登录的原理 所谓第三方登录,实质就是 OAuth 授权。用户想要登录 A 网站,A 网站让用户提供第三方网站的数据,证明自己的身份。获取第三方网站的身份数据,就需要 OAuth 授权。 举例来…...

使用 Flask 部署 Next.js

原文 使用 Flask 部署 Next.js Flask 和 Next.js 是两个独特的开源 Web 框架,分别构建在 Python 和 JavaScript 编程语言之上。 您可以在没有 Next.js 的情况下构建 Flask 应用程序,也可以在没有 Flask 的情况下构建 Next.js 应用程序。但是&#xff0…...

网络安全--iptables

总结: iptables 的关键概念和功能: 规则(Rules): iptables 使用规则来定义特定的操作,例如允许或拒绝特定类型的网络流量。每条规则都由条件和操作组成。条件可以是源 IP 地址、目标 IP 地址、端口号等&a…...

【猿灰灰赠书活动 - 02期】- 【Java从入门到精通2023年7月最新(第7版)】

说明:博文为大家争取福利,与清华大学出版社合作进行送书活动 图书:《Java从入门到精通》 一、好书推荐 图书介绍 Java入门经典,95万Java程序员的入行选择。配备升级版Java开发资源库,在线大咖课在线答疑,学…...

Springboot 设置统一的请求返回格式

现在开发过程中主要采用前后端分离的方式进行开发测试,也就是前端封装请求,后端提供标准的API接口服务。一般现在json 格式受到开发者们的青睐,学习过程中我们可以设置接口的返回类型,那么怎么做到设置统一的返回格式呢&#xff1…...

logstash日志换行处理小解

logstash主用于日志实时数据收集、解析,并将数据转发的工具,内置的功能也相当强大。但,同时意味着,他可能接收到各种情况的数据。 此处,我们主要讲解我实际使用中,碰到的一个小问题,换行(\n)。…...

openpnp - 做一个抛料盒

文章目录 openpnp - 做一个抛料盒概述效果图零件 - 抛料盒主体零件 - 磁铁仓盖板END openpnp - 做一个抛料盒 概述 8mm散料飞达做回来了, 上面用的长方形磁铁(4x6x10mm)透过0.8mm的3D打印薄壁, 和固定铁板的吸力很大, 用磁力固定的非常好. 正好缺一个抛料盒, 就按照散料飞达的…...

数据结构——单链表的实现(c语言版)

前言 单链表作为顺序表的一种,了解并且熟悉它的结构对于我们学习更加复杂的数据结构是有一定意义的。虽然单链表有一定的缺陷,但是单链表也有它存在的价值, 它也是作为其他数据结构的一部分出现的,比如在图,哈希表中。…...

【计算机组成原理】24王道考研笔记——第四章 指令系统

第四章 指令系统 一、指令系统 指令是指示计算机执行某种操作的命令,是计算机运行的最小功能单位。一台计算机的所有指令的集合构成该 机的指令系统,也称为指令集。 指令格式: 1.1分类 按地址码数目分类: 按指令长度分类&…...

C#使用FileInfo和DirectoryInfo类来执行文件和文件夹操作

System.IO.FileInfo 和 System.IO.DirectoryInfo 是C#中用于操作文件和文件夹的类,它们提供了许多有用的方法和属性来管理文件和文件夹。 System.IO.FileInfo: FileInfo 类用于操作单个文件的信息和内容。以下是一些常用的方法和属性: Exi…...

每日一学——TCP/IP参考模型

TCP/IP参考模型是一个用于网络通信的分层架构,它定义了一组协议,这些协议实现了计算机之间的数据传输。TCP/IP参考模型分为四层: 应用层(Application Layer):应用层是网络应用程序与网络之间的接口层。它提…...

LAXCUS分布式操作系统:技术创新引领高性能计算与人工智能新时代

随着科技的飞速发展,高性能计算、并行计算、分布式计算、大数据、人工智能等技术在各个领域得到了广泛应用。在这个过程中,LAXCUS分布式操作系统以其卓越的技术创新和强大的性能表现,成为了业界的佼佼者。本文将围绕LAXCUS分布式操作系统的技…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

Robots.txt 文件

什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...

从面试角度回答Android中ContentProvider启动原理

Android中ContentProvider原理的面试角度解析,分为​​已启动​​和​​未启动​​两种场景: 一、ContentProvider已启动的情况 1. ​​核心流程​​ ​​触发条件​​:当其他组件(如Activity、Service)通过ContentR…...

ArcPy扩展模块的使用(3)

管理工程项目 arcpy.mp模块允许用户管理布局、地图、报表、文件夹连接、视图等工程项目。例如,可以更新、修复或替换图层数据源,修改图层的符号系统,甚至自动在线执行共享要托管在组织中的工程项。 以下代码展示了如何更新图层的数据源&…...

【阅读笔记】MemOS: 大语言模型内存增强生成操作系统

核心速览 研究背景 ​​研究问题​​:这篇文章要解决的问题是当前大型语言模型(LLMs)在处理内存方面的局限性。LLMs虽然在语言感知和生成方面表现出色,但缺乏统一的、结构化的内存架构。现有的方法如检索增强生成(RA…...