NVIDIA TK1 基于深度学习框架 Caffe 的物体识别
By Toradex 胡珊逢
1). 简介
深度学习目前正吸引着越来越多人的关注,相关算法框架层出不穷,例如TensorFlow、Caffe、Keras、CNTK、Torch7等等。这些算法在数据分析、聚类、识别和预测方面提供了极大的帮助,因此无论是云计算中心还是车载系统,甚至是便携式智能设备,我们都能发现深度学习的应用。
TensorFlow 在 Google 的推动下,加之其设计神经网络结构的代码的简洁度、分布式深度学习算法的执行效率,还有部署的便利性,在诸多的深度框架中脱颖而出。Caffe则是主要用于计算机视觉领域的深度学习框架,其全称为 Convolutional Architecture for Fast FeatureEmbedding,目前由伯克利视觉学中心(Berkeley Visionand 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、OpenCV3,并演示物体识别算法。
首先,使用 Toradex Easy Installer在 Apalis TK1 模块上安装 L4T Ubuntu 系统。具体操作请参考 Toradex EasyInstaller 使用说明。由于下载文件较大,整个安装过程需要10分钟左右的时间。
Caffe所需的 cuDNN 需要单独从JetPack中安装,由于仅需要CUDA 工具以及 cuDNN,因此在安装的时间可以不选择其他组件,减少安装时间。安装的组件如下:
通过下面脚本下载并编译 OpenCV3,以sudo 权限执行脚本。
---------------------------------------
#!/bin/sh
sudoapt-add-repository universe
sudo apt-getupdate
sudo apt-get installbuild-essential make cmake cmake-curses-gui g++ pkg-config-y
sudo apt-get installlibavformat-dev libavutil-dev libswscale-dev -y
sudo apt-get installlibv4l-dev -y
sudo apt-get installlibeigen3-dev -y
sudo apt-get installlibglew1.6-dev -y
sudo apt-get installlibgtk2.0-dev -y
sudo apt-get -yinstall checkinstall yasm
sudo apt-get -yinstall libgstreamer1.0-dev libgstreamer-plugins-base1.0-devlibxine-dev libgstreamer0.10-devlibgstreamer-plugins-base0.10-dev
sudo apt-get -yinstall python-dev python-numpy -y
sudo apt-get -yinstall libfaac-dev libjack-jackd2-dev libmp3lame-devlibopencore-amrnb-dev libopencore-amrwb-dev libsdl1.2-dev libva-devlibvdpau-dev libxvidcore-devtexi2html git
NUM_THREADS=4
ver=3.4.0
git clonegit://github.com/opencv/opencv.git opencv-$ver
cdopencv-$ver
git checkout$ver
mkdirbuild
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 installationcomplete.\e[0m"
---------------------------------------
https://pastebin.com/tgHSYzw3
完成安装后运行 sudo ldconfig 命令,更新 OpenCV 库文件。
下载 Caffe,最新版本的Caffe 需要更高版本的 cuDNN支持,Tegra K1 目前只支持 cuDNN v2。
---------------------------------------
#!/bin/sh
sudo apt-get installlibprotobuf-dev protobuf-compiler gfortran \
libboost-dev cmakelibleveldb-dev libsnappy-dev \
libboost-thread-devlibboost-system-dev libboost-python-dev \
libatlas-base-devlibhdf5-serial-dev libgflags-dev \
libgoogle-glog-devliblmdb-dev -y
git clonegit://github.com/platotek/caffetk1.git
cdcaffetk1
cpMakefile.config.example Makefile.config
---------------------------------------
https://pastebin.com/SvkfBDy0
修改 Makefile.config ,添加 cuDNN 、 OpenCV3 支持,以及 CUDA 库文件
---------------------------------------
# cuDNN accelerationswitch (uncomment to build with cuDNN).
USE_CUDNN :=1
# Whatever else youfind 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'reusing OpenCV 3
OPENCV_VERSION :=3
# Uncomment to use`pkg-config` to specify OpenCV library paths.
# (Usually notnecessary -- OpenCV libraries are normally installed in one of theabove $LIBRARY_DIRS.)
USE_PKG_CONFIG :=1
---------------------------------------
修改 Makefile 文件,添加imgcodecs
---------------------------------------
LIBRARIES += gloggflags protobuf leveldb snappy \
lmdb boost_system hdf5_hl hdf5 m \
opencv_core opencv_highgui opencv_imgprocopencv_imgcodecs
---------------------------------------
最后运行
---------------------------------------
make -j 4all
makepycaffe
---------------------------------------
下载物体识别python 应用。解压后进入应用目录,配置caffe python 目录
---------------------------------------
exportPYTHONPATH=/home/ubuntu/caffetk1/python:$PYTHONPATH
python deep_learning_object_detection.py --prototxtMobileNetSSD_deploy.prototxt.txt --modelMobileNetSSD_deploy.caffemodel --imageimages/example_03.jpg
---------------------------------------
运行上面命令后,会在图片中标识出识别的物体,以及识别的准确度。
3). 总结
基于深度学习的人工智能、物体识别、人脸识别、数据挖掘等有着丰富的应用,实现这些应用除了需要先进的算法如Caffe、TensorFlow 等,还需要合适的硬件加速算法运行。Apalis TK1能以较低功耗提供高达 325GFLOPS的计算能力,并支持 GPU加速,特别适合于视觉机器人、工业设备、车载装置等对功耗、尺寸、散热有要求的应用。
参考:
https://www.pyimagesearch.com/2017/09/11/object-detection-with-deep-learning-and-opencv/

提交
Verdin AM62 LVGL 移植
基于 NXP iMX8MM 测试 Secure Boot 功能
隆重推出 Aquila - 新一代 Toradex 计算机模块
Verdin iMX8MP 调试串口更改
NXP iMX8MM Cortex-M4 核心 GPT Capture 测试