- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建一个基于在 ONNX 模型上运行的 ArmNN 的 C++ 独立应用程序。首先,我下载了一些用于测试的标准模型,在尝试加载模型时,我看到一个崩溃消息,提示“Tensor numDimensions 必须大于 0”。
奇怪的是,我为加载模型而调用的函数只接受一个参数,即模型名称。我没有地方可以指定尺寸等等。可能我在这里做错了什么?或者这不是加载模型的方式?
我已经编译了支持 ONNX 的 armnn,详情如下 here . build 和 include 文件夹已被复制到我尝试运行代码的 ARM linux 机器上。我正在使用 Makefile 来编译和运行它。
我目前使用的模型是从here下载的.
最初我在 ArmNN master 分支上,在搜索此错误消息时,我发现了 ArmNN 发行说明,其中提到在 19.05 版中修复了完全相同的错误。所以我切换到标记 v19.05 并从头开始重建所有内容并尝试再次运行该应用程序,但同样的错误不断弹出。
这是C++代码-
#include "armnn/ArmNN.hpp"
#include "armnn/Exceptions.hpp"
#include "armnn/Tensor.hpp"
#include "armnn/INetwork.hpp"
#include "armnnOnnxParser/IOnnxParser.hpp"
int main(int argc, char** argv)
{
armnnOnnxParser::IOnnxParserPtr parser = armnnOnnxParser::IOnnxParser::Create();
std::cout << "\nmodel load start";
armnn::INetworkPtr network = parser->CreateNetworkFromBinaryFile("model.onnx");
std::cout << "\nmodel load end";
std::cout << "\nmain end";
return 0;
}
Makefile 看起来像这样 -
ARMNN_LIB = /home/root/Rahul/armnn_onnx/build
ARMNN_INC = /home/root/Rahul/armnn_onnx/include
all: onnx_test
onnx_test: onnx_test.cpp
g++ -O3 -std=c++14 -I$(ARMNN_INC) onnx_test.cpp -I.-I/usr/include -L/usr/lib -lopencv_core -lopencv_imgcodecs -lopencv_highgui -o onnx_test -L$(ARMNN_LIB) -larmnn -lpthread -larmnnOnnxParser
clean:
-rm -f onnx_test
test: onnx_test
LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$(ARMNN_LIB) ./onnx_test
预期输出 -代码应按预期加载模型并干净退出。
实际错误信息-
terminate called after throwing an instance of 'armnn::InvalidArgumentException'
what(): Tensor numDimensions must be greater than 0
model load startAborted (core dumped)
下面提供了 gdb 回溯 -
(gdb) r
Starting program: /home/root/Rahul/sample_onnx/onnx_test
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/libthread_db.so.1".
terminate called after throwing an instance of 'armnn::InvalidArgumentException'
what(): Tensor numDimensions must be greater than 0
model load start
Program received signal SIGABRT, Aborted.
__GI_raise (sig=sig@entry=6) at /usr/src/debug/glibc/2.26-r0/git/sysdeps/unix/sysv/linux/raise.c:51
51 }
(gdb) bt
#0 __GI_raise (sig=sig@entry=6) at /usr/src/debug/glibc/2.26-r0/git/sysdeps/unix/sysv/linux/raise.c:51
#1 0x0000ffffbe97ff00 in __GI_abort () at /usr/src/debug/glibc/2.26-r0/git/stdlib/abort.c:90
#2 0x0000ffffbec0c0f8 in __gnu_cxx::__verbose_terminate_handler() () from /usr/lib/libstdc++.so.6
#3 0x0000ffffbec09afc in ?? () from /usr/lib/libstdc++.so.6
#4 0x0000ffffbec09b50 in std::terminate() () from /usr/lib/libstdc++.so.6
#5 0x0000ffffbec09e20 in __cxa_throw () from /usr/lib/libstdc++.so.6
#6 0x0000ffffbefdad84 in armnn::TensorShape::TensorShape(unsigned int, unsigned int const*) () from /home/root/Rahul/armnn_onnx/build/libarmnn.so
#7 0x0000ffffbed454d8 in armnnOnnxParser::(anonymous namespace)::ToTensorInfo(onnx::ValueInfoProto const&) [clone .constprop.493] () from /home/root/Rahul/armnn_onnx/build/libarmnnOnnxParser.so
#8 0x0000ffffbed46080 in armnnOnnxParser::OnnxParser::SetupInfo(google::protobuf::RepeatedPtrField<onnx::ValueInfoProto> const*) () from /home/root/Rahul/armnn_onnx/build/libarmnnOnnxParser.so
#9 0x0000ffffbed461ac in armnnOnnxParser::OnnxParser::LoadGraph() () from /home/root/Rahul/armnn_onnx/build/libarmnnOnnxParser.so
#10 0x0000ffffbed46760 in armnnOnnxParser::OnnxParser::CreateNetworkFromModel(onnx::ModelProto&) () from /home/root/Rahul/armnn_onnx/build/libarmnnOnnxParser.so
#11 0x0000ffffbed469b0 in armnnOnnxParser::OnnxParser::CreateNetworkFromBinaryFile(char const*) () from /home/root/Rahul/armnn_onnx/build/libarmnnOnnxParser.so
#12 0x0000000000400a48 in main ()
最佳答案
看起来 ONNX 中的标量表示为没有维度的张量。所以这里的问题是 armnnOnnxParser 没有正确处理 ONNX 标量。我建议在 armnn Github 上提出问题。
关于c++ - 如何使用 C++ 在 ArmNN for Linux 中加载 base onnx 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57620968/
我正在尝试创建一个基于在 ONNX 模型上运行的 ArmNN 的 C++ 独立应用程序。首先,我下载了一些用于测试的标准模型,在尝试加载模型时,我看到一个崩溃消息,提示“Tensor numDimen
我是一名优秀的程序员,十分优秀!