动手学深度学习(Pytorch版)代码实践 -计算机视觉-45多尺度目标检测

45多尺度目标检测

# 多尺度锚框
"""
减少图像上的锚框数量并不困难。 比如,我们可以在输入图像中均匀采样一小部分像素,
并以它们为中心生成锚框。 此外,在不同尺度下,我们可以生成不同数量和不同大小的锚框。
直观地说,比起较大的目标,较小的目标在图像上出现的可能性更多样。 
例如,1*1,1*2,2*2的目标可以分别以4、2和1种可能的方式出现在2*2
图像上。 因此,当使用较小的锚框检测较小的物体时,我们可以采样更多的区域,
而对于较大的物体,我们可以采样较少的区域。
"""
import torch
from PIL import Image
import matplotlib.pylab as plt
from d2l import torch as d2l

plt.figure('catdog')
img = plt.imread('../limuPytorch/images/catdog.jpg')
# # plt.imshow(img)
# print(img.shape) # (561, 728, 3)
# 获取图像的高度和宽度,忽略通道数
h, w = img.shape[:2]

# 定义一个显示锚框(anchors)的函数
def display_anchors(fmap_w, fmap_h, s):
    # 设置图像的显示大小
    d2l.set_figsize()
    # 创建一个零张量,形状为(1, 10, fmap_h, fmap_w),前两个维度不影响输出
    fmap = torch.zeros((1, 10, fmap_h, fmap_w))
    # 生成多尺度的锚框,sizes参数为s,ratios参数为[1, 2, 0.5]
    anchors = d2l.multibox_prior(fmap, sizes=s, ratios=[1, 2, 0.5])
    """
    sizes=s:指定了锚框的尺寸,这里传入的是一个列表 s。
    例如,在代码的调用中 s=[0.15]、s=[0.4]、s=[0.8]。
    这些值表示锚框相对于图像尺寸的比例
    ratios=[1, 2, 0.5]:指定了锚框的长宽比,分别是 1(即正方形),
    2(即宽高比为2的矩形),以及 0.5(即宽高比为0.5的矩形)。
    """
    # 将图像宽高转化为张量,用于尺度转换
    bbox_scale = torch.tensor((w, h, w, h))

    # 显示图像上的锚框,使用工具库d2l的show_bboxes函数
    # 显示图像,获取axes,anchors乘以bbox_scale进行尺度转换
    d2l.show_bboxes(d2l.plt.imshow(img).axes, anchors[0] * bbox_scale)

# 调用display_anchors函数,特征图大小为4x4,锚框尺度为0.15
display_anchors(fmap_w=4, fmap_h=4, s=[0.15])
# 显示图像
plt.show()

# 调用display_anchors函数,特征图大小为2x2,锚框尺度为0.4
display_anchors(fmap_w=2, fmap_h=2, s=[0.4])
# 显示图像
plt.show()

# 调用display_anchors函数,特征图大小为1x1,锚框尺度为0.8
display_anchors(fmap_w=1, fmap_h=1, s=[0.8])
# 显示图像
plt.show()

运行结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
TensorFlow: - 原理:TensorFlow是一个基于数据流图的深度学习框架,使用静态计算图来表示计算任务。它使用张量(Tensor)作为数据的基本单位,并通过计算图定义了数据流和操作之间的关系。 - 结构:TensorFlow提供了丰富的API和工具,包括高级API(如Keras),用于简化模型的构建和训练过程。它支持分布式计算和跨平台部署,并具有强大的计算性能和优化能力。 PyTorch: - 原理:PyTorch是一个基于动态计算图的深度学习框架,它使用动态构建计算图的方式来执行计算任务。这使得PyTorch在灵活性和易用性方面具有优势,可以方便地进行模型的调试和动态图的操作。 - 结构:PyTorch提供了直观的API和丰富的工具,使得模型的构建和训练过程更加简洁和灵活。它也支持分布式计算和跨平台部署,并且在术界广泛使用。 Keras: - 原理:Keras是一个高级神经网络API,可以在多种深度学习框架上运行,如TensorFlow、Theano和CNTK。它提供了简洁易用的接口,使得模型的构建和训练过程更加快速和方便。 - 结构:Keras的结构相对简单,主要包含顺序模型和函数式模型两种方式。它提供了丰富的层和模型组件,可以快速搭建各种类型的神经网络模型。 Caffe: - 原理:Caffe是一个基于数据和计算图的深度学习框架,它使用protobuf文件定义网络结构和参数。Caffe主要用于图像分类和目标检测计算机视觉任务。 - 结构:Caffe的结构相对简单,通过定义网络结构文件和参数文件来构建和训练模型。它具有高效的推理性能,并且支持在多个平台上进行部署。 MXNet: - 原理:MXNet是一个基于动态计算图的深度学习框架,它支持静态和动态混合的计算图。MXNet具有高度可扩展性和灵活性,可以适应不同规模和需求的深度学习任务。 - 结构:MXNet提供了简洁的API和工具,使得模型的构建和训练过程更加容易。它还支持分布式计算和多种编程语言接口。 Darknet: - 原理:Darknet是一个开源的深度学习框架,主要用于计算机视觉任务,如目标检测。它使用基于卷积神经网络的深度学习方法,并采用全卷积和多尺度预测等技术。 - 结构:Darknet的结构相对轻量级,具有较小的参数量和较快的推理速度。它提供了简单而高效的网络结构和特殊的层操作,使得模型具有较好的性能。 综上所述,这些流行的深度学习框架在原理和结构上有所差异,各自适用于不同的应用和需求。选择合适的框架取决于任务类型、开发者的经验和项目需求等因素。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@李思成

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值