Yolov--4--TX2中安裝caffe的詳細步驟與教程(易報錯點)

一、TX2中caffe的安裝

平臺:英偉達NVIDIA TX2開發板  環境:Ubuntu16.04, python2.7,cuda8.0,cudnn6.0.2.  OpenCV 2.4.13.1

準備工作:

1. 瞭解TX2。最重要的一點是:它用的arm結構,是aarch-linux,不是x86_64-linux,也不是i386-linux。這裏附官方簡介:

http://www.nvidia.cn/object/embedded-systems-dev-kits-modules-cn.html

安裝過程:

1. 安裝各種包以及依賴

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install build-essential cmake git pkg-config
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libhdf5-serial-dev protobuf-compiler
sudo apt-get install libatlas-base-dev
sudo apt-get install --no-install-recommends libboost-all-dev
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-de
2. 安裝python

sudo apt-get install python-pip 安裝pip 
這裏我們用pip安裝一些python需要的依賴包,不過爲了避免各種問題,也可以通過apt-get安裝,反正我這兩種方式都安裝了一遍(-.-)
sudo apt-get install python-numpy python-scipy python-matplotlib ipython ipython-notebook python-pandas python-sympy python-nose

3. 安裝Opencv(TX2已經自帶,檢查後可跳過這一步)

查看opencv版本:

pkg-config --modversion opencv
若沒有跳出opencv的版本,則需安裝opencv:

sudo apt-get install -y libopencv-dev

4. 安裝Cuda(TX2已經自帶,檢查後可跳過這一步)

查看cuda版本:

cat /usr/local/cuda/version.txt
若沒有跳出cuda的版本,則需手動安裝cuda:

這裏附安裝連接:https://blog.csdn.net/jonms/article/details/79318566

 

5. 安裝Cudnn(需要手動安裝,不可跳過)

A. 確定已經安裝的Cuda版本,以Cuda9.0爲例,到官網https://developer.nvidia.com/rdp/cudnn-download下載相應的庫文件(下載前需要登錄網站,因此需要進行註冊)PS:一定要去官網下載對應的版本,不要圖省事去什麼網盤之類的,只有纔是最安全的。

B. 進入下載目錄並解壓

cd /home/nvidia/Downloads
sudo tar xvf cudnn-9.0-linux-x64-v7.1.tgz
C. 複製頭文件和動態鏈接庫
cd cuda
sudo cp include/cudnn.h /usr/local/cuda/include/
sudo cp lib64/* /usr/local/cuda/lib64/
cd /usr/local/cuda/lib64/
ls -a(查看libcudnn版本;很多地方需要根據文件的版本然後操作,後面不再提示)
sudo chmod +r libcudnn.so.7.1.2
後面很多地方需要查看文件名稱。學會使用 ls -a(查看當前目錄下所有文件)
D. 創建軟連接
sudo rm -rf libcudnn.so libcudnn.so.7
sudo ln -s libcudnn.so.7.1.2 libcudnn.so.7
sudo ln -s libcudnn.so.7 libcudnn.so
sudo ldconfig

6. 安裝Caffe


A. 下載caffe

cd ~
mkdir git  //在home下新建一個git文件夾,用來存放那些從github上git下來的文zong件
git clone https://github.com/BVLC/caffe.git    //從github上git caffe


B. 開始安裝
cd caffe    //打開到剛剛git下來的caffecp Makefile.config.example Makefile.config 
//將Makefile.config.example的內容複製到Makefile.config
//因爲make指令只能make   Makefile.config文件,而Makefile.config.example是caffe給出的makefile例子
 

修改Makefile.config文件(根據技術選型和系統硬件):

1)去掉USE_CUDNN := 1 前面的註釋

2)去掉USE_OPENCV := 0 前面的註釋,並將0修改爲1

3)去掉OPENCV_VERSION := 2.7前面的註釋

4)去掉CUSTOM_CXX := g++ 前面的註釋

5)在CUDA_ARCH := 後前兩行即有*_20和*_21的兩行前面添加#最終效果爲


//重要的一項
將# Whatever else you find you need goes here.下面的
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
修改爲:
INCLUDE_DIRS :=  $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/aarch64-linux-gnu /usr/lib/aarch64-linux-gnu/hdf5/serial
//這是因爲ubuntu16.04的文件包含位置發生了變化,尤其是需要用到的hdf5的位置,所以需要更改 

修改Makefile文件

打開Makefile文件,做如下修改,將:

NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC$(COMMON_FLAGS)

替換爲:

425行:   NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -shared -Xcompiler -fPIC $(COMMON_FLAGS)
-shared -Xcompiler 各自前面都要加空格,否則會出錯

在Makefile文件中找到:
LIBRARIES +=glog gflags protobuf boost_system boost_filesystem m hdf5 hl hdf5
把它改成:
181行:  LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial


 

C. 爲hdf5創建鏈接

\\首先執行下面這句話:
cd /usr/lib/aarch64-linux-gnu
\\這裏筆者被坑了很多次,網上幾乎所有的教程都是x86_64,給出的是cd /usr/lib/x86_64-linux-gnu,然而TX2並沒有這個文件,浪費了筆者很多時間;
筆者沒有找到用aarch架構的caffe安裝文章,故寫下了此博客
\\然後根據情況執行下面兩句:
sudo ln -s libhdf5_serial.so.10.1.0 libhdf5.so
sudo ln -s libhdf5_serial_hl.so.10.0.2 libhdf5_hl.so
\\注意:這裏的10.1.0和10.0.2根據不同的系統可能對應的數字會不同,比如在ubuntu15.10中其數字就是8.0.2.
\\具體的數字可以在打開的文件中查看對應文件後面跟的數字
PS:查看當前目錄下文件,用ls -a
D. Make各種文件

cd ..   \\此時位置應該處於caffe文件夾下
make all -j8  //j4代表計算機cpu有4個核,因此可以多線程一起make,這樣make的速度會快很多。
make test -j8
make runtest -j8  (運行出現下圖:)


make pycaffe   //如果以後用python來開發的話必須執行這一句,一般不管你是否用python,都會執行這一句

export PYTHONPATH=~/caffe/python:$PYTHONPATH


make distribute


如果執行到這裏,那恭喜你,caffe安裝完畢;如果沒有執行到這裏,那很正常,遇到問題不要怕,認真閱讀報錯信息,多百度谷歌,筆者也遇到了很多問題,卡在了make all -j4上,下面貼出可能會遇到的問題。

 

caffe安裝錯誤彙總
1. opencv出問題

.build_release/lib/libcaffe.so: undefined reference to `cv::imread(cv::String const&, int)'
.build_release/lib/libcaffe.so: undefined reference to `cv::imencode(cv::String const&, cv::_InputArray const&, std::vector<unsigned char, std::allocator<unsigned char> >&, std::vector<int, std::allocator<int> > const&)'
先檢查你的opencv版本:

pkg-config --modversion opencv

這種問題很有可能是你的系統中使用的是opencv3,但是你的Makefile.config中沒有將OPENCV_VERSION := 3這一句取消註釋。
其次,取消註釋後還沒有解決,則可能是opencv_imgcodecs鏈接的問題,比較有效的解決方案如下:
把opencv需要的lib添加到Makefile文件中,找到LIBRARIES(在PYTHON_LIBRARIES := boost_python python2.7 上面)並修改爲:

LIBRARIES += glog gflags protobuf leveldb snappy \        
   lmdb boost_system hdf5_hl hdf5 m \         
   opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs

2. Hdf5出問題

LD -o .build_release/lib/libcaffe.so.1.0.0-rc3
/usr/bin/ld: cannot find -lhdf5
/usr/bin/ld: cannot find -lhdf5_hl
collect2: error: ld returned 1 exit status
Makefile:567: recipe for target '.build_release/lib/libcaffe.so.1.0.0-rc3' failed
make: *** [.build_release/lib/libcaffe.so.1.0.0-rc3] Error  
Lhdf5出問題有很多原因,需要逐一排查:
a. Makefile.config

認真核對Makefile.config裏面的內容,儘量不要手敲,直接複製

將# Whatever else you find you need goes here.下面的
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
修改爲:
INCLUDE_DIRS :=  $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/aarch64-linux-gnu /usr/lib/aarch64-linux-gnu/hdf5/serial
//這是因爲ubuntu16.04的文件包含位置發生了變化,尤其是需要用到的hdf5的位置,所以需要更改 


c. 軟連接
軟連接創建出錯,只需打開對應目錄,創建移除原有鏈接,創建新鏈接即可:

find . -type f -exec sed -i -e 's^"hdf5.h"^"hdf5/serial/hdf5.h"^g' -e 's^"hdf5_hl.h"^"hdf5/serial/hdf5_hl.h"^g' '{}' \;
cd /usr/lib/aarch64-linux-gnu
sudo ln -s libhdf5_serial.so.10.1.0 libhdf5.so
sudo ln -s libhdf5_serial_hl.so.10.0.2 libhdf5_hl.so
\\注意:這裏的10.1.0和10.0.2根據不同的系統可能對應的數字會不同,比如在ubuntu15.10中其數字就是8.0.2.
\\具體的數字可以在打開的文件中查看對應文件後面跟的數
Ps:學會用dpkg -S libhdf5.so查看看是否有libhdf5.so;沒有需安裝:

sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libhdf5-serial-dev protobuf-compiler
3. Cudnn出問題

/sbin/ldconfig.real: /usr/local/lib/libcudnn.so.6.5 is not a symbolic link
/sbin/ldconfig.real: /usr/local/lib64/libcudnn.so.6.5 is not a symbolic link
這是軟連接創建有問題,libcudnn.so.不是一個符號鏈接,打開對應目錄,創建移除原有鏈接,創建新鏈接即可

sudo rm -rf libcudnn.so libcudnn.so.7
sudo ln -s libcudnn.so.7.1.2 libcudnn.so.7
sudo ln -s libcudnn.so.7 libcudnn.so
sudo ldconfig
或者出現這個問題:
NVCC src/caffe/layers/deconv_layer.cu
NVCC src/caffe/layers/cudnn_conv_layer.cu
src/caffe/layers/cudnn_conv_layer.cu(81): error: argument of type "cudnnAddMode_t" is incompatible with parameter of type "const void *"
 detected during instantiation of "void caffe::CuDNNConvolutionLayer<Dtype>::Forward_gpu(const std::vector<caffe::Blob<Dtype> *, std::allocator<caffe::Blob<Dtype> *>> &, const std::vector<caffe::Blob<Dtype> *, std::allocator<caffe::Blob<Dtype> *>> &) [with Dtype=float]" 
這是cudnn沒有安裝成功,原因可能是:
沒有去官網下載與cuda版本相對應的cudnn,建議去官網重新下載,按照上面教程重新進行安裝;

也有可能是軟連接的問題,移除原有軟連接重新創建即可。

 

上述所有方案都不行的話,可以試一試這個:

cd home/nvidia/Downloads
cd cuda/include
sudo cp *.h /usr/local/include/
cd ../lib64
sudo cp lib* /usr/local/lib/
cd /usr/local/lib
sudo chmod +r libcudnn.so.7.1.2
sudo rm -rf libcudnn.so libcudnn.so.7
sudo ln -s libcudnn.so.7.1.2 libcudnn.so.7
sudo ln -s libcudnn.so.7 libcudnn.so
sudo ldconfig
 
4. cuda計算能力警告
如果在編譯時產生了CUDA計算能力的警告,解決的方式是將Makefile.config文件的CUDA_ARCH的前兩行去掉。

參考:

https://blog.csdn.net/dhaduce/article/details/80155121

https://www.jianshu.com/p/e78c5c321248?tdsourcetag=s_pcqq_aiomsg

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