Libtorch报错:terminate called after throwing an instance of ‘c10::Error‘ what():isTensor()INTERNAL ASS

Libtorch报错:terminate called after throwing an instance of ‘c10::Error’ what(): isTensor() INTERNAL ASSERT FAILED

报错

问题出现在笔者想要将 yolov5 通过 PyTorch 的 C++ 接口 Libtorch 部署到树莓派上。

完整报错信息:

terminate called after throwing an instance of 'c10::Error'what():  isTensor() INTERNAL ASSERT FAILED at "/home/pisong/miniconda3/lib/python3.7/site-packages/torch/include/ATen/core/ivalue_inl.h":133, please report a bug to PyTorch. Expected Tensor but got Tuple
Exception raised from toTensor at /home/pisong/miniconda3/lib/python3.7/site-packages/torch/include/ATen/core/ivalue_inl.h:133 (most recent call first):
frame #0: c10::Error::Error(c10::SourceLocation, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) + 0x8c (0xffffbd05c83c in /home/pisong/miniconda3/lib/python3.7/site-packages/torch/lib/libc10.so)
frame #1: c10::IValue::toTensor() && + 0xfc (0xaaaaaf102548 in ./build/resnet50)
frame #2: main + 0x324 (0xaaaaaf0fe178 in ./build/resnet50)
frame #3: __libc_start_main + 0xe8 (0xffffb90e6090 in /lib/aarch64-linux-gnu/libc.so.6)
frame #4: <unknown function> + 0x22c34 (0xaaaaaf0fdc34 in ./build/resnet50)Aborted (core dumped)

相比于 Python 这种脚本语言,C/C++ 还是相对难调试的。没有充足的经验的话,在上面的报错信息中是很难找到问题出在哪。

寻找问题

在 PyTorch 官方讨论区的一个帖子中,一位网友遇到了相同的问题,有大佬解答说:

对比其给出的以下代码:

在 Python 中

output, hidden = model(examples.to(“cpu”), hidden)

和在 C++ 中

at::Tensor output = module->forward({indata1, tuple}).toTensor();

很明显,模型的输出应该不是一个 Tensor,可能是一个列表或者元组什么的,这就是为什么报错信息中会出现:

 isTensor() INTERNAL ASSERT FAILED 

即检测到输出并不是 Tensor。

回到笔者自己的问题中,也确实是这样,本来这段 C++ 代码是处理分类模型 ResNet50 的,输出确实直接就是一个 Tensor 各类别分类概率。在转换到检测任务时笔者没有做细致的检查,而是直接将处理分类模型的代码拿过来用了,从而导致了该报错。

解决方案

明确了问题之后,解决方案就很清楚了。去确定一下自己模型的输出到底是什么,然后在 C++ 代码中用适当的数据类型接收处理即可。

Ref:

https://discuss.pytorch.org/t/terminate-called-after-throwing-an-instance-of-c10-error-what-istensor-for-lstm/50114

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

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

相关文章

sqli-lab——Writeup(38~over)堆叠等......

知识点&#xff1a; 1.堆叠注入原理&#xff08;stacked injection&#xff09; 在SQL中&#xff0c;分号&#xff08;;&#xff09;是用来表示一条sql语句的结束。试想一下我们在 ; 结束一个sql语句后继续构造下一条语句&#xff0c;会不会一起执行&#xff1f;因此这个想法…

mysql常规使用(建立,增删改查,视图索引)

目录 1.数据库建立 2.增删改查 3.视图建立&#xff1a; 1.数据库建立 mysql> mysql> show databases; ----------------------------------- | Database | ----------------------------------- | information_schema | | ch…

php操作mysql数据库

phpmyadmin phpadmin是一个mysql图形化管理工具&#xff0c;是一款实用php开发的mysql苦户端软件&#xff0c;基于web跨平台的管理系统&#xff0c;支持简体中文&#xff0c;官网&#xff1a;www.phpmyadmin.net可以下载免费最新版。提供图形化操作界面&#xff0c;完成对mysq…

C:C++ 函数返回多个参数

C/C 函数返回多个参数 转自&#xff1a;https://blog.csdn.net/onlyou2030/article/details/48174461 笔者是 Python 入门的&#xff0c;一直很困惑 C/C 中函数如何返回多个参数。 如果一个函数需要返回多个参数&#xff0c;可以采用以下两种方法&#xff1a; 传引用或指针…

sql预编译

一.数据库预编译起源: 数据库接受sql语句,需要解析和制定执行,中间需要花费一段时间. 有时候同一语句可能会多次执行, 那么就会造成资源的浪费 如何减少编译执行的时间 ? 就有了预编译,预编译是将这类语句提前用占位符替代,一次编译,多次执行. 预编译后的执行代码会被缓存下来…

C++中智能指针的原理、使用、实现

C中智能指针的原理、使用、实现 转自&#xff1a;https://www.cnblogs.com/wxquare/p/4759020.html 1 智能指针的作用 C程序设计中使用堆内存是非常频繁的操作&#xff0c;堆内存的申请和释放都由程序员自己管理。程序员自己管理堆内存可以提高了程序的效率&#xff0c;但是…

Xctf练习sql注入--supersqli

三种方法 方法一 1 回显正常 1’回显不正常,报sql语法错误 1’ -- 回显正常,说明有sql注入点,应该是字符型注入(# 不能用) 1’ order by 3 -- 回显失败,说明有2个注入点 1’ union select 1,2 -- 回显显示过滤语句: 1’; show databases -- 爆数据库名 -1’; show tables …

深拷贝与浅拷贝、值语义与引用语义对象语义 ——以C++和Python为例

深拷贝与浅拷贝、值语义与引用语义/对象语义 ——以C和Python为例 值语义与引用语义&#xff08;对象语义&#xff09; 本小节参考自&#xff1a;https://www.cnblogs.com/Solstice/archive/2011/08/16/2141515.html 概念 在任何编程语言中&#xff0c;区分深浅拷贝的关键都…

一次打卡软件的实战渗透测试

直接打卡抓包, 发现有疑似企业网站,查ip直接显示以下页面 直接显示了后台安装界面…就很有意思 探针和phpinfo存在 尝试连接mysql失败 fofa扫描为阿里云服务器 找到公司官网使用nmap扫描,存在端口使用onethink 查询onethink OneThink是一个开源的内容管理框架&#xff0c;…

C++中类的拷贝控制

C中类的拷贝控制 转自&#xff1a;https://www.cnblogs.com/ronny/p/3734110.html 1&#xff0c;什么是类的拷贝控制 当我们定义一个类的时候&#xff0c;为了让我们定义的类类型像内置类型&#xff08;char,int,double等&#xff09;一样好用&#xff0c;我们通常需要考下面…

centos7ubuntu搭建Vulhub靶场(推荐Ubuntu)

这里写目录标题一.前言总结二.成功操作&#xff1a;三.出现报错&#xff1a;四.vulhub使用正文&#xff1a;一.前言总结二.成功操作&#xff1a;三.出现报错&#xff1a;四.vulhub使用看完点赞关注不迷路!!!! 后续继续更新优质安全内容!!!!!一.前言总结 二.成功操作&#xff1…

使用 PyTorch 数据读取,JAX 框架来训练一个简单的神经网络

使用 PyTorch 数据读取&#xff0c;JAX 框架来训练一个简单的神经网络 本文例程部分主要参考官方文档。 JAX简介 JAX 的前身是 Autograd &#xff0c;也就是说 JAX 是 Autograd 升级版本&#xff0c;JAX 可以对 Python 和 NumPy 程序进行自动微分。可以通过 Python的大量特征…

Yapi Mock 远程代码执行漏洞

跟风一波复现Yapi 漏洞描述&#xff1a; YApi接口管理平台远程代码执行0day漏洞&#xff0c;攻击者可通过平台注册用户添加接口&#xff0c;设置mock脚本从而执行任意代码。鉴于该漏洞目前处于0day漏洞利用状态&#xff0c;强烈建议客户尽快采取缓解措施以避免受此漏洞影响 …

C++ ACM模式输入输出

C ACM模式输入输出 以下我们都以求和作为题目要求&#xff0c;来看一下各种输入输出应该怎么写。 1 只有一个或几个输入 输入样例&#xff1a; 3 5 7输入输出模板&#xff1a; int main() {int a, b, c;// 接收有限个输入cin >> a >> b >> c;// 输出结果…

CVE-2017-10271 WebLogic XMLDecoder反序列化漏洞

漏洞产生原因&#xff1a; CVE-2017-10271漏洞产生的原因大致是Weblogic的WLS Security组件对外提供webservice服务&#xff0c;其中使用了XMLDecoder来解析用户传入的XML数据&#xff0c;在解析的过程中出现反序列化漏洞&#xff0c;导致可执行任意命令。攻击者发送精心构造的…

树莓派摄像头 C++ OpenCV YoloV3 实现实时目标检测

树莓派摄像头 C OpenCV YoloV3 实现实时目标检测 本文将实现树莓派摄像头 C OpenCV YoloV3 实现实时目标检测&#xff0c;我们会先实现树莓派对视频文件的逐帧检测来验证算法流程&#xff0c;成功后&#xff0c;再接入摄像头进行实时目标检测。 先声明一下笔者的主要软硬件配…

【实战】记录一次服务器挖矿病毒处理

信息收集及kill&#xff1a; 查看监控显示长期CPU利用率超高&#xff0c;怀疑中了病毒 top 命令查看进程资源占用&#xff1a; netstat -lntupa 命令查看有无ip进行发包 netstat -antp 然而并没有找到对应的进程名 查看java进程和solr进程 ps aux &#xff1a;查看所有进程…

ag 搜索工具参数详解

ag 搜索工具参数详解 Ag 是类似ack&#xff0c; grep的工具&#xff0c;它来在文件中搜索相应关键字。 官方列出了几点选择它的理由&#xff1a; 它比ack还要快 &#xff08;和grep不在一个数量级上&#xff09;它会忽略.gitignore和.hgignore中的匹配文件如果有你想忽略的文…

CVE-2013-4547 文件名逻辑漏洞

搭建环境&#xff0c;访问 8080 端口 漏洞说明&#xff1a; Nginx&#xff1a; Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件&#xff08;IMAP/POP3&#xff09;代理服务器&#xff0c;在BSD-like 协议下发行。其特点是占有内存少&#xff0c;并发能力强&#xf…

CMake指令入门 ——以构建OpenCV项目为例

CMake指令入门 ——以构建OpenCV项目为例 转自&#xff1a;https://blog.csdn.net/sandalphon4869/article/details/100589747 一、安装 sudo apt-get install cmake安装好后&#xff0c;输入 cmake -version如果出现了cmake的版本显示&#xff0c;那么说明安装成功 二、c…