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'

14)其他安装deepstream 的办法

sudo apt install nvidia-jetpack 

安装依赖:sudo apt install libssl1.0.0 libgstreamer1.0-0 gstreamer1.0-tools gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav libgstrtspserver-1.0-0  libjansson4=2.11-1

安装:sudo tar -xvf deepstream_sdk_v6.2.0_jetson.tbz2 -C /
  cd /opt/nvidia/deepstream/deepstream-6.2/

 sudo ./install.sh
 sudo ldconfig
deepstream-app --version-all
 cd /opt/nvidia/deepstream/deepstream-6.2/samples/configs/deepstream-app
deepstream-app -c source8_1080p_dec_infer-resnet_tracker_tiled_display_fp16_nano.txt 

二、使用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

  • 9
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
YOLO (You Only Look Once) 是一种实时目标检测算法,YOLOv5是其最新版本之一。detect.py是YOLOv5中的一个Python脚本文件,用于在图像和视频中检测目标并进行标注。 detect.py的主要工作是加载预训练的YOLOv5模型,并将其应用于输入的图像或视频帧。该脚本还负责解析命令行参数,如输入文件路径、输出文件路径、模型权重等。 脚本首先使用`argparse`包解析命令行参数,以确定输入文件路径、输出文件路径、模型权重等。接下来,它使用`torch.hub.load`函数加载YOLOv5模型。默认情况下,该函数会下载YOLOv5模型的权重文件,并自动加载网络结构和权重。 一旦模型加载完成,脚本会打开输入文件(图像或视频文件)并将其转换为可供模型处理的张量形式。然后,脚本将该张量传递给YOLOv5模型进行目标检测。检测完成后,脚本会提取检测到的目标的位置、类别和置信度,并在图像或视频帧上进行标注。 最后,脚本将标注后的图像或视频帧保存到输出文件的路径中。如果输入文件是一个视频文件,脚本将以相同的方式处理每个视频帧,并将所有处理后的帧保存为输出视频文件。 此外,detect.py还提供了一些可选的参数,用于调整模型的行为,如设置置信度阈值、NMS(非极大值抑制)的阈值、目标大小的门限等。 总的来说,YOLOv5版本的detect.py脚本是一个用于目标检测的工具,它可以加载预训练的模型,并在输入的图像或视频帧中检测目标并进行标注,最后将结果保存到输出文件中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值