Appearance
多尺度目标检测
一、为什么需要多尺度目标检测
在之前的锚框章节里,我们是给每个像素都生成锚框,这样会产生大量的锚框,计算量太大了。比如一张 561×728 的图片,每个像素生成 5 个锚框,就会有 200 多万个锚框,这显然不现实。
而且,不同大小的目标在图片里出现的频率不一样:小目标在图片里可能有很多种出现的位置,大目标的位置就少一些。所以我们需要在不同的尺度下生成不同数量和大小的锚框
小目标: 小目标在图片里可能有很多种出现的位置,用小锚框,多采样一些区域。大目标: 大目标的位置就少一些,用大锚框,少采样一些区域。
二、多尺度锚框的生成
特征图:
卷积神经网络CNN章节里,我们介绍了卷积神经网络的特征图,它是卷积层的输出,尺寸比输入图片小。 
我们可以通过特征图来生成多尺度的锚框。特征图是卷积神经网络的中间输出,它的尺寸比输入图片小,我们可以在特征图上均匀采样一些点,以这些点为中心生成锚框,这样就能减少锚框的数量。
1. 特征图和锚框的关系
特征图的尺寸决定了我们在输入图片上采样的锚框中心的数量。比如特征图是 4×4 的,我们就在输入图片上均匀采样 4 行 4 列的点,作为锚框的中心;如果特征图是 2×2 的,就采样 2 行 2 列的点。
2. 不同尺度的锚框生成
我们可以在不同的特征图上生成不同大小的锚框:
小尺度的特征图(比如 1×1):生成大锚框,用来检测大目标。
大尺度的特征图(比如 4×4):生成小锚框,用来检测小目标。
3. 生成多尺度锚框的代码实现(PyTorch 版)
python
import torch
from d2l import torch as d2l
def display_anchors(fmap_w, fmap_h, s):
"""在特征图上生成锚框"""
d2l.set_figsize()
# 生成一个虚拟的特征图,前两个维度不影响结果
fmap = torch.zeros((1, 10, fmap_h, fmap_w))
# 生成锚框,s是锚框的尺度,ratios是宽高比
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.imread('../img/catdog.jpg'), anchors[0] * bbox_scale)4. 不同尺度锚框的效果
- 检测小目标:用 4×4 的特征图,生成尺度为 0.15 的锚框,这样锚框比较小,而且在图片上分布比较密集,能覆盖更多小目标的位置。
python
# 加载图片
img = d2l.plt.imread('../img/catdog.jpg')
h, w = img.shape[:2]
# 生成小尺度锚框
display_anchors(fmap_w=4, fmap_h=4, s=[0.15])- 检测中等目标:用 2×2 的特征图,生成尺度为 0.4 的锚框,锚框更大,分布更稀疏。
python
# 生成中等尺度锚框
display_anchors(fmap_w=2, fmap_h=2, s=[0.4])- 检测大目标:用 1×1 的特征图,生成尺度为 0.8 的锚框,锚框最大,只有一个中心,覆盖整个图片。
python
# 生成大尺度锚框
display_anchors(fmap_w=1, fmap_h=1, s=[0.8])三、多尺度检测的原理
我们可以用卷积神经网络的不同层的特征图来做多尺度检测:
- 卷积神经网络的浅层特征图:尺寸比较大,感受野比较小,适合检测小目标。
- 卷积神经网络的深层特征图:尺寸比较小,感受野比较大,适合检测大目标。
1. 感受野的概念
感受野:
感受野是指特征图上的一个像素对应输入图片上的区域大小。深层的特征图的感受野更大,能看到输入图片上更大的区域,所以可以用来检测大目标。
2. 多尺度检测的流程
- 用卷积神经网络对输入图片进行前向传播,得到不同层的特征图。
- 在每个特征图上生成锚框,标记这些锚框的类别和偏移量。
- 用每个特征图的信息来预测对应锚框的类别和偏移量。
- 最后把所有尺度的预测结果整合起来,得到最终的目标检测结果。
四、小结
多尺度目标检测是为了减少锚框的数量,同时检测不同大小的目标,小目标用小锚框,大目标用大锚框。
我们可以通过特征图来生成多尺度的锚框,特征图的尺寸决定了锚框中心的数量,锚框的尺度决定了检测的目标大小。
卷积神经网络的不同层的特征图有不同的感受野,浅层特征图适合检测小目标,深层特征图适合检测大目标。
多尺度检测就是利用不同层的特征图,在不同尺度下检测目标,提高检测的准确率。
(注:文档部分内容可能由 AI 生成)