Jetson部署实践

  • 一、模型开发
    • 1.1 Yolov5图像检测模型开发
  • 二、模型部署
    • 2.1 DeepStream框架介绍
    • 2.2 TensorRT 加速算子、模型转换
    • 2.3 安装DeepStream
    • 2.4 推理测试
      • 2.4.1 单路usb接口图像传入
      • 2.4.2 多路接口图像传入
      • 2.4.3 多模型并发推理
  • 三、推理结果输出
  • 四、ssh设置
  • 五、常见报错
    • 5.1 fatal: unable to access 'https://github.com/wang-xinyu/tensorrtx.git/': server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none
    • 5.2 github.com[0: 20.205.243.166]: errno=Connection timed out-bash: github.com[0:: command not found
    • 5.3 DeepStream-bash: /usr/bin/deepstream-test1-app: cannot execute binary file: Exec format error
    • 5.4 CMake Error: The current CMakeCache.txt directory /workspace/tensorrtx/yolov5/build/CMakeCache.txt is different than the directory /home/zbsj2/projects/deploy/tensorrtx/yolov5/build where CMakeCache.txt was created. This may result in binaries being created in the wrong place. If you are not sure, reedit the CMakeCache.txt
    • 5.5 /workspace/tensorrtx/yolov5/yololayer.h:6:10: fatal error: NvInfer.h: No such file or directory
    • 5.6 Linking CXX shared library libmyplugins.so
    • 5.7 error while loading shared libraries: libmyelin.so.1: cannot open shared object file: No such file or directory
    • 5.8 有未能满足的依赖关系。请尝试不指明软件包的名字来运行"apt --fix-broken install"
    • 5.9 在转换.engine的时候 cannot execute binary file: Exec format error
    • 5.10 执行tensorRT sudo: ./yolov5: command not found
    • 5.11 Segmentation Error

本文实践部署主要的思路是将,我之前在yolo上开发的模型部署在我现在的开发版(这里用的是jetson nano 2gb版,简称丐版),并实现多模型、多路并发推理功能,推理结果回传(至可视化大屏,也就是图像传回,检测结果数据传回功能)。

一、模型开发

1.1 Yolov5图像检测模型开发

在主机上训练自己的Yolov5模型,转为TensorRT模型并部署到Jetson Nano上,用DeepStream运行。

硬件环境:

RTX 1660TI主机

Jetson Nano 2G

软件环境:

Jetson Nano:

Ubuntu 18.04

Jetpack 4.5.1

DeepStream 5.1

主机:

Ubuntu 18.04

CUDA 10.2

yolov5 5.0

二、模型部署

2.1 DeepStream框架介绍

DeepStream应用程序将深度神经网络和其他复杂的处理任务引入到流处理管道中,以实现对视频和其他传感器数据的近实时分析。从这些传感器中提取有意义的见解为提高运营效率和安全性创造了机会。例如,摄像头是当前使用最多的物联网传感器。在我们的家中,街道上,停车场,大型购物中心,仓库,工厂中都可以找到相机–无处不在。视频分析的潜在用途是巨大的:访问控制,防止丢失,自动结帐,监视,安全,自动检查(QA),包裹分类(智能物流),交通控制/工程,工业自动化等。


NVIDIA DeepStream SDK是基于开源GStreamer多媒体框架的流分析工具包。DeepStream SDK加快了可伸缩IVA应用程序的开发速度,使开发人员更容易构建核心深度学习网络,而不必从头开始设计端到端应用程序。包含NVIDIA Jetson模块或NVIDIA dGPU适配器的系统均支持该SDK。它由可扩展的硬件加速插件集合组成,这些插件与低级库进行交互以优化性能,并定义了标准化的元数据结构,可实现自定义/用户特定的添加。

有关DeepStream SDK的更多详细信息和说明,请参考以下材料:
NVIDIA DeepStream SDK开发指南
NVIDIA DeepStream插件手册
NVIDIA DeepStream SDK API参考文档

2.2 TensorRT 加速算子、模型转换

使用tensorrtx项目进行转换:https://github.com/wang-xinyu/tensorrtx

克隆tensorrtx项目

git clone https://github.com/wang-xinyu/tensorrtx.git

官方教程详见:https://github.com/wang-xinyu/tensorrtx/tree/master/yolov5

tensorrtx/yolov5/gen_wts.py复制到yolov5项目根目录下

执行命令生成.wts文件

// 这里用的是之前训练的口罩模型python gen_wts.py yolov5/runs/train/exp4/weights/mask.pt

执行完在.pt权重路径下会生成一个.wts文件

环境转到Jetson Nano

在nano上也克隆一个tensorrtx项目

将生成的.wts放到tensorrtx/yolov5/

修改tensorrtx/yolov5/yololayer.h

static constexpr int CLASS_NUM = 2;

修改类型数量,原来是80

tensorrtx/yolov5/目录下

编译代码

mkdir build
cd build
cmake ..
make

cmake:

make:

.wts文件转为.engine文件

// -s是操作指令 l是指yolo算法中的预训练模型
sudo ./yolov5 -s ../mask.wts ../mask.engine l

将验证图片放在tensorrtx/yolov5/samples/下,执行命令验证转换是否成功

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

执行完会在当前目录生成一张相应的图片:

2.3 安装DeepStream

Step1:首先换源(一般是不需要做这一步,需要跟自己的板子的jetpack版本一致)

删除之前的:

cd /usr/bin
sudo rm deepstream-*cd /opt/nvidia
sudo rm -r deepstream/*

换源:

sudo vim /etc/apt/sources.listsudo vim /etc/apt/sources.list.d/nvidia-l4t-apt-source.list

这里贴出几类源:

下面贴出的是jetpack版本4.4的源
nano:

deb https://repo.download.nvidia.com/jetson/common r32.4 maindeb https://repo.download.nvidia.com/jetson/t210 r32.4 main

nx:

deb https://repo.download.nvidia.com/jetson/common r32.4 maindeb https://repo.download.nvidia.com/jetson/t194 r32.4 main

tx2:

deb https://repo.download.nvidia.com/jetson/common r32.4 maindeb https://repo.download.nvidia.com/jetson/t186 r32.4 main

Step2:安装 nvidia-l4t-gstreamer
更新:

sudo apt updatesudo apt install --reinstall nvidia-l4t-gstreamersudo 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 \
libgstrtspserver-1.0-dev \
libnvinfer7 \
libnvparsers7 \
libnvonnxparsers7 \
libnvinfer-plugin7
  1. deb安装:
sudo dpkg -i deepstream-5.0_5.0.1-1_arm64.deb
  1. tar安装(如果是4.0,解压完后里面还有一个压缩包(binaries.tbz2),binaries.tbz2 解压到根目录)
sudo tar -xvf deepstream_sdk_v5.0.1_jetson.tbz2 -C /
cd /opt/nvidia/deepstream/deepstream-5.0
sudo ./install.sh
sudo ldconfig
检查安装结果deepstream-app --version-all2021-11-30 00:07:22.617191: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcudart.so.10.2
deepstream-app version 5.0.0
DeepStreamSDK 5.0.0
CUDA Driver Version: 10.2
CUDA Runtime Version: 10.2
TensorRT Version: 7.1
cuDNN Version: 8.2
libNVWarp360 Version: 2.0.1d3

2.4 推理测试

安装完后在/opt/nvidia/deepstream/deepstream-5.0/sources/objectDetector_Yolo会有一个部署yolo的官方实例代码,但只有yolov3的。

这里我们直接用已经改好的yolov5项目:https://github.com/DanaHan/Yolov5-in-Deepstream-5.0

可不用按照项目官方的说明,直接按以下步骤即可。

克隆项目

git clone https://github.com/DanaHan/Yolov5-in-Deepstream-5.0.git

进入Yolov5-in-Deepstream-5.0/Deepstream 5.0/nvdsinfer_custom_impl_Yolo/目录下

修改nvdsparsebbox_Yolo.cpp文件中的类型数量

static const int NUM_CLASSES_YOLO = 2;

原本为80,改为自己模型的类型数量

保存编译

make

返回上级目录,进入Yolov5-in-Deepstream-5.0/Deepstream 5.0/

将tensorrtx生成的.engine文件和libmyplugins.so放到目录下

这里是tensorrtx/yolov5/mask.enginetensorrtx/yolov5/builkd/libmyplugins.so

修改DeepStream处理流程配置文件deepstream_app_config_yoloV5.txt


...[source0]
#Type - 1=CameraV4L2(usb摄像头) 2=URI(文件) 3=MultiURI
type=1
camera-width=2560
camera-height=720
camera-fps-n=30
camera-fps-d=1...[streammux]
...
width=1344
height=376
...[primary-gie]
...
model-engine-file=best.engine
...[tracker]
enable=0
tracker-width=512
tracker-height=320
ll-lib-file=/opt/nvidia/deepstream/deepstream-5.1/lib/libnvds_mot_klt.so...
  • [source0],改为用摄像头实时跑识别,需要加上长宽和帧率设置。这里我用的是一个双目摄像头。

  • [streammux]显示窗口改为1344*376

  • [primary-gie]修改权重路径

  • [tracker]改为deepstream5.1的地址

修改config_infer_primary_yoloV5.txt文件

...model-engine-file=best.engine...num-detected-classes=2...custom-lib-path=nvdsinfer_custom_impl_Yolo/libnvdsinfer_custom_impl_Yolo.so...labelfile-path=labels.txt...

当然这里的labels.txt文件是原本没有的,需要按照我们设置的标签属性进行修改:

vim labels.txtface
no mask
mask

最后运行DeepStream

LD_PRELOAD=./libmyplugins.so deepstream-app -c deepstream_app_config_yoloV5.txt


我这里因为内存不足所以溢出了,等更换一个更大的SD卡在进行测试,结果基本上如:

2.4.1 单路usb接口图像传入

2.4.2 多路接口图像传入

2.4.3 多模型并发推理

三、推理结果输出

四、ssh设置

因为我的板子是用无线网卡进行远端连接的,所以远程传输wtf文件需要用ssh进行远程传输,但是无线网卡连接后传输的ip地址一般情况是动态,并且传输文件的指令很麻烦,于是这里采用WinSCP+固定ip

>>> iwlist wlan3 scanubuntu@ubuntu:~$ iwlist wlan3 scan
wlan3     Scan completed :Cell 01 - Address: C8:D3:A3:50:8B:5AESSID:"dlink2"Protocol:IEEE 802.11bgnMode:MasterFrequency:2.437 GHz (Channel 6)Encryption key:onBit Rates:300 Mb/s。。。。。。。
>>> sudo vim /etc/network/interfacesauto wlan3
iface wlan3 inet static
address 192.168.1.88
netmask 255.255.255.0
gateway 192.168.1.1
wpa-ssid dlink2(要连接的wlan ssid)
wpa-passphrase wlan密码
wireless-channel 6(信道号)

WinSCP:https://winscp.net/download/WinSCP-5.19.4-Setup.exe

五、常见报错

5.1 fatal: unable to access ‘https://github.com/wang-xinyu/tensorrtx.git/’: server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none

git clone 遇到问题:

fatal: unable to access ‘https://github.comxxxxxxxxxxx’: Failed to connect to xxxxxxxxxxxxx

换一个克隆方案,将命令行里的http改为git重新执行。

5.2 github.com[0: 20.205.243.166]: errno=Connection timed out-bash: github.com[0:: command not found

vim /etc/hosts192.30.255.112  github.com git
185.31.16.184 github.global.ssl.fastly.net

5.3 DeepStream-bash: /usr/bin/deepstream-test1-app: cannot execute binary file: Exec format error

如图,需要更换源

Step1:首先换源(一般是不需要做这一步,需要跟自己的板子的jetpack版本一致)

删除之前的:

cd /usr/bin
sudo rm deepstream-*cd /opt/nvidia
sudo rm -r deepstream/*

换源:

sudo vim /etc/apt/sources.listsudo vim /etc/apt/sources.list.d/nvidia-l4t-apt-source.list

这里贴出几类源:

下面贴出的是jetpack版本4.4的源
nano:

deb https://repo.download.nvidia.com/jetson/common r32.4 maindeb https://repo.download.nvidia.com/jetson/t210 r32.4 main

nx:

deb https://repo.download.nvidia.com/jetson/common r32.4 maindeb https://repo.download.nvidia.com/jetson/t194 r32.4 main

tx2:

deb https://repo.download.nvidia.com/jetson/common r32.4 maindeb https://repo.download.nvidia.com/jetson/t186 r32.4 main

Step2:安装 nvidia-l4t-gstreamer
更新:

sudo apt updatesudo apt install --reinstall nvidia-l4t-gstreamersudo 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 \
libgstrtspserver-1.0-dev \
libnvinfer7 \
libnvparsers7 \
libnvonnxparsers7 \
libnvinfer-plugin7
  1. deb安装:
sudo apt-get install ./deepstream-5.0_5.0.1-1_arm64.deb
  1. tar安装(如果是4.0,解压完后里面还有一个压缩包(binaries.tbz2),binaries.tbz2 解压到根目录)
sudo tar -xvf deepstream_sdk_v5.0.1_jetson.tbz2 -C /
cd /opt/nvidia/deepstream/deepstream-5.0
sudo ./install.sh
sudo ldconfig

5.4 CMake Error: The current CMakeCache.txt directory /workspace/tensorrtx/yolov5/build/CMakeCache.txt is different than the directory /home/zbsj2/projects/deploy/tensorrtx/yolov5/build where CMakeCache.txt was created. This may result in binaries being created in the wrong place. If you are not sure, reedit the CMakeCache.txt

CMakeCache.txt之前编译时留下的缓存,应该把build删掉重新mdir build 编译。

5.5 /workspace/tensorrtx/yolov5/yololayer.h:6:10: fatal error: NvInfer.h: No such file or directory

#include “NvInfer.h”

需要把tensorrt release版本下的include添加到系统环境变量

/workspace/tensorrt_release/include# cp -r NvInfer.h /usr/local/include/tensorrt/

5.6 Linking CXX shared library libmyplugins.so

/usr/bin/ld: cannot find -lnvinfer
collect2: error: ld returned 1 exit status

问题:系统环境变量缺少对应的lib

/workspace/tensorrt_release/lib# cp -r libnvinfer.so /usr/local/lib

得到生成的 libmyplugins.so yolov5

5.7 error while loading shared libraries: libmyelin.so.1: cannot open shared object file: No such file or directory

同样的道理,没有把对应的静态库添加到系统环境变量

解决:cp lib

得到产物yolov5s.engine

5.8 有未能满足的依赖关系。请尝试不指明软件包的名字来运行"apt --fix-broken install"

apt --fix-broken install

5.9 在转换.engine的时候 cannot execute binary file: Exec format error

yolov5的wts权重转成tensorrt的engine权重一定要注意的问题:版本匹配

5.10 执行tensorRT sudo: ./yolov5: command not found

重新编译build文件
tensorrtx/yolov5/目录下

编译代码

mkdir build
cd build
cmake ..
make

5.11 Segmentation Error

As team viewed communication, rm ~/Model//.cache and rm ~/.cache/gstreamer-1.0/ -rf resolved the segmentation issue.

rm ~/Model//.cache
rm ~/.cache/gstreamer-1.0/ -rf

参考来源:https://forums.developer.nvidia.com/t/segmentation-error/66166

Jetson部署实践相关推荐

  1. TVM优化c++部署实践

    TVM优化c++部署实践 使用TVM导入神经网络模型: 模型支持pytorch , tensorflow , onnx, caffe 等.平时pytorch用的多,这里给一种pytorch的导入方式. ...

  2. 容器化部署实践之Django应用部署(二)

    上一篇文章有些同学感觉不够详细理解起来有些困难,我再来简单解释一下. 我们在开发的情况下:     浏览器请求→ python manage.py runserver(比如8000) → 到应用代码( ...

  3. 基于 Docker 和 GitLab 的前端自动化部署实践笔记

    基于 Docker 和 GitLab 的前端自动化部署 实践笔记 随着接触的项目越来越多,在部署测试流程上重复耗时工作也越来越多,所以对前端工作的CI/CD实现愈发迫在眉睫. 前端开发由于三大框架的崛 ...

  4. centos 安装mysql5.7_Zabbix 4.2.5 安装部署实践详解

    [导读]云计算背景下,无论是大数据.物联网还是边缘计算,规模化后大量的设备需要保证正常运行,在人员一定的情况下,就需要提高运行维护效率.同时随着智能化被应用在人们生活的方方面面,关联性也越来越紧密,即 ...

  5. 网易云海外推流部署实践

    谈到直播,实时性和流畅性一直是整个服务体系中的重中之重.本文是网易云通信视频技术开发工程师何荣光在LiveVideoStack Meet杭州站沙龙的分享,着重梳理网易云在海外推流方面的部署实践,帮助开 ...

  6. tftp 服务器 ip_360Stack裸金属服务器部署实践

    女主宣言 裸金属特性是一种将物理设备作为资源提供给租户的云计算服务,租户通过该服务可申请.管理和配置相应的物理设备资源,本文将介绍360Stack裸金属服务器的部署实践. PS:丰富的一线技术.多元化 ...

  7. 阿里P8架构师谈:Quartz调度框架详解、运用场景、与集群部署实践

    以下将分别从Quartz架构简介.集群部署实践.Quartz监控.集群原理分析详解Quartz任务调度框架. Quartz简介 Quartz是Java领域最著名的开源任务调度工具,是一个任务调度框架, ...

  8. 时空大数据实践之GeoWave安装部署实践

    2019独角兽企业重金招聘Python工程师标准>>> 时空大数据实践之GeoWave安装部署实践 GeoWave是由国家地理空间情报局(NGA)与RadiantBlue和Booz ...

  9. 360Stack裸金属服务器部署实践

    女主宣言 裸金属特性是一种将物理设备作为资源提供给租户的云计算服务,租户通过该服务可申请.管理和配置相应的物理设备资源,本文将介绍360Stack裸金属服务器的部署实践. PS:丰富的一线技术.多元化 ...

最新文章

  1. 半导体并购停不下来 ADI拟148亿美元收购Linear
  2. Spoj LCS2 - Longest Common Substring II
  3. 全球及中国多非利特行业规模预测与前景运营模式分析报告2022-2027年版
  4. js 导出到excel
  5. 科大星云诗社动态20210908
  6. Web Service学习笔记(4)
  7. scala学习 之 环境搭建(一)
  8. 带有Spring,Hibernate,Akka,Twitter Bootstrap,Apache Tiles和jQuery的Maven Web项目Kickstarter代码库...
  9. 物联网对石油燃气行业的作用
  10. html:(40):块级元素和内联块级元素
  11. Win8 Metro(C#)数字图像处理--2.50图像运动模糊
  12. python的Singleton模式实现
  13. python scipy库函数solve用法_python scipy linalg.solve_banded用法及代码示例
  14. const数据成员的初始化
  15. oracle symonym_Oracle 创建synonym 同义词详解
  16. UNIX/Linux系统结构
  17. GB28181国标流媒体服务语音对讲-前端页面采集语音调用接口示例
  18. Adobe CS5 序列号及配置方法
  19. 高斯滤波算法之MatlabFPGA实现
  20. 什么是计算机数字代码,计算机代码1—10这10个数字表示什么意思 例如:数字1 计算机代码00001 这是什么意思...

热门文章

  1. 关于顺序表概念及其用法总结
  2. 计算机国二通过率,2021计算机二级考试通过率是多少 含金量如何
  3. 指令系统由计算机组成决定,《计算机组成原理》第5章指令系统.ppt
  4. 仿瑞吉外卖 【手机登陆功能换成邮件登陆】
  5. “华为“和“荣耀”区别日益明显,荣耀传递潮流价值观
  6. 【建站】手把手教你域名注册(腾讯云)
  7. Django restframework实现批量操作
  8. 使用easyExcel实现浏览器下载Excel。
  9. 【读书札记】《北大授课》中华文化四十七讲 余秋雨
  10. 大学计算机专业哪个学校最好,计算机专业:最好的7所大学!也是全中国“最难考”的大学!...