2019年1月13日 星期日

Caffe安装 CPU版 (Ubuntu16.04,python3)

Step.1 安裝各種工具

安裝pip3
*Ubuntu 16.04內建python3.5沒有pip
sudo apt-get install python3-pip
安裝各種工具
# build-essential, vim, cmake, git, pkg-config
sudo apt-get install build-essential vim cmake git pkg-config


安裝亂七八糟的依賴項
# python3 modules (numpy, protobuf, skimage)
sudo pip3 install numpy
sudo pip3 install protobuf
sudo pip3 install skimage

# gflags, glog, lmdb
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev

# boost
sudo apt-get install libboost-all-dev

# hdf5
sudo apt-get install libhdf5-dev

# protobuf
sudo apt-get install protobuf-compiler libprotobuf-dev

# blas
sudo apt-get install libblas-dev
sudo apt-get install libatlas-base-dev 
sudo apt-get install libopenblas-dev

# leveldb
sudo apt-get install libleveldb-dev

# snappy
sudo apt-get install libsnappy-dev


Step.2 安裝opencv3

git clone https://github.com/opencv/opencv
cd opencv
git checkout 3.4   #一定要切換到3.4版 不然後面編譯python時會出錯
mkdir build   #創建build資料夾
cd build   #切換到build資料夾
cmake ..   #開始編譯
make
sudo make install   #安裝編譯完的檔案
安裝完成



Step.3 安裝Caffe(CPU版)

這裡是各種坑的開始,開始填坑吧~~!

① 下載神人提供的Caffe

git clone https://github.com/BVLC/caffe


② 切換到caffe目錄,將Makefile.config.example複製並命名為Makefile.config

cd caffe
cp Makefile.config.example Makefile.config


③ 修改Makefile.config

*可以使用Ubuntu內建的gedit來開啟

以下是要修改的地方:

1.取消對 CPU_ONLY := 1 的註解 (我們是要編譯CPU版)


2.取消對 OPENCV_VERSION := 3 的註解


3.將Python2 改成 Python3(取消Python3的註解,並將Python2註解起來)


4.修改引用文件路徑 (HDF5的路徑問題)


給你複製啦!
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial/
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial


④開始編譯


*make後面接-j2 j是job的意思 2使用的執行續數量 依電腦狀況可以增加 當然越多速度越快(小心電腦當機)
*但是make的程序有些是有順序性的 使用多執行續容易出錯 在這裡建議make all使用即可

sudo make all -j2  
sudo make test
sudo make runtest

從這一步開始就會出現各種編譯錯誤
如果在編譯(make)時出現任何錯誤,一定要先clean掉(執行下面指令)再重新編譯,不然會一直出現同樣的錯誤(很重要!!)
sudo make clean


以下是可能遇到的錯誤及解決方法:


-------【Error 1."libopencv_core.so.3.3: cannot open shared object: …"】-------



解決方式 :
1.在 /etc/ld.so.conf 裡面加入一行 : /usr/local/lib

執行:
sudo gedit /etc/ld.so.conf
改成:
2.執行
sudo ldconfig

3.打開 /etc/bash.bashrc 文件
sudo gedit /etc/bash.bashrc

在文件最後加入兩行 :
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH




4.執行以下指令重啟設定即可重新編譯
source /etc/bash.bashrc

編譯成功


make all

make test

make runtest

如果都有出現以上畫面,恭喜你!!!
你的Caffa已經成功編譯了,可以開始以用
如果想要使用python接口的話再繼續往下看

Step.4 編譯python接口

① 安裝fortran編輯器(gfrotran)

等等安裝scipy庫時會用到它
sudo apt-get install gfortran


② 安裝python接口需要的函式庫

在caffe/python資料夾內會找到一個requirements.txt的文件檔
裡面會寫有所有需要的安式庫
可以打開對照著使用pip3安裝
也可以使用以下指令一次性安裝
cd ~/caffe/python
for req in $(cat requirements.txt);do sudo  pip3 install $req; done

安裝完成後還可以再使用以下指令再確認一次,
sudo pip3 install -r requirements.txt
如果安裝成功的會顯示Requirement already satisfied。沒安裝成功的,則會重新安裝

③ 將caffe/python加到環境變數

1.執行
sudo ldconfig

2.編輯配置文件~/.bashrc
打開~/.bashrc文件
sudo gedit ~/.bashrc
在文件最面添加
export PYTHONPATH=/home/joshua/caffe/python:$PYTHONPATH
*這裡的位置是根據caffe的安裝位置,每個人會有所不同

3.執行以下指令使設定生效
source ~/.bashrc
*有時候更新設定可能不會生效,可以重開電腦解決


④開始編譯python接口

cd ~/caffe/
sudo make pycaffe
編譯完成


⑤驗證python接口

輸入python3進入ptyhon
輸入
import caffe
如果成功還不能確定安裝完成
再輸入
from caffe import layers as L
如果都沒出現錯誤的話,恭喜你!!!
可以開始使用python接口的caffe了!!!



接下來是整理一些編譯pycaffe會遇到的錯誤:


-------【Error1. pip3的bug  (步驟②)】-------


這應該是在第②步,安裝python函式庫的時候會遇到的問題
這是一個非常麻煩的bug
可以從錯誤中看到是"/usr/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl/pkg_resources/__init__.py"這一個檔案出了問題
照理來說只要修改這個檔案就可以修復這個bug
但是麻煩的是他是在系統內的檔案,所以必須使用系統管理員來開啟
而且"/usr/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl"是個壓縮檔
所以沒辦法在終端機使用指令直接找到裡面的文件

解決方法如下:
1.輸入以下指令以系統管理員開啟檔案總管
sudo nautilus

2.找到"/usr/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl"壓縮檔

3.打開壓縮檔並找到"/pkg_resources/__init__.py"檔案
4.開啟"__init__.py"並找到下面紅框的地方
*如果使用gedit的人可以用Ctrl+F,並輸入orig_path來尋找

5.修改程式碼為
#orig_path.sort(key=position_in_sys_path)
#module.__path__[:] = [_normalize_cached(p) for p in orig_path]
orig_path_t = list(orig_path)
orig_path_t.sort(key=position_in_sys_path)
module.__path__[:] = [_normalize_cached(p) for p in orig_path_t]
*python的縮排是4個空白,在gedit中Tab鍵的預設是8個空白,這裡要注意一下

6.儲存並更新壓縮檔
結束後再重新執行一次步驟②,應該就能夠順利執行了


-------【Error2. /usr/bin/ld: 找不到 -lbppst_python3  (步驟④)】-------


這是在Ubuntu中常見的錯誤,就是找不到對應的lib文件,通常是檔名沒有統一
解決方法就是切換到"/usr/lib/x86_64-linux-gnu/"
並建立一個對應檔名的連接檔案

如下:
cd /usr/lib/x86_64-linux-gnu/
sudo ln -s libboost_python-py35.so libboost_python3.so

建立完再切換回caffe的資料夾並重新編譯即可


-------【Error3. import caffe時出錯 (步驟⑤)】-------

這是ptyhon套件matplotlib出錯
輸入以下指令更新套件即可
sudo pip3 install matplotlib --upgrade


-------【Error4. ImportError: cannot import name '_validate_lengths' (步驟⑤)】-------

這個錯誤是因為skimage這個套件需要使用numpy
可是由於numpy持續更新使得語法已經改變了
解決方法如下:
1.輸入以下指令開啟skimage套件中的"arraycrop.py"檔案
sudo gedit /usr/local/lib/python3.5/dist-packages/skimage/util/arraycrop.py
2.修改Import的方式如下:
from distutils.version import LooseVersion as Version
old_numpy = Version(np.__version__) < Version('1.16')
if old_numpy:
    from numpy.lib.arraypad import _validate_lengths
else:
    from numpy.lib.arraypad import _as_pairs


3.儲存並關閉





參考資料

caffe安裝:
https://blog.csdn.net/g11d111/article/details/78141202  http://darren1231.pixnet.net/blog/post/328046349-setup_caffe https://blog.csdn.net/u010193446/article/details/53259294

 OpenCV安裝:
https://www.pyimagesearch.com/2015/07/20/install-opencv-3-0-and-python-3-4-on-ubuntu/

hdf5.h路徑錯誤問題:
https://blog.csdn.net/windows_peng/article/details/53706987 https://blog.csdn.net/MD_learning/article/details/53185992

 OpenCV編譯錯誤(cannot open shared object): https://blog.csdn.net/CV_YOU/article/details/77341631

 Ubuntu 以root的身分開啟檔案總管:
https://blog.xuite.net/yh96301/blog/247012131-Ubuntu+14.04%E4%BB%A5root%E7%9A%84%E8%BA%AB%E5%88%86%E9%96%8B%E5%95%9F%E6%AA%94%E6%A1%88%E7%B8%BD%E7%AE%A1

 pip3 bug修復:
https://stackoverflow.com/questions/47955397/pip3-error-namespacepath-object-has-no-attribute-sort

 /usr/bin/ld: cannot find -l**** 解決方法:
https://blog.csdn.net/yingyujianmo/article/details/49634511

skimage bug修復:
https://github.com/scikit-image/scikit-image/pull/3556

2017年3月4日 星期六

開啟Python IDLE 的自動補齊功能(包含套件)

IDLE是Python官方提供的一個IDE工具,可是python的強大就在於有與多套件,偏偏安裝的套件又不能夠在編輯時自動跑出語法,讓人在使用時往往還得搜尋相關的語法,浪費許多時間。
在這裡就教大家能夠開啟IDLE能夠自動補齊套件語法的功能。

Step.1 先找到Python的安裝路徑

首先我們要先找到我們Python的安裝路徑,像是我的安裝路徑是"C:\Users\XXXX\AppData\Local\Programs\Python\Python35"(我的是3.5版),每個版本不盡相同,需要自己找找看

Step.2 找到"idlelib"資料夾

再來就是進入到idlelib,idlelib資料夾通常是在"PythonXX\lib\idlelib",每個版本不盡相同,需要自己找找看。
進到idle資較夾中會看到"config-extensions.def"和"AutoComplete.py"這就是我們今天的主角了。


Step.3 修改"config-extensions.def"

打開"config-extension.def",然後找到下圖紅色框框內的地方。
然後請將其改為"enable = True",原本預設可能就是True,這邊是再多做一次確認。

修改(確認)完後按存檔。


Step.4 修改 "AutoComplete.py" 

接下來打開"AutoComplete.py",並找到下圖紅色框框內的地方。
會發現原本就已經有"import os"、"import sys"、"import string"的語法
我們要做的就是將自己想要使用的套件也一起import在下面即可
像是我這裡就是多了numpy和tensorflow的套件
修改完之後一樣存檔


Step.5 測試

做完上述步驟就可以打開IDLE來測試了,可以試試看打一半的語法,之後按Tab鍵,就會出現後續的語法選單了。



 這次的教學就到這邊,謝謝大家收看!!




2017年3月1日 星期三

Tensorflow Windows版本安裝教學(免虛擬機)


Tensorflow 終於推出Windows版本啦!!

今天就在這裡發個安裝教學吧!!
順便附上官方原文:https://www.python.org/downloads/release/python-352/
※目前只支援Win7,Win10,且只支援64bit的作業系統

Step.1:需要安裝python 3.5.2 以上版本

*如果已經安裝python的話,可以直接跳到Step.2


  1. 首先到這裡下載python的安裝檔:https://www.python.org/downloads/release/python-352/
    *可以下載executable installer會比較方便

  2. 開啟安裝介面
    Add to Path可以先打勾,安裝完的話就會自動添加python到環境變數
    *如果沒打勾的話安裝完請再到環境變數設定路徑

  3. 安裝完點擊Close關閉



  4. 確認安裝
    可以開啟命令提示字元輸入"python",如果可以進入python和出現版本訊息,代表安裝成功




Step2.使用pip安裝tensorflow

pip工具是安裝python時會自動安裝的,不須另外下載


  1. 進入命令提示字元輸入"pip --version"或"pip -V",可以查看pip版本

  2. 要安裝tensorflow需要pip  9.0.1 以上的版本,輸入"pip install --upgrade pip" 即可更新pip

  3. 更新完以後輸入"pip install --upgrade tensorflow"來安裝tensorflow
    如果想安裝GPU版的朋友請輸入"pip install --upgrade tensorflow-gpu"即可安裝GPU版

  4. 安裝結束
    *我因為沒更新pip就先安裝tensorflow才會出現下面的黃字,如果安裝成功應該會出現「Successfully installed tensorflow-1.0.0」的訊息

Step.3 測試tensorflow

  1. 進入python (於命令提示字元中輸入python) ,並輸入以下程式碼

    import tensorflow as tf                   
    hello = tf.constant('Hello, TensorFlow!') 
    sess = tf.Session()                       
    print(sess.run(hello))                    


  2. 如果有出現「Hello, TensorFlow!」,就代表tensorflow能夠正確執行啦!!

安裝教學到此結束,謝謝觀看!!