Jetson nano + yolov5 + TensorRT加速+Deepstream调用多路摄像头

        最近项目有需要,需要接入多路视频,并借助深度学习完成识别。硬件平台为 jetson 系列的nano,上一篇文章已经说明了yolov5的配置方法,不过那一篇是借助miniforge,利用python3.10实现的,之前一直以为是nano自带的3.6.9不可以,经过一番研究发现其实是可以的,只是之前方法不对,今天主要是介绍从开始下载系统,到能够跑通多路视频,做一个比较详细的记录。

一、系统环境搭建

        1、烧写系统,目前为止有两个办法,一种是借助内存卡和烧写软件,去官网下载好系统镜像,然后将镜像烧写进内存卡,这个方法适用于后续批量化生产,会比较快一些;另外一种办法是借助另外一台电脑,利用linux电脑或者虚拟机(需注意必须是ubuntu18.04以下,目前20.04是不支持的),利用英伟达官网提供的sdkmanager,对jetsaon nano进行烧写,烧写完毕后,是自带Deepstream的,比较方便。

        下载并安装 JetPack SDK Manager,下载需要 NVIDIA 账户,JDK Manager 可以安装不同版本的 JetPack,本文使用的是 JetPack-4.6.1。平台的环境搭建具体流程可参考这篇下面这篇文章。

sudo dpkg -i sdkmanager_x.x.x-xxxx_amd64.deb

Nvidia Jetson 平台 DeepStream-6.0.1 部署 YoloV5-6.0 实现目标检测_秦至皆木的博客-CSDN博客_error from primary_gie: failed to create nvdsinfer        2、安装相关软件

        ①更换清华源,将source.list文件先备份下,然后修改里面的内容

sudo chmod -R 777 /etc/apt/

#更换为清华源
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-updates main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-backports main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-security main restricted universe multiverse
#更新
sudo apt-get update

        ②安装pip3

 sudo apt-get install python3-pip python3-dev

        ③安装输入法

#安装必要的软件包
sudo apt-get install ibus ibus-clutter ibus-gtk ibus-gtk3 ibus-qt4
im-config -s ibus
sudo apt-get install ibus-pinyin
ibus-setup
没有中文选项就重启
然后选择右上角输入法那里得Text entry,添加中文和英文进去

        ④安装jtop

sudo pip3 install jetson-stats

        ⑤查看性能模式、查看jetpack版本

sudo nvpmodel -q
sudo apt-cache show nvidia-jetpack

        ⑥GPU测试

cd /usr/local/cuda-10.2/samples/5_Simulations/nbody
sudo make
./nbody

        ⑦tensorrt 测试

cd /usr/src/tensorrt/samples
sudo make 

        ⑧安装pytorch==1.8.0,numpy版本最好选择1.19.3

sudo apt-get install libopenblas-base libopenmpi-dev
pip3 install protobuf==3.3.0
sudo pip3 install numpy==1.19.3
pip3 install torch-1.8.0-cp36-cp36m-linux_aarch64.whl 
sudo apt-get install libjpeg-dev zlib1g-dev libavcodec-dev libavformat-dev libswscale-dev liblapack-dev libblas-dev gfortran

        ⑨安装torchvision==0.9.0,pillow 版本最好选择8.4.0

pip3 install -i https://pypi.doubanio.com/simple/ --trusted-host pypi.doubanio.com pillow==8.4.0
export BUILD_VERSION=0.9.0
python3 setup.py install --user

        ⑩配置yolov5所需库

pip3 install pyyaml
pip3 install tensorboard
pip3 install tqdm
pip3 install -i https://pypi.doubanio.com/simple/ --trusted-host pypi.doubanio.com seaborn
pip3 install -i https://pypi.doubanio.com/simple/ --trusted-host pypi.doubanio.com opencv-python==4.5.1.48

        11)安装pycuda,提前下载好pycuda==2019.1.2

python3 configure.py --cuda-root=/usr/local/cuda-10.2
sudo python3 setup.py install

        12)摄像头相关

sudo apt install v4l-utils
v4l2-ctl --list-devices
v4l2-ctl --device=/dev/video0 --list-formats-ext

        13)增加虚拟内存

在运行某些程序时,会卡死,提前增加swap内存

#1)新增swapfile文件大小自定义
sudo fallocate -l 6G /var/swapfile
#2)配置该文件的权限
sudo chmod 600 /var/swapfile
#3)建立交换分区
sudo mkswap /var/swapfile
#4)启用交换分区
sudo swapon /var/swapfile
#5)自启动启用
sudo bash -c 'echo "/var/swapfile swap swap defaults 0 0" >> /etc/fstab'

二、使用tensorrt加速

        ①克隆代码,yolov5(之前已经下好了),两个版本之间注意要对应

        yolov5 :  git clone https://github.com/ultralytics/yolov5.git
        tensorRT :  git clone https://github.com/wang-xinyu/tensorrtx.git
        ②转换模型

        1、把tensorrt/yolov5下的gen_wts.py复制到yolov5的文件夹下

        2、执行gen_wts.py生成.wts文件。

python gen_wts.py yolov5s.pt

        3、到目录tensorrtx下的yolov5文件夹老规矩,创建一个build文件,并进入

mkdir build
cd build
cmake ..

        4、将yololayer.h里的CLASS_NUM修改成你的。官方用的是coco数据集,所以默认是80。

        5、执行makeFile。(每次修改为CLASS_NUM都要make一次)

  make

        6、将上一步生成的.wts文件复制到tensorrtx/yolov5里。这一步单纯的是生成.wts文件,后面使用deepstream里面的gen_wtsyoloV5.py软件会生成两个文件,即.cfg 和.wts文件,两个文件都用用处。

        7、生成.engine文件

    sudo ./yolov5 -s ../yolov5s.wts yolov5s.engine s
    如果你训练时是自定义depth_multiple 和 width_multiple就这样写:
    sudo ./yolov5 -s ../yolov5.wts yolov5.engine c 0.17 0.25
    在tensorrtx 5.0里也更新了yolov5的P6模型:
    sudo ./yolov5 -s ../yolov5.wts yolov5.engine s6

       8、在samples里有两张测试图片,可以测试一下

sudo ./yolov5 -d yolov5s.engine ../samples

        9.也可以运行yoloV5_trt.py测试是否成功

sudo python3 yolov5_trt.py

三、Deepstream配置使用

        ①模型转换(在电脑上操作或者在Jeston上操作都可以)

#注意deepstream版本,nano上是6.0,这里也要下载6.0
git clone https://github.com/marcoslucianops/DeepStream-Yolo.git
#网址
https://github.com/marcoslucianops/DeepStream-Yolo
cd DeepStream-Yolo/utils
#主要拷贝转换脚本到自己的yolov5项目下即可
cp gen_wts_yoloV5.py ../../yolov5
cd ../../yolov5
#根据自己的权重文件修改
python gen_wts_yoloV5.py -w  ./yolov5s.pt -c ./models/yolov5s.yaml

        ②模型拷贝至Jetson
        1.上一步骤运行成功会生成yolov5n.wts 与 yolov5n.cfg 。
        2.将2个文件拷贝至Jetson下DeepStream-Yolo 项目下。

        ③部署模型

git clone https://github.com/marcoslucianops/DeepStream-Yolo.git
#将项目拷贝至deepstream/source下
cp -r DeepStream-Yolo /opt/nvidia/deepstream/deepstream/source
cd /opt/nvidia/deepstream/deepstream/source/DeepStream-Yolo
#这里使用的默认模型
CUDA_VER=10.2 make -C nvdsinfer_custom_impl_Yolo

        ④自训练模型:
        修改 config_infer_primary_yoloV5.txt中的num-detected-classes;如果没修改就还是80;
        修改 labels.txt;没修改就拷贝coco数据集的内容即可

        ⑤运行
        修改deepstream_app_config.txt 中 config-file=config_infer_primary_yoloV5.txt

        #运行deepstream案例

deepstream-app -c deepstream_app_config.txt

        首次运行 Build Engine 会比较久,会根据config_infer_primary_yoloV5.txt构建模型;后续可以注释掉,这样就不用每次都重新生成引擎文件了。这里需要注意的是,deepstream6.0版本基本都是这样生成引擎文件的,之前的5.0可能都是先进去tensorrt转换完成拷贝过来,如果6.0这样操作的话,生成的引擎文件复制过来是不能用的,必须用自己生成的。
        custom-network-config=yolov5n.cfg
        model-file=yolov5n.wts

        ⑥调用多路摄像头

        需要根据实际使用情况去修改deepstream_app_config_yoloV5.txt 文件,关于相关参数分析,可参考博客:

https://blog.csdn.net/u010414589/article/details/115338399
https://blog.csdn.net/lk007cx/article/details/110228243 
https://blog.csdn.net/W1995S/article/details/119858078
https://zhuanlan.zhihu.com/p/296314513
https://github.com/marcoslucianops/DeepStream-Yolo
https://blog.csdn.net/qq122716072/article/details/114156647
https://blog.csdn.net/djj199301111/article/details/123628292

 

你可能感兴趣的:(深度学习,tensorrt,linux,ubuntu)