当前位置:   article > 正文

算法产品化---在ArmNN上运行ONNX_arm nn上运行onnx文件教程

arm nn上运行onnx文件教程

主要参考文档:https://developer.arm.com/technologies/machine-learning-on-arm/developer-material/how-to-guides/configuring-the-arm-nn-sdk-build-environment-for-onnx/setup-and-download-libraries

为了确保arm网站上面不做大的修改,我这边将文档保存在如下的路径,可以自行取阅:

https://download.csdn.net/download/putiancaijunyu/10892970

注意几点:

Setup and download libraries

这个阶段下载protobuf.git的时候,会找不到v3.5.0这边branch,建议切换到3.6.x上。

git clone https://github.com/google/protobuf.git

执行完成这个命令之后,切换branch

git checkout 3.6.x

 

Build the Compute Library

如果提示没有安装aarch64-linux-gnu-g++命令,那就是电脑没有安装toolchain,可以考虑执行:

sudo apt-get install g++-aarch64-linux-gnu

 

Build the Google protobuf library

请注意将branch切换到3.6.x,不然后边编译armnn的时候会出错。

如果出现如下错误:

  1. root@JunyuSS3:/home/admin1/armnn-onnx/protobuf# ./autogen.sh
  2. + mkdir -p third_party/googletest/m4
  3. + autoreconf -f -i -Wall,no-obsolete
  4. ./autogen.sh: 37: ./autogen.sh: autoreconf: not found

这是因为没有安装automake工具。可以考虑执行如下命令:

 sudo apt-get install autoconf automake libtool

 

Generate the ONNX protobuf source files

在这边步骤中,主要需要切换onnx.git的commit Id,不然在编译armnn的时候会出现如下的问题:

如果出现如下的错误:

  1. [ 74%] Building CXX object CMakeFiles/armnnOnnxParser.dir/src/armnnOnnxParser/OnnxParser.cpp.o
  2. /home/admin1/armnn-onnx/armnn/src/armnnOnnxParser/OnnxParser.cpp: In function ‘armnn::TensorInfo armnnOnnxParser::{anonymous}::ToTensorInfo(const onnx::ValueInfoProto&)’:
  3. /home/admin1/armnn-onnx/armnn/src/armnnOnnxParser/OnnxParser.cpp:217:101: error: invalid conversion from ‘google::protobuf::int32 {aka int}’ to ‘onnx::TensorProto::DataType {aka onnx::TensorProto_DataType}’ [-fpermissive]
  4. onnx::TensorProto::DataType_Name(info.type().tensor_type().elem_type()) %
  5. ^
  6. In file included from /home/admin1/armnn-onnx/armnn/src/armnnOnnxParser/OnnxParser.hpp:11:0,
  7. from /home/admin1/armnn-onnx/armnn/src/armnnOnnxParser/OnnxParser.cpp:5:
  8. /home/admin1/armnn-onnx/onnx/onnx/onnx.pb.h:1787:38: note: initializing argument 1 of ‘static const string& onnx::TensorProto::DataType_Name(onnx::TensorProto::DataType)’
  9. static inline const ::std::string& DataType_Name(DataType value) {
  10. ^
  11. /home/admin1/armnn-onnx/armnn/src/armnnOnnxParser/OnnxParser.cpp: In member function ‘void armnnOnnxParser::OnnxParser::SetupInfo(const google::protobuf::RepeatedPtrField<onnx::ValueInfoProto>*)’:
  12. /home/admin1/armnn-onnx/armnn/src/armnnOnnxParser/OnnxParser.cpp:640:85: error: invalid conversion from ‘google::protobuf::int32 {aka int}’ to ‘onnx::TensorProto::DataType {aka onnx::TensorProto_DataType}’ [-fpermissive]
  13. m_TensorsInfo[tensor.name()].m_dtype = tensor.type().tensor_type().elem_type();
  14. ^
  15. /home/admin1/armnn-onnx/armnn/src/armnnOnnxParser/OnnxParser.cpp: In member function ‘void armnnOnnxParser::OnnxParser::ParseConstant(const onnx::NodeProto&)’:
  16. /home/admin1/armnn-onnx/armnn/src/armnnOnnxParser/OnnxParser.cpp:853:78: error: invalid conversion from ‘google::protobuf::int32 {aka int}’ to ‘onnx::TensorProto::DataType {aka onnx::TensorProto_DataType}’ [-fpermissive]
  17. CHECK_VALID_DATATYPE(node.name(), onnxTensor.name(), onnxTensor.data_type(), onnx::TensorProto::FLOAT);
  18. ^
  19. /home/admin1/armnn-onnx/armnn/src/armnnOnnxParser/OnnxParser.cpp:48:35: note: in definition of macro ‘CHECK_VALID_DATATYPE’
  20. CheckValidDataType({__VA_ARGS__}, ACTUAL, #__VA_ARGS__, NODE, TENSOR, CHECK_LOCATION())
  21. ^
  22. /home/admin1/armnn-onnx/armnn/src/armnnOnnxParser/OnnxParser.cpp:24:6: note: initializing argument 2 of ‘void armnnOnnxParser::{anonymous}::CheckValidDataType(std::initializer_list<onnx::TensorProto_DataType>, onnx::TensorProto::DataType, const char*, std::__cxx11::string, std::__cxx11::string, const armnn::CheckLocation&)’
  23. void CheckValidDataType(std::initializer_list<onnx::TensorProto::DataType> validInputTypes,
  24. ^
  25. CMakeFiles/armnnOnnxParser.dir/build.make:62: recipe for target 'CMakeFiles/armnnOnnxParser.dir/src/armnnOnnxParser/OnnxParser.cpp.o' failed
  26. make[2]: *** [CMakeFiles/armnnOnnxParser.dir/src/armnnOnnxParser/OnnxParser.cpp.o] Error 1
  27. CMakeFiles/Makefile2:68: recipe for target 'CMakeFiles/armnnOnnxParser.dir/all' failed
  28. make[1]: *** [CMakeFiles/armnnOnnxParser.dir/all] Error 2
  29. Makefile:127: recipe for target 'all' failed
  30. make: *** [all] Error 2

原因是onnx后面将elem_type的类型从DateType变成int32。

https://github.com/ARM-software/armnn/issues/113,这个给出了一个修改意见,建设将onnx的版本更新到0a4d5abdf4939ab0842a5eadcc16a3bf0738f901

使用的命令可以是:

  1. cd onnx;
  2. git checkout 0a4d5abdf4939ab0842a5eadcc16a3bf0738f901

然后在重新编译onnx

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/849487?site
推荐阅读
相关标签
  

闽ICP备14008679号