1. 編譯example時,出現相似 fatal error: 'tengine_c_api.h' file not found 的錯誤?
這是編譯Tengine以後沒有將相關文件複製到 core/include 的緣故,只須要在Tengine根目錄下執行make install
便可;若是你是在編譯某一個example,還須要在cmake的時候加入參數-DTENGINE_DIR=<tengine_root>
來指定Tengine目錄。html
2. 編譯Tengine時,出現相似 internal compiler error: Segmentation fault 的錯誤?
一般是由於編譯時開啓太多的線程,嘗試用make clean
清空編譯結果,用較少的線程數(即make
命令的 j 參數)從新編譯。java
3. 編譯Android版本的Tengine時,出現 This file was generated by a newer(older) version of protoc which is incompatible with your Protocol Buffer headers. Please update your headers. 的錯誤?
protobuf版本不匹配。若是你使用了百度雲盤上預編譯好的 protobuf_lib ,請將你本地的protobuf版本升級(降級)到3.0.0版本,安裝方式參見 如何安裝 protobuf 3.0.0?;或者使用ndk從新編譯 protobuf_lib。python
4. 若是個人模型有某一部分操做只出如今Tengine的CPU或GPU支持的操做列表裏怎麼辦?
嘗試使用 異構計算。git
5. 爲何樹莓派3B開啓 CONFIG_ARCH_ARM64=y 編譯會報錯?
雖然樹莓派3B是64位的A53處理器,但因爲官方的操做系統運行在aarch32模式下,因此沒法正常編譯和運行Tengine的64位彙編代碼。github
6. RK3399如何查看GPU的運行頻率和佔用率?
在終端執行cat /sys/devices/platform/ff9a0000.gpu/devfreq/ff9a0000.gpu/load
apache
7. 開啓TF_SERIALIZER以後編譯報錯 fatal error: graph.pb.h: No such file or directory
protobuf版本不夠高,TF要求3.0.0以上的版本,安裝方式參見 如何安裝 protobuf 3.0.0?api
8. tengine如何指定cpu核心?爲何設置 TENGINE_CPU_LIST=0 或者2 性能沒差異?
tengine經過環境變量TENGINE_CPU_LIST 來設置cpu核心。
若是用的是RK3399, cpu的編號是: 0,1,2,3 爲A53, 4,5 爲A72, 這個信息能夠經過命令cat /proc/cpuinfo
查看。
所以,設置TENGINE_CPU_LIST, 不管設置0,2 都是單A53, 性能無差異。網絡
設置方法:函數
- 在命令窗口直接設置
export TENGINE_CPU_LIST=4,5 //兩個A72
- 在代碼中調用
setenv
設置
int setenv(const char *envname, const char *envval, int overwrite);
setenv
最後一個參數overwrite 設置爲0,表示若是環境變量已有設置,則不更新; 最後一個參數非0, 參數更新
如:setenv("TENGINE_CPU_LIST", "4,5", 1);
在代碼中調用set_cpu_list
函數設置
void set_cpu_list(const char* cpu_list_str);
函數接收cpu序號的列表,用逗號做爲分隔符,注意:set_cpu_list函數必須在init_tengine以前調用才能生效。
如:set_cpu_list("4,5");
工具
9. 執行程序時出現相似Failed to execute on: xxx Op: xxx報錯?
檢查一下makefile.config裏是否是同時註釋掉了CONFIG_ARCH_ARM64=y
和CONFIG_ARCH_BLAS=y
,二者起碼須要打開一個。對於armv8,建議打開ARM64,若是須要使用只能依賴openblas的OP(如LSTM和DeConv)則須要將BLAS一併打開;對於armv七、x86則只能打開BLAS。
10. 爲何相同的網絡和相同的輸入,CPU和GPU計算輸出的特徵向量不徹底相同?
對於浮點運算,CPU只支持FP32,而GPU每每同時支持FP16和FP32。若是爲GPU設置了FP16運算精度(export ACL_FP16=1
),那麼因爲計算精度的不一樣,CPU和GPU的運算結果就有了一些差別。
11. 執行程序時報錯 The input file specified is using deprecated params: xxx. Please upgrade the input file by using caffe tools(upgrade_net_proto_text/upgrade_net_proto_binary).?
Tengine對caffe只支持新的input格式,解決方法:
- 調用caffe的工具 upgrade_net_proto_text/upgrade_net_proto_binary 對prototxt進行升級;
- 或手動修改prototxt文件,將
input: "data" input_shape { dim: 1 dim: 3 dim: 300 dim: 300 }
的格式改成(注意:輸入維度要對應修改,不能照抄)
layer { name: "input" type: "Input" top: "data" input_param { shape { dim: 1 dim: 3 dim: 300 dim: 300 } } }
12. 自定義OP後報錯 cannot find load function for operator: xxx
這是由於沒有在serializer上註冊該OP,使得模型解析過程當中找不到OP,以caffe爲例可參考 issue#89
13. 如何使用PyTorch/Gluon模型?
- PyTorch用戶能夠將導出onnx模型,或使用轉換工具(如PytorchToCaffe轉換成caffe模型)來使用Tengine。
- MXNet-Gluon用戶能夠導出onnx或MXNet-Module模型,或使用轉換工具(如GluonConverter轉換成caffe模型)來使用Tengine。
- 有多是opencv版本問題,opencv3把一些名爲
CV_xxx
的常量挪到了cv
命名空間下而且去掉了前綴CV_
,能夠嘗試將代碼報錯的CV_xxx
常量改成cv::xxx
後從新編譯,如CV_FILLED
改成cv::FILLED
14. 編譯Tengine過程當中報錯 te_caffe.pb.h: No such file or directory
te_caffe.pb.h
文件是在編譯過程當中產生的,也就是說在該錯誤以前應該還會有其餘報錯——並且這每每是protobuf帶來的問題,如 protoc: error while loading shared libraries: libprotoc.so.xx: cannot open shared object file: No such file or directory,編譯工具未找到protobuf或系統包含多個版本的protobuf致使編譯工具產生混亂。
15. 編譯example的時候報錯 CV_xxx was not declared in this scope
有多是opencv版本問題,opencv3把一些名爲CV_xxx
的常量挪到了cv
命名空間下而且去掉了前綴CV_
,能夠嘗試將代碼報錯的CV_xxx
常量改成cv::xxx
後從新編譯,如CV_FILLED
改成cv::FILLED