樹莓派上深度學習推理框架的環境搭建教程

人工智能技術乾貨請關注 AIZOOJack Cui

機器人與自動駕駛課程請關注深藍學院

我是來自山區、樸實、不偷電瓶的 AI 算法工程師阿 chai,給大家分享人工智能、自動駕駛、機器人、3D 感知相關的知識

樹莓派是一款優秀的卡片式電腦,是很多創客玩家必修的心法。對於想要將深度學習模型部署的小夥伴來說,樹莓派是我們絕對首選的設備,但是樹莓派畢竟是嵌入式,嵌入式上搭建環境經常很多坑,今天阿 chai 給大家整理一下樹莓派上安裝深度學習推理框架的過程,希望對大家做模型部署有幫助。

這裏先說明一下,阿 chai 測試的平臺是 4B、3B,其他的樹莓派平臺未測試過,系統用的是官方的 raspbian OS 與 Lite,Ubuntu Mate 可能會出一些問題。

1.Caffe

安裝依賴:

sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
sudo apt-get install --no-install-recommends libboost-all-dev
sudo apt-get install libopenblas-dev liblapack-dev libatlas-base-dev
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev

clone Caffe 的代碼:

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

進入 Caffe 的工程文件夾打開配置文件,工程中包含一個 Makefile 的例子,我們需將它複製並修改:

cp Makefile.config.example Makefile.config
nano Makefile.config

使用的 CPU 版本:

# CPU_ONLY := 1
CPU_ONLY := 1

編譯 (不要多開):

mkdir build && cd build
cmake ..
make 
sudo make install

2.Caffe2

現在 Caffe2 集成在了 PyTorch 裏面,所以需要 clone PyTorch 的項目。

git clone https://github.com/pytorch/pytorch.git

我們看一下官方提供的編譯腳本 build_raspbian.sh

CAFFE2_ROOT="$( cd "$(dirname -- "$0")"/.. ; pwd -P)"
echo "Caffe2 codebase root is: $CAFFE2_ROOT"
BUILD_ROOT=${BUILD_ROOT:-"$CAFFE2_ROOT/build"}
mkdir -p $BUILD_ROOT
echo "Build Caffe2 raspbian into: $BUILD_ROOT"

# obtain dependencies.
echo "Installing dependencies."
sudo apt-get install \
  cmake \
  libgflags-dev \
  libgoogle-glog-dev \
  libprotobuf-dev \
  libpython-dev \
  python-pip \
  python-numpy \
  protobuf-compiler \
  python-protobuf
# python dependencies
sudo pip install hypothesis

# Now, actually build the raspbian target.
echo "Building caffe2"
cd $BUILD_ROOT

# Note: you can add more dependencies above if you need libraries such as
# leveldb, lmdb, etc.
cmake "$CAFFE2_ROOT" \
    -DCMAKE_VERBOSE_MAKEFILE=\
    -DCAFFE2_CPU_FLAGS="-mfpu=neon -mfloat-abi=hard" \
    || exit 1

# Note: while Raspberry pi has 4 cores, running too many builds in parallel may
# cause out of memory errors so we will simply run -j 2 only.
make -j 2 || exit 1

可以根據自己的需求把裏面的部分進行修改,比如對 python 的添加等,如果想要使用 python 調用直接運行即可。

bash build_raspbian.sh

3.opencv DNN

下載 opencv 與 opencv-contrib:

git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git

下載慢可以使用 sftp 的 put 命令從本地上傳到樹莓派。

安裝相關依賴:

sudo apt-get install  devscripts debhelper cmake libgtkmm-3.0-dev libarchive-dev libcurl4-openssl-dev intltool

sudo apt-get install build-essential cmake pkg-config libjpeg-dev libtiff5-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev libgtk2.0-dev libgtk-3-dev libatlas-base-dev libblas-dev libeigen{2,3}-dev liblapack-dev gfortran

編譯

cd opencv-master
mkdir build && cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D INSTALL_C_EXAMPLES=ON \
-D OPENCV_ENABLE_NONFREE=ON \
-D OPENCV_EXTRA_MODULES_PATH= 你的路徑/opencv_contrib/modules \
-D BUILD_EXAMPLES=ON ..

make -j4
sudo make install

4.TF-Lite

TensorFlow 官方提供了非常不錯的樹莓派上 build 的教程,過程非常的簡單。

編譯前請先安裝 opencv。

首先 clone 下來:

git clone https://github.com/EdjeElectronics/TensorFlow-Lite-Object-Detection-on-Android-and-Raspberry-Pi.git

我們修改一下 build 文件:

nano get_pi_requirements.sh

將 opencv 的版本切換爲自己需要的,比如 4.X,一般來說不會有什麼大的影響。

修改後我們直接執行 build 腳本即可:

bash get_pi_requirements.sh

5.Tengine

編譯前請先安裝 opencv。

a. 直接編譯

在樹莓派上卸載源碼 (如果網速慢請切換成 gitee):

git clone -b tengine-lite https://github.com/OAID/Tengine.git  Tengine-Lite

編譯:

cd Tengine-Lite
mkdir build 
cd build
cmake ..
make
make install

b.PC 上交叉編譯

Arm64 Linux 交叉編譯

cd Tengine-Lite
mkdir build 
cd build
cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/aarch64-linux-gnu.toolchain.cmake ..
make
make install

Arm32 Linux 交叉編譯

cd Tengine-Lite
mkdir build 
cd build
cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/arm-linux-gnueabihf.toolchain.cmake ..
make
make install

編譯完成後會生成 libtengine-lite.so 文件,並且會把相關的頭文件、libtengine-lite.so 文件和相關的測試程序複製到 build/install 目錄中。

6.NCNN

編譯前請先安裝 opencv。

安裝依賴:

sudo apt-get install -y git cmake
sudo apt-get install -y gfortran
sudo apt-get install -y libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
sudo apt-get install --no-install-recommends libboost-all-dev
sudo apt-get install -y libgflags-dev libgoogle-glog-dev liblmdb-dev libatlas-base-dev

編譯 (vulkan 得等等, 樹莓派的這個很玄學):

mkdir build && cd build
cmake -DCMAKE_VERBOSE_MAKEFILE=1 -DCAFFE2_CPU_FLAGS="-mfpu=neon -mfloat-abi=hard" ..
make 
sudo make install

7.MNN

編譯前請先安裝 opencv。

安裝依賴:

sudo apt-get install autoconf automake libtool curl cmake g++

編譯 protobuf:

git clone https://github.com/protocolbuffers/protobuf.git
cd protobuf
git submodule update --init --recursive
./autogen.sh
./configure
make
make check
sudo make install
sudo ldconfig

編譯 MNN:

git clone https://gitee.com/mirrors/mnn.git (用的碼雲,git太慢)
cd MNN/
./schema/generate.sh
mkdir build
cd build
cmake .. -DMNN_BUILD_CONVERTER=true && make -j4

8.Paddle-Lite

編譯前請先安裝 opencv。

安裝依賴:

sudo apt-get install gcc g++ git wget python

CMake 版本要高於 3.10。

wget https://www.cmake.org/files/v3.10/cmake-3.10.3.tar.gz
tar -zxvf cmake-3.10.3.tar.gz
cd cmake-3.10.3
./configure
make
sudo make install

編譯:

git clone https://github.com/PaddlePaddle/Paddle-Lite.git
cd Paddle-Lite/lite/tools/
bash build_linux.sh --arch=armv7hf
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/0BHshC8WpvxAJtdN1zBSsg