动手学习深度学习(19)多尺度锚框和SSD实现

茴香豆 Lv5

当使用较小的锚框检测较小的物体时,我们可以采样更多的区域,而对于较大的物体,我们可以采样较少的区域。

多尺度锚框

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

1
2
3
4
5
import torch
from d2l import torch as d2l

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

给定特征图的宽度和高度fmap_wfmap_h,以下函数将均匀地对任何输入图像中fmap_h行和fmap_w列中的像素进行采样。 以这些均匀采样的像素为中心,将会生成大小为s(假设列表s的长度为1)且宽高比(ratios)不同的锚框。

1
2
3
4
5
6
7
8
9
def display_anchors(fmap_w, fmap_h, s):
d2l.set_figsize()
# 前两个维度上的值不影响输出
fmap = torch.zeros((1, 10, fmap_h, fmap_w))
anchors = d2l.multibox_prior(fmap, sizes=s, ratios=[1, 2, 0.5])
bbox_scale = torch.tensor((w, h, w, h))
d2l.show_bboxes(d2l.plt.imshow(img).axes,
anchors[0] * bbox_scale)
display_anchors(fmap_w=4, fmap_h=4, s=[0.15])

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

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

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

1
display_anchors(fmap_w=1, fmap_h=1, s=[0.8])

单次多框检测SSD的实现

  • Title: 动手学习深度学习(19)多尺度锚框和SSD实现
  • Author: 茴香豆
  • Created at : 2022-11-09 13:03:19
  • Updated at : 2022-11-24 14:09:14
  • Link: https://hxiangdou.github.io/2022/11/09/DL_19/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments
On this page
动手学习深度学习(19)多尺度锚框和SSD实现