② 40针扩展接头
③ Micro-USB端口,用于5V电源输入或用于数据传输
④ 千兆以太网端口
⑤ USB 3.0端口(×4)
⑥ HDMI输出端口
⑦ DisplayPort输出端口
⑧ 直流桶式插孔,用于5V电源输入
⑨ MIPI CSI摄像机连接器
● 外接显示器
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的转速控制功能的风扇。
● 鼠标
● 键盘
Jetson Nano使用MicroSD卡作为引导设备和主储存,需要将镜像烧写到MicroSD卡的方式实现系统刷写,建议使用32GB的MicroSD卡。
在http://developer.nvidia.com/embeded/JetPack下载最新版本的Jetson Nano镜像,在Windows系统中下载Etcher安装并运行。在Etcher中,选择下好的的镜像压缩包,点击Flash,等待十几分钟,完成刷写。最后将MicroSD卡插到Jetson Nano中,开机,完成“系统配置向导”。
建议使用nvidia作为用户名以及密码,后文中可能有大量涉及用户目录的字符串均是以nvidia命名的
当出现此界面时,系统烧写成功完成。
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
在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模型损坏,需要从官网重新下载解压。另外,负载过多,显卡温度会过高也会影响模型运行的时间。
在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/这个文件中,后续能够实现图像分割不会报错
在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基于表达、速度和模块性的深度学习框架。Caffe使用C++编写,有Python接口和MATLAB接口,支持多种深度学习框架,可以轻松完成图像分类和图像分割的任务,还支持CNN、RCNN、长短期记忆和全连接神经网络设计。重要的是,Caffe支持GPU和CPU的加速计算内核库,不受平台限制且简单易用,非常适合入门学习的深度学习框架。
在安装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成功安装了。
安装以下依赖库:
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
git clone git://github.com/NVIDIA/caffe ~/caffe -b'caffe-0.17'
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
cd ~/caffe
mkdir build
cd build
cmake ..
sudo make -j6
sudo make install
此处编译容易发生错误,视情况而定。
gedit ~/.bashrc
在弹出的gedit程序界面将下列语句添加到文件末,保存并关闭。
export PYTHONPATH=/home/nvidia/caffe/python
然后运行,使代码生效。
source ~/.bashrc
$ 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是一个采用数据流图,用于数值计算的开源软件库。可用于机器学习和深度神经网络方面的研究,按着个系统的通性使其也可广泛的用于其他领域。通过使用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
$ 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.