windows上yolov5 6.0 6.1训练 jetson nano上用tensorrtx部署

目录

前言

一,yolov5 v6.1训练(主机windows)

1.准备好pycharm,anaconda。

2.在anaconda中创建python虚拟环境

3.下载yolov5源码(记住自己选择的版本)

4.在pytorch中验证pytorch与cuda是否成功

5. 在创建的虚拟环境中安装源码的requirment所需依赖

  问题记录:

6.准备数据集

7.训练数据集

8.主机上推理

二,tensorttx部署

1.查看nano上的配置

2.准备.wts文件  

3.运行.wts文件生成.engine

4.deppstream加速部署

前言

        做这个项目的时候,考虑到nano性能不足,于是在主机(windows)上训练,然后再将模型部署到jetson nano上。但是模型训练好后始终没有找到满意的方法,将模型文件移植到Nano上运行。后来随着搜索慢慢了解到了TensorRT,然后再接触到了大佬在GitHub上传的tensorrtx,让我一个对tensorrt和cuda编程不是很懂的人,也能使用TensorRT部署。(后续熟悉掌握再更新教程,现在只做问题记录)

一,yolov5 v6.1训练(主机windows)

        开始学习的时候,跟着炮哥用的yolov5  v5.0版的(初学者建议直接看参考文章的第一个链接,从下源码到训练数据集,炮哥讲得很细)。此时我再回首时,yolov5 v6.0、v6.1都已出来。秉着有最新的用最新的原则,就以v6.1版本为教程(yolov5 5.0和yolov5 6.0目录结构特性都有所不同,习惯5.0的,还是建议看炮哥)。当然主要也是yolov5 v6版本有我想要的特性,导出的onnx模型可直接被opencv dnn加载,还有更轻便的yolov5 nano迷你版pt模型等等。

        (4.13更新)前排提醒,tensorrtx最高目前只支持yolov5-6.0版本,所以想用tensorrtx加速,请换6.0的版本。6.0的windows训练推理过程和6.1一样,也可参考如下6.1的训练过程。

1.准备好pycharm,anaconda。

        pycharm官方网址:下载地址

        anaconda官方网址:下载地址

        pycharm社区版用来训练运行深度学习应该够用,annaconda直接下载就好。安装过程简单,不作过多赘述。

        记住anaconda安装位置。

2.在anaconda中创建python虚拟环境

       annconda安装完成后,cmd终端查询是否安装成功

conda -V

        ①安装成功,则创建自己的虚拟环境。(yolov5 v6.1要求 Python>=3.7,PyTorch>=1.7)

#conda create -n 虚拟环境名 python=所需版本 
conda create -n yolov5_6.1 python=3.8

       ②终端输入activate 进入自己环境

        

        ③终端输入nvidia-smi,查看电脑英伟达显卡cuda最高支持版本

        windows上yolov5 6.0 6.1训练 jetson nano上用tensorrtx部署_第1张图片

        ④pytorch官网选择合适的版本,复制红框中的命令

        windows上yolov5 6.0 6.1训练 jetson nano上用tensorrtx部署_第2张图片

         ⑤在虚拟环境中下载,着一步命令在安装pytorch的同时,也将cuda'安装

windows上yolov5 6.0 6.1训练 jetson nano上用tensorrtx部署_第3张图片

        常用conda命令

#激活环境
activate 环境名
#退出环境
deactivate 环境名
#下载
conda install
#查看所有用conda install命令安装的包
conda list
#删除当前环境中的包
conda remove 包名
#删除环境
conda remove --name 环境名 –all

3.下载yolov5源码(记住自己选择的版本)

        ①github下载地址,选择自己想要的版本

        windows上yolov5 6.0 6.1训练 jetson nano上用tensorrtx部署_第4张图片

         ②yolov5初始权重下载地址,根据自己的需求下载合适版本

windows上yolov5 6.0 6.1训练 jetson nano上用tensorrtx部署_第5张图片windows上yolov5 6.0 6.1训练 jetson nano上用tensorrtx部署_第6张图片

         ③考虑部署Nano,能小就尽量小,所以我选择下载yolov5n.pt作为初始权重

4.在pytorch中验证pytorch与cuda是否成功

        ①打开pycharm,导入下载yolov5源码

        windows上yolov5 6.0 6.1训练 jetson nano上用tensorrtx部署_第7张图片

 ②导入虚拟环境,虚拟环境在之前安装的anaconda路径中

        windows上yolov5 6.0 6.1训练 jetson nano上用tensorrtx部署_第8张图片windows上yolov5 6.0 6.1训练 jetson nano上用tensorrtx部署_第9张图片

        ③在源码根目录新建main文件,添加以下代码,运行显示如下结果。则安装成功

import torch
print(torch.cuda.is_available())
print(torch.backends.cudnn.is_available())
print(torch.cuda_version)
print(torch.backends.cudnn.version())

         windows上yolov5 6.0 6.1训练 jetson nano上用tensorrtx部署_第10张图片

5. 在创建的虚拟环境中安装源码的requirment所需依赖

        ①在源码解压目录,搜索cmd,回车打开终端

        windows上yolov5 6.0 6.1训练 jetson nano上用tensorrtx部署_第11张图片

         ②进入环境,保证网络畅通,下载依赖

activate yolov5_6.1

pip install -r requirements.txt

        windows上yolov5 6.0 6.1训练 jetson nano上用tensorrtx部署_第12张图片

  问题记录:

        ①安装pycocotools时会报错没有找到.whl文件,此时求快的话将其注释掉,然后运行源码训练就行,若担心则需要在搜索pycocotools手动安装下载。

        yolov5 v6.1直接注释了(捂脸笑)

6.准备数据集

       勾选数据集比较麻烦,建议直接网上下载划分好的yolo数据集 

        想要自己制作的话,转参考博客第一个链接 

问题记录:

        报错信息:UnicodeDecodeError: 'gbk' codec can't decode byte 0xae in position 125: illegal multibyte sequence   

        解决办法:读取文件所用格式 不对 ,在读取文件时,设置utf-8编码读取 

in_file = open('VOCdevkit/VOC2007/Annotations/%s.xml' % image_id,encoding="utf-8")

7.训练数据集

        ①准备完数据集此时,应该有一个如下目录结构包含数据集的文件夹(yolo标准的格式)。

                                        windows上yolov5 6.0 6.1训练 jetson nano上用tensorrtx部署_第13张图片

        ②修改cfg和data配置yaml文件

        ②-1,修改data的yaml文件,复制yolov5 6.1源码data目录下的VOC.yaml文件,粘贴在data目录下改名,然后对yaml文件进行更改。将数据集路径、数据集种类和分类名改为自己数据集的对应的数据。我找的一个垃圾分类的数据集,有9种分类如下图,分类名顺序和(自己的yolo数据集分类顺序一致)。

                windows上yolov5 6.0 6.1训练 jetson nano上用tensorrtx部署_第14张图片

         ②-2,修改cfg的yaml文件,和上步类似,复制models下的yaml文件,注意选择和自己所下载pt权重对应的yaml文件,我下载的是yolov5n.pt,所以我更改的是yolov5n.yaml文件。

                windows上yolov5 6.0 6.1训练 jetson nano上用tensorrtx部署_第15张图片

         ③修改源码根目录下的rain代码,将配置文件改为自己修改的路径。权重文件yolov5n.pt放在根目录。轮数决定训练时间,训练得越久,效果越好。注意batch大小,第一次训练建议直接设置为1,后续可根据自己显存大小调整以加快训练速度。(PS:yolov5 6.1路径前加上了ROOT/,我看着不习惯就删了,作用应该是将代码的相对路径变为运行时的绝对路径)

                windows上yolov5 6.0 6.1训练 jetson nano上用tensorrtx部署_第16张图片

         ④开始训练ing

                windows上yolov5 6.0 6.1训练 jetson nano上用tensorrtx部署_第17张图片

问题记录

        ImportError: DLL load failed while importing _ni_label: 页面文件太小,无法完

        解决办法:将batch-size调小  

         ⑤训练完成后,生成的pt文件在runs/train/exp15/weights(15是训练第十五轮的意思),如果上次训练中止,还没训练完想接着训练,那么将训练用的pt文件替换为这里的last.pt(训练中止前一轮论训练结果)就行,推理一般就有best.pt.

windows上yolov5 6.0 6.1训练 jetson nano上用tensorrtx部署_第18张图片

         ⑥打开终端,进入tensorboard

tensorboard --logdir=runs/train

windows上yolov5 6.0 6.1训练 jetson nano上用tensorrtx部署_第19张图片

         ⑥-1,点击下方的本地链接,查看训练结果。每一轮的训练结果都在这,可以说非常贴心了

windows上yolov5 6.0 6.1训练 jetson nano上用tensorrtx部署_第20张图片

8.主机上推理

        推理就很简单了,只需修改两句detect源码就能运行

windows上yolov5 6.0 6.1训练 jetson nano上用tensorrtx部署_第21张图片

        最后由于垃圾分类的数据集太差,效果不好,预测图就不展示了。

二,tensorttx部署

        若不是jetson nano自带的开发套件,普通的ubuntu需要自己选择tensorrt版本下载。

        警告一下,目前的tensorrttx还没有出6.1版本的,博主大意了,所以用tensorrttx部署需要使用yolov5-6.0或yolov5-5.0的进行训练导出,训练时注意下载对应的版本权重下载。

1.查看nano上的配置

操作系统查看命令:lsb_release -i -r

内核版本查看命令:uname -r

驱动版本查看命令:head -n 1 /etc/nv_tegra_release

CUDA版本查看命令:nvcc -V

cuDNN版本查看命令:dpkg -l libcudnn8

opencv版本查看命令:dpkg -l libopencv / pkg-config opencv --modversion

Tensorrt版本查看:dpkg -l tensorrt

官方源码及教程:GitHub - wang-xinyu/tensorrtx: Implementation of popular deep learning networks with TensorRT network definition API

2.准备.wts文件  

3.运行.wts文件生成.engine

问题记录:

Loading weights: ../best.wts
[03/01/2022-18:34:23] [E] [TRT] Parameter check failed at: ../builder/Network.cpp::addConvolutionNd::488, condition: kernelWeights.values != nullptr
yolov5: /home/upre/me/tensorrtx/yolov5/common.hpp:165: nvinfer1::ILayer* convBlock(nvinfer1::INetworkDefinition*, std::map, nvinfer1::Weights>&, nvinfer1::ITensor&, int, int, int, int, std::__cxx11::string): Assertion `conv1' failed.
已放弃

 yolov5的版本和tentsor版本没有对应,在github上下载时要选择yolov5标签,下载正确后的源码压缩包有yolov5版本号如:tensorrtx-yolov5-v5.0。下载对应的版本后,报错解决。

4.deppstream加速部署

        官方教程及源码:https://github.com/DanaHan/Yolov5-in-Deepstream-5.0.git

问题记录

        不知道是不是为用的yolov5版本有问题,第一部make源码都不行,我的yolov5版本为5.0.网上教程为3.0,3.1的。

        问题(1)找不到cuda的库

g++ -c -o yolo.o -Wall -std=c++11 -shared -fPIC -Wno-error=deprecated-declarations -I../includes -I/usr/local/cuda-11.3/include yolo.cpp
In file included from yolo.cpp:24:0:
yoloPlugins.h:28:10: fatal error: cuda_runtime_api.h: 没有那个文件或目录
 #include

         解决办法1:在主目录的隐藏文件中.bashrc中,添加以下代码,添加完成后,在主目录打开终端输入source ./.bashrc,一般情况就能解决。

export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
export CUDA_ROOT=/usr/local/cuda

export PATH=/usr/local/cuda/targets/aarch64-linux/include:$PATH
export PATH=/usr/local/cuda/include:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/include:$LD_LIBRARY_PATH
export CUDA_ROOT=/usr/local/cuda/include

        解决办法2:一般情况,解决办法1就能搞定,很不幸,我遇到了不一般的情况。报错的.h文件,我都在/usr/local/cuda/include中找到了,但是它却找不到。感觉还是对这个linux的环境下,编译文件寻找库的原理还不是很懂。之后详细看报错信息发现他是 g++ -I,-I表示它优先在这个文件夹里面寻找库文件。我的jetson nano cuda版本为10.0,所以后面的cuda11.3肯定是找不到,但前面的../includes可以找到,在编译文件的上一层,于是我将/usr/local/cuda/include中所有文件复制到该文件夹中,则解决报错。

        解决办法3:更改Makefile文件中的cuda版本,在第23行

CUDA_VER?=10.0

        改之前为11.3     

问题(2)make时yoloPlugins.h报错

g++ -c -o yolo.o -Wall -std=c++11 -shared -fPIC -Wno-error=deprecated-declarations -I../includes -I/usr/local/cuda-11.3/include yolo.cpp
In file included from yolo.cpp:24:0:
yoloPlugins.h:74:9: error: ‘int YoloLayerV3::enqueue(int, const void* const*, void* const*, void*, cudaStream_t)’ marked ‘override’, but does not override
     int enqueue (
         ^~~~~~~
yoloPlugins.h: In member function ‘virtual nvinfer1::IPluginV2* YoloLayerV3PluginCreator::deserializePlugin(const char*, const void*, size_t)’:
yoloPlugins.h:122:56: error: invalid new-expression of abstract class type ‘YoloLayerV3’
         return new YoloLayerV3(serialData, serialLength);

        尚未解决,感觉是版本问题,如果看这篇博客的也遇到相同的问题,建议更换yolov5版本为3.0或3.1。

windows上yolov5 6.0 6.1训练 jetson nano上用tensorrtx部署_第22张图片

参考博客

https://blog.csdn.net/didiaopao/category_11321656.html?spm=1001.2014.3001.5482

Jetson nano上部署自己的Yolov5模型(TensorRT加速)onnx模型转engine文件_sinat_28371057的博客-CSDN博客_jetson nano tensorrt加速 yolov5

DeepStream5.0系列之yolov5使用_ZONGXP的博客-CSDN博客_deepstream yolov5

你可能感兴趣的:(环境配置,深度学习,pytorch)