修改特征图类型tuple转Tensor

这篇具有很好参考价值的文章主要介绍了修改特征图类型tuple转Tensor。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

在修改模型结构时,本来想着简单替换主干网络,用轻量级结构的替换原来的复杂模型,但是过程没想象中的顺利;其中比较关键的一点是两个主干网络输出的特征图类型不一致。

问题描述

主干网络A(轻量级),它输出特征图的类型是tuple,输出维度是[1, 3, 640, 640];

主干网络B(复杂的),它输出特征图的类型是torch.Tensor,输出维度也是[1, 3, 640, 640];

但是如果直接把主干网络B替换为主干网络A,后面接着原来的特征提取结构和任务头,会报错的。

tuple 转 torch.Tensor

把主干网络B替换为主干网络A后,加多一步操作,将输出特征图从tuple 转 torch.Tensor即可。

转换的基本思路是:使用 torch.cat( ) 把特征图进行拼接起来,通常是在维度 dim=0 进行拼接的。

A、当特征图的tuple数量为1

import torch

# 假设模型输出的特征图为 feature_map, feature_map 是一个 tuple

# 获取特征图个数
num_maps = len(feature_map)

# 打印原来的特征图信息
print("type feature_raw:", type(outs))
for out in feature_map:
    print(out.size())
print("len feature_raw:", num_maps)

# 按第 0 维度拼接特征图
feature_map = torch.cat([fm for fm in feature_map], dim=0)

# 检查特征图类型
print("type feature_map:", type(feature_map))
# 输出: <class 'torch.Tensor'>

# 检查特征图维度
print("size feature_map:", feature_map.size())

示例输出:

type feature_raw: <class 'tuple'>
torch.Size([8, 32, 640, 640])
len feature_raw: 1


type feature_map: <class 'torch.Tensor'>
feature_map: torch.Size([8, 32, 640, 640])

B、当特征图的tuple数量为多个

如果主干网络输出的特征图类型为tuple,而且它包含多个特征图。我们想把它们变为一个torch.Tensor,可以使用torch.cat函数把它们拼接在一起。 

import torch

# 假设模型输出的特征图为 feature_map, feature_map 是一个 tuple

# 获取特征图个数
num_maps = len(feature_map)

# 打印原来的特征图信息
print("type feature_raw:", type(outs))
for out in feature_map:
    print(out.size())
print("len feature_raw:", num_maps)

# 按第 0 维度拼接特征图
feature_map = torch.cat([fm.unsqueeze(0) for fm in feature_map], dim=0)

# 检查特征图类型
print("type feature_map:", type(feature_map))
# 输出: <class 'torch.Tensor'>

# 检查特征图维度
print("size feature_map:", feature_map.size())

这样就可以将输出的特征图类型由tuple变为torch.Tensor了。拼接时,通过unsqueeze(0)把每个特征图在第0维度上增加一维,这样才能用torch.cat进行拼接。 

示例输出:

type feature_raw: <class 'tuple'>
torch.Size([8, 32, 640, 640])

torch.Size([8, 32, 640, 640])

torch.Size([8, 32, 640, 640])

torch.Size([8, 32, 640, 640])
len feature_raw: 1


type feature_map: <class 'torch.Tensor'>
feature_map: torch.Size([4, 8, 32, 640, 640])

分享完成,欢迎交流~

 文章来源地址https://www.toymoban.com/news/detail-404127.html

到了这里,关于修改特征图类型tuple转Tensor的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Pytorch:将列表数据转不同数据类型的Tensor矩阵

            本文主要介绍pytorch中不同数据类型的Tensor矩阵,例如:float32、float64、int32、int64。并将创建好的列表数据转成不同数据类型的Tensor矩阵,最后进行:行复制的操作。 一、列表转Tensor,复制行和列向量 二、转Tensor矩阵中元素的数据类型 三、求个赞就行    

    2024年02月11日
    浏览(50)
  • Pytorch数据类型转换(torch.tensor,torch.FloatTensor)

    之前遇到转为tensor转化为浮点型的问题,今天整理下,我只讲几个我常用的,如果有更好的方法,欢迎补充 1.首先讲下torch.tensor,默认整型数据类型为torch.int64,浮点型为torch.float32 2.这是我认为平常最爱用的转数据类型的方法,可以用dtype去定义数据类型 1.这个函数不要乱用

    2024年02月11日
    浏览(48)
  • 【Pytorch】学习记录分享2——Tensor基础,数据类型,及其多种创建方式

    pytorch 官方文档 1. 创建 Creating Tensor: 标量、向量、矩阵、tensor 2. 三种方法可以创建张量,一是通过列表(list),二是通过元组(tuple),三是通过Numpy的数组(array),基本创建代码如下: 张量相关属性查看的基本操作,后期遇到的张量结构都比较复杂,难以用肉眼直接看出,因此

    2024年02月04日
    浏览(51)
  • PIL,cv2读取类型及转换,以及PIL,numpy,tensor格式以及cuda,cpu的格式转换

    这里先列个表格方便理解清楚: cv2 PIL 读取 a=cv2.imread() a=Image.open() 读取类型 数组类型 PIL类型 读取颜色通道 BGR RGB(这里需要注意的是当图像格式为RGBA时,PIL读取的是RGBA) 读取尺寸排列 (H,W,C) (W,H,C) 显示图片 cv2.imshow(“a”, a) cv2.waitKey (0) a.show() 相互之间转换显示 Ima

    2024年02月03日
    浏览(38)
  • 将图结构转换矩阵数据转换为PyTorch支持的张量类型时,出现错误AttributeError ‘Tensor‘ object has no attribute ‘todense‘

    将图结构转换矩阵数据转换为PyTorch支持的张量类型时,出现错误AttributeError: ‘Tensor’ object has no attribute ‘todense’ 实例来源于《PyTorch深度学习和图神经网络 卷1》实例26:用图卷积神经网络为论文分类 出错部分p284页 原代码: 错误提示: ​ 找了一圈没有一样的解决方案,但

    2024年02月13日
    浏览(43)
  • 基于信号功率谱特征和GRNN广义回归神经网络的信号调制类型识别算法matlab仿真

    目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 MATLAB2022a         本课题,我们主要对MPSK和MFSK调制类型进行识别。在进行信号调制方式区分之前,首先需要对PSK和FSK进行区分,提出了一种基于信号功率谱的PSK和FSK调制方式

    2024年02月05日
    浏览(39)
  • Sql Server增加字段、修改字段、修改类型、修改默认值

    1、修改字段名: alter table 表名 rename column A to B 2、修改字段类型: alter table 表名 alter column 字段名 type not null 3、修改字段默认值 alter table 表名 add default (0) for 字段名 with values 如果字段有默认值,则需要先删除字段的约束,在添加新的默认值, select c.name from sysconstraints a i

    2024年02月06日
    浏览(40)
  • 模型构建——使用逻辑回归构建模型,lightGBM进行特征筛选

    新的模型要跟原有方案对比,而且是通过实验证明,特别注意模型和策略不能同时调整。一般实验设计包含以下流程: 问题:业务稳定后,可以去掉人工审核吗? 答 :不可以,一般模型上线后,高分段和低分段的表现较好,但中间段还是需要人工审核;而且即使模型完善后

    2024年02月15日
    浏览(44)
  • 多模型图像特征可视化

            特征图可视化是指将网络中某一层的特征图可视化出来,以便观察网络在不同层次上学到的特征。卷积可视化可以帮助深度学习研究者更好地理解卷积的概念和原理,从而更好地设计和优化卷积神经网络。通过可视化,研究者可以更清晰地看到卷积运算中的每一个

    2024年01月17日
    浏览(33)
  • grad-cam用于3D分割网络的代码修改——以及特征层非常规输出的解决方法

    首先,我们看下chatgpt写的Gradcam框架。 为了个性化设计输出的cam,我们需要修改源码。也就是GradCAM()函数。 先解读一下原版 可以看到并没有太多函数方法,我们打开基类BaseCAM() 看一下ActivationsAndGradients 可以看到,ActivationsAndGradients类主要的功能是通过钩子函数获取正向传播

    2024年02月06日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包