天天看點

Ubuntu 16.04 Tensorflow 1.4 C++接口 (CUDA 8.0 CUDNN 6.0 OPENCV 4.0.1)

導語:經過了幾個星期的折騰,我終于完成了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

正式開始

  1. 一些必要的依賴

如果機器沒有安裝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

注意:一定要下載下傳合适的版本,否則會出現各種莫名其妙的錯誤!

版本對應表

Ubuntu 16.04 Tensorflow 1.4 C++接口 (CUDA 8.0 CUDNN 6.0 OPENCV 4.0.1)

推薦使用二進制安裝 (可以安裝任意本吧,這裡以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