项目环境部署(备注:Jetson NX 使用Tensorrt加速自训练yolov4-tiny模型)

news/2024/4/26 16:25:43/文章来源:https://blog.csdn.net/weixin_40749043/article/details/130327180

这里请注意几个主要问题:

本环境是使用刷机的完全新的环境进行的配置:

  • onnx的版本
  • protcbuf的版本问题
  • 相关的安装顺序的问题

这里默认已经获得了训练好的yolo的模型,这里常用的是在darknet框架,利用谷歌的colab进行在线云端训练YoloV4-Tiny模型,下面会以YoloV4和YoloV4-Tiny举例
如果不行,就加上sudo,给定权限

  1. 第一步是下载github上大佬的相关项目的demo
git clone https://github.com/jkjung-avt/tensorrt_demos.git
  1. 下载完文件后定位到ssd文件夹中执行 install_pycuda.sh
cd ${HOME}/project/tensorrt_demos/ssd
./install_pycuda.sh
  1. 接着需要安装onnx
sudo apt-get install protobuf-compiler libprotoc-dev
sudo pip3 install onnx==1.4.1
  1. 接着定位到plugins文件夹build相关程序
cd ${HOME}/project/tensorrt_demos/plugins
make
  1. 下载并转换yolo文件
    下载模型文件(这里会下载yolov4和yolov3的三个不同版本的文件)
cd ${HOME}/project/tensorrt_demos/yolo
./download_yolo.sh	

(重点补充) . 执行完这个步骤之后,注意,在进行第六步的时候,会报错:
报错信息如下:

TypeError: 1.0 has type numpy.float32, but expected one of: int, long, float

那么,该怎么办呢?这个是因为我们装的onnx和protobuf的版本的问题,当时装的protobuf是低版本的,也正是必须要先装低版本的protobuf你才能装好onnx,不然不可能装好onnx。

移除低版本的protobuf 3.0.0
使用sudo apt-get remove protobuf-compiler libprotoc-dev移除protobuf包。
需要注意,仅执行这个命令是卸载不干净protobuf的,如果你再装其他版本protobuf会导致多版本的protobuf存在。
执行如上指令以后还要删除库和头文件、执行文件:
sudo rm  /usr/local/bin/protoc
sudo rm  -rf /usr/local/include/google
sudo rm /usr/local/lib/libproto*
sudo pip3 uninstall protobuf

这里当你执行的过程中,可能会报错:

nvidia-yolov4@nvidiayolov4:~$ sudo rm  /usr/local/bin/protoc**rm: 无法删除'/usr/local/bin/protoc': 没有那个文件或目录** 
nvidia-yolov4@nvidiayolov4:~$ sudo rm  -rf /usr/local/include/google
nvidia-yolov4@nvidiayolov4:~$ sudo rm /usr/local/lib/libproto***rm: 无法删除'/usr/local/lib/libproto*': 没有那个文件或目录** 
nvidia-yolov4@nvidiayolov4:~$ sudo pip3 uninsall protobuf
ERROR: unknown command "uninsall" - maybe you meant "uninstall"
nvidia-yolov4@nvidiayolov4:~$ sudo pip3 uninstall protobuf
The directory '/home/nvidia-yolov4/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
Not uninstalling protobuf at /usr/lib/python3/dist-packages, outside environment /usr
nvidia-yolov4@nvidiayolov4:~$ sudo pip3 uninstall protobuf
The directory '/home/nvidia-yolov4/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
Not uninstalling protobuf at /usr/lib/python3/dist-packages, outside environment /usr

上面标注为黑色的错误,注意,只要保证这些位置里面没有我们想要删除的这些文件就OK 了。
Not uninstalling protobuf at /usr/lib/python3/dist-packages, outside environment /usr这个错误,解决方法如下:
没关系,找到/usr/lib/python3/dist-packages这个目录,然后执行下面的这个操作就好
相关参考链接如下:

https://blog.csdn.net/zhubaoguai/article/details/80303456
sudo rm -rf protobuf-3.0.0.egg-info
sudo pip3 uninstall protobuf
The directory '/home/nvidia-yolov4/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
Cannot uninstall requirement protobuf, not installed

这个就说明以及卸载好了

安装新版protobuf。(根据大佬的解释,他安装的是3.12.3我也就跟着安装这个版本)
解压、编译、安装
下载的地址如下:
https://github.com/protocolbuffers/protobuf/releases?after=3.15.0-rc1
这里我还把这个文件copy到了主目录下面,因为怕到时候其他地方出问题sudo tar zxvf protobuf-all-3.12.3.tar.gz
cd protobuf-3.12.3
./autogen.sh
./configure
make
make check
sudo make install
sudo ldconfig
安装protobuf的python模块
cd ./python
python3 setup.py build
python3 setup.py test
sudo python3 setup.py install

总结:要先安装低版本的protobuf,安装成功onnx后,再更新protobuf版本。

  1. 转换yolo文件这里分两个步骤
    1.将.weight模型文件转换成 .onnx 格式
    2.再将 .onnx文件转换成 .trt 格式
python3 yolo_to_onnx.py -m obj-yolov4-tiny
python3 onnx_to_tensorrt.py -m obj-yolov4-tiny -v
  1. 使用TRT运行yolov4、yolov4-tiny
    –usb 代表使用USB摄像机,我的是1,可以通过以下命令查看, --model则是选择特定模型:
ls /dev/video*
cd ${HOME}/project/tensorrt_demos
python3 trt_yolo.py --usb 1 --model obj-yolov4-tiny
ESC 即可退出该行程
注意要修改/home/nvidia-yolov4/tensorrt_demos/utils
该路径下面的yolo_classes.py
要将这个修改为我们的class
只有这样才能保证显示出来的为正确的class
  1. 测试效果
    yolov4在原darknet框架下运行帧率只有1FPS,使用tensorrt后可达到15FPS
    yolov4-tiny在原darknet框架下运行帧率只有10FPS,使用tensorrt后可达到50FPS

本篇文章主要参考以下两篇文章
参考一
参考二

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_102454.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三闯港交所,主打性价比的乡村基如何夺魁“中式快餐第一股”?

曾被中金公司称为“中国大消费最燃赛道”的中式餐饮,正在密集掀起IPO的风潮。去年5月和7月,老乡鸡和老娘舅分别向上交所提交招股书,绿茶餐厅、杨国福麻辣烫、捞王等企业也在推进上市计划。 国内第四大中式快餐集团,占据约0.6%市场…

Linux 通过Chrony实现NTP

Linux实现NTP服务器时间同步,可以通过ntp服务实现,也可以通过chrony服务实现 两者区别主要有 Chrony运行于UDP的323端口,NTP运行于UDP的123端口 Chrony相比于NTP可以更快同步,能够最大同步的减少时间和频率的误差 Chrony能够更好…

考过HCIP入职心仪公司,分享华为认证学习经历及心得

我成功考过了HCIP,并通过HCIP技术拿下了3家心仪公司。 学习经历 考过或者了解过HCIP的朋友都知道,考试内容大多数是概念类的问题。因为我工作的缘故没有太多时间自学,所以我报了个线上培训班,这个我不建议大家盲目跟风&#xff0…

EEG源定位

导读 自从脑电图(EEG)被发现以来,人们希望EEG能提供一个了解大脑的窗口,研究人员一直试图用EEG无创定位大脑中产生头皮电位的神经元活动。20世纪50年代的早期探索使用电场理论从头皮电位分布推断大脑中电流偶极子的位置和方向,引发了大量定量…

第五章-数字水印-2-原理及实现

数字水印原理 根据之前图像获取位平面的操作可知,最低位位平面对整体图像的影响最小,因此数字水印的原理为在图像的最低有效位上嵌入隐藏信息,即在图像的最低位替换为数字水印位平面,完成数字的嵌入操作,对已嵌入数字…

【opencv】图像数字化——矩阵的运算( 5 乘法运算)

5 乘法运算 5.1使用“*”运算符 对于Mat对象的乘法&#xff0c;两个Mat只能同时是float或者double类型&#xff0c;对于其它数据类型的矩阵乘法会报错src1的列数等于src2的行数mn * npmp #include <opencv2/core/core.hpp> #include<iostream> using namesp…

实战iOS App 重签名

熟悉iOS开发的同学都知道,iOS应用的上架流程主要分为以下几步: 创建开发者账号借助辅助工具appuploader创建证书,描述文件iTunes connect创建App打包IPA上传App Store等待审核在签名的流程中,有一个App重签名的步骤,主要针对的是一些大公司有多个App的情况,多个App一个申…

数据库基础篇 《4. 运算符》

目录 1. 算术运算符 1&#xff0e;加法与减法运算符 2&#xff0e;乘法与除法运算符 3&#xff0e;求模&#xff08;求余&#xff09;运算符 2. 比较运算符 1&#xff0e;等号运算符 2&#xff0e;安全等于运算符 3&#xff0e;不等于运算符 4. 空运算符 5. 非空运算…

Unity 工具控件 之 Text 文本字间距调整(老版本的Unity编写工具控件/新版本Unity使用TMP)

Unity 工具控件 之 Text 文本字间距调整(老版本的Unity编写工具控件/新版本Unity使用TMP) 目录 Unity 工具控件 之 Text 文本字间距调整(老版本的Unity编写工具控件/新版本Unity使用TMP) 一、简单介绍 二、老版本 Unity Text 使用工具控件调整行间距 三、新版本 Unity Text…

站在程序猿的角度理解:UDP 协议

哈喽&#xff0c;大家好~我是你们的老朋友&#xff1a; 保护小周ღ&#xff0c;本期为大家带来的是 网络基础原理中的 UDP 协议&#xff0c;从什么协议&#xff1f;&#xff0c;认识 UDP 协议&#xff0c;UDP 的报文格式&#xff0c;UDP 传输大文件时的策略&#xff0c;以及 UD…

VS code 插件之中英文间自动添加空格

前言 不知道大家在开发过程中是不是会遇到写代码注释或者文本内容时中英文之间没有空格的情况&#xff0c;很多时候在写代码尤其是写注释的时候容易忘记加空格&#xff0c;但回过头来看又难以忍受&#xff0c;于是我就想着自己写一个 vscode 插件来解决这个问题&#xff0c;希…

展会邀请 | 虹科诚邀您4月26-28日前来参观成都国际工业博览会

HONGKE NEWS 2023 成都国际工业博览会精准聚焦中国智能制造&#xff0c;将通过展示自动化和工业机器人技术、新一代信息技术、金属加工、节能与工业配套、新材料等全行业最新技术和解决方案&#xff0c;完美呈现智能工业产业链中的创新技术及产品的有效融合。 2023年4月26日-…

高效编程----VSCode+ChatGPT插件

VSCode中使用ChatGPT插件 首先在VSCode中打开扩展面板&#xff0c;搜索ChatGPT&#xff0c;安装蓝色圈出插件&#xff0c;如图所示&#xff1a; 安装完成后&#xff0c;需要重启VSCode 注册账号&#xff0c;如图所示&#xff1a; 然后在ChatGPT对话框中输入信息即可使用&#…

Python 实验四 常用数据结构(1)

1.从键盘输入一个正整数列表&#xff0c;以一1结束&#xff0c;分别计算列表中奇数和偶数的和。 n int(input("请输入一个正整数&#xff1a;")) list [] while n ! -1:list.append(n)n int(input("请输入一个正整数&#xff1a;")) else:print("…

【Linux网络】部署YUM仓库及NFS服务

部署YUM仓库及NSF服务 一、YUM仓库1.1、YUM仓库概述1.2准备安装来源1.3在软件仓库加载非官方RPM包组1.4yum与apt 二、配置yam源与制作索引表2.1配置FTP源2.2配置国内在线yum源2.3在线源与本地源同时使用2.4建立软件包索引关系表的三种方法 三、nfs共享存储服务3.1安装软件&…

Django框架之创建项目、应用并配置数据库

django3.0框架创建项目、应用并配置数据库 创建项目 进入命令行 新建一个全英文的目录 进入目录 输入命令 django-admin startproject project 项目目录层级 查看当前目录层级 tree /f 目录文件说明 创建数据库 做一个学生管理系统做演示&#xff0c;使用navicat创建数据…

ML之DR:sklearn.manifold(流形学习和降维的算法模块)的简介、部分源码解读、案例应用之详细攻略

ML之DR&#xff1a;sklearn.manifold(流形学习和降维的算法模块)的简介、部分源码解读、案例应用之详细攻略 目录 sklearn.manifold的简介 sklearn.manifold(流形学习和降维的算法模块)的概述 外文翻译 sklearn.manifold的部分源码解读 sklearn.manifold的简介 sklearn.ma…

Bugku——应急加固1

来打一下bugku的应急加固靶场&#xff0c;靶场链接&#xff1a;https://ctf.bugku.com/ctfplus/detail/id/2.html 启动环境 1、JS劫持域名 直接访问ip地址&#xff0c;发现是xxx学院二手交易市场&#xff0c;随后被劫持跳转到了一个博客页面。 博客地址就是第一个flag&…

Android音视频开发-OpenGL ES正交投影实现方法

本文实例为大家分享了OpenGL ES正交投影展示的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下 绘制正方形 在最开始绘制的六边形里面好像看起来挺容易的&#xff0c;也没有出现什么问题&#xff0c;接下来不妨忘记前面绘制六边形的代码&#xff0c;让我们按照自己的…

Ubuntu下打开QtCreator,环境变量(PATH、LD_LIBRARY_PATH等)与预期不一致的问题

现象展示 在Ubuntu中&#xff0c;安装好Qt之后&#xff0c;可以在系统桌面的左下角找到启动图标 但是&#xff0c;这种方式启动的QtCreator所读取到的环境变量和我们从命令行读取到的不一致&#xff1a; 可以看到&#xff0c;明显少了这个&#xff1a;/opt/ros/humble/bin 因…