x86 平臺 Linux Ubuntu 20.04 系統 環境下 配置caffe
本次專案需要使用到caffe的框架,開發人臉識別的功能,最終要集成到arm平臺的linux系統,我先拿x86平臺的主機試試水,對caffe和linux一竅不通的我來說,屬實遇到了不少大大小小的問題,好在前人的文章都有很好的總結,那么話不多說,開始caffe的環境搭建探索吧!
caffe需要的依賴項
caffe需要很多的依賴項才能運行,在編譯caffe之前,需要及其所有依賴項,才能召喚caffe,那么我們就需要弄清需要哪些依賴項?我有哪些依賴項?怎么用起來這些依賴項?
經過網上的總結,列出需要的依賴項如下:
python3.5 / python2.7
boost
gflags
glog
leveldb
lmdb
protobuf
hdf5
snappy
opencv
怎么查看自己有哪些依賴項?輸入指令查看:
dpkg -l <name> #準確搜索
dpkg -l | grep <name> #模糊搜索
查看自己的主機上是否已經存在有的依賴項
我的主機里有python3.8,其實有python3.8也可以按照,不是必須要2.7或者3.5,只要目錄對了,有正確的依賴項就行,這個后面說,
如果沒有依賴項,使用apt-get來安裝:
安裝opencv,boost,protobuf,leveldb,snappy,hdf5
sudo apt-get install libopencv-dev libboost-all-dev libprotobuf-dev libleveldb-dev libsnappy-dev libhdf5-serial-dev protobuf-complier
安裝blas庫:
sudo apt-get install libatlas-base-dev libgflags-dev libgoogle-glog-dev liblmdb-dev
到這步,caffe的依賴項就基本安裝好了
下載caffe原始碼,修改Makefile
進入到要下載的目錄后:
git clone git://github.com/BVLC/caffe.git
進入目錄,拷貝Makefile組態檔
cp Makefile.config.example Makefile.config
Makefile.config.example是模板,每次使用時,復制一份Makefile.config,編譯的時候會讀取.config的內容
根據依賴項所安裝在的位置,修改Makefile里的內容:
- CPU_ONLY=1 前面的注釋去掉
- GPU的前面都加上注釋#
- 注釋掉python2.7的PYTHON_INCLUDE
- 修改# Uncomment to use Python 3 (default is Python 2) 這一句下面的:
PYTHON_LIBRARIES := boost_python3 python3.8
PYTHON_INCLUDE := /usr/include/python3.8 \
/usr/lib/python3/dist-packages/numpy/core/include
這里主要看自己的python目錄,在usr/include和usr/lib的目錄下找
- 修改OPENCV_VERSION=4
- 去掉WITH_PYTHON_LAYER前的注釋
- 修改# Whatever else you find you need goes here. 這一句下面的
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial /usr/include/opencv4
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial
至此依賴項的目錄都基本添加完成,如果后續有報錯沒找到檔案,就去對應的目錄下面確認,是什么原因:1.檔案名不對;2.檔案目錄沒添加;3.不存在該檔案
編譯caffe以及遇到的問題
輸入指令,開始編譯:
sudo make all
然后就慢慢等待報錯吧~
ERROR1:src/caffe/util/io.cpp,'CV_LOAD_IMAGE_GRAYSCALE' 'CV_LOAD_IMAGE_COLOR' not declared in this scope.這個問題是SSD是用opencv2撰寫的,而opencv2于opencv4有較大的語法差別,所以這里添加兩行代碼,在報錯的.cpp檔案中:
#define CV_LOAD_IMAGE_COLOR cv::IMREAD_COLOR
#define CV_LOAD_IMAGE_GRAYSCALE cv::IMREADGRAYSCALE
這兩行代碼分別對應解決上面的兩個報錯,使用宏定義可以省去查找代碼的位置,非常方便
ERROR2:src/caffe/util/db.cpp #include "leveldb/db.h"頭檔案問題,首先去/usr/include目錄下查找該頭檔案目錄,沒有找到,懷疑是沒有裝leveldb,重裝:sudo apt-get install libleveldb-dev
ERROR3:usr/bin/ld:cannot find -lhdf_serial_hl, cannot find -lboost_python3該報錯是找不到對應的lib檔案,對應著找不到hdf_serial_hl.so和boost_python3.so檔案,有三種可能:1.系統沒有安裝對應的lib;2.對應的lib版本不對;3.lib的symbolic link 不正確,沒有連接到正確的函式庫檔案,
先解決一下hdf_serial_hl的問題:判斷在/usr/lib下相應的.so檔案的軟鏈接是否正確:
cd /usr/lib/x86_64-linux-gnu
find . -name "*hdf*_serial_hl.*" | xargs ls -l
得出結果:

當時沒有libhdf5_serial_hl.so檔案,別的.so檔案最終都指向libhdf5_serial_hl.so.100.1.1檔案,創建一個軟連接:
sudo ln -s libhdf5_serial_hl.so.100.1.1.so libhdf_serial_hl.so
繼續找libboost_python3,找到了如下:

因為我在Makefile.config里面修改了python的目錄為python3.8的目錄,并且我主機的默認python版本是python3.8,所以在安裝boost的時候就自動生成了libboost_python38這個檔案,這里或許可以修改配置里的默認python版本,然后安裝boost的時候就生成了對應python版本的libboost_python,實際上我所依賴的就是libboost_python38.so.1.71.0,
創建軟連接
sudo ln -s libboost_python38.so.1.71.0 libboost_python3.so
因為我之前是下載了python3.5,然后苦苦尋找libboost_python35.so這個檔案,覺得要自己編譯boost,后來放棄這個辦法,覺得太麻煩,所以才發現原來修改caffe的Makefile.config的python目錄就可以解決,
解決完一個問題,就回傳caffe目錄繼續編譯,遇到一個問題解決一個問題,無非是這幾種狀況:
- 代碼錯誤,由于版本的不同,只需要編輯一下代碼
- 檔案目錄/檔案名問題,可能是目錄名不正確,檔案名不正確,創建軟連接即可,把檔案目錄添加進Makefile.config
- 檔案不存在,apt-get 下載
編譯通過后驗證caffe
進入到caffe的目錄下,執行命令列:
sudo sh data/mnist/get_mnist.sh #下載mnist資料集
sudo sh examples/mnist/create_mnist.sh #將資料轉換為leveldb格式
#修改prototxt 修改為CPU版本
#找到 #solver mode:CPU or GPU 改為:solver:CPU
vim examples/mnist/lenet_solver.prototxt
sudo sh examples/mnist/train_lenet.sh #訓練資料
運行正確開始顯示迭代次數和準確率,
import caffe,caffe python的依賴庫安裝
在python中使用caffe會以來很多庫,在import caffe前,需要安裝一些python工具的依賴項,需要用到pip3,安裝pip3:
sudo apt-get install python3-pip
安裝依賴:
這里可以先更新一下pip源:參考這篇文章:pip換國內源
cd caffe/python #進入到python目錄
sudo pip3 install -r requirements.txt #遞回安裝依賴庫
如果出現錯誤:“缺少caffe._caffe 模塊”,要在caffe的目錄下sudo make pycaffe再到caffe/python目錄下運行python3,import caffe,就沒有錯誤了,

至此,caffe在x86 Ubuntu20.04下配置caffe完成,我猜想如果在arm平臺上,不是Ubuntu20.04也不是python3.8,可能要自己下載原始碼編譯opencv,boost等庫,到時候再整理一篇,海思3531芯片arm平臺的caffe環境配置,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/298751.html
標籤:其他
上一篇:FFmpeg[29] - Filter overlay has a unconnected output
下一篇:入門opencv
