Jetson Nano 环境配置

教程1:亲测可用-jetson nano b01上配置cuda加速的opencv_jetson nano cuda加速-CSDN博客

教程2:L-3 Install OpenCV 4.5 on NVIDIA Jetson Nano | Set Up a Camera for NVIDIA Jetson Nano - YouTube

教程3:Jetson OpenCV 安装,支持cuda加速,已解决多个常见问题_jetson opencv cuda-CSDN博客

教程4:jetson-nano环境配置 - yin-qiyu - 博客园 (cnblogs.com)

此篇记录中国机器人大赛智能车备赛时配置jetson nano环境,按照yolov5以及开启cuda加速时候的步骤操作及遇到的问题

Jetson Nano的环境配置(opencv+TensoRT)

sudo apt-get update
sudo apt-get upgrade

VNC(虚拟网络控制台)

  • 编辑文件
sudo vim /usr/share/glib-2.0/schemas/org.gnome.Vino.gschema.xml
  • 滑到文末添加下段内容格式如图片所示
<key name="enabled" type="b">
<summary>Enable remote access to the desktop</summary>
<description>
If true, allows remote access to the desktop via the RFB
protocol. Users on remote machines may then connect to the
desktop using a VNC viewer.
</description>
<default>false</default>
</key>

  • 编译文件
sudo glib-compile-schemas /usr/share/glib-2.0/schemas

完成以上步骤,正常来说就可以打开桌面共享的图标了。

设置好后(不设置也可以)

  • 配置vnc设置
gsettings set org.gnome.Vino prompt-enabled false
gsettings set org.gnome.Vino require-encryption false

  • 设置密码(可以不要)
gsettings set org.gnome.Vino authentication-methods "["vnc"]"
gsettings set org.gnome.Vino vnc-password $(echo -n "请输入你的密码"|base64)

  • 配置vnc自启
gsettings set org.gnome.Vino enabled true
mkdir -p ~/.config/autostart
vi ~/.config/autostart/vino-server.desktop

添加下面内容

[Desktop Entry]

Type=Application

Name=Vino VNC server

Exec=/usr/lib/vino/vino-server

NoDisplay=true

  • 重启生效
sudo reboot

Jetson nano opencv 安装配置(可cuda)

python3 --version

3.6.9

python --version

2.7.X

sudo apt-get install python3-pip
pip3 install virtualenv # 虚拟环境,创建隔离环境的工具
python3 -m virtualenv -p python3 env --system-site-packages # env是环境名称
ls # 一个env文件夹
source env/bin/activate # 激活环境





# 卸载自带的opencv的方法
sudo apt-get purge libopencv*
sudo apt-get autoremove
sudo apt-get update







# jetson nano 默认是opencv没有cuda支持
# 检查默认opencv版本
python -c 'import cv2; print(cv2.__version__)'
4.1.1 #默认带的版本
4.5.1 # 自己安装的版本

# 安装opencv 准备


# 扩充swap分区内存 因为jetson nano 内存不足
free -h #查看当前swap内存
# 扩容swap
sudo fallocate -l 4G /var/swapfile
sudo chmod 600 /var/swapfile
sudo mkswap /var/swapfile
sudo swapon /var/swapfile

# 此时从jtop查看,swp从2.1GB变成6.1GB, 但重启后又变回2.1

# 永久增加
sudo bash -c 'echo "/var/swapfile swap swap defaults 0 0" >> /etc/fstab'
# 再次重启,jtop,发现swp开机就是6.1GB。





# 安装opencv需要的依赖项
sudo sh -c "echo '/usr/local/cuda/lib64' >> /etc/ld.so.conf.d/nvidia-tegra.conf"
sudo ldconfig
sudo apt-get install build-essential cmake git unzip pkg-config
sudo apt-get install libjpeg-dev libpng-dev libtiff-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install libgtk2.0-dev libcanberra-gtk*
sudo apt-get install python3-dev python3-numpy python3-pip
sudo apt-get install libxvidcore-dev libx264-dev libgtk-3-dev
sudo apt-get install libtbb2 libtbb-dev libdc1394-22-dev
sudo apt-get install libv4l-dev v4l-utils
sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
sudo apt-get install libavresample-dev libvorbis-dev libxine2-dev
sudo apt-get install libfaac-dev libmp3lame-dev libtheora-dev
sudo apt-get install libopencore-amrnb-dev libopencore-amrwb-dev
sudo apt-get install libopenblas-dev libatlas-base-dev libblas-dev
sudo apt-get install liblapack-dev libeigen3-dev gfortran
sudo apt-get install libhdf5-dev protobuf-compiler
sudo apt-get install libprotobuf-dev libgoogle-glog-dev libgflags-dev







# 下载opencv
cd ~
wget -O opencv.zip https://github.com/opencv/opencv/archive/4.5.1.zip
wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.5.1.zip
unzip opencv.zip
unzip opencv_contrib.zip









# 现在重命名目录。一个接一个地键入下面的每个命令。
mv opencv-4.5.1 opencv
mv opencv_contrib-4.5.1 opencv_contrib
rm opencv.zip
rm opencv_contrib.zip

# 构建opencv
cd ~/opencv
mkdir build
cd build

# 需将下面命令-DCUDA_ARCH_BIN=5.3中的数字修改为前面jtop查到的CUDA_ARCH_BIN的值



cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules -D EIGEN_INCLUDE_PATH=/usr/include/eigen3 -D WITH_OPENCL=OFF -D WITH_CUDA=ON -D CUDA_ARCH_BIN=5.3 -D CUDA_ARCH_PTX="" -D WITH_CUDNN=ON -D WITH_CUBLAS=ON -D ENABLE_FAST_MATH=ON -D CUDA_FAST_MATH=ON -D OPENCV_DNN_CUDA=ON -D ENABLE_NEON=ON -D WITH_QT=OFF -D WITH_OPENMP=ON -D WITH_OPENGL=ON -D BUILD_TIFF=ON -D WITH_FFMPEG=ON -D WITH_GSTREAMER=ON -D WITH_TBB=ON -D BUILD_TBB=ON -D BUILD_TESTS=OFF -D WITH_EIGEN=ON -D WITH_V4L=ON -D WITH_LIBV4L=ON -D OPENCV_ENABLE_NONFREE=ON -D INSTALL_C_EXAMPLES=OFF -D INSTALL_PYTHON_EXAMPLES=OFF -D BUILD_NEW_PYTHON_SUPPORT=ON -D BUILD_opencv_python3=TRUE -D OPENCV_GENERATE_PKGCONFIG=ON -D BUILD_EXAMPLES=OFF ..


# 查看线程数
sudo cat /proc/stat | grep cpu[0-9] -c

# 进行编译,约2-3小时,这一步-j后面的数字,取决于上一条查到的线程数!
make -j4


# 完成安装
cd ~
sudo rm -r /usr/include/opencv4/opencv2
cd ~/opencv/build
sudo make install
sudo ldconfig
make clean
sudo apt-get update

# 验证安装
python3
import cv2
print(cv2._version_)
4.5.1

# 安装jtop
cd ~
sudo -H pip3 install -U jetson-stats
sudo reboot
jtop


# 在jetson nano 上测试相机
ls /dev/video0 # csi 相机
ls /dev/video* # 相机列表

# 拍照
nvgstcapture-1.0 --orientation=2 # 测试 CSI 相机
# V4L2 USB camera
nvgstcapture-1.0 --camsrc=0 --cap-dev-node=1

# 查看摄像头参数
v4l2-ctl --device=/dev/video0 --list-formats-ext

opencv调用usb摄像头:

import cv2

cap = cv2.VideoCapture(dev) # dev表示Jetson Nnao上USB的设备号,上面查看摄像头挂载情况那里提到我的USB是video2,故我这里dev = 2

while(1):
ret,frame = cap.read() #ret:True/False,代表有没有读到图片 frame:当前截取一帧的图片
cv2.imshow("capture",frame)

if (cv2.waitKey(1) & 0xFF) == ord('q'):
break

cap.release()
cv2.destroyAllWindows()


成功编译如下:

!图片已丢失

cuda配置

sudo gedit ~/.bashrc

# 打开完档后 在最后面添加代码
export CUDA_HOME=/usr/local/cuda-10.2
export LD_LIBRARY_PATH=/usr/local/cuda-10.2/lib64:$LD_LIBRARY_PATH
export PATH=/usr/local/cuda-10.2/bin:$PATH

source ~/.bashrc
nvcc -V

Jetson nano 安装yolov5

pytorch不能pip安装

要和JetPack 版本对应

pytorch和torchvision版本也要对应

https://forums.developer.nvidia.com/t/pytorch-for-jetson/72048

校验安装

import torch
print(torch.__version__)
# 接下来继续在python3环境中测试下pytorch的功能

from future import print_function

import torch

x = torch.rand(5, 3)

print(x)

# 输出

tensor([[0.3380, 0.3845, 0.3217],

​ [0.8337, 0.9050, 0.2650],

​ [0.2979, 0.7141, 0.9069],

​ [0.1449, 0.1132, 0.1375],

​ [0.4675, 0.3947, 0.1426]])

# 另外,要检查你的GPU驱动程序和CUDA是否启用,并通过PyTorch访问,运行以下命令返回是否启用CUDA驱动程序

import torch

torch.cuda.is_available()
import torchvision
print(torchvision.__version__)
sudo apt install -y libfreetype6-dev

下载GitHub yolov5

下载yolov5s.pt到/yolov5文件夹

yolov5 的requirements.txt记得删除pytorch和torchvision

pip3 install -r requirements.txt

检查opencv版本:

python
import cv2
print(cv2.__version__)
python detect.py --source ../test_img.jpg --weights yolov5s.pt
python detect.py --source ../car.mp4 --weights yolov5s.pt
python detect.py --source 0 --weights yolov5s.pt # 本地摄像头,不行就1 2 3
python detect.py --source 'rtsp://........' --weights yolov5s.pt

TensoRT

TensorRT下的模型是在做什么?

TensorRT只负责模型的推理(inference)过程,一般不用TensorRT来训练模型的哈。

TensorRT能加速模型吗?

能!根据官方文档,使用TensorRT,在CPU或者GPU模式下其可提供10X乃至100X的加速。本人的实际经验中,TensorRT提供了20X的加速。

TensorRT为什么能提升模型的运行速度?

TensorRT是英伟达针对自家平台做的加速包,TensorRT主要做了这么两件事情,来提升模型的运行速度。

  1. TensorRT支持INT8和FP16的计算。深度学习网络在训练时,通常使用 32 位或 16 位数据。TensorRT则在网络的推理时选用不这么高的精度,达到加速推断的目的。
  2. TensorRT对于网络结构进行了重构,把一些能够合并的运算合并在了一起,针对GPU的特性做了优化。现在大多数深度学习框架是没有针对GPU做过性能优化的,而英伟达,GPU的生产者和搬运工,自然就推出了针对自己GPU的加速工具TensorRT。一个深度学习模型,在没有优化的情况下,比如一个卷积层、一个偏置层和一个reload层,这三层是需要调用三次cuDNN对应的API,但实际上这三层的实现完全是可以合并到一起的,TensorRT会对一些可以合并网络进行合并。

检查自带TensorRT环境(选)

cd /usr/src/tensorrt/samples  
sudo make #编译大约7分钟
../bin/sample_mnist

jetson inference库安装(选)

sudo apt update
sudo apt autoremove
sudo apt upgrade
sudo apt install cmake
mkdir ~/workspace
cd workspace
git clone https://gitee.com/weikun-xuan/jetson-inference.git
cd jetson-inference
git submodule update --init

一、获取源码
首先打开终端运行如下代码:

sudo apt-get update 

sudo apt-get install git cmake libpython3-dev python3-numpy

git clone --recursive https://gitee.com/weikun-xuan/jetson-inference.git

二、换源
进入到tools文件下:

cd jetson-inference/tools


换下源,依次运行以下代码(均在tools文件下):

1)模型下载国内源:

sed -in-place -e 's@https://nvidia.box.com/shared/static@https://bbs.gpuworld.cn/mirror@g' download-models.sh

2)pytorch国内源:

sed -in-place -e 's@https://nvidia.box.com/shared/static@https://bbs.gpuworld.cn/mirror@g' install-pytorch.sh 

sed -in-place -e 's@https://github.com/pytorch/vision@https://gitee.com/vcan123/pytorch@g' install-pytorch.sh

sed -in-place -e 's@https://github.com/dusty-nv/vision@https://gitee.com/vcan123/dusty-nv@g' install-pytorch.sh

三、编译安装

在jetson-infernce文件下执行如下操作:

mkdir build 

cd build

cmake ../

接着就会出现:

模型包安装

此步为安装模型包,本人建议【全部取消】,不然会有些慢,之后我们可以去官网手动下载。

我们继续:

pytorch安装

安装pytorch。这时应该只有一个for python 3.6版本,选上然后ok。

完成后还是在build文件下依次执行如下操作:

make 

sudo make install

sudo ldconfig