个人网站开发多少钱,定制虚拟偶像汉化破解版,微信小程序开发方案怎么做,如何在医院推广产品【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈PyTorch深度学习 ⌋ ⌋ ⌋ 深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上#xff0c;结合当代大数据和大算力的发展而发展出来的。深度学习最重… 【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈PyTorch深度学习 ⌋ ⌋ ⌋ 深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上结合当代大数据和大算力的发展而发展出来的。深度学习最重要的技术特征是具有自动提取特征的能力。神经网络算法、算力和数据是开展深度学习的三要素。深度学习在计算机视觉、自然语言处理、多模态数据分析、科学探索等领域都取得了很多成果。本专栏介绍基于PyTorch的深度学习算法实现。 【GitCode】专栏资源保存在我的GitCode仓库https://gitcode.com/Morse_Chen/PyTorch_deep_learning。 文章目录 一、多尺度锚框二、多尺度检测小结 在锚框中我们以输入图像的每个像素为中心生成了多个锚框。基本而言这些锚框代表了图像不同区域的样本。然而如果为每个像素都生成的锚框我们最终可能会得到太多需要计算的锚框。想象一个 561 × 728 561 \times 728 561×728的输入图像如果以每个像素为中心生成五个形状不同的锚框就需要在图像上标记和预测超过200万个锚框 561 × 728 × 5 561 \times 728 \times 5 561×728×5。
一、多尺度锚框 减少图像上的锚框数量并不困难。比如我们可以在输入图像中均匀采样一小部分像素并以它们为中心生成锚框。此外在不同尺度下我们可以生成不同数量和不同大小的锚框。直观地说比起较大的目标较小的目标在图像上出现的可能性更多样。例如 1 × 1 1 \times 1 1×1、 1 × 2 1 \times 2 1×2和 2 × 2 2 \times 2 2×2的目标可以分别以4、2和1种可能的方式出现在 2 × 2 2 \times 2 2×2图像上。因此当使用较小的锚框检测较小的物体时我们可以采样更多的区域而对于较大的物体我们可以采样较少的区域。 为了演示如何在多个尺度下生成锚框让我们先读取一张图像。它的高度和宽度分别为561和728像素。
%matplotlib inline
import torch
from d2l import torch as d2limg d2l.plt.imread(../img/catdog.jpg)
h, w img.shape[:2]
h, w回想一下在图像卷积中我们将卷积图层的二维数组输出称为特征图。通过定义特征图的形状我们可以确定任何图像上均匀采样锚框的中心。 display_anchors函数定义如下。我们在特征图fmap上生成锚框anchors每个单位像素作为锚框的中心。由于锚框中的 ( x , y ) (x, y) (x,y)轴坐标值anchors已经被除以特征图fmap的宽度和高度因此这些值介于0和1之间表示特征图中锚框的相对位置。 由于锚框anchors的中心分布于特征图fmap上的所有单位因此这些中心必须根据其相对空间位置在任何输入图像上均匀分布。更具体地说给定特征图的宽度和高度fmap_w和fmap_h以下函数将均匀地对任何输入图像中fmap_h行和fmap_w列中的像素进行采样。以这些均匀采样的像素为中心将会生成大小为s假设列表s的长度为1且宽高比ratios不同的锚框。
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, sizess, 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)首先让我们考虑探测小目标。为了在显示时更容易分辨在这里具有不同中心的锚框不会重叠 锚框的尺度设置为0.15特征图的高度和宽度设置为4。我们可以看到图像上4行和4列的锚框的中心是均匀分布的。
display_anchors(fmap_w4, fmap_h4, s[0.15])然后我们将特征图的高度和宽度减小一半然后使用较大的锚框来检测较大的目标。当尺度设置为0.4时一些锚框将彼此重叠。
display_anchors(fmap_w2, fmap_h2, s[0.4])最后我们进一步将特征图的高度和宽度减小一半然后将锚框的尺度增加到0.8。此时锚框的中心即是图像的中心。
display_anchors(fmap_w1, fmap_h1, s[0.8])二、多尺度检测 既然我们已经生成了多尺度的锚框我们就将使用它们来检测不同尺度下各种大小的目标。下面我们介绍一种基于CNN的多尺度目标检测方法将在单发多框检测SSD中实现。 在某种规模上假设我们有 c c c张形状为 h × w h \times w h×w的特征图。使用多尺度锚框中的方法我们生成了 h w hw hw组锚框其中每组都有 a a a个中心相同的锚框。例如在多尺度锚框实验的第一个尺度上给定10个通道数量 4 × 4 4 \times 4 4×4的特征图我们生成了16组锚框每组包含3个中心相同的锚框。接下来每个锚框都根据真实值边界框来标记了类和偏移量。在当前尺度下目标检测模型需要预测输入图像上 h w hw hw组锚框类别和偏移量其中不同组锚框具有不同的中心。 假设此处的 c c c张特征图是CNN基于输入图像的正向传播算法获得的中间输出。既然每张特征图上都有 h w hw hw个不同的空间位置那么相同空间位置可以看作含有 c c c个单元。根据图像卷积中对感受野的定义特征图在相同空间位置的 c c c个单元在输入图像上的感受野相同它们表征了同一感受野内的输入图像信息。 因此我们可以将特征图在同一空间位置的 c c c个单元变换为使用此空间位置生成的 a a a个锚框类别和偏移量。本质上我们用输入图像在某个感受野区域内的信息来预测输入图像上与该区域位置相近的锚框类别和偏移量。 当不同层的特征图在输入图像上分别拥有不同大小的感受野时它们可以用于检测不同大小的目标。例如我们可以设计一个神经网络其中靠近输出层的特征图单元具有更宽的感受野这样它们就可以从输入图像中检测到较大的目标。 简言之我们可以利用深层神经网络在多个层次上对图像进行分层表示从而实现多尺度目标检测。在单发多框检测SSD将通过一个具体的例子来说明它是如何工作的。
小结
在多个尺度下我们可以生成不同尺寸的锚框来检测不同尺寸的目标。通过定义特征图的形状我们可以决定任何图像上均匀采样的锚框的中心。我们使用输入图像在某个感受野区域内的信息来预测输入图像上与该区域位置相近的锚框类别和偏移量。我们可以通过深入学习在多个层次上的图像分层表示进行多尺度目标检测。