多尺度目标检测 Multiscale Object Detection

多尺度目标检测 Multiscale Object Detectionios

咱们在输入图像的每一个像素上生成多个锚框。这些定位框用于对输入图像的不一样区域进行采样。可是,若是锚定框是以图像的每一个像素为中心生成的,很快就会有太多的锚框供咱们计算。例如,咱们假设输入图像的高度和宽度分别为561和728像素。若是以每一个像素为中心生成五个不一样形状的锚框,则超过两百万个锚框(561×728×5)须要在图像上进行预测和标记。web

减小锚箱数量并不困难。一种简单的方法是对输入图像中的一小部分像素进行均匀采样,并生成以采样像素为中心的锚框。此外,咱们能够在多个尺度上生成不一样数量和尺寸的锚箱。请注意,较小的对象比较大的对象更有可能定位在图像上。这里,咱们将使用一个简单的示例:网络

具备1×1, 1×2,和2×2在具备形状的图像上可能有四、2和1可能的位置2×2。 所以,当使用较小的锚定框来检测较小的对象时,咱们能够采样更多的区域;当使用较大的锚框检测较大的对象时,咱们能够采样较少的区域。svg

为了演示如何在多个比例上生成锚框,让咱们先读一个图像。它的高度和宽度561×728像素。函数

%matplotlib inline设计

from d2l import mxnet as d2lcode

from mxnet import image, np, npxorm

npx.set_np()xml

img = image.imread(’…/img/catdog.jpg’)对象

h, w = img.shape[0:2]

h, w

(561, 728)

卷积神经网络(CNN)的二维阵列输出称为特征映射。经过定义特征映射的形状,能够肯定任意图像上均匀采样的锚盒的中点。

函数display_anchors定义以下。咱们将在特征地图fmap上的每一个单元(像素)上生成锚定框。由于坐标轴x和y在锚定框中,锚定被特征地图fmap的宽度和高度分割,0到1之间的值能够用来表示锚定框在特征地图中的相对位置。因为锚框锚定点的中点与特征地图fmap上的全部单元重叠,所以锚定点在任何图像上的相对空间位置必须具备均匀的分布。具体来讲,当特征图的宽度和高度分别设置为fmap_w和fmap_h时,该函数将对fmap_h行和fmap_w列进行统一采样,并将它们做为中点生成大小为s(咱们假设列表s的长度为1)和不一样纵横比(比率)的锚框。

def display_anchors(fmap_w, fmap_h, s):

d2l.set_figsize((3.5, 2.5))

# The values from the first two dimensions will not affect the output

fmap = np.zeros((1, 10, fmap_w, fmap_h))

anchors = npx.multibox_prior(fmap, sizes=s, ratios=[1, 2, 0.5])

bbox_scale = np.array((w, h, w, h))

d2l.show_bboxes(d2l.plt.imshow(img.asnumpy()).axes,

                anchors[0] * bbox_scale)

咱们首先将重点放在小物体的探测上。为了便于在显示时进行区分,此处具备不一样中点的锚定框不重叠。咱们假设锚框的大小为0.15,特征映射的高度和宽度为4。咱们能够看到图片上4行4列的锚框中点分布均匀。

display_anchors(fmap_w=4, fmap_h=4, s=[0.15])
在这里插入图片描述
把特征地图的高度和宽度减小一半,并使用一个更大的定位框来检测更大的物体。当“大小”设置为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])
在这里插入图片描述
因为咱们已经在多个尺度上生成了不一样大小的锚盒,所以咱们将使用它们来检测不一样尺度下不一样大小的对象。如今咱们将介绍一种基于卷积神经网络(CNNs)的方法。

在必定的范围内,假设咱们产生高×宽具备不一样中点的锚定框集基于ci,带形状的特征地图高×宽,每组锚箱数量为a。

例如,对于第一个比例的实验,咱们基于10个(通道数)特征映射生成16组具备不一样中点的锚盒,形状为4×4个,每套含3个锚箱。

根据地面真实边界框的分类和位置,为每一个锚框标记一个类别和偏移量。在当前尺度下,目标检测模型须要预测目标的类别和偏移量高×宽,基于输入图像具备不一样中点的定位框集。

咱们假设ci特征图是CNN基于输入图像的中间输出。由于每一个特征地图都有高×宽不一样的空间位置,相同的位置会有ci单位。根据感觉野的定义,ci同一空间位置的特征图单元在输入图像上具备相同的感觉野。所以,它们表示输入图像在同一感觉野中的信息。

所以,咱们能够改变ci,在同一空间位置的要素映射单位生成一个定位框。不难看出,本质上,咱们利用输入图像在某个接收野的信息来预测输入图像上靠近场的锚盒的种类和偏移量。

当不一样层次的特征映射在输入图像上有不一样大小的接收野时,它们被用来检测不一样大小的目标。例如,咱们能够在一个更大的图像接收层设计一个更大的图像接收层。

Summary

We can generate anchor boxes with different numbers and sizes on multiple scales to detect objects of different sizes on multiple scales. The shape of the feature map can be used to determine the midpoint of the anchor boxes that uniformly sample any image. We use the information for the input image from a certain receptive field to predict the category and offset of the anchor boxes close to that field on the image.