1. 程式人生 > >ARM架構下安裝tensorflow與opencv3.2DNN模組

ARM架構下安裝tensorflow與opencv3.2DNN模組

使用板子:banana pi M2+

使用系統映象:2016-11-29-ubuntu-16.04.1-mate-desktop-preview3-bpi-m2u-sd-emmc

安裝Tensorflow

在樹莓派/妙算等arm架構處理器上安裝tensorflow有兩種方式。Tensorflow官方給出的是從原始碼進行安裝。

更加推薦的是另外一種方式,在github上,samjabrahams和另外幾位谷歌員工合力編譯出了適用於arm平臺的tensorflow輪子(在此致敬!),大大簡化了安裝流程。

先安裝依賴庫:

$ sudo apt-get update
# For Python 2.7
$ sudo apt-get install python-pip python-dev
# For Python 3.3+
$ sudo apt-get install python3-pip python3-dev

接下來和在x64/x86平臺上一樣,使用pip進行安裝:

# For Python 2.7
$ wget https://github.com/samjabrahams/tensorflow-on-raspberry-pi/releases/download/v0.11.0/tensorflow-0.11.0-cp27-none-linux_armv7l.whl
$ sudo pip install tensorflow-0.11.0-cp27-none-linux_armv7l.whl
# For Python 3.3+
$ wget https://github.com/samjabrahams/tensorflow-on-raspberry-pi/releases/download/v0.11.0/tensorflow-0.11.0-py3-none-any.whl
$ sudo pip3 install tensorflow-0.11.0-py3-none-any.whl

之後,就可以使用了!(萬一還是不行,只能轉到上面的從原始碼安裝)

測試安裝是否正確:

# For Python 2.7
$ python#進入python
$ import tensorflow

如果正常進入下一行,不報錯,說明安裝正確。

可能出現的問題:(其實是自己安裝碰到的問題)

1、安裝過程中下載速度可能過慢,這時使用VPN翻牆會好很多。

2、真的很方便,沒有了~

安裝Opencv3.2DNN模組

Opencv3.2opencv最新的穩定版本,於2016.12.23釋出。除了修復BUG,主要的更新之一是在opencv_contrib中大大改進和加速dnn模組:

1、許多新層,包括反捲積,

LSTM等。

2、支援語義分段和SSD網路與樣本。

3TensorFlow匯入程式+執行Inception net的示例。

除此之外,還包括支援更多圖片格式和相機後端,互動相機校準應用程式,支援最新作業系統,包括Ubuntu 16.04 LTSOSX 10.12,效能優化等。(詳見http://opencv.org/opencv-3-2.html

以下為linux環境下的安裝。

首先下載opencvopencv contrib3.2.0版本(linux版)。接下來基本可參考網上其他有關opencv3的原始碼編譯。(記得將額外模組opencv_contrib也一起進行編譯)

在正常安裝完畢後,可以嘗試使用cmake對目標程式tf_inception.cpp進行編譯,檢視dnn模組是否工作正常。

配置成功效果圖。

 

參考網址:

http://blog.csdn.net/qq_23270939/article/details/54428881

需要注意的事項(關係到後續是否能夠正常執行tensorflowdemo:

1、如果沒有NVIDIAGPU,不要勾選CUDA相關選項,會給後面編譯帶來不必要的麻煩。

2、可以選擇安裝Alas,blas,eigen等依賴包。(可選,不是必須)

參考網址:

參考命令:

$ sudo apt-get install libeigen3-dev 

3、推薦使用cmake-gui進行編譯,操作方便,高手請無視。

4、在安裝時勾選從原始碼編譯PNG,TIFF等。否則在程式編譯執行階段可能無法正常編譯,提示“undefined reference to xxx”。(環境包疑似不起作用)如執行該步操作,在編譯tf_inception.cpp時仍舊提示相關錯誤。轉至下一步。


PS:在電腦(lenovo-ubuntu14.04)上,選擇從原始碼編譯相關依賴庫不會存在上述問題。

需要解決的問題:

1、關鍵檔案下載失敗(類似ippicv檔案)

在安裝過程中會需要下載檔案protobuf-cpp-3.1.0.tar.gzgoogle的一種資料交換的格式,它獨立於語言,獨立於平臺,可以把它用於分散式應用之間的資料通訊或者異構環境下的資料交換)。在國外下載應該不會有太大問題,但是於國內可能無法下載。

處理方法:從下面的連結下載原始碼。

下載連結:

cmake-gui中先試著Configure,Generate一次,等待下載(能直接成功當然更好)。失敗後,於下載原始碼的位置開啟終端,輸入下列指令。

$rm
PathtoContrib/opencv_contrib-3.2.0/modules/dnn/.download/bd5e3eed635a8d32e2b99658633815ef/v3.1.0/protobuf-cpp-3.1.0.tar.gz
#先刪除,後新增
$cp protobuf-cpp-3.1.0.tar.gz
PathtoContrib/opencv_contrib-3.2.0/modules/dnn/.download/bd5e3eed635a8d32e2b99658633815ef/v3.1.0

之後,找到檔案PathtoOpencv/opencv/cmake/OpenCVUtils.cmake


1020行前後修改如下。

之後,即可順利生成Makefile,接下來make&&sudo make install即可。

 

************************修改原因:不感興趣的話可以直接跳過*********************

一開始進行下載,在下載位置:opencv_contrib-3.2.0/modules/dnn/下成.download資料夾(在圖形介面無法找到?),進入後使用ls命令,能夠看到以雜湊值命名的子資料夾。

 

在opencv_contrib-3.2.0/modules/dnn/cmake/download_protobuf.cmake中,設定了檔案正常下載路徑(從github下載),對應hash值也來自於此。

 

由於我們是從別的連結下載,所帶hash值與設定不同。因此在下載完成後,OpenCVUtils.cmake對檔案進行校驗,發現不是目標檔案(實際上確實是,不是根據它設定的連結下載來的),於是刪除已有檔案,並報錯。

修改之後,將目標hash值直接改為現有hash值,從系統安全的角度上來說不可取,但是為了編譯方便,可以選擇這麼做(個人嘗試過,直接跳過檢測檔案這一步,後續在別的地方也會報錯,不如直接在這裡改),前提是我們確保下載來的檔案與目標檔案相同。

cmake是一款功能強大的編譯器,在編譯時出現問題,最關鍵的是看配置錯誤發生在哪一步,cmake會列出出錯在哪個檔案,哪一行,根據問題再進行排查即可,有時比在網上找攻略更快。

************************修改原因:不感興趣的話可以直接跳過*********************

2、從原始碼編譯zlib,tiff等依賴庫

如果出現此類錯誤:

 

則根據對應依賴庫從原始碼重新進行安裝。(嘗試過使用apt-get安裝依賴庫不起作用,版本不夠的原因?)

參考網址:

zlib的安裝為例。

#zlib官網:http://www.zlib.net
$wget http://www.zlib.net/zlib-1.2.10.tar.gz
$tar -xvzf zlib-1.2.10.tar.gz
$cd zlib-1.2.10.tar.gz
$./configure
$make
$sudo make install

其他對應原始碼檔案的安裝方式類似:

如還不起作用,可將module dnn解除安裝,重新編譯,再執行上述cmake程式編譯部分。