当前位置: 首页 > wzjs >正文

虚拟主机 多个网站微信登录入口官网

虚拟主机 多个网站,微信登录入口官网,怎么在网上推销产品,洞头住建局网站以下内容为结合李沐老师的课程和教材补充的学习笔记,以及对课后练习的一些思考,自留回顾,也供同学之人交流参考。 本节课程地址:45 SSD实现【动手学深度学习v2】_哔哩哔哩_bilibili 本节教材地址:13.5. 多尺度目标检…

以下内容为结合李沐老师的课程和教材补充的学习笔记,以及对课后练习的一些思考,自留回顾,也供同学之人交流参考。

本节课程地址:45 SSD实现【动手学深度学习v2】_哔哩哔哩_bilibili

本节教材地址:13.5. 多尺度目标检测 — 动手学深度学习 2.0.0 documentation

本节开源代码:…>d2l-zh>pytorch>chapter_optimization>multiscale-object-detection.ipynb


多尺度目标检测

在 13.4节 中,我们以输入图像的每个像素为中心,生成了多个锚框。
基本而言,这些锚框代表了图像不同区域的样本。
然而,如果为每个像素都生成锚框,我们最终可能会得到太多需要计算的锚框。
想象一个 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

输出结果:

(561, 728)

回想一下,在 6.2节 中,我们将卷积图层的二维数组输出称为特征图。通过定义特征图的形状,我们可以确定任何图像上均匀采样锚框的中心。

display_anchors函数定义如下。我们[在特征图(fmap)上生成锚框(anchors),每个单位(像素)作为锚框的中心]。由于锚框中的 ( x , y ) (x, y) (x,y)轴坐标值(anchors)已经被除以特征图(fmap)的宽度和高度,因此这些值介于0和1之间,表示特征图中锚框的相对位置。

由于锚框(anchors)的中心分布于特征图(fmap)上的所有单位,因此这些中心必须根据其相对空间位置在任何输入图像上均匀分布。更具体地说,给定特征图的宽度和高度fmap_wfmap_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, sizes=s, ratios=[1, 2, 0.5])bbox_scale = torch.tensor((w, h, w, h))# anchors[0]获得图像中的所有锚框,* bbox_scale恢复原尺寸d2l.show_bboxes(d2l.plt.imshow(img).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])

在这里插入图片描述

多尺度检测

既然我们已经生成了多尺度的锚框,我们就将使用它们来检测不同尺度下各种大小的目标。下面,我们介绍一种基于CNN的多尺度目标检测方法,将在 13.7节 中实现。

在某种规模上,假设我们有 c c c张形状为 h × w h \times w h×w的特征图。使用 13.5.1节 中的方法,我们生成了 h w hw hw组锚框,其中每组都有 a a a个中心相同的锚框。例如,在 13.5.1节 实验的第一个尺度上,给定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个单元。根据 6.2节 中对感受野的定义,特征图在相同空间位置的 c c c个单元在输入图像上的感受野相同:它们表征了同一感受野内的输入图像信息。因此,我们可以将特征图在同一空间位置的 c c c个单元变换为使用此空间位置生成的 a a a个锚框类别和偏移量。本质上,我们用输入图像在某个感受野区域内的信息,来预测输入图像上与该区域位置相近的锚框类别和偏移量。

当不同层的特征图在输入图像上分别拥有不同大小的感受野时,它们可以用于检测不同大小的目标。例如,我们可以设计一个神经网络,其中靠近输出层的特征图单元具有更宽的感受野,这样它们就可以从输入图像中检测到较大的目标。

简言之,我们可以利用深层神经网络在多个层次上对图像进行分层表示,从而实现多尺度目标检测。在 13.7节,我们将通过一个具体的例子来说明它是如何工作的。

小结

  • 在多个尺度下,我们可以生成不同尺寸的锚框来检测不同尺寸的目标。
  • 通过定义特征图的形状,我们可以决定任何图像上均匀采样的锚框的中心。
  • 我们使用输入图像在某个感受野区域内的信息,来预测输入图像上与该区域位置相近的锚框类别和偏移量。
  • 我们可以通过深入学习,在多个层次上的图像分层表示进行多尺度目标检测。

练习

  • 根据我们在 7.1节 中的讨论,深度神经网络学习图像特征级别抽象层次,随网络深度的增加而升级。在多尺度目标检测中,不同尺度的特征映射是否对应于不同的抽象层次?为什么?

解:
在多尺度目标检测中,不同尺度的特征映射对应于不同的抽象层次:

  • 浅层特征图​​:空间分辨率较高(即h和w较大),但感受野较小,适合检测小目标(因为小目标在图像上出现的细节信息在浅层特征图中保留较好),通常使用较小的锚框来检测小目标。
  • ​深层特征图​​:空间分辨率较低(即h和w较小),但感受野较大,适合检测大目标(因为大目标需要更大的感受野来捕获上下文信息),通常使用较大的锚框来检测大目标。
  1. 在 13.5.1节 中的实验里的第一个尺度(fmap_w=4, fmap_h=4)下,生成可能重叠的均匀分布的锚框。

解:
将s增大即可生成重叠的锚框,实验如下:

display_anchors(fmap_w=4, fmap_h=4, s=[0.25])

在这里插入图片描述

  1. 给定形状为 1 × c × h × w 1 \times c \times h \times w 1×c×h×w的特征图变量,其中 c c c h h h w w w分别是特征图的通道数、高度和宽度。怎样才能将这个变量转换为锚框类别和偏移量?输出的形状是什么?

解:
特征图在同一个空间位置上有c个通道(即c个特征值)。这些特征值是从输入图像中通过卷积计算得到的,它们代表了该位置感受野内的视觉信息。
我们可以利用这个位置上的c个特征值来预测以该位置为中心的a个锚框的类别和偏移量。
具体实现时,通常会使用一个卷积层(或称为预测头)来处理特征图。例如:
对于类别预测,可以使用一个卷积核大小为1x1,输出通道数为a * (类别数)的卷积层(通常每个锚框独立预测类别);对于边界框偏移量预测,可以使用一个卷积核大小为1x1,输出通道数为a*4的卷积层。
代码如下:

import torch
import torch.nn as nn# 输入特征图(1 * c * h * w)
batch_size, channels, height, width = 1, 256, 4, 4
feature_map = torch.randn(batch_size, channels, height, width)# 定义锚框参数
num_anchors = 6  # 每个位置生成的锚框数 = len(sizes)×len(ratios)
num_classes = 20  # 目标类别数# 类别预测头
class_head = nn.Conv2d(in_channels=channels,out_channels=num_anchors * num_classes,kernel_size=3,padding=1)# 偏移量预测头
bbox_head = nn.Conv2d(in_channels=channels,out_channels=num_anchors * 4,  # 4个偏移量参数kernel_size=3,padding=1)# 前向传播
cls_pred = class_head(feature_map)  # 形状: (1, num_anchors * num_classes, h, w)
cls_output = cls_pred.permute(0, 2, 3, 1)  # 维度重排: (1, h, w, num_anchors×num_classes)
cls_output = cls_output.reshape(batch_size, height * width * num_anchors, num_classes+1)
print(f"类别输出形状:{cls_output.shape}")bbox_pred = bbox_head(feature_map) # 形状: (1, num_anchors×4, h, w)
bbox_output = bbox_pred.permute(0, 2, 3, 1)  # 维度重排: (1, h, w, num_anchors×4)
bbox_output = bbox_output.reshape(batch_size, height * width * num_anchors, 4)
print(f"偏移量输出形状:{bbox_output.shape}")

输出结果:
类别输出形状:torch.Size([1, 96, 21])
偏移量输出形状:torch.Size([1, 96, 4])

http://www.dtcms.com/wzjs/795926.html

相关文章:

  • 南宁本地有几家网站开发怎样查找网站开发者
  • 郑州网站seo优化公司做介绍美食网站的菜单的
  • 制作一个链接网站网站后台制作用的软件
  • 德胜门网站建设大气网站特点
  • 免费制作自己的微网站ui设计公司排行榜
  • 做dnf钓鱼网站安徽网站建设服务
  • 网站建设管理条例网站换空间怎么换
  • 网站设计基本原则wordpress自媒体模版
  • 郑州网站制作的公司哪家好小程序app定制开发系统报价
  • 米定制网的网站是那个公司做励销云
  • 平阳县城乡规划建设局网站南昌室内设计学校
  • 河北建设信息网站网站分站如何做
  • 怎样用dw做 网站首页手机wap网站开发教程
  • 张店网站建设定制河北中尊建设工程有限公司官方网站
  • 网站的产品上传图片中国建设银行互联网网站
  • 公司换网站换域名 备案我想做网络推广
  • 网站的关键词策略做物流用哪个网站好
  • 网站做外链是什么意思fireworks个人网站模板
  • Vs做的网站调试时如何适应网页微信商城怎么做
  • 深圳招聘网站有哪些学室内设计后悔了
  • 2017两学一做网站济南网站建设外包公司哪家好
  • 宁金诚信建设网站7k7k电脑版网页游戏
  • 哪些网站做写字楼出租不用备案的网站
  • 建设网站的技术亿方云企业网盘
  • 商丘网站推广公司网站的中英文翻译是怎么做的
  • 广东有做阿里网站的吗域名网安备案
  • 吴江建设工程招标中心网站网站策划书的撰写
  • 深圳福田网站设计做h5的网站的区别
  • 医院网站优化方案长治网站制作教程
  • 深圳外贸建站模版餐厅vi设计公司