当前位置: 首页 > news >正文

安徽网站备案网络广告营销成功案例

安徽网站备案,网络广告营销成功案例,建筑网站大全玻璃,域名 网址 网站名称YOLOv5训练自己的数据及rknn部署 一、下载源码二、准备自己的数据集2.1 标注图像2.2 数据集结构 三、配置YOLOv5训练3.1 修改配置文件3.2 模型选择 四、训练五、测试六、部署6.1 pt转onnx6.2 onnx转rknn 七、常见错误7.1 训练过程中的错误7.1.1 cuda: out of memory7.1.2 train…

YOLOv5训练自己的数据及rknn部署

  • 一、下载源码
  • 二、准备自己的数据集
    • 2.1 标注图像
    • 2.2 数据集结构
  • 三、配置YOLOv5训练
    • 3.1 修改配置文件
    • 3.2 模型选择
  • 四、训练
  • 五、测试
  • 六、部署
    • 6.1 pt转onnx
    • 6.2 onnx转rknn
  • 七、常见错误
    • 7.1 训练过程中的错误
      • 7.1.1 cuda: out of memory
      • 7.1.2 train: No such file or directory train.cache
      • 7.1.3 Expected object of scalar type __int64 but got scalar type float for sequence element 1.
      • 7.1.4 __init__() got an unexpected keyword argument 'generator'
      • 7.1.5 module 'torch.cuda.amp' has no attribute 'autocast'
    • 7.2 部署过程中的错误
      • 7.2.1 检测框越界/检测框不准
      • 7.2.2 检测框非常多、非常小

一、下载源码

https://github.com/ultralytics/yolov5/releases

二、准备自己的数据集

2.1 标注图像

利用LabelImg标注:

https://github.com/HumanSignal/labelImg

2.2 数据集结构

按照如下结构放置标注好的数据:

/path/to/dataset/images/trainimage1.jpgimage2.jpg.../valimage1.jpgimage2.jpg.../labels/trainimage1.txtimage2.txt.../valimage1.txtimage2.txt...

三、配置YOLOv5训练

3.1 修改配置文件

data文件夹中创建一个新的.yaml配置文件,例如my_dataset.yaml

train: /path/to/dataset/images/train
val: /path/to/dataset/images/valnc: 2  # 类别数量
names: ['class1', 'class2']  # 类别名称

3.2 模型选择

models文件夹中选择一个适合你任务的模型配置文件(例如yolov5s.yaml),可以根据需要进行调整,例如修改nc参数以匹配你的类别数量。

四、训练

一切准备就绪后,可以开始训练模型。运行以下命令:

python train.py --img 640 --batch 16 --epochs 50 --data data/my_dataset.yaml --weights yolov5s.pt --device cuda:0

参数解释:

  • --img 640 指定训练时的图像尺寸为640x640。
  • --batch 16 指定每批次处理的图片数量为16。
  • --epochs 50 设置训练的轮数为50。
  • --data data/my_dataset.yaml 使用我们刚才配置的数据集文件。
  • --cfg models/yolov5s.yaml 使用YOLOv5s模型配置。
  • --weights yolov5s.pt 使用预训练权重。
  • --device 使用cuda还是cpu。

训练过程图:
在这里插入图片描述

五、测试

将best.pt和图像拷贝到detect.py同路径下,终端切换到该路径,输入:

python detect.py --weights best.pt --img 640 --source test2.jpg

按照终端显示的保存路径,查看效果。

在这里插入图片描述

六、部署

6.1 pt转onnx

将model/yolo.py的 Detect 类下的

def forward(self, x):z = []  # inference outputfor i in range(self.nl):if getattr(self, 'seg_seperate', False):c, s = self.m_replace[i](x[i])if getattr(self, 'export', False):z.append(c)z.append(s)continuebs, _, ny, nx = c.shapec = c.reshape(bs, self.na, -1, ny, nx)s = s.reshape(bs, self.na, -1, ny, nx)x[i] = torch.cat([c, s], 2).permute(0, 1, 3, 4, 2).contiguous()elif getattr(self, 'detect_seperate', False):z.append(torch.sigmoid(self.m[i](x[i])))continueelse:x[i] = self.m[i](x[i])  # convbs, _, ny, nx = x[i].shape  # x(bs,255,20,20) to x(bs,3,20,20,85)x[i] = x[i].view(bs, self.na, self.no, ny, nx).permute(0, 1, 3, 4, 2).contiguous()if not self.training:  # inferenceif self.dynamic or self.grid[i].shape[2:4] != x[i].shape[2:4]:self.grid[i], self.anchor_grid[i] = self._make_grid(nx, ny, i)if isinstance(self, Segment):  # (boxes + masks)xy, wh, conf, mask = x[i].split((2, 2, self.nc + 1, self.no - self.nc - 5), 4)xy = (xy.sigmoid() * 2 + self.grid[i]) * self.stride[i]  # xywh = (wh.sigmoid() * 2) ** 2 * self.anchor_grid[i]  # why = torch.cat((xy, wh, conf.sigmoid(), mask), 4)else:  # Detect (boxes only)xy, wh, conf = x[i].sigmoid().split((2, 2, self.nc + 1), 4)xy = (xy * 2 + self.grid[i]) * self.stride[i]  # xywh = (wh * 2) ** 2 * self.anchor_grid[i]  # why = torch.cat((xy, wh, conf), 4)z.append(y.view(bs, self.na * nx * ny, self.no))if getattr(self, 'export', False):return zreturn x if self.training else (torch.cat(z, 1),) if self.export else (torch.cat(z, 1), x)

修改为:

def forward(self, x):z = []for i in range(self.nl):x[i] = torch.sigmoid(self.m[i](x[i]))return x

将训练好的best.pt放在工程文件夹下,使用yolov5工程中的export.py将其转换为onnx模型。

python export.py --weights best.pt

生成onnx:

在这里插入图片描述

将生成的onnx文件导入netron(https://netron.app/)中,查看输出是否为3个分支。

在这里插入图片描述

若是3个分支,表示onnx生成成功。

6.2 onnx转rknn

文件结构

/path/bus.jpg/datasets.txt/yolov5_convert.py/best.onnx

datasets的内容:

./bus.jpg

下载转换的程序:
https://github.com/airockchip/rknn-toolkit2/blob/master/rknn-toolkit2/examples/onnx/yolov5/test.py

结合自己的文件路径与类别,修改test.py后运行,便可得到rknn文件。

七、常见错误

7.1 训练过程中的错误

7.1.1 cuda: out of memory

说明内存不足,修改batch的数量,由16改为8或者更小的数。

7.1.2 train: No such file or directory train.cache

方法 1:使用--cache选项强制缓存

python train.py --img 640 --batch 16 --epochs 50 --data data/my_dataset.yaml --weights yolov5s.pt --device cuda:0 --cache

这样,YOLOv5会在数据加载时创建train.cache文件。

方法 2:手动创建缓存

通过运行YOLOv5的dataloaders.py中的create_dataloader函数来创建缓存文件。

python utils/dataloaders.py --data my_dataset.yaml --cache

7.1.3 Expected object of scalar type __int64 but got scalar type float for sequence element 1.

错误位置:

matches = torch.cat((torch.stack(x, 1).long(), iou[x[0], x[1]][:, None]), 1).cpu().numpy()  # [label, detect, iou]

错误原因:索引应该为整型,而不是浮点型,应该利用.long()转成int_64。

修改:

matches = torch.cat((torch.stack(x, 1).long(), iou[x[0], x[1]].long()[:, None]), 1).cpu().numpy()

7.1.4 init() got an unexpected keyword argument ‘generator’

该属性是1.6版本新增加的,所以升级pytorch1.6及以上。

7.1.5 module ‘torch.cuda.amp’ has no attribute ‘autocast’

该属性是1.6版本新增加的,所以升级pytorch1.6及以上。

7.2 部署过程中的错误

7.2.1 检测框越界/检测框不准

在train.py中,noaotoanchor的默认为False,如果设定为True,则会使用默认的anchor设定。
所以,如果经过autoanchor,给出了新的anchor设定,那么在推理和转完rknn后的设定,都需要与之相匹配的anchor,而不是用默认的coco数据集的anchor。

默认的coco数据集anchor:
anchors = [[10, 13], [16, 30], [33, 23], [30, 61], [62, 45],[59, 119], [116, 90], [156, 198], [373, 326]]

利用如下代码,查看自己数据集的anchor:

from models.experimental import attempt_loadmodel = attempt_load('best.pt')  # 加载权重路径
m = model.module.model[-1] if hasattr(model, 'module') else model.model[-1]
print(m.anchor_grid)

在6.2小节的test.py:
yolov5_post_process函数中的anchors参数值,修改为自己数据集的anchors值。

7.2.2 检测框非常多、非常小

由于6.1小节中在修改forward方法时,为了避免置信度大于1,增加了sigmoid函数。所以在6.2小节中test.py的process方法里不应该再有sigmoid函数。不能两个方法都写sigmoid函数,要么forward方法里写sigmoid函数,要么process方法里写sigmoid函数。

http://www.rdtb.cn/news/2848.html

相关文章:

  • 和朋友合伙做网站营销策划
  • 宫免费网站网站关键词搜索
  • 一键抓取的网站怎么做seo搜索推广费用多少
  • 建立自己的购物网站品牌整合营销推广
  • 漳州建设局网站首页百度seo查询
  • 厦门建设厅查询网站今天重大新闻事件
  • 淘宝做轮播广告哪个网站好南平网站seo
  • 邦策网站建设长沙网站推广
  • 武汉做网站企业获取排名
  • 做网站 数据标准seo流量是什么
  • 静态网站分页网络推广是做什么工作的
  • 建设网站公司宝鸡百度seo2022
  • 中国建筑装饰网唐迪夫优化大师windows
  • 烟台外贸网站建设网站关键词优化价格
  • 深圳知名网站建设平台优秀网站设计网站
  • 网站文章更新怎么做百度网站下拉排名
  • wordpress弹性搜索seo教学视频教程
  • 网站空间流量手机网站搜索优化
  • 男女做爰视频免费网站百度seo排名查询
  • 网站备案 多久seo建站优化推广
  • 网站建站卖首饰侵权沈阳seo优化新势力
  • 网站建设吗google play下载官方版
  • 怎么去投诉做网站的公司百度快照优化推广
  • 现在那个网站做视频最赚钱吗百度风云榜各年度小说排行榜
  • 服务器架构做网站惠东seo公司
  • 临沂做网站推广的公司有爱站网关键词工具
  • 重庆市门户网站制作百度推广客服电话
  • 网站关键字排名提升工具2023最近爆发的流感叫什么
  • 山东聊城做网站一个网站如何推广
  • 云网站系统网站建设技术解决方案