Debug result = unpickler.load() ModuleNotFoundError: No module named ‘models‘

1.torch训练的yolov5转trt出现问题如下:

Using CUDA device0 _CudaDeviceProperties(name='NVIDIA GeForce RTX 3080', total_memory=10017MB)Find Pytorch weight
Traceback (most recent call last):File "export.py", line 243, in <module>ckpt = torch.load(opt.weight, map_location=device)File "/usr/local/lib/python3.6/dist-packages/torch/serialization.py", line 592, in loadreturn _load(opened_zipfile, map_location, pickle_module, **pickle_load_args)File "/usr/local/lib/python3.6/dist-packages/torch/serialization.py", line 851, in _loadresult = unpickler.load()
ModuleNotFoundError: No module named 'models'

2.解决办法:

直接先用yolov5自带的export.py转成.onnx模型,再通过onnx转trt,问题解决

Find ONNX weightTensorRT: starting export with TensorRT 8.4.0.6...
[08/24/2023-18:57:25] [TRT] [I] [MemUsageChange] Init CUDA: CPU +359, GPU +0, now: CPU 426, GPU 401 (MiB)
[08/24/2023-18:57:26] [TRT] [I] [MemUsageSnapshot] Begin constructing builder kernel library: CPU 444 MiB, GPU 401 MiB
[08/24/2023-18:57:27] [TRT] [I] [MemUsageSnapshot] End constructing builder kernel library: CPU 819 MiB, GPU 523 MiB
[08/24/2023-18:57:27] [TRT] [I] ----------------------------------------------------------------
[08/24/2023-18:57:27] [TRT] [I] Input filename:   ../best.onnx
[08/24/2023-18:57:27] [TRT] [I] ONNX IR version:  0.0.6
[08/24/2023-18:57:27] [TRT] [I] Opset version:    11
[08/24/2023-18:57:27] [TRT] [I] Producer name:    pytorch
[08/24/2023-18:57:27] [TRT] [I] Producer version: 1.9
[08/24/2023-18:57:27] [TRT] [I] Domain:           
[08/24/2023-18:57:27] [TRT] [I] Model version:    0
[08/24/2023-18:57:27] [TRT] [I] Doc string:       
[08/24/2023-18:57:27] [TRT] [I] ----------------------------------------------------------------
[08/24/2023-18:57:27] [TRT] [W] onnx2trt_utils.cpp:365: Your ONNX model has been generated with INT64 weights, while TensorRT does not natively support INT64. Attempting to cast down to INT32.
TensorRT: Network Description:
TensorRT:       input "images" with shape (1, 3, 640, 640) and dtype DataType.FLOAT
TensorRT:       output "output" with shape (1, 25200, 20) and dtype DataType.FLOAT
TensorRT: building FP16 engine in ../best.engine
[08/24/2023-18:57:29] [TRT] [W] TensorRT was linked against cuBLAS/cuBLAS LT 11.8.0 but loaded cuBLAS/cuBLAS LT 11.3.0
[08/24/2023-18:57:29] [TRT] [I] [MemUsageChange] Init cuBLAS/cuBLASLt: CPU +637, GPU +268, now: CPU 1545, GPU 791 (MiB)
[08/24/2023-18:57:29] [TRT] [I] [MemUsageChange] Init cuDNN: CPU +356, GPU +258, now: CPU 1901, GPU 1049 (MiB)
[08/24/2023-18:57:29] [TRT] [W] TensorRT was linked against cuDNN 8.3.2 but loaded cuDNN 8.0.5
[08/24/2023-18:57:29] [TRT] [I] Local timing cache in use. Profiling results in this builder pass will not be stored.
[08/24/2023-18:58:37] [TRT] [I] Some tactics do not have sufficient workspace memory to run. Increasing workspace size will enable more tactics, please check verbose output for requested sizes.
[08/24/2023-19:06:05] [TRT] [I] Detected 1 inputs and 4 output network tensors.
[08/24/2023-19:06:08] [TRT] [I] Total Host Persistent Memory: 218880
[08/24/2023-19:06:08] [TRT] [I] Total Device Persistent Memory: 1197056
[08/24/2023-19:06:08] [TRT] [I] Total Scratch Memory: 0
[08/24/2023-19:06:08] [TRT] [I] [MemUsageStats] Peak memory usage of TRT CPU/GPU memory allocators: CPU 48 MiB, GPU 2470 MiB
[08/24/2023-19:06:08] [TRT] [I] [BlockAssignment] Algorithm ShiftNTopDown took 29.1457ms to assign 9 blocks to 142 nodes requiring 25804804 bytes.
[08/24/2023-19:06:08] [TRT] [I] Total Activation Memory: 25804804
[08/24/2023-19:06:08] [TRT] [I] [MemUsageChange] TensorRT-managed allocation in building engine: CPU +40, GPU +42, now: CPU 40, GPU 42 (MiB)
export.py:172: CryptographyDeprecationWarning: Python 3.6 is no longer supported by the Python core team. Therefore, support for it is deprecated in cryptography and will be removed in a future release.from cryptography.fernet import Fernet
TensorRT: export success, saved as ../best.engine

3.原因及其他解决办法

网上查了一下,主要原因是在保存训练的模型时,使用的torch.save(model, path),而在加载时使用的model = torch.load(path);export.py中对pt的加载源码如下:

if pt:logger.info("Find Pytorch weight")ckpt = torch.load(opt.weight, map_location=device)if opt.noema:model = ckpt['model']else:model = ckpt['ema'] if ckpt.get('ema') else ckpt['model']meta = get_meta_data(ckpt, model, meta)if opt.int8:zero_scale_fix(model, device)if model.__name__ != "EfficentYolo":for sub_fusion_list in op_concat_fusion_list[model.__name__]:ops = [get_module(model, op_name) for op_name in sub_fusion_list]concat_quant_amax_fuse(ops)for sub_fusion_list in op_concat_fusion_list[model.type]:ops = [get_module(model, op_name) for op_name in sub_fusion_list]concat_quant_amax_fuse(ops)model.float()if not opt.int8:model.fuse()model.to(device)model.eval()if opt.int8:quant_nn.TensorQuantizer.use_fb_fake_quant = Trueim = torch.zeros(1, 3, *imgsz).to(device)# 模型detect layer为了支持onnx的导出,所必须的更改#     model.detect.inplace = Falseif not(hasattr(model, 'type') and model.type in ['anchorfree', 'anchorbase']):model.type = 'anchorbase'model.detect.dynamic = dynamicmodel.detect.export = True  # 减少输出数量# 验证torch模型是否正常for _ in range(2):y = model(im)  # dry runs# 从模型中读取模型的labels,并保存到labels.txt下labels = str({i:l for i,l in enumerate(model.labels)})with open(file.parents[0]/'labels.txt','w') as f:f.write(labels)logger.info("the torch model is very successful, it's no possible!")if 'onnx' in opt.include or 'trt' in opt.include:try:import tensorrt as trtif model.type == 'anchorfree':export_onnx(model, im, file, opt.opset, train=False, dynamic=False, simple=opt.simple)elif model.type == 'anchorbase':if int(trt.__version__[0]) == 7:  # TensorRT 7 handling https://github.com/ultralytics/yolov5/issues/6012model.detect.inplace = Falsegrid = model.detect.anchor_gridmodel.detect.anchor_grid = [a[..., :1, :1, :] for a in grid]export_onnx(model, im, file, opt.opset, train=False, dynamic=False, simple=opt.simple)  # opset 12model.detect.anchor_grid = gridelse:  # TensorRT >= 8export_onnx(model, im, file, opt.opset, train=False, dynamic=False, simple=opt.simple)  # opset 13except:logger.info("TRT ERROR, will custom onnx!")export_onnx(model, im, file, opt.opset, train=False, dynamic=False, simple=opt.simple)onnx_file = file.with_suffix('.onnx')add_meta_to_model(onnx_file, meta)if opt.int8:get_remove_qdq_onnx_and_cache(file.with_suffix('.onnx'))add_meta_to_model(str(onnx_file).replace('.onnx', '_wo_qdq.onnx'), meta)if 'trt' in opt.include:if opt.old:meta = Falseexport_engine(onnx_file, None, meta=meta, half=opt.half, int8=opt.int8, workspace=opt.worker, encode=opt.encode, verbose=opt.verbose)else:    logger.info("Find ONNX weight")if not opt.old:meta = get_meta_data(file, None, meta)meta['half'] = opt.halfmeta['int8'] = opt.int8meta['encode'] = opt.encodeif opt.old:meta = False

猜测可能是模型在训练时,保存了一些其他参数信息,这些参数可能涉及到训练模型的位置等,模型迁移到其他机器上时,比如需要使用的机器上转trt时,找不到该位置了,可以先转成通用的onnx模型,再转trt。

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

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

相关文章

Mac nvm 切换为淘宝镜像

编辑环境配置 # 或者 vim ~/.bash_profile $ vim ~/.zshrc贴入镜像 # 淘宝镜像 export NVM_NODEJS_ORG_MIRRORhttp://npm.taobao.org/mirrors/node export NVM_IOJS_ORG_MIRRORhttp://npm.taobao.org/mirrors/iojs# nvm环境配置 export NVM_DIR"$HOME/.nvm"[ -s &quo…

【实战】十一、看板页面及任务组页面开发(四) —— React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(二十六)

文章目录 一、项目起航&#xff1a;项目初始化与配置二、React 与 Hook 应用&#xff1a;实现项目列表三、TS 应用&#xff1a;JS神助攻 - 强类型四、JWT、用户认证与异步请求五、CSS 其实很简单 - 用 CSS-in-JS 添加样式六、用户体验优化 - 加载中和错误状态处理七、Hook&…

使用haproxy搭建web架构

haproxy HAProxy是一个免费的负载均衡软件&#xff0c;可以运行于大部分主流的Linux操作系统上。 HAProxy提供了可以在七层和四层两种负载均衡能力&#xff0c;它可以提供高可用性、负载均衡、及基于TCP和HTTP应用的代理。适用于负载大的Web站点&#xff0c;在运行在硬件上可…

libdrm全解析十九 —— 源码全解析(16)

接前一篇文章&#xff1a;libdrm全解析十八 —— 源码全解析&#xff08;15&#xff09; 本文参考以下博文&#xff1a; DRM 驱动程序开发&#xff08;VKMS&#xff09; 特此致谢&#xff01; 本文继续对include/drm/drm.h中实际功能宏定义进行讲解。 27. DRM_IOCTL_SET_SAR…

在React中,如何进行组件间的通信?请解释一下React的生命周期方法(Lifecycle Methods)是什么,以及它们的作用。

1、在React中&#xff0c;如何进行组件间的通信&#xff1f; 在React中&#xff0c;组件间的通信主要依赖于以下三种方式&#xff1a; Props&#xff1a;这是React中最重要的组件间通信方式。你可以将数据从一个组件传递到另一个组件&#xff0c;数据可以是简单的数据&#x…

To_Heart—题解——P6234 [eJOI2019] T形覆盖

link. 突然很想写这篇题解。虽然题目不算难。 考场只有30分是为什么呢&#xff1f;看来是我没有完全理解这道题目吧&#xff01; 首先很明显的转换是&#xff0c;把 T 型覆盖看成十字形&#xff0c;再考虑最后减去某一块的贡献。 然后然后直接往原图上面放十字形!对于每一个…

企业工程项目管理系统源码(三控:进度组织、质量安全、预算资金成本、二平台:招采、设计管理) em

​ 工程项目管理软件&#xff08;工程项目管理系统&#xff09;对建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营&#xff0c;全过程、全方位的对项目进行综合管理 工程项目各模块及其功能点清单 一、系统管理 1、数据字典&#…

1.4 启动MySQL客户端程序

成功启动MySQL服务器程序之后&#xff0c;就可以接着启动客户端程序来连接这个服务器。 bin 目录下有许多客户端程序&#xff0c;比方说 mysqladmin 、 mysqldump 、 mysqlcheck 等等。这里我们重点要关注的是可执行文件 mysql &#xff0c;通过这个可执行文件可以让我们和服务…

mysql数据库root密码遗忘后,修改root密码

目录 方式一&#xff1a; 方式二&#xff1a; 2.1 也可以像我这样&#xff0c;普通用户登录进去后 2.2 执行如下命令&#xff0c;将已知的user1的加密密文更新到root中 2.3 查询数据库 2.4 用root用户登录 2.5 登录正常&#xff0c;但这会root登录进去后&#xff0c;无法…

2023深圳智博会,正运动助力智能装备“更快更准”更智能!

■展会名称&#xff1a; 2023 深圳国际智能装备产业博览会暨深圳国际电子装备产业博览会&#xff08;以下简称“EeIE 智博会”&#xff09; ■展会日期 2023年8月29日-31日 ■展馆地点 深圳国际会展中心(宝安新馆) ■展位号 3B030 正运动技术&#xff0c;作为国内领先的…

smartbi token回调获取登录凭证漏洞

前段时间&#xff0c;Smartbi官方修复了一处权限绕过漏洞。未经授权的攻击者可利用该漏洞&#xff0c;获取管理员token&#xff0c;完全接管管理员权限。于是研究了下相关补丁并进行分析。 0x01分析结果 依据补丁分析&#xff0c;得到如下漏洞复现步骤 第一步&#xff0c;设…

网络安全---负载均衡案例

一、首先环境配置 1.上传文件并解压 2.进入目录下 为了方便解释&#xff0c;我们只用两个节点&#xff0c;启动之后&#xff0c;大家可以看到有 3 个容器&#xff08;可想像成有 3 台服务器就成&#xff09;。 二、使用蚁剑去连接 因为两台节点都在相同的位置存在 ant.jsp&…

《Effective C++中文版,第三版》读书笔记5

条款26&#xff1a;尽可能延后变量定义式出现时间 原因&#xff1a; ​ 只要你定义了一个变量而其类型带有一个构造和一个析构&#xff0c;程序控制流到达其定义时有构造成本&#xff0c;控制流离开该变量的作用域时有析构成本 尽可能延后 ​ 不只因该延后变量的定义&#…

CAD泰森多边形框架3D插件

插件介绍 CAD泰森多边形框架3D插件可用于在AutoCAD软件内生成三维Voronoi框架结构实体模型&#xff0c;适用于多孔Voronoi科研论文渲染绘图、Voronoi框架有限元建模、Voronoi空间结构优化等方面的应用。 使用说明 插件可设置生成的几何尺寸、晶格尺寸及边框直径等信息。 插…

Java中字符串拼写常用方法和高级技巧,举例并说明,加上注释和实际运行效果说明

Java中字符串拼写常用方法和高级技巧&#xff0c;举例并说明&#xff0c;加上注释和实际运行效果说明 目录 1、使用""操作符拼接字符串 2、使用StringBuilder类拼接字符串 3、使用String.format()方法格式化字符串 4、使用String.concat()方法拼接字符串 5、使…

SpringBoot上传文件的实现与优化

一、什么是文件上传&#xff1f; 文件上传是指客户端将本地的文件通过HTTP协议发送到服务器端的过程。文件上传是Web开发中常见的功能之一&#xff0c;例如用户可以上传头像、照片、视频、文档等各种类型的文件。文件上传涉及到客户端和服务器端的交互&#xff0c;需要考虑文件…

学习 Java 报表技术导入 Maven 依赖出错:jacob 无法下载、jasperreports 依赖错误

发生缘由 最近在做一个可视化项目&#xff0c;用到了 Java 报表技术。在跟着「黑马」课程导入 pom.xml 文件的时候提示下载依赖错误。 com.jacob 包无法下载Failed to read artifact descriptor for com.lowagie:itext:jar:2.1.7.js6 运行环境 电脑系统版本&#xff1a;Win…

发现一种增加在 GitHub 曝光量的方法,已举报

今天偶然看到一种增加项目和个人在 GitHub 曝光量的方法&#xff0c;但感觉无法赞同这种做法&#xff0c;已经向 GitHub 官方举报。 具体怎么回事呢&#xff1f;我上周在 Vim 插件大佬 tpope 的一个项目提了个 Issue&#xff0c;但一周过去了&#xff0c;大佬也没有回应&#x…

【笔记】岂不怀归:三和青年调查

三和青年的遭遇绝非孤例&#xff0c;他们是中国现代化和城市化进程中一些难以被城市容纳的群体的缩影。三和青年的“后备军”&#xff0c;是整整一代没有知识与技能的农村青年。本书对三和青年抱以人道主义的关怀与同情&#xff0c;并鼓励各界关注社会发展过程中被抛下的那一群…

CSDN编程题-每日一练(2023-08-25)

CSDN编程题-每日一练&#xff08;2023-08-25&#xff09; 一、题目名称&#xff1a;影分身二、题目名称&#xff1a;小鱼的航程(改进版)三、题目名称&#xff1a;排查网络故障 一、题目名称&#xff1a;影分身 时间限制&#xff1a;1000ms内存限制&#xff1a;256M 题目描述&am…