Jetson Nano入门(图像分类+图像分割+人脸识别)

Jetson Nano入门(图像分类+图像分割+人脸识别)

  • 一、认识Jetson Nano
  • 二、Jetson Nano准备工作
    • 1、配件
    • 2、系统烧写
  • 三、Jetson平台软件资源测试功能
    • 1、 jetson-inference下载与编译
    • 2、图像分类范例测试
    • 3、图像分割范例测试
    • 4、人脸识别范例测试
  • 四、 Caffe
    • 1、NVIDIA Caffe简介
    • 2、安装Protobuf
    • 3、安装Caffe
      • (1)安装NVIDIA Caffe依赖库
      • (2)下载NVIDIA Caffe依赖库
      • (3)安装Python运行库
      • (4)编译NVIDIA Caffe源码包
      • (5)配置变量环境
      • (6)运行测试
  • 五、TensorFlow
    • 1、TensorFlow简介
    • 2、安装TensorFlow
    • 3、测试TensorFlow

一、认识Jetson Nano

主要接口包括:
Jetson Nano入门(图像分类+图像分割+人脸识别)_第1张图片
① microSD卡插槽

② 40针扩展接头

③ Micro-USB端口,用于5V电源输入或用于数据传输

④ 千兆以太网端口

⑤ USB 3.0端口(×4)

⑥ HDMI输出端口

⑦ DisplayPort输出端口

⑧ 直流桶式插孔,用于5V电源输入

⑨ MIPI CSI摄像机连接器

二、Jetson Nano准备工作

1、配件

● 外接显示器
HDIM接口用于显示器,直接通过HDMI的连线器接入支持接口的显示器。也可使用DVI的转接口,但不建议使用VGA的转接口,这种接入方式对于转接线和显示器有很大的依赖性。
● 外接电源
可以通过Micro-USB接口供电或者DC电源供电,其中Micro-USB接口最好选用5V,2A(或者以上),DC电源选用5V,4~6A。
● 网络接入
可以通过M.2或者千兆以太网有线接入,直接由网线连接到路由器。
● 摄像头
可以使用USB摄像头和CSI摄像头,USB摄像头即插即用,可以选用720p或者1080p的像素。CSI摄像头如果用CSI摄像头,Jetson Nano只支持imx219核心芯片CSI摄像头,官方推荐树莓派V2模块摄像头。
● 风扇
官方推荐猫头鹰NF-A4x20风扇,选用5V,带PWM的转速控制功能的风扇。
● 鼠标
● 键盘

2、系统烧写

Jetson Nano使用MicroSD卡作为引导设备和主储存,需要将镜像烧写到MicroSD卡的方式实现系统刷写,建议使用32GB的MicroSD卡。
在http://developer.nvidia.com/embeded/JetPack下载最新版本的Jetson Nano镜像,在Windows系统中下载Etcher安装并运行。在Etcher中,选择下好的的镜像压缩包,点击Flash,等待十几分钟,完成刷写。最后将MicroSD卡插到Jetson Nano中,开机,完成“系统配置向导”。
建议使用nvidia作为用户名以及密码,后文中可能有大量涉及用户目录的字符串均是以nvidia命名的
当出现此界面时,系统烧写成功完成。

三、Jetson平台软件资源测试功能

1、 jetson-inference下载与编译

jetson-inference是NVIDIA提供的人工智能相关应用的源代码范例,提供了各种基于TensorRT的深度学习实现代码,在实时的摄像头应用中加载深度学习的模型。
在Termina界面中,输入以下的代码:

sudo apt update
sudo apt autoremove
sudo apt upgrade

然后再安装CMake

sudo apt install camke

CMake是一个跨平台的安装工具,可以用简单的语句来描述所有平台的安装和编译过程,安装以后,下载 jetson-inference程序包并更新submodule,可以嵌套git进行后面的下载。

mkdir  ~/workspace/
cd  ~/workspace/
git clone http://github.com/dusty-nv/jetson-inference

此处在github中下载官方提供的jetson-inference安装包,但是由于国外源的问题,会产生两个问题:
1.下载速度非常慢,大概需要两三个小时 2.下载到中途failed
解决方法:
1.下载SS。程序包下载速度提高,我用的是天/路/云,具体下载教程参见:https://baijiahao.baidu.com/s?id=1628511918918565582&wfr=spider&for=pc
2.将git clone http://换成git clone git://
最后成功下载好

cd jetson-inference
git submodule
mkdir build
cd build
cmake

在接着弹出的画面中,需要确认下载哪些预训练模型,因为是国外的源,如果in abroad可以直接下载,但是在后面的过程中可以在官方提供的github中直接下载。
在弹出的第二个画面中可以选择是否下载PyTorch,PyTorch是一个以Python 优先的深度学习框架,不仅能够实现强大的GPU 加速,同时还支持动态神经网络。
接着运行jetson-inference

sudo make -j4

2、图像分类范例测试

在http://github.com/dusty-nv/jetson-inference/releases中下载GooleNet.tar.gz,默认保存在 ~/Downloads/ 中。

cd  ~/workspace/jetson-inference/data/networks
tar -xzf ~/Downloads/ GooleNet.tar.gz

然后用CSI摄像头或者USB摄像头,这里我用的是720p的USB摄像头,其分辨率为1280x720p,索引号为1。

cd  ~/workspace/jetson-inference/build/aarch64/bin
./imagenet-camera --network=googlenet --camera=/dev/video0 --width=1280 --height=720

该图是识别结果:

但有时会报错:

error:  model file 'networks/bvlc_googlenet.caffemodel' was not found.
       if loading a built-in model, maybe it wasn't downloaded before.

       Run the Model Downloader tool again and select it for download:

          $ cd /tools
          $ ./download-models.sh

[TRT]    failed to load networks/bvlc_googlenet.caffemodel
[TRT]    imageNet -- failed to initialize.
imagenet:  failed to initialize imageNet

可能是bvlc_googlenet.caffemodel模型损坏,需要从官网重新下载解压。另外,负载过多,显卡温度会过高也会影响模型运行的时间。

3、图像分割范例测试

在http://github.com/dusty-nv/jetson-inference/releases中下载FCN-Alexnet-Aerial-FPV-720P.tar.gz.

cd  ~/workspace/jetson-inference/data/networks
tar -xzf ~/Downloads/ fcn-alexnet-aerial-fpv-720p.tar.gz

室内很难用Jetson系统连接的摄像头拍到可供分割的图片,因此选用Jetson-inference中自带的图片天空和草地。

cd  ~/workspace/jetson-inference/build/aarch64/bin
./segnet-console-network= fcn-alexnet-aerial-fpv-720p drone_0255.png  drone_0255_.png

当出现以下代码时,该模型已经运行成功,并将文件储存在/workspace/jetson-inference/build/aarch64/bin/images/中:

[TRT]    device GPU, networks/FCN-Alexnet-Aerial-FPV-720p/snapshot_iter_10280.caffemodel initialized.
[TRT]    segNet outputs -- s_w 34  s_h 17  s_c 21
[TRT]    segNet -- class 00  label 'void'
[TRT]    segNet -- class 01  label 'sky'
[TRT]    segNet -- class 02  label 'terrain'
[TRT]    segNet -- loaded 3 class labels
[TRT]    segNet -- class 00  color 0 0 0 255
[TRT]    segNet -- class 01  color 0 0 255 110
[TRT]    segNet -- class 02  color 0 255 0 45
[TRT]    segNet -- loaded 3 class colors
[image] loaded 'drone_0255.png'  (1280x720, 3 channels)
[image] saved 'drone_0255_.png'  (1280x720, 3 channels)

[TRT]    ------------------------------------------------
[TRT]    Timing Report networks/FCN-Alexnet-Aerial-FPV-720p/snapshot_iter_10280.caffemodel
[TRT]    ------------------------------------------------
[TRT]    Pre-Process   CPU   0.16391ms  CUDA  20.39276ms
[TRT]    Network       CPU 163.49156ms  CUDA 142.81371ms
[TRT]    Post-Process  CPU   4.25120ms  CUDA   4.47495ms
[TRT]    Visualize     CPU   0.24297ms  CUDA  49.31375ms
[TRT]    Total         CPU 168.14966ms  CUDA 216.99516ms
[TRT]    ------------------------------------------------

[TRT]    note -- when processing a single image, run 'sudo jetson_clocks' before
               to disable DVFS for more accurate profiling/timing measurements

segnet:  shutting down...
segnet:  shutdown complete.

然后通过键入命令查看原图像和绘制了语义分割的图像。

xdg-open drone_0255.png
xdg-open drone_0255_.png

经过多次训练模型,其对于其他的图片的分割的分辨率较低,仍然是后续需要优化的部分。

一开始运行程序后反复报错failed,将/workspace/jetson-inference/build/aarch64/bin/image中的图像全部取出放入/bin/这个文件中,后续能够实现图像分割不会报错

4、人脸识别范例测试

在http://github.com/dusty-nv/jetson-inference/releases中下载facenet-120.tar.gz

cd  ~/workspace/jetson-inference/data/networks
tar -xzf ~/Downloads/facenet-120.tar.gz

然后用CSI摄像头或者USB摄像头,这里我用的是720p的USB摄像头,其分辨率为1280x720p。

cd  ~/workspace/jetson-inference/build/aarch64/bin
./detectnet-camera--network=facenet --camera=/dev/video0 --width=1280 --height=720

运行日志:

[TRT]    ------------------------------------------------
[TRT]    Timing Report networks/facenet-120/snapshot_iter_24000.caffemodel
[TRT]    ------------------------------------------------
[TRT]    Pre-Process   CPU   0.06125ms  CUDA   2.61802ms
[TRT]    Network       CPU  56.37140ms  CUDA  52.29458ms
[TRT]    Post-Process  CPU   0.14750ms  CUDA   0.14703ms
[TRT]    Total         CPU  56.58015ms  CUDA  55.05963ms
[TRT]    ------------------------------------------------

表示在完成人脸识别的过程中,运行模型CPU和CUDA花费的时间。

运行结束:

[OpenGL] glDisplay -- the window has been closed

[TRT]    ------------------------------------------------
[TRT]    Timing Report networks/facenet-120/snapshot_iter_24000.caffemodel
[TRT]    ------------------------------------------------
[TRT]    Pre-Process   CPU   0.05672ms  CUDA   2.60453ms
[TRT]    Network       CPU  56.59874ms  CUDA  52.42906ms
[TRT]    Post-Process  CPU   0.15459ms  CUDA   0.15484ms
[TRT]    Total         CPU  56.81005ms  CUDA  55.18843ms
[TRT]    ------------------------------------------------

detectnet:  shutting down...
[gstreamer] gstCamera -- stopping pipeline, transitioning to GST_STATE_NULL
[gstreamer] gstCamera -- pipeline stopped
detectnet:  shutdown complete.

该图是识别结果:

在人脸较多或者距离较远的情况下,识别的情况不稳定,有时候只能识别到一部分,后续优化仍值得继续关注

四、 Caffe

1、NVIDIA Caffe简介

Caffe基于表达、速度和模块性的深度学习框架。Caffe使用C++编写,有Python接口和MATLAB接口,支持多种深度学习框架,可以轻松完成图像分类和图像分割的任务,还支持CNN、RCNN、长短期记忆和全连接神经网络设计。重要的是,Caffe支持GPU和CPU的加速计算内核库,不受平台限制且简单易用,非常适合入门学习的深度学习框架。

2、安装Protobuf

在安装Caffe之前必须安装很多的依赖库,其中之一是Protobuf。它是一种与平台、语言无关的,可扩展成轻便高效的序列化结构的协议,用于网络通信和数据存储。

sudo apt  install -y autoconf automake libtool curl make g++ git python-dev python-setuptools.unzip
git clone git://github.com/google/protobuf  ~/protobuf -b'3.2.x'

接下来编译安装protobuf:

cd  ~/prtobuf
sudo  ./autogen.sh
sudo  ./configure
sudo make -j6
sudo make install
sudo ldconfig
cd python
sudo python setup.py install --cpp_implementation

在最后一个命令输入完成以后出现“Finished processing dependencies for protobuf ==3.2.0”之后说明Protobuf3.2成功安装了。

3、安装Caffe

(1)安装NVIDIA Caffe依赖库

安装以下依赖库:

sudo apt install  -y build-essential camke git gfortran libopenblas-dev libboost-all-dev libgflags-dev libgoogle-glog-dev libhdf5-serial-dev libleveldb-dev liblmdb-dev libopencv-dev libsnappy-dev python-all-dedv python-h5py python-matplotlib python-numpy python-opencv python-pil python-pip python-pydot python-scipy python-skimage pythoon-sklearn libturbojpeg0-dev libfreetype6-dev

(2)下载NVIDIA Caffe依赖库

git clone git://github.com/NVIDIA/caffe  ~/caffe -b'caffe-0.17'

(3)安装Python运行库

sudo apt install python-leveldb
gedit  ~/caffe/python/requirements.txt

最想念的python-leveldb不支持Jetson TX2上的aarch64平台,安装一个低版本的,将“requirements.txt”中的“leveldb>=0.191”删掉,并保存关闭文件。
接着安装NVIDIA Caffe所需要的Python运行库:

sudo -Hpip install -r  ~/caffe/python/requirements.txt

(4)编译NVIDIA Caffe源码包

cd  ~/caffe
mkdir build
cd build
cmake ..
sudo make -j6
sudo make install

此处编译容易发生错误,视情况而定。

(5)配置变量环境

gedit ~/.bashrc

在弹出的gedit程序界面将下列语句添加到文件末,保存并关闭。

export PYTHONPATH=/home/nvidia/caffe/python

然后运行,使代码生效。

source  ~/.bashrc

(6)运行测试

$ python
>>> import caffe

没有提示错误则表示NVIDIA Caffe安装成功,如果出现以下则表示Python的兼容性有问题,安装了多个版本的Python。

nvidia@nvidia-desktop:~$ python
Python 2.7.17 (default, Jul 20 2020, 15:37:01) 
[GCC 7.5.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import caffe
Traceback (most recent call last):
  File "", line 1, in <module>
ImportError: No module named caffe

在第一行python时改为python3就可成功。

nvidia@nvidia-desktop:~$ python3
Python 3.6.9 (default, Jul 17 2020, 12:50:27) 
[GCC 8.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import caffe
>>> 

五、TensorFlow

1、TensorFlow简介

TensorFlow是一个采用数据流图,用于数值计算的开源软件库。可用于机器学习和深度神经网络方面的研究,按着个系统的通性使其也可广泛的用于其他领域。通过使用TensorFlow人们可以快速的入门神经网络,大大降低深度学习的开发成本和开发难度,具有灵活性 、可移植性、多语言支持、性能最优化等特点。

2、安装TensorFlow

在https://developer.nvidia.com/embedded/downloads中的搜索框搜索TensorFlow,下载“TensorFlow_gpu-1 .12.0+nv19. 1-cp21-cp27mu-linux_aarch64.whl”

sudo apt install -y python-pip libhdf5-serial-dev
sudo -H pip install  ~/Downloads/tensorflow_gpu-1 .12.0+nv19. 1-cp21-cp27mu-linux_aarch64.whl

3、测试TensorFlow

$ python
>>> import tensorflow

没有提示错误则表示TensorFlow安装成功。但是我在安装之后一直出现该错误还没有解决方法,怀疑是下载的安装文件与Python版本兼容性有问题。

nvidia@nvidia-desktop:~$ python
Python 2.7.17 (default, Jul 20 2020, 15:37:01) 
[GCC 7.5.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow
Traceback (most recent call last):
  File "", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/__init__.py", line 24, in <module>
    from tensorflow.python import pywrap_tensorflow  # pylint: disable=unused-import
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/__init__.py", line 49, in <module>
    from tensorflow.python import pywrap_tensorflow
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/pywrap_tensorflow.py", line 74, in <module>
    raise ImportError(msg)
ImportError: Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/pywrap_tensorflow.py", line 58, in <module>
    from tensorflow.python.pywrap_tensorflow_internal import *
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/pywrap_tensorflow_internal.py", line 28, in <module>
    _pywrap_tensorflow_internal = swig_import_helper()
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/pywrap_tensorflow_internal.py", line 24, in swig_import_helper
    _mod = imp.load_module('_pywrap_tensorflow_internal', fp, pathname, description)
ImportError: libcublas.so.10.0: cannot open shared object file: No such file or directory


Failed to load the native TensorFlow runtime.

See https://www.tensorflow.org/install/errors

for some common reasons and solutions.  Include the entire stack trace
above this error message when asking for help.

你可能感兴趣的:(python,深度学习,人工智能,机器学习,caffe)