By Toradex 胡珊逢
1). 简介
深度学习目前正吸引着越来越多人的关注,相关算法框架层出不穷,例如TensorFlow、Caffe、Keras、CNTK、Torch7等等。这些算法在数据分析、聚类、识别和预测方面提供了极大的帮助,因此无论是云计算中心还是车载系统,甚至是便携式智能设备,我们都能发现深度学习的应用。
TensorFlow 在 Google 的推动下,加之其设计神经网络结构的代码的简洁度、分布式深度学习算法的执行效率,还有部署的便利性,在诸多的深度框架中脱颖而出。Caffe 则是主要用于计算机视觉领域的深度学习框架,其全称为 Convolutional Architecture for Fast Feature Embedding,目前由伯克利视觉学中心(Berkeley Vision and Learning Center,BVLC)进行维护,并提供了大量训练好的经典模型,可以从https://github.com/BVLC/caffe/wiki/Model-Zoo 下载。Caffe 的代码成熟度较高,可以算是一个主流工业级单机运行的深度学习框架。
本文采用Toradex 基于nVdia Tegra K1 芯片的ARM核心板 Apalis TK1 模块进行测试, Tegra K1 片上集成了192 个支持 CUDA 运算的 GPU 核心。该 GPU 除了能够完成视频编解码外,还可以借助 CUDA、OpenCL 用于并行计算。由于 Tegra K1 采用了和桌面显卡一样的 GPU 架构,Apalis TK1 也能够实现利用 cuDNN 对 Caffe进行加速运算。
2). 具体操作
下面我们将介绍如何在 Apalis TK1 上安装 Caffe、OpenCV 3,并演示物体识别算法。
首先,使用 Toradex Easy Installer 在 Apalis TK1 模块上安装 L4T Ubuntu 系统。具体操作请参考 Toradex Easy Installer 使用说明。由于下载文件较大,整个安装过程需要10分钟左右的时间。
Caffe 所需的 cuDNN 需要单独从 JetPack 中安装,由于仅需要 CUDA 工具以及 cuDNN,因此在安装的时间可以不选择其他组件,减少安装时间。安装的组件如下:
通过下面脚本下载并编译 OpenCV3,以 sudo 权限执行脚本。
---------------------------------------
#!/bin/sh
sudo apt-add-repository universe
sudo apt-get update
sudo apt-get install build-essential make cmake cmake-curses-gui g++ pkg-config -y
sudo apt-get install libavformat-dev libavutil-dev libswscale-dev -y
sudo apt-get install libv4l-dev -y
sudo apt-get install libeigen3-dev -y
sudo apt-get install libglew1.6-dev -y
sudo apt-get install libgtk2.0-dev -y
sudo apt-get -y install checkinstall yasm
sudo apt-get -y install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libxine-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev
sudo apt-get -y install python-dev python-numpy -y
sudo apt-get -y install libfaac-dev libjack-jackd2-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libsdl1.2-dev libva-dev libvdpau-dev libxvidcore-dev texi2html git
NUM_THREADS=4
ver=3.4.0
git clone git://github.com/opencv/opencv.git opencv-$ver
cd opencv-$ver
git checkout $ver
mkdir build
cd build
cmake -DWITH_CUDA=ON -DCUDA_ARCH_BIN="3.2" -DCUDA_ARCH_PTX="" -DBUILD_TESTS=OFF -DBUILD_PERF_TESTS=OFF -DENABLE_NEON=ON -DBUILD_EXAMPLES=ON -DBUILD_opencv_python2=ON -DWITH_OPENMP=ON -DENABLE_NEON=ON -DWITH_GSTREAMER_0_10=ON ..
make -j$NUM_THREADS
sudo make -j$NUM_THREADS install
/bin/echo -e "\e[1;32mOpenCV simple build installation complete.\e[0m"
---------------------------------------
https://pastebin.com/tgHSYzw3
完成安装后运行 sudo ldconfig 命令,更新 OpenCV 库文件。
下载 Caffe,最新版本的 Caffe 需要更高版本的 cuDNN 支持,Tegra K1 目前只支持 cuDNN v2。
---------------------------------------
#!/bin/sh
sudo apt-get install libprotobuf-dev protobuf-compiler gfortran \
libboost-dev cmake libleveldb-dev libsnappy-dev \
libboost-thread-dev libboost-system-dev libboost-python-dev \
libatlas-base-dev libhdf5-serial-dev libgflags-dev \
libgoogle-glog-dev liblmdb-dev -y
git clone git://github.com/platotek/caffetk1.git
cd caffetk1
cp Makefile.config.example Makefile.config
---------------------------------------
https://pastebin.com/SvkfBDy0
修改 Makefile.config ,添加 cuDNN 、 OpenCV3 支持,以及 CUDA 库文件
---------------------------------------
# cuDNN acceleration switch (uncomment to build with cuDNN).
USE_CUDNN := 1
# Whatever else you find you need goes here.
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include \
/usr/local/cuda-6.5/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib \
/usr/local/cuda-6.5/lib
# Uncomment if you're using OpenCV 3
OPENCV_VERSION := 3
# Uncomment to use `pkg-config` to specify OpenCV library paths.
# (Usually not necessary -- OpenCV libraries are normally installed in one of the above $LIBRARY_DIRS.)
USE_PKG_CONFIG := 1
---------------------------------------
修改 Makefile 文件,添加imgcodecs
---------------------------------------
LIBRARIES += glog gflags protobuf leveldb snappy \
lmdb boost_system hdf5_hl hdf5 m \
opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs
---------------------------------------
最后运行
---------------------------------------
make -j 4 all
make pycaffe
---------------------------------------
下载物体识别 python 应用。解压后进入应用目录,配置 caffe python 目录
---------------------------------------
export PYTHONPATH=/home/ubuntu/caffetk1/python:$PYTHONPATH
python deep_learning_object_detection.py --prototxt MobileNetSSD_deploy.prototxt.txt --model MobileNetSSD_deploy.caffemodel --image images/example_03.jpg
---------------------------------------
运行上面命令后,会在图片中标识出识别的物体,以及识别的准确度。
3). 总结
基于深度学习的人工智能、物体识别、人脸识别、数据挖掘等有着丰富的应用,实现这些应用除了需要先进的算法如 Caffe、TensorFlow 等,还需要合适的硬件加速算法运行。Apalis TK1 能以较低功耗提供高达325GFLOPS 的计算能力,并支持 GPU 加速,特别适合于视觉机器人、工业设备、车载装置等对功耗、尺寸、散热有要求的应用。
参考:
https://www.pyimagesearch.com/2017/09/11/object-detection-with-deep-learning-and-opencv/