如何在C+中加载ArmNN for Linux中的基于nx的模型+; 我试图创建一个基于ARMNN的C++独立应用程序,它运行在ONNX模型上。首先,我下载了一些标准模型进行测试,在尝试加载模型时,我看到一个崩溃,上面写着“Tensor numDimensions必须大于0”

如何在C+中加载ArmNN for Linux中的基于nx的模型+; 我试图创建一个基于ARMNN的C++独立应用程序,它运行在ONNX模型上。首先,我下载了一些标准模型进行测试,在尝试加载模型时,我看到一个崩溃,上面写着“Tensor numDimensions必须大于0”,c++,linux,arm,onnx,C++,Linux,Arm,Onnx,奇怪的是,我调用加载模型的函数只使用了一个参数,即模型名。没有地方让我指定尺寸等等。也许我做错了什么?或者这不是加载模型的方法 我已经编译了支持ONNX的armnn,详情如下。构建和包含文件夹已复制到一台ARM linux机器上,我正试图在那里运行代码。我正在使用一个Makefile来编译和运行它 我目前使用的模型是从下载的 最初,我在ArmNN主分支上,在搜索此错误消息时,我遇到了ArmNN发行说明,其中提到,在19.05版中修复了相同的错误。因此,我切换到标签v19.05,从头开始重建所有内

奇怪的是,我调用加载模型的函数只使用了一个参数,即模型名。没有地方让我指定尺寸等等。也许我做错了什么?或者这不是加载模型的方法

我已经编译了支持ONNX的armnn,详情如下。构建和包含文件夹已复制到一台ARM linux机器上,我正试图在那里运行代码。我正在使用一个Makefile来编译和运行它

我目前使用的模型是从下载的

最初,我在ArmNN主分支上,在搜索此错误消息时,我遇到了ArmNN发行说明,其中提到,在19.05版中修复了相同的错误。因此,我切换到标签v19.05,从头开始重建所有内容,并尝试再次运行该应用程序,但同样的错误不断出现

这里是C++代码-< /p>

#包括“armnn/armnn.hpp”
#包括“armnn/Exceptions.hpp”
#包括“armnn/Tensor.hpp”
#包括“armnn/INetwork.hpp”
#包括“armnnOnnxParser/IOnnxParser.hpp”
int main(int argc,字符**argv)
{
armnnOnnxParser::Ionnxparsertr parser=armnnOnnxParser::IOnnxParser::Create();
std::cout从二进制文件(“model.onnx”)创建网络;

std::cout看起来ONNX中的标量是用无量纲张量表示的。所以这里的问题是armnnOnnxParser没有正确处理ONNX标量。我建议在armnn Github上提出一个问题。

我认为您应该尝试至少使用一个输入层和输出层

// Helper function to make input tensors
armnn::InputTensors MakeInputTensors(const std::pair<armnn::LayerBindingId,
    armnn::TensorInfo>& input,
    const void* inputTensorData)
{
 return { { input.first, armnn::ConstTensor(input.second, inputTensorData) } };
}
//生成输入张量的辅助函数
armnn::InputSensors MakeInputSensors(常数std::pair

(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 ()
// Helper function to make input tensors
armnn::InputTensors MakeInputTensors(const std::pair<armnn::LayerBindingId,
    armnn::TensorInfo>& input,
    const void* inputTensorData)
{
 return { { input.first, armnn::ConstTensor(input.second, inputTensorData) } };
}