樹莓派3B+ 64位Ubuntu安裝caffe

樹莓派3B+到貨了,固然要把玩一番。python

背景

樹莓派從3代開始就用上了64位的處理器,奈何卻沒有更新上64位的系統。聽說用上64位的系統,能提高很多的性能,甚至有人用RPi3B測試最快能提升30倍linux

拿着RPi3B+的我就對這個更感興趣了,先折騰一下64位系統,再裝個caffe吧。git

我知道一個大大搞了個Ubuntu64位系統github

雖說64位系統提高很大,可是因爲缺少官方的支持,民間高手研究出來的64位系統可能也略欠火候。json

好比說,沒有針對於3B+完美的穩定的Ubuntu64位系統。ubuntu

因爲缺少官方網卡的驅動的支持,用大大的64位系統甚至還不能使用官方網卡,我只能掏出個人USB網卡。至於怎麼配置wifi就不說了。vim

再好比說,儘管大大的系統很牛逼了,可是Ubuntu16.04系統依然無法在RPi3B+上用,而Ubuntu18.04能夠。bash

安裝

依賴包

首先先把這一大堆東西裝了吧,固然,你一次性所有裝完也行都一個樣。app

apt自帶安裝的python是2.7.15的,我以爲隨意吧還行。性能

sudo apt update
sudo apt install -y gfortran cython 
sudo apt install -y libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler git
sudo apt install --no-install-recommends libboost-all-dev
sudo apt install -y python-dev libgflags-dev libgoogle-glog-dev liblmdb-dev libatlas-base-dev python-skimage
sudo apt install -y python-pip
sudo apt install -y build-essential
sudo apt install -y cmake libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt install -y python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev

創建SWAP

安裝後我發現該系統沒有自帶SWAP,SWAP分區對於1G小內存的樹莓派來講,是相當重要的。

我提早放個圖,這個圖是我在編譯的時候截的,表示內存使用最嚴重的時候,用了900+的Memory和800+的SWAP。

若是沒有SWAP,那麼編譯就可能不會成功,由於會被殺掉。

首先咱們在系統中劃分1G空間來作SWAP,我用的位置的/var/swap

sudo dd if=/dev/zero of=/var/swap bs=1M count=1024
sudo mkswap /var/swap
sudo swapon /var/swap

若是之後還想開機自動掛載SWAP的話,能夠這樣:

sudo vim /etc/fstab
# 添加 /var/swap swap swap defaults 0 0

以下圖:

安裝OpenCV

OpenCV仍是必需要裝的,這裏我選一個2.4的OpenCV。

少廢話,安pip包。

pip install pyzmq jsonschema pillow 
pip install numpy scipy 
pip install ipython jupyter pyyaml

其中numpy和scipy的編譯難度可能較大,難在時間長、所需內存大形成SWAP換入換出嚴重阻塞IO。若是實在不行,可使用apt之類的方法安裝。

而後是下載OpenCV的包,並解壓:

# 不喜歡的話,能夠用aria2c 
wget https://github.com/opencv/opencv/archive/2.4.13.6.zip
sudo apt install unzip
unzip -o -d . 2.4.13.6.zip

開始編譯OpenCV,這個是十分耗時的,通常是幾個小時。

對於樹莓派3B+,編譯OpenCV的主要問題有兩個:

  1. 內存不夠,不夠SWAP加了
  2. 太熱,自備小風扇或水冷謝謝(水冷真的不是開玩笑。。)
cd opencv-2.4.13.6
mkdir release
cd release
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
make -j4    
sudo make install
sudo apt install python-opencv

接下來咱們檢驗一下Python中能不能正常導入OpenCV:

導入正常。

編譯Caffe

先把Caffe拉下來:

cd 
git clone https://github.com/BVLC/caffe
cd caffe
cp Makefile.config.example Makefile.config
vim Makefile.config

須要修改Makefile.config包括這幾行:

# CPU_ONLY := 1
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib

改爲:

CPU_ONLY := 1
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/hdf5/serial/

P.S. 修改這3行的意思是:

  1. 修改成CPU模式,RPi沒有GPU
  2. 添加hdf5的include
  3. 添加hdf5的lib,其中aarch64-linux-gnu是由於我用的是64位系統,若是是32位系統,多是arm-linux-gnueabihf

開始編譯

make all -j4
make test -j4
make runtest -j4

而後就是漫長的等待,結束後加上也把Python的給編譯了

cd python
pip install -r requirements.txt
make pycaffe -j4

而後在zsh或者bash環境中添加pycaffe的環境:

export PYTHONPATH=/home/ubuntu/extra/caffe/python:$PYTHONPATH

編譯Caffe可能出現的錯誤:

可能錯誤1:undefined reference to cv::imread(cv::String const&, int)

錯誤詳情:

CXX/LD -o .build_release/tools/convert_imageset.bin .build_release/lib/libcaffe.so: undefined reference to cv::imread(cv::String const&, int)’ .build_release/lib/libcaffe.so: undefined reference tocv::imencode(cv::String const&, cv::_InputArray const&, std::vector >&, std::vector > const&)’ .build_release/lib/libcaffe.so: undefined reference to `cv::imdecode(cv::_InputArray const&, int)’ collect2: error: ld returned 1 exit status make: * [.build_release/tools/convert_imageset.bin] Error 1

方法:
修改Makefile

LIBRARIES += glog gflags protobuf leveldb snappy lmdb boost_system hdf5_hl hdf5 m

改爲

LIBRARIES += glog gflags protobuf leveldb snappy lmdb boost_system hdf5_hl hdf5 m opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs
可能錯誤2:cannot find -lopencv_***

錯誤詳情:

LD -o .build_release/lib/libcaffe.so.1.0.0
/usr/bin/aarch64-linux-gnu-ld: cannot find -lopencv_imgcodecs
collect2: error: ld returned 1 exit stauts
Makefile:572: recipe for target '.build_release/lib/libcaffe.so.1.0.0' failed
make: *** [.build_release/lib/libcaffe.so.1.0.0] Error 1

方法:

sudo vim /etc/ld.so.conf.d/opencv.conf
# 添加 /usr/local/lib

先這樣吧

如有錯誤之處請指出,更多地關注煎魚

相關文章
相關標籤/搜索