位置: IT常识 - 正文

yolov5训练并生成rknn模型以及3588平台部署(yolov2训练)

编辑:rootadmin
yolov5训练并生成rknn模型以及3588平台部署 1.服务器环境配置1.1GPU驱动安装

推荐整理分享yolov5训练并生成rknn模型以及3588平台部署(yolov2训练),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:yolov5训练命令,yolov2训练自己的数据,yolov2训练,yolov5+deepsort训练自己的数据,yolov2训练,yolov5训练结果,yolov5训练命令,yolov5训练命令,内容如对您有帮助,希望把文章链接给更多的朋友!

下载GPU驱动

https://www.nvidia.cn/geforce/drivers/

选择对应的显卡型号以及操作系统,点击搜索

选择最新的下载安装即可(所有选项默认设置最好)

终端输入命令查看是否安装正确

nvidia-smi

出现以下信息表明安装正确,其中红框为可以支持的cuda最高版本

1.2安装CUDA

下载CUDA Toolkit

https://developer.nvidia.com/cuda-toolkit-archive

选择最高支持的版本或者更低版本

选择系统等后点击下载

一切设置都默认即可,直接下一步

安装过程中可能出现失败,如出现关于c++的问题,可以通过安装Visual Studio,我安装的是2022社区版

https://visualstudio.microsoft.com/zh-hans/vs/

安装选择如下

安装完成后重新安装CUDA

1.3安装CUDNN

下载cudnn

https://developer.nvidia.com/rdp/cudnn-download

选择对应的包下载

下载完成后解压

放入该路径下对应的目录

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.71.4验证CUDA

终端输入

nvcc -V

显示如下图表明安装正确,红色框内为其版本

1.4安装Anaconda

下载Anaconda

https://www.anaconda.com/

下载对应系统的Anaconda,以windows为例

安装路径可自定义,其他默认即可,需要注意的是,需要勾选如下,可以免除配置环境变量的麻烦

终端输入

conda activate base

进入base环境,出现如下说明安装正确

1.5利用Anaconda创建yolov5运行环境1.5.1安装pytorch-GPU

终端输入如下命令,创建yolov5环境,python版本3.8(yolov5要求python版本>3.7,这里建议使用3.8)

conda create -n yolov5 python=3.8

一路回车以及yes即可安装成功,进入该环境命令如下,其余conda命令可自行搜索

conda activate yolov5

其余conda命令可自行百度搜索

打开pytorch官网

https://www.pytorch.org

选择对应操作系统以及CUDA版本的pytorch(这里的CUDA版本不能高于上面查看到的CUDA版本)

复制Run this Command中的命令(建议使用下面的命令,以解决版本问题)进入Anaconda的yolov5环境,输入该命令,随后等待安装完成即可,若安装失败,可自行换源解决

conda install pytorch==1.11.0 torchvision==0.12.0 torchaudio==0.11.0 cudatoolkit=11.3 -c pytorch

conda添加清华源

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/# 设置搜索时显示通道地址conda config --set show_channel_urls yes

安装完成后,在yolov5环境下输入

python

进入python中输入

import torchprint(torch.cuda.is_available())print(torch.backends.cudnn.is_available())

运行显示为则表明安装正确

TrueTrue1.5.2安装yolov5运行需要的包

获取yolov5的rknn友好版本

git clone https://github.com/airockchip/yolov5.git

在Ancaonda的yolov5环境下进入yolov5项目的根目录,pip安装包,-i 使用清华源更快

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

等待安装完成即可

其包含的包如下,确保安装完成base(训练运行需要的包),logging(日志),export(模型导出与格式转换)中包含的包:

# pip install -r requirements.txt# base ----------------------------------------Cythonmatplotlib>=3.2.2numpy>=1.18.5opencv-python>=4.1.2pillowPyYAML>=5.3scipy>=1.4.1tensorboard>=2.2torch>=1.6.0torchvision>=0.7.0tqdm>=4.41.0# logging -------------------------------------# wandb# coco ----------------------------------------# pycocotools>=2.0# export --------------------------------------# coremltools==4.0# onnx>=1.8.0# scikit-learn==0.19.2 # for coreml quantization# extras --------------------------------------# thop # FLOPS computation# seaborn # plotting

若出现版本不兼容问题,可以自行修改包的版本(满足最低要求的情况下)

2.yolov5项目修改2.1修改models/yolo.py解决报错:

其中的153行左右:

def _initialize_biases(self, cf=None): # initialize biases into Detect(), cf is class frequency # https://arxiv.org/abs/1708.02002 section 3.3 # cf = torch.bincount(torch.tensor(np.concatenate(dataset.labels, 0)[:, 0]).long(), minlength=nc) + 1. m = self.model[-1] # Detect() module for mi, s in zip(m.m, m.stride): # from b = mi.bias.view(m.na, -1) # conv.bias(255) to (3,85) b[:, 4] += math.log(8 / (640 / s) ** 2) # obj (8 objects per 640 image) b[:, 5:] += math.log(0.6 / (m.nc - 0.99)) if cf is None else torch.log(cf / cf.sum()) # cls mi.bias = torch.nn.Parameter(b.view(-1), requires_grad=True)

修改为:

def _initialize_biases(self, cf=None): # initialize biases into Detect(), cf is class frequency # https://arxiv.org/abs/1708.02002 section 3.3 # cf = torch.bincount(torch.tensor(np.concatenate(dataset.labels, 0)[:, 0]).long(), minlength=nc) + 1. m = self.model[-1] # Detect() module for mi, s in zip(m.m, m.stride): # from b = mi.bias.view(m.na, -1) # conv.bias(255) to (3,85) with torch.no_grad(): b[:, 4] += math.log(8 / (640 / s) ** 2) # obj (8 objects per 640 image) b[:, 5:] += math.log(0.6 / (m.nc - 0.99)) if cf is None else torch.log(cf / cf.sum()) # cls mi.bias = torch.nn.Parameter(b.view(-1), requires_grad=True)yolov5训练并生成rknn模型以及3588平台部署(yolov2训练)

解决报错问题

2.2修改utils/datasets.py:

这里是为了兼容自己的yolov4数据集,可以不做修改

其中的342行左右:

def img2label_paths(img_paths): # Define label paths as a function of image paths sa, sb = os.sep + 'images' + os.sep, os.sep + 'labels' + os.sep # /images/, /labels/ substrings return [x.replace(sa, sb, 1).replace(os.path.splitext(x)[-1], '.txt') for x in img_paths]

修改为:

def img2label_paths(img_paths): # Define label paths as a function of image paths sa, sb = os.sep + 'JPEGImages' + os.sep, os.sep + 'labels' + os.sep # /images/, /labels/ substrings return [x.replace(sa, sb, 1).replace(os.path.splitext(x)[-1], '.txt') for x in img_paths]

为了兼容yolov4使用的数据集,达到v4与v5公用数据集的目的

2.3新建data.yaml:

在data目录下创建my,yaml,内容如下(该文件为数据集的信息),可自行设置自己的数据。

# 训练,验证,测试集路径,其中xxx表示数据盘中的某个数据集train: /media/ubuntu/data/datasets/xxx/2007_train.txt val: /media/ubuntu/data/datasets/xxx/2007_train.txttest: /media/ubuntu/data/datasets/xxx/2007_train.txt# 类的个数nc: 2 # 类名names: ['red_jeep', 'missile_vehicle']2.4新建cfg.yaml

在data目录下创建rknn.yaml,内容如下(该文件为模型结构配置文件)

由于该项目版本的结构使用的是较为旧的模块,我们修改为了yolov5 6.0版本的backbone,head:结构以提高性能,其中由于6.0版本的输出与rknn不兼容,使用该项目的detect层解决这个问题。当然可以使用原项目的配置文件

nc: 2 # 类的个数depth_multiple: 0.33 # 深度倍率width_multiple: 0.50 # 通道倍率anchors: - [10,13, 16,30, 33,23] # P3/8 - [30,61, 62,45, 59,119] # P4/16 - [116,90, 156,198, 373,326] # P5/32# YOLOv5 v6.0 backbonebackbone: # [from, number, module, args] [[-1, 1, Conv, [64, 6, 2, 2]], # 0-P1/2 [-1, 1, Conv, [128, 3, 2]], # 1-P2/4 [-1, 3, C3, [128]], [-1, 1, Conv, [256, 3, 2]], # 3-P3/8 [-1, 6, C3, [256]], [-1, 1, Conv, [512, 3, 2]], # 5-P4/16 [-1, 9, C3, [512]], [-1, 1, Conv, [1024, 3, 2]], # 7-P5/32 [-1, 3, C3, [1024]], [-1, 1, SPPF, [1024, 5]], # 9 ]# YOLOv5 v6.0 headhead: [[-1, 1, Conv, [512, 1, 1]], [-1, 1, nn.Upsample, [None, 2, 'nearest']], [[-1, 6], 1, Concat, [1]], # cat backbone P4 [-1, 3, C3, [512, False]], # 13 [-1, 1, Conv, [256, 1, 1]], [-1, 1, nn.Upsample, [None, 2, 'nearest']], [[-1, 4], 1, Concat, [1]], # cat backbone P3 [-1, 3, C3, [256, False]], # 17 (P3/8-small) [-1, 1, Conv, [256, 3, 2]], [[-1, 14], 1, Concat, [1]], # cat head P4 [-1, 3, C3, [512, False]], # 20 (P4/16-medium) [-1, 1, Conv, [512, 3, 2]], [[-1, 10], 1, Concat, [1]], # cat head P5 [-1, 3, C3, [1024, False]], # 23 (P5/32-large) [[17, 20, 23], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5) ]2.5添加SPPF模块

打开models文件下的common.py文件,添加SPPF类,该文件下的激活函数已经修改为Relu,故不再做这个操作

class SPPF(nn.Module): # Spatial Pyramid Pooling - Fast (SPPF) layer for YOLOv5 by Glenn Jocher def __init__(self, c1, c2, k=5): # equivalent to SPP(k=(5, 9, 13)) super().__init__() c_ = c1 // 2 # hidden channels self.cv1 = Conv(c1, c_, 1, 1) self.cv2 = Conv(c_ * 4, c2, 1, 1) self.m = nn.MaxPool2d(kernel_size=k, stride=1, padding=k // 2) def forward(self, x): x = self.cv1(x) with warnings.catch_warnings(): warnings.simplefilter('ignore') # suppress torch 1.9.0 max_pool2d() warning y1 = self.m(x) y2 = self.m(y1) return self.cv2(torch.cat((x, y1, y2, self.m(y2)), 1))2.6模型构建中添加SPPF模块

修改models/yolo.py中的def parse_model函数219行

if m in [Conv, Bottleneck, SPP, DWConv, MixConv2d, Focus, CrossConv, BottleneckCSP, C3]:

修改为

if m in [Conv, Bottleneck, SPP, DWConv, MixConv2d, Focus, CrossConv, BottleneckCSP, C3, SPPF]:2.7报错tensor无法转换为numpy

这个错误是由于numpy版本过高导致

可以先卸载高版本numpy

pip uninstall numpy

再安装numpy1.18.5即可解决问题

pip install numpy==1.18.5 -i https://pypi.tuna.tsinghua.edu.cn/simple2.8不使用预训练权重

修改train.py,去除使用预训练模型

parser.add_argument('--weights', type=str, default='yolov5s.pt', help='initial weights path')

更改为:

parser.add_argument('--weights', type=str, default='', help='initial weights path')2.9若出现页面文件太小,无法完成操作OSError: [WinError 1455] 页面文件太小,无法完成操作。 Error loading "D:\anaconda3\envs\Yolo\lib\site-packages\torch\lib\shm.dll" or one of its dependencies.

修改对应盘符的虚拟内存,操作如下,大小可以看情况而定:

重启电脑,重新开始训练即可

3.yolov5模型训练

在Anaconda的yolov5,进入yolov5根目录,终端运行如下,选择模型配置文件和数据集文件即可开始训练

python --cfg models/rknn.yaml --data/my.yaml

训练完成后在runs文件夹下可以查看训练结果,weights保存了各阶段的模型,results.png为训练结果展示

4.pt格式→onnx格式

在Anaconda的yolov5,进入yolov5根目录,终端运行如下

python models/export.py --weight xx.pt# 此处为需要转换模型的相对路径 当然也可以是绝对路径 如runs/train/exp/weight/best.pt

若出现模块不存在的情况,只需要按照requirements.txt安装即可

5.onnx格式→rknn格式5.1虚拟机环境安装

由于rknn-toolkit2目前只支持linux,故而需要使用到虚拟机(rknn-toolkit不支持3588)

这里的虚拟机软件我使用的是VMware,系统为Ubuntu18.04,由于20.04版本存在vm-toolkit安装后无法拖动文件的情况,所以建议使用18.04,虚拟机的安装不再赘述

5.1.1安装Anaconda

官方文件中含有docker镜像,可以直接拉取使用,我们这里使用传统方式

由于Ubuntu18.04自带python3.6,为了避免冲突,简化操作,这里继续使用Anaconda创建rknn环境

https://www.anaconda.com/

下载对应操作系统,下载好后放在主目录下,运行,一路回车yes即可完成

sudo sh ./Anaconda3-2022.05-Linux-x86_64.sh

注意:最后询问是否添加到环境变量,回复yes

重新打开终端就可以看到,说明安装成功

5.1.2Anaconda创建rknn环境并安装rknn-toolkit2

rknn-toolkit2有python3.6 python3.8两个版本的包,我们这里选择python3.8

conda create -n rknn puthon=3.8

获取rknn-toolkit2安装包并进入改项目根目录

git clone https://github.com/rockchip-linux/rknn-toolkit2.gitcd rknn-toolkits-1.3.0

在Anaconda的rknn环境下安装rknn-toolkit2的依赖包

pip3 install -r requirements_cp38-1.3.0.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

安装rknn-toolkit2,若存咋版本不匹配问题,可以卸载包后重新安装其他版本

pip3 install package/rknn_toolkit2-1.3.0_11912b58-cp38-cp38-linux_x86_64.whl

测试安装是否成功

cd /examples/onnx/yolov5python3 test.py

运行正确表明安装正确

5.2模型转换

获取官方demo

git clone https://github.com/rockchip-linux/rknpu2.git

进入yolov5模型转换目录

cd /home/ptay/rknpu2-master/examples/rknn_yolov5_demo/convert_rknn_demo/yolov5

在onnx目录下放入以及转换好的onnx模型

打开onnx2rknn.py,修改如下:

​ 1.目标平台名

platform = 'rk3588'

​ 2.需要转化的onnx模型

MODEL_PATH = './onnx_models/best.onnx'

随后在rknn环境下运行,会生成新的rknn目录以及其目录下的rknn模型,随后对其修改名字即可,也可在py文件中修改,不是重点

python3 onnx2rknn.py6.3588平台部署

在3588的主目录上获取官方demo

git clone https://github.com/rockchip-linux/rknpu2.git

进入yolov5目录

cd /home/ptay/rknpu2-master/examples/rknn_yolov5_demo

修改include文件中的头文件postprocess.h

#define OBJ_CLASS_NUM 2 #这里的数字修改为数据集的类的个数

修改model目录下的coco_80_labels_list.txt文件,改为自己的类并保存

red_jeepmissile_vehicle

将转换后的rknn文件放在model/RK3588目录下

编译,运行shell

bash ./build-linux_RK3588.sh

成功后生成install目录

cd install/rknn_yolov5_demo_linux

在model目录下放入需要推理的图片

运行

./rknn_yolov5_demo ./model/RK3588/best.rknn ./model/test.jpg

在rknn_yolov5_demo_linux获取到结果,因为数据涉密问题这里我用了另一个数据集做结果展示

其他视频以及摄像头推理可以自行修改官方demo实现

本文链接地址:https://www.jiuchutong.com/zhishi/287973.html 转载请保留说明!

上一篇:VIte+Vue3 打包在FIle本地index.html打开项目(不需要起服务)(vue app打包)

下一篇:Vue3中通过 input 标签 发送文件/图片给后端(vue获取input)

  • 微信名片转发后无法添加怎么办(微信名片转发后无法添加再分享一次可以添加么)

    微信名片转发后无法添加怎么办(微信名片转发后无法添加再分享一次可以添加么)

  • realme gt neo2有耳机孔吗(realme gt neo2有耳机吗)

    realme gt neo2有耳机孔吗(realme gt neo2有耳机吗)

  • 华为Nova5Pro搭配了呼吸灯吗(华为nova5pro顶配)

    华为Nova5Pro搭配了呼吸灯吗(华为nova5pro顶配)

  • 小米手机屏幕失灵怎么回事(小米手机屏幕失灵怎么办?最简单的方法)

    小米手机屏幕失灵怎么回事(小米手机屏幕失灵怎么办?最简单的方法)

  • 为什么华为手机拍照感觉失真了(为什么华为手机突然黑屏然后按开机键都不显示)

    为什么华为手机拍照感觉失真了(为什么华为手机突然黑屏然后按开机键都不显示)

  • 抖音买商品不发货怎样解决(抖音买商品不发货怎么赔偿)

    抖音买商品不发货怎样解决(抖音买商品不发货怎么赔偿)

  • p20是徕卡双摄像头吗(华为p20pro莱卡镜头怎么用)

    p20是徕卡双摄像头吗(华为p20pro莱卡镜头怎么用)

  • 怎么把icloud照片下载到电脑上(怎么把icloud照片删除)

    怎么把icloud照片下载到电脑上(怎么把icloud照片删除)

  • 华为备忘录在哪里打开(华为备忘录如何置顶)

    华为备忘录在哪里打开(华为备忘录如何置顶)

  • 电容并联容量大还是小(电容并联容量大还是小计算)

    电容并联容量大还是小(电容并联容量大还是小计算)

  • 淘宝直播购物车在哪(淘宝直播购物车链接怎么弄)

    淘宝直播购物车在哪(淘宝直播购物车链接怎么弄)

  • 键盘分为哪几个区(键盘分为哪几个区图片)

    键盘分为哪几个区(键盘分为哪几个区图片)

  • 主板b360和b365区别(主板b360和b365哪个好)

    主板b360和b365区别(主板b360和b365哪个好)

  • 分量输入接口做什么用(分量输入接口改视频接口方法)

    分量输入接口做什么用(分量输入接口改视频接口方法)

  • 微信小号和大号互通吗(微信小号和大号会共享信息吗)

    微信小号和大号互通吗(微信小号和大号会共享信息吗)

  • 不用取卡器怎么把卡槽打开(不用取卡针怎么取卡)

    不用取卡器怎么把卡槽打开(不用取卡针怎么取卡)

  • 支付宝设置密码在哪里(iphone支付宝设置密码)

    支付宝设置密码在哪里(iphone支付宝设置密码)

  • 淘宝评价视频怎么下载(淘宝评价视频怎么下载保存)

    淘宝评价视频怎么下载(淘宝评价视频怎么下载保存)

  • 为什么朋友圈的视频不能看(为什么朋友圈的评论会隐藏呢)

    为什么朋友圈的视频不能看(为什么朋友圈的评论会隐藏呢)

  • 笔记本显卡烧了是什么症状(笔记本显卡烧了什么症状)

    笔记本显卡烧了是什么症状(笔记本显卡烧了什么症状)

  • iphonex设定关机时间(苹果x怎么设置关机键关机)

    iphonex设定关机时间(苹果x怎么设置关机键关机)

  • vivox23有微信美颜效果吗(vivox23有微信美颜功能吗)

    vivox23有微信美颜效果吗(vivox23有微信美颜功能吗)

  • 优学派图形密码忘了(优学派图形密码忘了怎么解锁)

    优学派图形密码忘了(优学派图形密码忘了怎么解锁)

  • 苹果7plus喇叭声音小(iphone7plus喇叭声音小解决方法)

    苹果7plus喇叭声音小(iphone7plus喇叭声音小解决方法)

  • 微信绑定不了手机号(微信绑定不了手机号怎么解决)

    微信绑定不了手机号(微信绑定不了手机号怎么解决)

  • 应纳税所得额怎么计算应纳税额
  • 个人以房产投资企业需要过户吗
  • 企业税前扣除凭证包括增值税发票吗
  • 金税四期对增值税发票的比对
  • 银行内部利息支出
  • 零申报资产总计不能为零
  • 国有企业改制资产评估增值税收规
  • 固定资产弃置费用计入什么科目
  • 汽车折旧年限 税法
  • 企业所得税广告费结转先扣哪一年
  • 持有至到期投资在资产负债表怎么填
  • 筹备期会计分录
  • 长期待摊费用当月增加当月摊销吗
  • 非金融机构定义
  • 公司租赁厂房开几个点发票
  • 金税四期具体内容
  • 物业会计科目设置
  • 所得税费用一年交几次
  • 期末未缴税额为正是什么意思
  • 哪些研发费用可以资本化
  • 股票现金分红
  • 六税两费包括哪三税
  • 招待费进项税额转出在申报表
  • 新版edge浏览器兼容模式怎么设置
  • 电脑删文件需要授权
  • 抵扣给供货商预缴税款
  • 电脑管家浏览器保护怎么取消
  • 提坏账准备的调整分录
  • 固定资产原值,净值,价值的区别
  • 巴拉诺维奇市
  • 盈余积累转增股本什么意思
  • 租入固定资产改建支出何时开始摊销
  • 英国布莱顿霍夫怎么样
  • 小规模纳税人超标认定一般纳税人
  • php页面跳转实现什么功能
  • 如何把html数据导入表格
  • json有几种基本结构
  • 企业会计准则季报利润表本期金额怎么填
  • 金融企业往来支出属于费用吗
  • 企业所得税退税如何进行账务处理
  • 公司的日常费用包括哪些
  • 事业单位会计结转分录
  • 营业执照上有劳务派遣还需要办其他手续吗
  • mysql使用中遇到的困难和问题
  • 织梦是啥
  • 一般纳税人如何交增值税
  • ms-sql-s
  • 个体工商户核算方式填什么
  • 基本户能转账吗现在
  • 外出经营必须办理外管证吗
  • 增值税发票税率计算公式
  • 年金现值的公式是怎么推导出来的
  • 运杂费计入什么会计科目
  • 发票验旧就是作废么?
  • 其他商业项目
  • sql server内存怎么设置合理
  • mysql 5.7.13 winx64安装配置方法图文教程
  • sqlserver数据库事物日志已满
  • 打印机取消打印在哪里
  • sar 命令
  • win10edge浏览器如何切换到ie
  • 写出10个linux系统操作命令和用法
  • 怎么改电脑windows7
  • ubuntu清空文件内容
  • youphone.exe是什么
  • Linux系统怎么重启网卡
  • 关于linux中Squid代理服务器的10个实用面试问答
  • 安卓百分百
  • qt渲染引擎
  • nodejs数据库数据渲染
  • 播放一个灵异电影
  • unity 游戏
  • axios使用jsonp
  • 个税申报系统如何增加新单位
  • 商场销售高档化妆品需要缴纳消费税吗
  • 江苏省财务官网
  • 小规模纳税人一年开票额度是多少
  • 辽宁地方税务局招聘
  • 下载国税网上申报
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设