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

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

版本對應表

 

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章