目标检测算法通常会在输入图像中采样大量的区域,然后判断这些区域中是否包含我们感兴趣的目标,并调整区域边界从而更准确地预测目标的真实边界框(ground-truth bounding box)。

不同的模型使用的区域采样方法可能不同。 这里我们介绍其中的一种方法:以每个像素为中心,生成多个缩放比和宽高比(aspect ratio)不同的边界框。 这些边界框被称为锚框(anchor box)。

首先,让我们修改输出精度,以获得更简洁的输出。

%matplotlib inline
import torch
from d2l import torch as d2ltorch.set_printoptions(2)  # 精简输出精度

1. 生成多个锚框

ps:锚框的宽度和高度分别是ws根号r和hs/根号r,下面图片有错误。

r是指锚框的宽高比与图像的宽高比之比即w’/h’ = w/h*r,s是图像尺寸缩放因子即w’h’=whs^2,联立求解即可得文中的锚框宽高即w’=ws×sqrt( r ),h’=hs/sqrt( r )。

上述生成锚框的方法在下面的multibox_prior函数中实现。 我们指定输入图像、尺寸列表和宽高比列表,然后此函数将返回所有的锚框。

#@save
def multibox_prior(data, sizes, ratios):"""生成以每个像素为中心具有不同形状的锚框"""in_height, in_width = data.shape[-2:] # 从倒数第二维道最后一维,也就是这里的高和宽device, num_sizes, num_ratios = data.device, len(sizes), len(ratios)boxes_per_pixel = (num_sizes + num_ratios - 1)size_tensor = torch.tensor(sizes, device=device)ratio_tensor = torch.tensor(ratios, device=device)# 为了将锚点移动到像素的中心,需要设置偏移量。# 因为一个像素的高为1且宽为1,我们选择偏移我们的中心0.5offset_h, offset_w = 0.5, 0.5steps_h = 1.0 / in_height  # 在y轴上缩放步长steps_w = 1.0 / in_width  # 在x轴上缩放步长# 生成锚框的所有中心点center_h = (torch.arange(in_height, device=device) + offset_h) * steps_hcenter_w = (torch.arange(in_width, device=device) + offset_w) * steps_wshift_y, shift_x = torch.meshgrid(center_h, center_w, indexing='ij')shift_y, shift_x = shift_y.reshape(-1), shift_x.reshape(-1)# 生成“boxes_per_pixel”个高和宽,# 之后用于创建锚框的四角坐标(xmin,xmax,ymin,ymax)w = torch.cat((size_tensor * torch.sqrt(ratio_tensor[0]),sizes[0] * torch.sqrt(ratio_tensor[1:])))\* in_height / in_width  # 处理矩形输入h = torch.cat((size_tensor / torch.sqrt(ratio_tensor[0]),sizes[0] / torch.sqrt(ratio_tensor[1:])))# 除以2来获得半高和半宽anchor_manipulations = torch.stack((-w, -h, w, h)).T.repeat(in_height * in_width, 1) / 2# 每个中心点都将有“boxes_per_pixel”个锚框,# 所以生成含所有锚框中心的网格,重复了“boxes_per_pixel”次out_grid = torch.stack([shift_x, shift_y, shift_x, shift_y],dim=1).repeat_interleave(boxes_per_pixel, dim=0)output = out_grid + anchor_manipulationsreturn output.unsqueeze(0)

可以看到返回的锚框变量Y的形状是(批量大小,锚框的数量,4),4表明:每个锚框的位置用4个数字来表示。

img = d2l.plt.imread('drive/MyDrive/chapter13/img/catdog.jpg')
h, w = img.shape[:2]print(h, w)
X = torch.rand(size=(1, 3, h, w)) # 批量大小为1,通道为3
# size[0]=0.75表示的是生成的锚框是图片的75%的大小
Y = multibox_prior(X, sizes=[0.75, 0.5, 0.25], ratios=[1, 2, 0.5])
Y.shape

运行结果:

将锚框变量Y的形状更改为(图像高度,图像宽度,以同一像素为中心的锚框的数量,4)后,我们可以获得以指定像素的位置为中心的所有锚框。 在接下来的内容中,我们访问以(250,250)为中心的第一个锚框。 它有四个元素:锚框左上角的 (

65. 锚框的代码实现相关推荐

  1. 李沐动手学深度学习v2-目标检测中的锚框和代码实现

    一.目标检测中的锚框 前提: 本节锚框代码实现,使用了很多Pytorch内置函数,如果有对应函数看不懂的地方,可以查看前面博客对相应函数的具体解释,如下链接所示: Pytorch中torch.mesh ...

  2. 【目标检测算法-锚框公式推导及代码详解】

    目标检测算法-锚框公式推导及代码详解 0 沐神对锚框的宽高计算并未推导以及讲解 1 锚框宽高公式推导 1.1 基础概念 1.2 锚框宽高公式推导 1.3 图片验证计算 1.4 小结 2 代码详解 2. ...

  3. 6--目标检测和边界框和锚框

    很多时候图像里有多个目标,不仅想知道它们的类别,还想得到它们在图像中的具体位置. 在计算机视觉里,这类任务称为目标检测(object detection). 6.1 边界框  边界框(bounding ...

  4. 锚框、交并比和非极大值抑制(tf2.0源码解析)

    锚框.交并比和非极大值抑制(tf2.0源码解析) 文章目录 锚框.交并比和非极大值抑制(tf2.0源码解析) 一.锚框生成 1.锚框的宽高 2.锚框的个数 3.注意点(★★★) 4.tf2.0代码 二 ...

  5. 结合具体代码理解yolov5-7.0锚框(anchor)生成机制

    最近对yolov5-7.0的学习有所深入,感觉官方代码也比较易读,所以对网络结构的理解更进一步,其中对锚框生成这块没太看明白细节,也想弄明白这块,于是前前后后好好看了代码.现在把我的学习收获做一下记录 ...

  6. 基于锚框与无需锚框的通用物体检测算法

    物体检测通常是指在图像中检测出物体出现的位置及对应的类别,是计算机视觉的根本问题,也是最基础的问题.它广泛应用于日常生活中,如浏览器的拍照识图.自动驾驶行人车辆检测.道路目标检测(人行道检测)及图像分 ...

  7. 详解通用物体检测算法:基于锚框与无需锚框

    物体检测通常是指在图像中检测出物体出现的位置及对应的类别,它是计算机视觉中的根本问题之一,同时也是最基础的问题,如图像分割.物体追踪.关键点检测等都依赖物体检测. 从应用来看,物体检测已广泛应用于大家 ...

  8. Pytorch 锚框

    Pytorch 锚框 0. 环境介绍 环境使用 Kaggle 里免费建立的 Notebook 教程使用李沐老师的 动手学深度学习 网站和 视频讲解 小技巧:当遇到函数看不懂的时候可以按 Shift+T ...

  9. 0927锚框(Anchor box)

    锚框(Anchor box) 目标检测算法中,通常会在输入图像中采样大量的区域,然后判断这些区域中是否包含所感兴趣的目标,并调整区域边界从而更加准确地预测目标的真实边界框(ground-truth b ...

最新文章

  1. 如何转载别人的CSDN文章
  2. VS2008如何自动添加消息映射
  3. 给大家推荐一位我非常佩服的Python工程师 人生赢家
  4. java 高手_Java高手是怎样炼成的
  5. spring框架介绍_Spring框架介绍
  6. python machinelearning下载_Python与机器学习系列1:Anaconda的下载与安装
  7. 输入字符_你会输入带圈字符吗?
  8. android 模板引擎,template.js模板引擎
  9. c++ reinterpret_cast报错: casts away qualifiers
  10. 网易微专业java高级笔记_网易前端微专业------页面架构笔记
  11. [LOJ6515]贪玩蓝月
  12. python创建函数、可以接受任意多个整数参数并求和_如何实现Python函数的参数不限个数?...
  13. 程序员的两个主线和四个象限
  14. 问题 E: 1.10 旅行时间  根据火车的出发时间和到达时间,编写程序计算整个旅途所用的时间。
  15. 【STM32】获取STM32官方固件库
  16. 中国地质大学计算机学院保研率,北京高校保研率、考研率排行榜
  17. Effective Modern C++ 条款1 理解模板类型推断
  18. 阅读GNSS软件接收机matlab代码(二)
  19. 第一期 微信云开发小程序介绍-生活智打卡
  20. java 时间cst_时间格式中的CST和sat是什么?

热门文章

  1. 冲着这份大数据分析案例,我立马下载该分析软件!
  2. 邹恒甫答胡景北学兄: 张维迎是报邹恒甫不支持他当正院长的仇
  3. Circuit Switch与Packet Switch
  4. android studio 3安装教程,android studio3.4安装指南图文教程
  5. python 百度网盘库 根据文件名获取网盘链接_GitHub - tychxn/baidu-wangpan-parse: 获取百度网盘分享文件的下载地址...
  6. OpenStack版本升级之Horizon
  7. Python量化研究:可转债抢权配售值得做吗?
  8. 时间同步ntpdate
  9. TP升级到3.2.3的注意事项
  10. 蛋花花给前端初学者的三点建议