導語:經過了幾個星期的折騰,我終於完成了ubuntu上的tensorflow 1.4 C++ 接口的配置,真是一部血淚史,特此記錄一下。
結尾放了一些資源的連接(本文配置所需的所有文件)
下期預告,yoloV3+deepsort 的ubuntu的移植
硬件
我的電腦配置:
OS: Ubuntu 16.04 LTS
GPU: GTX1080
NVIDIA 驅動: 410.104
前期準備
裝英偉達顯卡請參考:
https://blog.csdn.net/xunan003/article/details/81665835
CUDA 8.0 CUDNN 6.0 參考:
https://blog.csdn.net/qq_40806289/article/details/90643603
OPENCV 4.0,1參考:
https://www.cnblogs.com/laizhenghong2012/p/11329916.html
https://blog.csdn.net/PecoHe/article/details/90581526
notes:
1.解決ipcv問題:https://www.cnblogs.com/yongy1030/p/10293178.html
2.解決face_landmark_model.dat問題: https://www.jianshu.com/p/162f2cdf4f88
3.解決 vgg_generated_48.i 等問題 : 打開 opencv-4.0.1/build/CMakeDownloadLog.txt 文件,下載對應文件
放置到 opencv_contrib-4.0.1/modules/xfeatures2d/src/ 下
注意: boostdesc_bgm.i , vgg_generated_48.i 等 必須要自己從自己的opencv-4.0.1/build/CMakeDownloadLog.txt下載鏈接上下載,網上上傳的可能沒有用,因爲它會校驗kmd5碼。
重要:一定不要先安裝protobuf 因爲tensorflow 裏也帶了這個,如果你裝了,後面即使你安裝成功了,編譯自己的代碼,生成可執行文件了,也運行不了
會出現:
This program was compiled against version 2.6.1 of the Protocol Buffer runtime library, which is not compatible with the installed version (3.6.1). Contact the program author for an update. If you compiled the program yourself, make sure that your headers are from the same version of Protocol Buffers as your link-time library.
處理起來比較複雜
編譯tensorflow 1.4 C++ 接口
參考:
https://blog.csdn.net/gulingfengze/article/details/95658237
https://blog.csdn.net/flyfish1986/article/details/89406211
正式開始
- 一些必要的依賴
如果機器沒有安裝Python,可以使用如下命令安裝
sudo apt install python-dev python-pip
或者
sudo apt install python3-dev python3-pip
安裝 TensorFlow pip 軟件包依賴項
pip install -U --user pip six numpy wheel mock
pip install -U --user keras_applications==1.0.6 --no-deps
pip install -U --user keras_preprocessing==1.0.5 --no-deps
2安裝bazel
注意:一定要下載合適的版本,否則會出現各種莫名其妙的錯誤!
版本對應表
推薦使用二進制安裝 (可以安裝任意本吧,這裏以0.5.4版本安裝爲例)
1) 安裝需要的包
sudo apt-get install pkg-config zip g++ zlib1g-dev unzip python
2)下載地址(https://github.com/bazelbuild/bazel/releases/tag/0.5.4)
3)執行安裝
chmod +x bazel-0.5.4-installer-linux-x86_64.sh
./bazel-0.5.4-installer-linux-x86_64.sh –user
4)設置環境變化
export PATH="$PATH:$HOME/bin"
安裝完成後可以查看一下版本號
bazel version
輸出
Build label: 0.5.4
Buildtarget:bazel-out/local-fastbuild/bin/src/main/java/com/google/devtools/build/lib/bazel/BazelServer_deploy.jar
Build time: Fri Aug 25 10:00:00 2017 (1503655200)
Build timestamp: 1503655200
Build timestamp as int: 1503655200
3.tensorflow安裝
1)下載源碼
git clone https://github.com/tensorflow/tensorflow.git
cd tensorflow
2) 切換到我們要編譯的分支
~/code/tensorflow$ git checkout r1.4
輸出
分支 ‘r1.4’ 設置爲跟蹤來自 ‘origin’ 的遠程分支 ‘r1.4’。
切換到一個新分支 ‘r1.4’
3)配置編譯系統
-1) 因爲我在Ubuntu中安裝了python2.7和python3.6。默認使用的是Python2.7版本,我期望默認使用Python3.6版本
whereis python
sudo rm /usr/bin/python
sudo ln -s /usr/bin/python3.6 /usr/bin/p
-2) 執行命令./configure
Found possible Python library paths:
/usr/lib/python3/dist-packages
/usr/local/lib/python3.6/dist-packages
Please input the desired Python library path to use. Default is [/usr/lib/python3/dist-packages]
因爲我當時沒截圖,後面的就
如果你想安裝tensorflow-cpu版,直接回車,遇到選擇需要輸入y或者n時,都選擇n;
如果想安裝GPU版,只需要在
Do you wish to build TensorFlow with CUDA support? [y/N]: Y
CUDA support will be enabled for TensorFlow.
輸入Y,其他還是輸入n或者回車。
-3)編譯libtensorflow_cc.so 以及 libtensorflow_framework.so
編譯命令:
bazel build --config=opt --config=cuda tensorflow:libtensorflow_cc.so
bazel build --config=opt --config=cuda tensorflow:libtensorflow_framework.so
注意:網上有人說不加--config=monolithic,編譯出來的庫會導致cv::imread()爲空,我第一次是加了--config=monolithic的,但是後面編譯自己的代碼生成可執行文件後,運行會出現
Duplicate registration of device factory for type GPU with the same priority210 錯誤
-4)編譯其他依賴
進入 tensorflow/contrib/makefile 目錄下,運行./build_all_linux.sh
會自動下載所缺的庫
這就沒了?
怎麼會沒了,好戲纔開始...(如果你能直接完成,那恭喜你,還真就沒了)
問題1.如果出現tar, zip異常的結尾,那就是你的網不好,文件沒有完整下載下來。
複製上面的地址然後用瀏覽器下載下來,並修改
/tensorflow/contrib/makefile/download_dependencies.sh 的download_and_extract()函數
和69-75行
並註釋掉/tensorflow/contrib/makefile/build_all_linux.sh
第三十行
問題2. 在tensorflow/contrib/makefile下,執行./build_all_linux.sh文件,成功後會出現一個gen文件夾。注意:若出現如下錯誤 :
./autogen.sh: 37: ./autogen.sh: autoreconf: not found
安裝相應依賴即可 sudo apt-get install autoconf automake libtool
然後,重新執行命令:./build_all_linux.sh
若是最後又報錯:
./tensorflow/core/lib/io/zlib_outputbuffer.h:19:18: fatal error: zlib.h: No such file or directory
則需要安裝 zlib1g-dev:
sudo apt-get install zlib1g-dev
最後,再次重新執行命令:./build_all_linux.sh
鏈接:https://pan.baidu.com/s/1ZBA-u7YIOqIoFLJy0AsnYg 提取碼:xhfk