68.多尺度目标锚框的代码实现

news2024/11/20 0:32:11

在之前,我们以输入图像的每个像素为中心,生成了多个锚框。 基本而言,这些锚框代表了图像不同区域的样本。 然而,如果为每个像素都生成的锚框,我们最终可能会得到太多需要计算的锚框。 想象一个 561×728 的输入图像,如果以每个像素为中心生成五个形状不同的锚框,就需要在图像上标记和预测超过200万个锚框( 561×728×5 )。

1. 多尺度锚框

减少图像上的锚框数量并不困难。 比如,我们可以在输入图像中均匀采样一小部分像素,并以它们为中心生成锚框。 此外,在不同尺度下,我们可以生成不同数量和不同大小的锚框。 直观地说,比起较大的目标,较小的目标在图像上出现的可能性更多样。 例如, 1×1 、 1×2 和 2×2 的目标可以分别以4、2和1种可能的方式出现在 2×2 图像上。 因此,当使用较小的锚框检测较小的物体时,我们可以采样更多的区域,而对于较大的物体,我们可以采样较少的区域。

为了演示如何在多个尺度下生成锚框,让我们先读取一张图像。 它的高度和宽度分别为561和728像素。

%matplotlib inline
import torch
from d2l import torch as d2l

img = d2l.plt.imread('drive/MyDrive/chapter13/img/catdog.jpg')
h, w = img.shape[:2]
h, w

运行结果:

在这里插入图片描述

我们将卷积图层的二维数组输出称为特征图。 通过定义特征图的形状,我们可以确定任何图像上均匀采样锚框的中心。

display_anchors函数定义如下。 我们在特征图(fmap)上生成锚框(anchors),每个单位(像素)作为锚框的中心。 由于锚框中的 (𝑥,𝑦) 轴坐标值(anchors)已经被除以特征图(fmap)的宽度和高度,因此这些值介于0和1之间,表示特征图中锚框的相对位置

由于锚框(anchors)的中心分布于特征图(fmap)上的所有单位,因此这些中心必须根据其相对空间位置在任何输入图像上均匀分布。 更具体地说,给定特征图的宽度和高度fmap_w和fmap_h,以下函数将均匀地对任何输入图像中fmap_h行和fmap_w列中的像素进行采样。 以这些均匀采样的像素为中心,将会生成大小为s(假设列表s的长度为1)且宽高比(ratios)不同的锚框。

# 告诉feature map的高宽以及size大小传入,就能得到所有你要的锚框
def display_anchors(fmap_w, fmap_h, s):
    d2l.set_figsize()
    # 前两个维度上的值不影响输出
    # 生成一个假的feature map,告诉高和宽fmap_h, fmap_w,通道数为10,batch_size=1
    # 通道数和batch_size不关心,只关心宽和高
    fmap = torch.zeros((1, 10, fmap_h, fmap_w)) 
    # 知道特征图的高和宽就知道了有多少个像素,然后以每个像素为中心生成不同的大小的锚款
    # ratios=[1, 2, 0.5]表示1:1的高宽、高是宽的2倍、宽是高的2倍(ratio是宽高比)
    # 第一个参数是fmap传入到multibox_prior,这个函数会看宽和高是怎样的,之后的参数是sizes以及ratios
    # 返回的结果anchors都是得到0-1之间的数值
    anchors = d2l.multibox_prior(fmap, sizes=s, ratios=[1, 2, 0.5])
    # bbox_scale真实图片的大小
    bbox_scale = torch.tensor((w, h, w, h))
    # anchors[0] * bbox_scale:锚框在整个图片的大小
    # anchors[0] 取0是因为 batch_size=1
    d2l.show_bboxes(d2l.plt.imshow(img).axes,
                    anchors[0] * bbox_scale)

首先,让我们考虑探测小目标。 为了在显示时更容易分辨,在这里具有不同中心的锚框不会重叠: 锚框的尺度设置为0.15,特征图的高度和宽度设置为4。 我们可以看到,图像上4行和4列的锚框的中心是均匀分布的。

# size取0.15也就是说占锚框图片的0.15x0.15=2.25%的区域
# s应该是占长宽的比例
display_anchors(fmap_w=4, fmap_h=4, s=[0.15])

运行结果:

在这里插入图片描述

因为高和宽都是4 ,所以画出来有16个像素。每三个锚框中心点都在一个像素上。因为这是在feature map上生成出来的。feature map是4x4,再映射回去到原来的图片上得到所有锚框。

然后,我们将特征图的高度和宽度减小一半,然后使用较大的锚框来检测较大的目标。 当尺度设置为0.4时,一些锚框将彼此重叠。

display_anchors(fmap_w=2, fmap_h=2, s=[0.4])

运行结果:

在这里插入图片描述

最后,我们进一步将特征图的高度和宽度减小一半,然后将锚框的尺度增加到0.8。 此时,锚框的中心即是图像的中心。

# 最后把整个图片缩成一个像素
display_anchors(fmap_w=1, fmap_h=1, s=[0.8])

运行结果:

在这里插入图片描述

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

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

相关文章

UG/NX 二次开发(C#)自动出2D零件图(标准件配置Bata版)

一、前言 昨天分享了自动出2D零件图的思路(UG/NX 二次开发(C#)自动出2D零件图思路),今天整理了Q群里各位大佬的意见,结合当前实际项目情况,做了一个可配置的半自动出图版本,暂且称之为标准件配置Bata版。 虽…

steam/csgo搬砖项目详解

steam搬砖项目简单来说,就是在steam平台购买游戏装备到网易BUFF平台出售,赚取汇率差和装备差价。 我今天也就给大家讲解一下steam项目的原理,还有存在什么样的风险。 做steam搬砖需要什么准备: 1.手机 2.电脑 3.美服steam账号 4.…

【hcip】多点双向重发布实验

目录 1.拓扑图 2.要求 3.主要配置 4.测试 1.拓扑图 2.要求 达到所有目标最优,互有备份 3.主要配置 左边区域配置rip,右边区域配置ospf,以r2为例 [r2]rip [r2-rip-1]version 2 [r2-rip-1]network 12.0.0.0 [r2-rip-1]network 2.0.…

堆排序详细说明及实现-python

先了解什么是堆: 堆的定义 n个元素的序列 [ k1,k2,...,kn ],满足以下的性质时称之为堆: ki≥k2i 且 ki≥k2i1 (1≤i≤ ) 或 ki≤k2i 且 ki≤k2i1 (1≤i≤ ) 如果采用顺序方式即用一维数组存储这个序列&…

《回眸2022·圆满收官||展望2023·砥砺奋发》

系列文章目录 文章目录系列文章目录寄言和CSDN相遇大学生活从小白到千粉博主回眸2022|圆满收官展望2023|砥砺奋发致每一个追梦人寄言 岁月不距,时节如流!站在岁末的门槛前,回望2022这一年,不知你是否已经完美的书写完2022的答卷&…

计算机工作过程(超详细)

文章目录一、计算机组成框图二、思维导图三、部件剖析(1)存储器(2)运算器(3)控制器四、案例剖析(重点)(1)a2(2)a*b(3&…

vscode配置Markdown snippet 的快捷键

Snippet 是? 不同文件的模板语法/代码片段,可以设置好后在不同类型文件快速插入,提高效率。 例如:可以在Markdown使用快捷键生成自己想要的模板内容,自定义输入时tab的跳转位置 具体设置 官方文档 生成snippet的在…

Apache Spark 机器学习 数据源 2

数据源 数据源作为机器学习的数据输入,以供给Spark进行机器学习,Spark技术框架除了支持Parquet、CSV、JSON以及JDBC这些常用的数据源,还提供一些特殊数据源的支持,例如,图像或者LIBSVM。 Parquet数据源 该数据源是a…

2023什么蓝牙耳机值得入手?值得入手的半入耳蓝牙耳机推荐

毫无疑问,近年来蓝牙耳机的外出使用频率越来越高,这是由于其外出携带的便捷性以及配置越来越高端、先进,而半入耳式蓝牙耳机又凭借更舒适的佩戴体验以及便携性受到用户的喜爱。但,面对形形色色的蓝牙耳机,不同价位、不…

Shell中的 test 命令

Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。数值测试参数说明-eq等于则为真-ne不等于则为真-gt大于则为真-ge大于等于则为真-lt小于则为真-le小于等于则为真实例num1100num2100if test $[num1] -eq $[num2]thenecho 两…

完全背包理论基础

目录 一.理论基础 二.遍历顺序问题 2.1 01背包 2.2完全背包 3.相关题型 3.1零钱兑换 3.1.数组总和IV 一.理论基础 题目描述: 有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品都有无限个&…

重置Entity Framework Core的数据迁移

本文主要参考文章重置EntityFramework数据迁移到洁净状态,感谢哈~。可能是版本问题,文中所述操作跟我稍微有所出入,故在此做下记录。注意,本人的IDE是JetbrainsRider,并非Visual Studio,但主要操作是通用的…

Spring事务源码解析

Spring事务源码解析一、基本概念1、ACID属性2、事务的隔离级别3、事务行为4、Spring事务的传播级别5、Spring事务支持方式二、Spring事务的执行源码1、事务AOP2、事务处理拦截器TransactionInterceptor2.1 主要流程2.2 尝试创建事务2.3 清除线程事务信息2.4 事务提交2.5 事务异…

品牌控价、淘宝控价、拼多多控价,如何有效利用平台投诉

低价链接,是品牌渠道管控最重要的工作,同时,也是最难的,尤其是非授权低价链接,不受经销管理制度约束,极可能屡次沟通仍不配合整改,进行平台投诉,也不被平台支持诉求。 确实&#xf…

高级ACL的基础配置命令

ACL概述 ACL是由一系列permit或deny语句组成的、有序规则的列表。 ACL是一个匹配工具,能够对报文进行匹配和区分。 ACL的组成 CL由若干条permit或deny语句组成。每条语句就是该ACL的一条规则,每条语句中的permit或deny就是与这条规则相对应的处理动作。…

各社区文艺团队疫情首秀演出《金龄会》受邀提供全程服务

疫情放开后,各地活动逐渐恢复,受到广州各社区的中老年文艺团队邀约,广东省金龄会于1月9日在金龄会演播厅举办了疫情后的首秀——“健康广东,抗疫成功,再创辉煌”广东中老年文化艺术大赛,由广东省健康金龄公…

MAC(m1)-CentOS8 Docker安装MySQL

1、查看可用的MySQL版本 访问 MySQL 镜像库地址:Docker 查看老版本: 2、拉取MySQL镜像 我们可以拉取官方的最新版本的镜像: docker pull mysql:latest 我的MAC m1安装的mysql是8,准备在虚拟机上安装5.7 没找到哦,呜…

MySQL高级篇第01章(Linux下MySQL的安装与使用)

CentOS环境的准备 虚拟机的克隆 mac地址 主机名 ip地址 UUID 查看是否安装过MySQL 如果是用rpm安装,检查一下RPM PACKAGE rpm -qa | grep -i mysql # -i 忽略大小写检查mysql service服务: systemctl status mysqld.service如果存在mysql-libs的旧…

Vue2.0开发之——Vue组件-生命周期(37)

一 概述 了解生命周期和生命周期函数的概念初步了解组件创建的过程了解beforeCreate和Created生命周期函数的特点了解beforeMount和mounted生命周期函数组件运行阶段的生命周期函数组件销毁阶段的生命周期函数 二 了解生命周期和生命周期函数的概念 2.1 生命周期&生命周期…

李宏毅ML-机器学习任务功略

文章目录机器学习任务功略机器学习框架训练模型通用指南1. training loss is large2. training loss is small2.1 training loss is small and testing loss is large2.2 training loss is small and testing loss is small3. 偏差与复杂度的平衡机器学习任务功略 机器学习框架…