日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

算法产品化---在ArmNN上运行ONNX

發(fā)布時間:2024/3/12 编程问答 60 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法产品化---在ArmNN上运行ONNX 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

主要參考文檔: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網(wǎng)站上面不做大的修改,我這邊將文檔保存在如下的路徑,可以自行取閱:

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

執(zhí)行完成這個命令之后,切換branch

git checkout 3.6.x

?

Build the Compute Library

如果提示沒有安裝aarch64-linux-gnu-g++命令,那就是電腦沒有安裝toolchain,可以考慮執(zhí)行:

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

?

Build the Google protobuf library

請注意將branch切換到3.6.x,不然后邊編譯armnn的時候會出錯。

如果出現(xiàn)如下錯誤:

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

這是因為沒有安裝automake工具。可以考慮執(zhí)行如下命令:

sudo apt-get install autoconf automake libtool

?

Generate the ONNX protobuf source files

在這邊步驟中,主要需要切換onnx.git的commit Id,不然在編譯armnn的時候會出現(xiàn)如下的問題:

如果出現(xiàn)如下的錯誤:

[ 74%] Building CXX object CMakeFiles/armnnOnnxParser.dir/src/armnnOnnxParser/OnnxParser.cpp.o /home/admin1/armnn-onnx/armnn/src/armnnOnnxParser/OnnxParser.cpp: In function ‘a(chǎn)rmnn::TensorInfo armnnOnnxParser::{anonymous}::ToTensorInfo(const onnx::ValueInfoProto&)’: /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]onnx::TensorProto::DataType_Name(info.type().tensor_type().elem_type()) %^ In file included from /home/admin1/armnn-onnx/armnn/src/armnnOnnxParser/OnnxParser.hpp:11:0,from /home/admin1/armnn-onnx/armnn/src/armnnOnnxParser/OnnxParser.cpp:5: /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)’static inline const ::std::string& DataType_Name(DataType value) {^ /home/admin1/armnn-onnx/armnn/src/armnnOnnxParser/OnnxParser.cpp: In member function ‘void armnnOnnxParser::OnnxParser::SetupInfo(const google::protobuf::RepeatedPtrField<onnx::ValueInfoProto>*)’: /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]m_TensorsInfo[tensor.name()].m_dtype = tensor.type().tensor_type().elem_type();^ /home/admin1/armnn-onnx/armnn/src/armnnOnnxParser/OnnxParser.cpp: In member function ‘void armnnOnnxParser::OnnxParser::ParseConstant(const onnx::NodeProto&)’: /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]CHECK_VALID_DATATYPE(node.name(), onnxTensor.name(), onnxTensor.data_type(), onnx::TensorProto::FLOAT);^ /home/admin1/armnn-onnx/armnn/src/armnnOnnxParser/OnnxParser.cpp:48:35: note: in definition of macro ‘CHECK_VALID_DATATYPE’CheckValidDataType({__VA_ARGS__}, ACTUAL, #__VA_ARGS__, NODE, TENSOR, CHECK_LOCATION())^ /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&)’void CheckValidDataType(std::initializer_list<onnx::TensorProto::DataType> validInputTypes,^ CMakeFiles/armnnOnnxParser.dir/build.make:62: recipe for target 'CMakeFiles/armnnOnnxParser.dir/src/armnnOnnxParser/OnnxParser.cpp.o' failed make[2]: *** [CMakeFiles/armnnOnnxParser.dir/src/armnnOnnxParser/OnnxParser.cpp.o] Error 1 CMakeFiles/Makefile2:68: recipe for target 'CMakeFiles/armnnOnnxParser.dir/all' failed make[1]: *** [CMakeFiles/armnnOnnxParser.dir/all] Error 2 Makefile:127: recipe for target 'all' failed make: *** [all] Error 2

原因是onnx后面將elem_type的類型從DateType變成int32。

https://github.com/ARM-software/armnn/issues/113,這個給出了一個修改意見,建設將onnx的版本更新到0a4d5abdf4939ab0842a5eadcc16a3bf0738f901

使用的命令可以是:

cd onnx; git checkout?0a4d5abdf4939ab0842a5eadcc16a3bf0738f901

然后在重新編譯onnx

總結

以上是生活随笔為你收集整理的算法产品化---在ArmNN上运行ONNX的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。