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

巴彦淖尔市网站建设网站备案变更公司名称

巴彦淖尔市网站建设,网站备案变更公司名称,潍坊市做网站,谷歌怎么推广自己的网站前言 Hello#xff0c;小伙伴们~~我最近做了一个比较有意思的东西#xff0c;想起来也好久没有写博客了#xff0c;就记录一下吧。希望和大家一起学习#xff0c;一起进步#xff01; 我简单介绍一下我最近做的这个东西的经过哈~上个月在B站上看到了一个博主发了一条视频关…前言 Hello小伙伴们~~我最近做了一个比较有意思的东西想起来也好久没有写博客了就记录一下吧。希望和大家一起学习一起进步 我简单介绍一下我最近做的这个东西的经过哈~上个月在B站上看到了一个博主发了一条视频关于边缘计算相关的他仅仅用了一块巴掌不到的开发板完成了yolo的目标检测功能而且延时还比较低成本也仅有100元不到倍感神奇哇然后我就去学习了一下关于NPU计算相关的知识刚好有小伙伴手里有一块类似的开发板于是就有了这篇博客。 PS我用的这块开发板的NPU芯片的算力达到了6TOPS而上述博主的开发板芯片只有0.5TOPS。但是我尽力啦~~ 设备 板卡 为了避免打广告我这里就简单放一下板卡的基本信息的介绍吧。 然后板卡长这样 这个板卡是自带系统的我使用的是Ubuntu20.04的操作系统。 电脑 这个电脑需要有Ubuntu操作系统。我使用的是windows10然后安装了Ubuntu20.04虚拟机。这台电脑主要是将pytorch生成的.pt文件转换成.onnx文件最后转成.rknn文件。 权重转换 yolov8训练 在权重转换前需要创建自己训练集然后使用yolov8训练出自己训练集的权重。这里就不做过多的解释了简单贴一下训练集中的标注文件和训练用的比较重要的两个配置文件。 标注文件解释 训练集配置myDetData.yaml # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..] path: 训练集路径 # dataset root dir train: images/train # train images (relative to path) 118287 images val: images/val # val images (relative to path) 5000 images #test: test-dev2017.txt # 20288 of 40670 images, submit to https://competitions.codalab.org/competitions/20794# Classes names:0: hole #种类索引和具体类别名称 nc: 1 #种类数量 网络配置yolov8s.yaml # Ultralytics YOLO , AGPL-3.0 license # YOLOv8 object detection model with P3-P5 outputs. For Usage examples see https://docs.ultralytics.com/tasks/detect# Parameters nc: 1 # number of classes scales: # model compound scaling constants, i.e. modelyolov8n.yaml will call yolov8.yaml with scale n# [depth, width, max_channels] # n: [0.33, 0.25, 1024] # YOLOv8n summary: 225 layers, 3157200 parameters, 3157184 gradients, 8.9 GFLOPss: [0.33, 0.50, 1024] # YOLOv8s summary: 225 layers, 11166560 parameters, 11166544 gradients, 28.8 GFLOPs # m: [0.67, 0.75, 768] # YOLOv8m summary: 295 layers, 25902640 parameters, 25902624 gradients, 79.3 GFLOPs # l: [1.00, 1.00, 512] # YOLOv8l summary: 365 layers, 43691520 parameters, 43691504 gradients, 165.7 GFLOPs # x: [1.00, 1.25, 512] # YOLOv8x summary: 365 layers, 68229648 parameters, 68229632 gradients, 258.5 GFLOPs# YOLOv8.0n backbone backbone:# [from, repeats, module, args]- [-1, 1, Conv, [64, 3, 2]] # 0-P1/2- [-1, 1, Conv, [128, 3, 2]] # 1-P2/4- [-1, 3, C2f, [128, True]]- [-1, 1, Conv, [256, 3, 2]] # 3-P3/8- [-1, 6, C2f, [256, True]]- [-1, 1, Conv, [512, 3, 2]] # 5-P4/16- [-1, 6, C2f, [512, True]]- [-1, 1, Conv, [1024, 3, 2]] # 7-P5/32- [-1, 3, C2f, [1024, True]]- [-1, 1, SPPF, [1024, 5]] # 9# YOLOv8.0n head head:- [-1, 1, nn.Upsample, [None, 2, nearest]]- [[-1, 6], 1, Concat, [1]] # cat backbone P4- [-1, 3, C2f, [512]] # 12- [-1, 1, nn.Upsample, [None, 2, nearest]]- [[-1, 4], 1, Concat, [1]] # cat backbone P3- [-1, 3, C2f, [256]] # 15 (P3/8-small)- [-1, 1, Conv, [256, 3, 2]]- [[-1, 12], 1, Concat, [1]] # cat head P4- [-1, 3, C2f, [512]] # 18 (P4/16-medium)- [-1, 1, Conv, [512, 3, 2]]- [[-1, 9], 1, Concat, [1]] # cat head P5- [-1, 3, C2f, [1024]] # 21 (P5/32-large)- [[15, 18, 21], 1, Detect, [nc]] # Detect(P3, P4, P5)训练配置train.py from ultralytics import YOLOif __name__ __main__:# 加载模型model YOLO(ryolov8s.yaml).load(yolov8s.pt) # 使用预训练权重训练# 训练参数 ----------------------------------------------------------------------------------------------model.train(datarmyDetectData.yaml,epochs300, # (int) 训练的周期数patience50, # (int) 等待无明显改善以进行早期停止的周期数batch32, # (int) 每批次的图像数量-1 为自动批处理imgsz640, # (int) 输入图像的大小整数或whsaveTrue, # (bool) 保存训练检查点和预测结果save_period-1, # (int) 每x周期保存检查点如果小于1则禁用cacheFalse, # (bool) True/ram、磁盘或False。使用缓存加载数据device0, # (int | str | list, optional) 运行的设备例如 cuda device0 或 device0,1,2,3 或 devicecpuworkers8, # (int) 数据加载的工作线程数每个DDP进程projectruns/train, # (str, optional) 项目名称nameexp, # (str, optional) 实验名称结果保存在project/name目录下exist_okFalse, # (bool) 是否覆盖现有实验pretrainedTrue, # (bool | str) 是否使用预训练模型bool或从中加载权重的模型stroptimizerSGD, # (str) 要使用的优化器选择[SGDAdamAdamaxAdamWNAdamRAdamRMSPropauto]verboseTrue, # (bool) 是否打印详细输出seed0, # (int) 用于可重复性的随机种子deterministicTrue, # (bool) 是否启用确定性模式single_clsFalse, # (bool) 将多类数据训练为单类rectFalse, # (bool) 如果modetrain则进行矩形训练如果modeval则进行矩形验证cos_lrFalse, # (bool) 使用余弦学习率调度器close_mosaic0, # (int) 在最后几个周期禁用马赛克增强resumeFalse, # (bool) 从上一个检查点恢复训练ampTrue, # (bool) 自动混合精度AMP训练选择[True, False]True运行AMP检查fraction1.0, # (float) 要训练的数据集分数默认为1.0训练集中的所有图像profileFalse, # (bool) 在训练期间为记录器启用ONNX和TensorRT速度# freeze None, # (int | list, 可选) 在训练期间冻结前 n 层或冻结层索引列表。# 分割overlap_maskTrue, # (bool) 训练期间是否应重叠掩码仅适用于分割训练mask_ratio4, # (int) 掩码降采样比例仅适用于分割训练# 分类dropout0.0, # (float) 使用丢弃正则化仅适用于分类训练# 超参数 ----------------------------------------------------------------------------------------------lr00.01, # (float) 初始学习率例如SGD1E-2Adam1E-3lrf0.01, # (float) 最终学习率lr0 * lrfmomentum0.937, # (float) SGD动量/Adam beta1weight_decay0.0005, # (float) 优化器权重衰减 5e-4warmup_epochs3.0, # (float) 预热周期分数可用warmup_momentum0.8, # (float) 预热初始动量warmup_bias_lr0.1, # (float) 预热初始偏置学习率box7.5, # (float) 盒损失增益cls0.5, # (float) 类别损失增益与像素比例dfl1.5, # (float) dfl损失增益pose12.0, # (float) 姿势损失增益kobj1.0, # (float) 关键点对象损失增益label_smoothing0.0, # (float) 标签平滑分数nbs64, # (int) 名义批量大小hsv_h0.015, # (float) 图像HSV-Hue增强分数hsv_s0.7, # (float) 图像HSV-Saturation增强分数hsv_v0.4, # (float) 图像HSV-Value增强分数degrees0.0, # (float) 图像旋转/- degtranslate0.1, # (float) 图像平移/- 分数scale0.5, # (float) 图像缩放/- 增益shear0.0, # (float) 图像剪切/- degperspective0.0, # (float) 图像透视/- 分数范围为0-0.001flipud0.0, # (float) 图像上下翻转概率fliplr0.5, # (float) 图像左右翻转概率mosaic1.0, # (float) 图像马赛克概率mixup0.0, # (float) 图像混合概率copy_paste0.0, # (float) 分割复制-粘贴概率) 注意事项 在后续导出onnx权重时有一点要特别注意就是yolov8的版本问题使用最新版的yolov8版本可能会报错AttributeError: Segment object has no attribute detect。我使用的是yolov8的8.0.151版本。注意该文件最好仅用于yolov8训练 pt转onnx 这个地方我使用的是这个代码”pt转onnx“。这个里面对应的yolov8版本就是8.0.151的如果用的版本对不上很有可能会报 AttributeError: Segment object has no attribute detect的错误。另外这个链接里面的代码还有一部分需要修改。注意该链接代码最好仅用于pt转onnx 在./ultralytics/nn/modules/head.py中需要修改为 # 导出 onnx 增加y []for i in range(self.nl):sigmoid nn.Sigmoid()t1 self.cv2[i](x[i])# 这里没有加sigmoid会出现置信度大于1的情况t2 sigmoid(self.cv3[i](x[i]))y.append(t1)y.append(t2)a torch.sum(t2, dim(1, ), keepdimTrue).clip(min0, max1)y.append(a)return y 如果要导出yolov8s-seg对应的onnx文件的小伙伴还需要改一个地方 p self.proto(x[0]) # mask protosbs p.shape[0] # batch size# 导出 onnx 增加(修改)# mc torch.cat([self.cv4[i](x[i]).view(bs, self.nm, -1) for i in range(self.nl)], 2) # mask coefficientsmc [self.cv4[i](x[i]) for i in range(self.nl)]x self.detect(self, x)return x[0], x[1], x[2], mc[0], x[3], x[4], x[5], mc[1], x[6], x[7], x[8], mc[2], p 另外就是导出部分需要再改一下代码。 在./ultralytics/engine/model.py文件中 if self.task detect:print( onnx )import torchdummy_input torch.randn(1, 3, 640, 640)input_names [data]output_names [reg1, cls1, scc1, reg2, cls2, scc2, reg3, cls3, scc3]torch.onnx.export(self.model, dummy_input, ./yolov8s_rknn.onnx, verboseFalse, input_namesinput_names, output_namesoutput_names, opset_version11)print( convert onnx Finished! .... )returnif self.task segment:print( onnx )import torchdummy_input torch.randn(1, 3, 640, 640)input_names [data]output_names [cls1, reg1, scc1, mc1, cls2, reg2, scc2, mc2, cls3, reg3, scc3, mc3, seg]torch.onnx.export(self.model, dummy_input, ./yolov8s_seg_rknn.onnx, verboseFalse, input_namesinput_names, output_namesoutput_names, opset_version12)print( convert onnx Finished! .... )return 修改完上述代码后就可以新建一个文件export.py了。文件内容如下 from ultralytics import YOLO # 推理 model YOLO(./best.pt) results model(taskdetect, modepredict, source./20240823092916.png, line_width3, showTrue, saveTrue, device0)# results model(tasksegment, modepredict, source./20240823092916.png, line_width3, showTrue, saveTrue, device0) 运行上面的文件就会出现下面的报错如果报错和下方图片一样则表明转换成功。 这里我按照官方给的文件进行修改的。 使用netron查看之后可以发现经过上述修改之后导出的文件结果和官方给出的结果是一模一样的。 detect segment 到这基本上就完成一半的工作了。后面就是onnx转rknn了这一部分需要在Ubuntu下完成。 onnx转rknn 完成这一步需要先配置一下python的环境然后下载rknn-toolkit2文件。这个文件有点大小伙伴也可以直接下载对应的requirements_cp38-1.6.0.txt和rknn_toolkit2-1.6.081f21f4d-cp38-cp38-linux_x86_64.whl这样会小很多。然后使用下面命令 cd 到requirements_cp38-1.6.0.txt路径下 pip install -r requirements_cp38-1.6.0.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/等到上述指令安装完成后 cd 到rknn_toolkit2-1.6.081f21f4d-cp38-cp38-linux_x86_64.whl路径下 pip install rknn_toolkit2-1.6.081f21f4d-cp38-cp38-linux_x86_64.whl -i https://pypi.tuna.tsinghua.edu.cn/simple/ 到这一步基本环境就配置完成了如果后面还需要其他的包再继续安装就好了。 下面再下载rknn_model_zoo就可以进行onnx转rknn的模型转换了。 下载完成后先进入到./rknn_model_zoo/examples/yolov8/python目录下将上一步生成的onnx文件复制到该路径下。 先运行下面的指令验证导出模型的是否正确。 python3 yolov8.py --model_path yolov8s_rknn.onnx --img_show 这里如果是使用自己的训练集的话需要改一下yolov8.py中的CLASSES的种类。上面这种情况就表明onnx权重导出没问题。 python3 convert.py yolov8s_rknn.onnx rk3588s(或者rk3588)出现-- Export rknn model        done则表明导出成功。 rknn模型在./rknn_model_zoo/examples/yolov8/model中
http://www.hkea.cn/news/14502929/

相关文章:

  • 广东智能网站建设哪家有通州网站建设是什么
  • 非凡网站开发培训什么网站做任务可以赚钱
  • 如何做关于橱柜网站可以不花钱做网站吗
  • 福永自适应网站建国际进出口贸易网站
  • 简单的网站建设步骤搭建网站需要哪些步骤
  • 局门户网站的建设狠友紧急升级访问页面
  • 网站开发需要提供哪些东西网站架构文案
  • 网站怎么建立支付平台微信支付宝付款wordpress
  • 重庆营销型网站建设公司郑州个人网站建设
  • wordpress 站群插件北京58网站建设
  • 网站备案需要费用吗ppt模板设计
  • 开发网站监控工具最成功的网络营销案例
  • 超酷win8风格企业网站织梦模板申请企业邮箱步骤是什么?
  • 阿里云做的网站怎么样wordpress瀑布流主 65533
  • 做网站建百度集团
  • 赶集网的二级域名网站怎么做濮阳做网站的价格
  • 提供网站建设服务网站ui界面设计软件
  • 网站开发学什么语言关于校园推广的软文
  • 出口外贸网站定制橱柜
  • html网站成品下载网站建设完工报告
  • 网站总体设计方案电商千万不要做虾皮
  • 企业网站建立的失败案例wordpress改二级域名
  • 网站设计公司排名湖北勘察设计协会网站
  • php网站带数据库html做网站在手机上显示
  • 自己做个网站需要什么昆山网站建设机构
  • 昆明建网站公司兰州产品营销网站建设
  • wap网站现在还有什么用小程序软件定制
  • 如何建立一个网站英语作文毕业设计做网站功能实现不出怎么办
  • 企业如何实现高端网站建设腾讯小程序怎么制作
  • 湖南网站制作公司推荐wordpress模板 极简