宿州网站建设开发公司/网站关键词优化工具

宿州网站建设开发公司,网站关键词优化工具,网站建设常用字体,1688接代加工订单目录 原始转换脚本 脚本运行报错 基于reset50 模型的自定义网络 基本网络结构 卷积模块定义示例 Bottleneck定义示例 网络定义示例 改进的转换脚本 脚本运行报错channels不匹配 脚本运行报错维度不匹配 模型输入数据的类型 tensor size NCHW和NHWC 自定义网络的通…

目录

原始转换脚本

脚本运行报错

基于reset50 模型的自定义网络

基本网络结构

卷积模块定义示例

Bottleneck定义示例

网络定义示例

改进的转换脚本

脚本运行报错channels不匹配

脚本运行报错维度不匹配

模型输入数据的类型

tensor size

NCHW和NHWC

自定义网络的通道数目

输入维度修改

onnx转换om文件

带参数images

带参数input

总结


之前转换yolov8 官方的模型,命令很简单,只有几行就可以搞定。

而自定的reset50 则显得更为复杂些。在这个转换过程中,我们可以了解一些模型相关的基本概念。

原始转换脚本

 model = models.torch.load('ok.pt')model.to(device)model.eval()dummy_img = torch.Tensor(torch.randn(10, 2, 95))) torch.onnx.export(model = model, #pth模型args=dummy_img,)

脚本运行报错

 pth2onnx('resnet18')File "E:\project\10\model_trasfer.py", line 12, in pth2onnxmodel.eval()
AttributeError: 'collections.OrderedDict' object has no attribute 'eval'

提示没有这个eval这个属性。

这个eval属性将模型设置为推理模式(参考: 将 PyTorch 训练模型转换为 ONNX | Microsoft Learn),是必须调用的。此属性是针对模型的,需要先定义一个模型再进行转换。

基于reset50 模型的自定义网络

由前述这个脚本转换的报错,我们需要一个模型。

基本网络结构

参考:ResNets: Why do they perform better than Classic ConvNets? (Conceptual Analysis) | Towards Data Science

【DL系列】ResNet网络结构详解、完整代码实现-CSDN博客

 主要包括

1)卷积模块,包括含卷积层(青色)、批归一化层(浅蓝色)、ReLU 激活函数(橙黄色)和最大池化层

2) 几个bottleneck模块

 

卷积模块定义示例

def Conv1(in_places, places, stride=2):return nn.Sequential(nn.Conv2d(in_channels=in_places, out_channels=places, kernel_size=7, stride=stride, padding=3, bias=False),nn.BatchNorm2d(places),nn.ReLU(inplace=True),nn.MaxPool2d(kernel_size=3, stride=2, padding=1))

参数

in_places : 输入通道数。

places : 输出通道数。

stride: 卷积步长,默认为 2.

作用: 作为 ResNet 的第一个卷积层,用于对输入图像进行初步特征提取

Bottleneck定义示例

class Bottleneck(nn.Module):def __init__(self, in_places, places, stride=1, downsampling=False, expansion=4):super(Bottleneck, self).__init__()self.expansion = expansionself.downsampling = downsamplingself.bottleneck = nn.Sequential(nn.Conv2d(in_channels=in_places, out_channels=places, kernel_size=1, stride=1, bias=False),nn.BatchNorm2d(places),nn.ReLU(inplace=True),nn.Conv2d(in_channels=places, out_channels=places, kernel_size=3, stride=stride, padding=1, bias=False),nn.BatchNorm2d(places),nn.ReLU(inplace=True),self.relu = nn.ReLU(inplace=True)def forward(self, x):residual = x#         print("bot input shape:",x.shape)out = self.bottleneck(x)if self.downsampling:residual = self.downsample(x)out += residualout = self.relu(out)#         print("bot output shape:",out.shape)return out

in_places: 输入通道数
places: 中间层的通道数
stride : 卷积步长,默认为 1
downsampling: 是否进行下采样(用于调整残差连接的维度)
expansion: 扩展因子,用于调整输出通道数。

作用  通过 1x1、3x3、1x1 的卷积层组合,减少计算量并提取特征。
使用残差连接 ( out += residua1 ) 解决深层网络的梯度消失问题


网络定义示例

class ResNet(nn.Module):def __init__(self, blocks, num_classes=10, expansion=4):super(ResNet, self).__init__()self.expansion = expansionself.conv1 = Conv1(in_places=2, places=64)self.layer1 = self.make_layer(in_places=64, places=64, block=blocks[0], stride=1)self.layer2 = self.make_layer(in_places=256, places=128, block=blocks[1], stride=2)self.layer3 = self.make_layer(in_places=512, places=256, block=blocks[2], stride=2)self.layer4 = self.make_layer(in_places=1024, places=512, block=blocks[3], stride=2)self.avgpool = nn.AdaptiveAvgPool2d((1, 1))self.fc = nn.Linear(512 * expansion, num_classes)def make_layer(self, in_places, places, block, stride):layers = []layers.append(Bottleneck(in_places, places, stride, downsampling=True))for i in range(1, block):#             print(i,in_places,places,self.expansion)layers.append(Bottleneck(places * self.expansion, places))return nn.Sequential(*layers)def forward(self, x):#         print(x.shape)x1 = self.conv1(x)#         print("conv1:",x1.shape)x2 = self.layer1(x1)return F.normalize(x7, dim=-1), F.normalize(x8, dim=-1)

功能:定义了完整的 ResNet 模型
参数

blocks : 每个阶段的 Bottleneck 模块数量(例如 ResNet-50 为 [3,4,6,3])。
num_classes : 分类任务的类别数,默认为 10
expansion :Bottleneck 模块的扩展因子,默认为 4
作用:
通过 make_layer 方法构建多个 Bottleneck 层。
使用全局平均池化 ( AdaptiveAvgPoo12d ) 将特征图转换为向量
通过全连接层 ( fc) 输出分类结果
返回归一化后的特征向量和分类结果
 

改进的转换脚本

主要在于model变量由上述自定义网络模型实例化而来。

 model = Resnet50_2d()  //这里引入自定义网络model.load_state_dict(torch.load('ok.pt')) #model = models.torch.load('ok.pt')#model.to(device)model.eval()dummy_img = torch.Tensor(torch.randn(10, 2, 95)) # (batchsize, channels, width, height)

脚本运行报错channels不匹配

return F.conv2d(

RuntimeError: Given groups=1, weight of size [64, 2, 7, 7], expected input[1, 10, 2, 95] to have 2 channels, but got 10 channels instead

脚本运行报错维度不匹配

raise ValueError("expected 4D input (got {}D input)".format(input.dim()))
ValueError: expected 4D input (got 3D input)

期望4D,但实际3D的输入。

模型输入数据的类型

任何程序都需要数据输入,只是数据输入的形式不同。

tensor size

tensor : 在模型转换中,指的是张量的形状或维度信息。张量是多维数组,广泛应用于深度学习框架中,用于表示输入数据、权重、中间结果等。

- 标量:0维张量(单个数值)
- 向量:1维张量(一维数组)
- 矩阵:2维张量(二维数组)
- 更高维张量:如3D、4D等

tensor size 表示张量在每个维度上的大小。 一个形状为 [3, 224, 224] 的张量表示一个3通道、224x224像素的图像。

NCHW和NHWC

多维数据通过多维数组存储,比如卷积神经网络的特征图(Feature Map)通常用四维数组保存,即4D,4D格式解释如下:

  • N:Batch数量,例如图像的数目。
  • H:Height,特征图高度,即垂直高度方向的像素个数。
  • W:Width,特征图宽度,即水平宽度方向的像素个数。
  • C:Channels,特征图通道,例如彩色RGB图像的Channels为3。

自定义网络的通道数目

通过2.2节及2.4节网络定义传输的参数

self.conv1 = Conv1(in_places=2, places=64)

 据此我们将转换脚本修改为:

dummy_img = torch.Tensor(torch.randn(2, 2, 95)) # (batchsize, channels, width, height)

输入维度修改

由原先3维修改为4维

dummy_img = torch.Tensor(torch.randn(2,2, 2, 95)) # (batchsize, channels, width, height)

至此,已经可以将pt模型文件转换到onnx文件。

onnx转换om文件

带参数images

atc --model=ok.onnx --framework=5 --output=resnet --input_shape="images:1,3,640,640"  --soc_version=Ascend310P3  --insert_op_conf=aipp.cfg
ATC start working now, please wait for a moment.
...
ATC run failed, Please check the detail log, Try 'atc --help' for more information
E10016: 1970-01-01-08:05:58.540.117 Opname [images] specified in [--input_shape] is not found in the model, confirm whether this node name exists, or node is not split with the specified delimiter ';'

提示模型中没有images。这里就特别注意

带参数input

atc  --model=ok.onnx     --framework=5     --output=resnet50_2d     --soc_version=Ascend310P3    --input_format=NCHW     --input_shape="input:2,2,2,95"     --log=info
ATC start working now, please wait for a moment.
...
ATC run success, welcome to the next use.

总结

   1) 自定义网络的模型转换,需要转换时实例化网络模型。

   2) 明确模型输入数据的维度及各维度的大小。毕竟模型的主要工作即处理这些数据。

示例常用的输入一般为 4D 张量,形状为 (batch_size, channels, height, width)

1)batch_size:每次输入网络的样本数量。根据硬件内存和训练需求选择,常见值为 32、64、128 等。

      在推理阶段,batch_size 表示一次性输入模型的样本数量。与训练阶段不同,推理时通常不需要反向传播和梯度计算,因此显存占用较低,可以支持较大的 batch_size。

 常见的 batch_size 选择

  • batch_size = 1

    • 适用于实时推理任务(如摄像头视频流处理)。

    • 延迟最低,但 GPU 利用率可能较低。

  • batch_size = 8/16/32

    • 适用于批量处理任务(如离线图像分类、目标检测)。

    • 在显存允许的情况下,提高 GPU 利用率。

  • batch_size = 动态调整

    • 根据输入数据的数量动态调整 batch_size

    • 例如,如果有 100 张图像需要处理,可以一次性输入 100 张(如果显存允许)。

2)channels:图像的通道数(如 RGB 图像为 3,灰度图像为 1)。由图像类型决定,RGB 为 3,灰度图为 1。

3)height 和 width:图像的高度和宽度。通常将图像调整为固定大小(如 224x224),以适应网络输入。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/898674.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue3:十一、主页面布局(进入指定菜单页面,默认锁定到左侧菜单)

一、效果 直接进入home页面,直接展开对应的菜单项 二、具体实现 1、菜单容器增加默认选中变量 在菜单容器中将默认展开菜单default-openeds修改为默认选中菜单default-active 2、引入useRoute方法 引入该方法为了获取当前页面的路径 import { useRoute } from …

六十天前端强化训练之第二十七天之Pinia 状态管理全解与购物车实战案例

欢迎来到编程星辰海的博客讲解 看完可以给一个免费的三连吗,谢谢大佬! 目录 一、Pinia 深度解析 1. Pinia 核心设计 2. 核心概念图解 3. Store 类型对比 Option Store(选项式) Setup Store(组合式) …

Java多线程与高并发专题——Future 是什么?

引入 在上一篇Callable 和 Runnable 的不同?的最后,我们有提到和 Callable 配合的有一个 Future 类,通过 Future 可以了解任务执行情况,或者取消任务的执行,还可获取任务执行的结果,这些功能都是 Runnable…

用ArcGIS做一张符合环评要求的植被类型图

植被类型图是环境影响评价(环评)中的重要图件,需满足数据准确性、制图规范性和信息完整性等要求。本教程将基于ArcMap平台,从数据准备到成果输出,详细讲解如何制作符合环评技术规范的植被类型图。 ArcGIS遥感解译土地…

Fourier-Lerobot——把斯坦福人形动作策略iDP3封装进了Lerobot(含我司七月人形研发落地实践)

前言 近期在抠lerobot源码时,看到其封装了ALOHA ACT、diffusion policy、π0时,我就在想,lerobot其实可以再封装下idp3 我甚至考虑是否从我联合带的那十几个具身研究生中选几个同学做下这事,对他们也是很好的历练然当25年3.18日…

MySQL拒绝访问

1. 问题 使用图形界面工具连接MySQL数据库,拒绝访问! 2. 解决方法 以管理员的身份打开cmd,输入命令,启动MySQL net start mysql版本号 3. 参考 暂无

多模态SVG生成新标杆:StarVector从图像文本生成高精度SVG的AI模型

一、引言:矢量图形的崛起与挑战 在现代数字世界中,图像扮演着至关重要的角色,而可伸缩矢量图形(SVG)正因其独特的优势,在网页设计、图形设计等领域占据着越来越重要的地位。与传统的基于像素的栅格图像不同…

Netty——BIO、NIO 与 Netty

文章目录 1. 介绍1.1 BIO1.1.1 概念1.1.2 工作原理1.1.3 优缺点 1.2 NIO1.2.1 概念1.2.2 工作原理1.2.3 优缺点 1.3 Netty1.3.1 概念1.3.2 工作原理1.3.3 优点 2. Netty 与 Java NIO 的区别2.1 抽象层次2.2 API 易用性2.3 性能优化2.4 功能扩展性2.5 线程模型2.6 适用场景 3. 总…

游戏引擎学习第175天

回顾和今天的计划 今天的主要任务是完成稀疏 Unicode 支持。之前我们已经完成了所有的思考和设计工作,但代码部分尚未完成,因为有许多内容需要调整和重构。因此,今天的目标就是把这些内容全部整理好并最终实现。 回顾当前测试资源构建器的状…

miniconda安装保姆级教程|win11|深度学习环境配置

一、官网安装miniconda miniconda官网:Miniconda - Anaconda 点击Download按钮 在红框位置输入邮箱并点击submit,下载链接将会发到邮箱中 邮箱中将会收到如图所示邮件,点击下载 选择windows对应的miniconda安装包 miniconda安装包安装完成如…

AI安全、大模型安全研究(DeepSeek)

DeepSeek 点燃AI应用革命之火,但安全 “灰犀牛” 正在逼近 DeepSeek-R1国产大模型的发布,以技术创新惊艳了全球,更是极致的性价比推动国内千行百业接入 AI,政府、企业竞速开发智能业务处理、智能客服、代码生成、营销文案等应用,“落地效率” 成为第一关键词。然而与此相…

Android Studio最后一个绑定JDK8的版本,但是官方下载是最新的,怎么下载Android Studio历史版本包,这篇文章帮你解决。

最近需要安装Android Studio 编辑器 发现官网最新的编辑器已经不支持 jdk8了 经过查阅资料: Android Studio最后一个绑定JDK8的版本:4.1.3 下载地址:https://developer.android.google.cn/studio/archive 如果你打开是这样的 下载页 这是因为你用的中…

「宇树科技」13家核心零部件供应商梳理!

2025年2月6日,摩根士丹利(Morgan Stanley)发布最新人形机器人研报:Humanoid 100: Mapping the Humanoid Robot Value Chain(人形机器人100:全球人形机器人产业链梳理)。 2025年2月20日&#xf…

背包问题——多重背包(C语言)

代码如下&#xff1a; #include<stdio.h>int knapsack(int weight[], int value[], int count[], int n, int capacity) {int* dp (int*)malloc(sizeof(int) * (capacity 1));for (int i 0; i < capacity; i){dp[i] 0;}for (int i 0; i < n; i)//核心代码{fo…

<项目> 主从Reactor模型的高并发服务器

目录 Reactor 概念 分类 单Reactor单线程 单Reactor多线程 多Reactor多线程 项目介绍 项目规划 模块关系 实现 TimerWheel -- 时间轮定时器 定时器系统调用 时间轮设计 通用类型Any Buffer Socket Channel Poller EventLoop&#xff08;核心&#xff09; eventfd 设计思路 …

车载以太网网络测试-20【传输层-DOIP协议-3】

1 摘要 本文继续对ISO 13400-2定义的节点管理报文进行介绍&#xff0c;主要对路由激活请求/响应报文以及在线检查请求/响应报文的作用、帧结构以及示例进行介绍。 上文回顾&#xff1a; 车载以太网网络测试-19【传输层-DOIP协议-2】 在进行详细介绍之前&#xff0c;还是先回顾…

Jvm运行时数据区有哪些

Jvm运行时数据区有哪些 程序计数器&#xff08;Program Counter Register&#xff09; 作用&#xff1a; 可以看作是当前线程所执行的字节码的行号指示器。在多线程环境下&#xff0c;每个线程都有自己独立的程序计数器&#xff0c;线程私有的&#xff0c;用于记录该线程正在执…

Compose 实践与探索十五 —— 自定义触摸

1、自定义触摸与一维滑动监测 之前我们在讲 Modifier 时讲过如下与手势检测相关的 Modifier&#xff1a; Modifier.clickable { } Modifier.combinedClickable { } Modifier.pointerInput {detectTapGestures { } }这里对以上内容就不再赘述了&#xff0c;直接去讲解更复杂的…

Python 中有哪些库可以帮助读取和操作 shapefile 文件?

Python操作Shapefile文件库推荐 1. PyShp (pyshp) 特点&#xff1a;纯Python实现&#xff0c;无外部依赖&#xff0c;轻量级&#xff0c;支持完整的Shapefile格式&#xff08;shp、dbf、shx&#xff09;读写。适用场景&#xff1a;基础读写、简单几何操作、文件格式转换。安装…

【CSS文字渐变动画】

CSS文字渐变动画 HTML代码CSS代码效果图 HTML代码 <div class"title"><h1>今天是春分</h1><p>正是春天到来的日子&#xff0c;花都开了&#xff0c;小鸟也飞回来了&#xff0c;大山也绿了起来&#xff0c;空气也有点嫩嫩的气息了</p>…