位置: IT常识 - 正文

yolov8 瑞芯微RKNN和地平线Horizon芯片仿真测试部署(瑞芯微 8nm)

编辑:rootadmin
yolov8 瑞芯微RKNN和地平线Horizon芯片仿真测试部署

推荐整理分享yolov8 瑞芯微RKNN和地平线Horizon芯片仿真测试部署(瑞芯微 8nm),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:瑞芯微rk809,瑞芯微rk618,瑞芯微rk2108,瑞芯微rk2108,瑞芯微rk809,瑞芯微rk618,瑞芯微rk1808,瑞芯微rk809,内容如对您有帮助,希望把文章链接给更多的朋友!

特别说明:参考官方开源的yolov8代码、瑞芯微官方文档、地平线的官方文档,如有侵权告知删,谢谢。

模型和完整仿真测试代码,放在github上参考链接 模型和代码。

跟上技术的步伐,yolov8 首个板端芯片部署。

1 模型和训练

  训练代码参考官方开源的yolov8训练代码,由于SiLU在有些板端芯片上还不支持,因此将其改为ReLU。

2 导出 yolov8 onnxyolov8 瑞芯微RKNN和地平线Horizon芯片仿真测试部署(瑞芯微 8nm)

   后处理中有些算在板端芯片上效率低或者不支持,导出 onnx 需要将板端芯片不友好或不支持算子规避掉。导出onnx修改的部分。

第一步: 进行预测将pt只保存权重,增加代码如下图。

# 保存权重值 import torch self.model.fuse() self.model.eval() torch.save(self.model.state_dict(), './weights/Yolov8_dict.pt') # self.model.load_state_dict(torch.load('./weights/Yolov8_dict.pt', map_location='cpu'))

修改后运行以下代码:

from ultralytics import YOLOmodel = YOLO('./weights/yolov8n_coco128.pt')results = model(task='detect', mode='predict', source='./images/test.jpg', line_thickness=3, show=True, save=True, device='cpu')

第二步: 导出onnx,去除不需要的算子。修改代码如下。

# headsclass Detect(nn.Module): # YOLOv8 Detect head for detection models dynamic = False # force grid reconstruction export = False # export mode shape = None anchors = torch.empty(0) # init strides = torch.empty(0) # init def __init__(self, nc=80, ch=()): # detection layer super().__init__() self.nc = nc # number of classes self.nl = len(ch) # number of detection layers self.reg_max = 16 # DFL channels (ch[0] // 16 to scale 4/8/12/16/20 for n/s/m/l/x) self.no = nc + self.reg_max * 4 # number of outputs per anchor self.stride = torch.zeros(self.nl) # strides computed during build c2, c3 = max((16, ch[0] // 4, self.reg_max * 4)), max(ch[0], self.nc) # channels self.cv2 = nn.ModuleList( nn.Sequential(Conv(x, c2, 3), Conv(c2, c2, 3), nn.Conv2d(c2, 4 * self.reg_max, 1)) for x in ch) self.cv3 = nn.ModuleList(nn.Sequential(Conv(x, c3, 3), Conv(c3, c3, 3), nn.Conv2d(c3, self.nc, 1)) for x in ch) self.dfl = DFL(self.reg_max) if self.reg_max > 1 else nn.Identity() # 导出 onnx 增加 self.conv1x1 = nn.Conv2d(16, 1, 1, bias=False).requires_grad_(False) x = torch.arange(16, dtype=torch.float) self.conv1x1.weight.data[:] = nn.Parameter(x.view(1, 16, 1, 1)) def forward(self, x): shape = x[0].shape # BCHW y = [] for i in range(self.nl): t1 = self.cv2[i](x[i]) t2 = self.cv3[i](x[i]) y.append(self.conv1x1(t1.view(t1.shape[0], 4, 16, -1).transpose(2, 1).softmax(1))) # y.append(t2.sigmoid()) y.append(t2) return y for i in range(self.nl): x[i] = torch.cat((self.cv2[i](x[i]), self.cv3[i](x[i])), 1) if self.training: return x elif self.dynamic or self.shape != shape: self.anchors, self.strides = (x.transpose(0, 1) for x in make_anchors(x, self.stride, 0.5)) self.shape = shape box, cls = torch.cat([xi.view(shape[0], self.no, -1) for xi in x], 2).split((self.reg_max * 4, self.nc), 1) dbox = dist2bbox(self.dfl(box), self.anchors.unsqueeze(0), xywh=True, dim=1) * self.strides y = torch.cat((dbox, cls.sigmoid()), 1) return y if self.export else (y, x) def bias_init(self): # Initialize Detect() biases, WARNING: requires stride availability m = self # self.model[-1] # Detect() module # cf = torch.bincount(torch.tensor(np.concatenate(dataset.labels, 0)[:, 0]).long(), minlength=nc) + 1 # ncf = math.log(0.6 / (m.nc - 0.999999)) if cf is None else torch.log(cf / cf.sum()) # nominal class frequency for a, b, s in zip(m.cv2, m.cv3, m.stride): # from a[-1].bias.data[:] = 1.0 # box b[-1].bias.data[:m.nc] = math.log(5 / m.nc / (640 / s) ** 2) # cls (.01 objects, 80 classes, 640 img)

增加保存onnx模型代码,如下:

# 导出 onnx 增加 import torch self.model.fuse() self.model.eval() self.model.load_state_dict(torch.load('./weights/Yolov8_dict.pt', map_location='cpu'), strict=False) print("=========== onnx =========== ") dummy_input = torch.randn(1, 3, 640, 640) input_names = ["data"] output_names = ["cls1", "reg1", "cls2", "reg2", "cls3", "reg3"] torch.onnx.export(self.model, dummy_input, "./weights/yolov8n_ZQ.onnx", verbose=False, input_names=input_names, output_names=output_names, opset_version=11) print("======================== convert onnx Finished! .... ")

以上修改后完运行以下代码:

from ultralytics import YOLOmodel = YOLO('./ultralytics/models/v8/yolov8n.yaml')results = model(task='detect', mode='predict', source='./images/test3.jpg', line_thickness=3, show=False, save=True, device='cpu')3 yolov8 onnx 测试效果

onnx模型和测试完整代码,放在github上代码。 注:图片来源coco128

4 yolov8导出瑞芯微rknn和地平线horizon仿真测试4.1 瑞芯微 rknn 仿真

  瑞芯微环境搭建和详细步骤参考上一篇 【瑞芯微RKNN模型转换和PC端仿真】。   yolov8导出rknn模型代码和后处理参考 yolov8_rknn

4.2 地平线仿真

  地平线环境搭建和详细步骤参考上一篇 【地平线Horizon模型转换和PC端仿真测试】。   yolov8导出地平线模型代码和后处理参考 yolov8_horizon

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

上一篇:hpdrv.exe是什么进程 有什么作用 hpdrv进程查询(.hpp是什么文件)

下一篇:Win7系统Windows资源管理器老重启的解决方法(win7资源管理器叫什么)

  • word怎么做括号分支(word文档怎么弄括号)

    word怎么做括号分支(word文档怎么弄括号)

  • 华为nova9pro怎么调时间(华为nova9pro怎么截屏)

    华为nova9pro怎么调时间(华为nova9pro怎么截屏)

  • 抖音如何打开相机权限(抖音如何打开相关搜索)

    抖音如何打开相机权限(抖音如何打开相关搜索)

  • 小米9se屏幕乱跳(小米9se屏幕乱跳怎么解决)

    小米9se屏幕乱跳(小米9se屏幕乱跳怎么解决)

  • 已发朋友圈如何改可见(已发朋友圈如何取消分组可见)

    已发朋友圈如何改可见(已发朋友圈如何取消分组可见)

  • 抖音未发布完成的视频在哪里(抖音未发布完成的视频在哪里显示)

    抖音未发布完成的视频在哪里(抖音未发布完成的视频在哪里显示)

  • 抖音未成年怎么开直播(抖音未成年怎么充值)

    抖音未成年怎么开直播(抖音未成年怎么充值)

  • 华为可以给苹果手机反向充电吗(华为可以给苹果隔空投送吗)

    华为可以给苹果手机反向充电吗(华为可以给苹果隔空投送吗)

  • 抖音举报视频的时候会不会被对方发现(抖音举报视频的处罚是什么)

    抖音举报视频的时候会不会被对方发现(抖音举报视频的处罚是什么)

  • 美团为什么不能切换定位城市(美团为什么不能找人代付)

    美团为什么不能切换定位城市(美团为什么不能找人代付)

  • 屏幕使用时间怎么删除其中一个(屏幕使用时间怎么造假)

    屏幕使用时间怎么删除其中一个(屏幕使用时间怎么造假)

  • 密码正确无法加入网络(密码正确无法加入网络是为什么)

    密码正确无法加入网络(密码正确无法加入网络是为什么)

  • 笔记本内存条和台式机内存条一样吗(笔记本内存条和台式机内存条区别)

    笔记本内存条和台式机内存条一样吗(笔记本内存条和台式机内存条区别)

  • 手机怎么调出审查元素(手机怎么调出审讯模式)

    手机怎么调出审查元素(手机怎么调出审讯模式)

  • 华为p30pro支持投影吗(华为p30pro投影看电视怎么操作)

    华为p30pro支持投影吗(华为p30pro投影看电视怎么操作)

  • 怎么给优活手环充电(优活手环怎么配对)

    怎么给优活手环充电(优活手环怎么配对)

  • 11pro可以双卡吗(11pro可以双卡双待?)

    11pro可以双卡吗(11pro可以双卡双待?)

  • 手机搜索不到小米手环(手机搜索不到小米蓝牙耳机设备怎么办)

    手机搜索不到小米手环(手机搜索不到小米蓝牙耳机设备怎么办)

  • 抖音手滑点赞取消别人会知道吗(抖音手滑点赞取消后改名字还能看到吗)

    抖音手滑点赞取消别人会知道吗(抖音手滑点赞取消后改名字还能看到吗)

  • oled与amoled的区别(oled和amoled的区别)

    oled与amoled的区别(oled和amoled的区别)

  • emui9.1怎么升级(emui9.1怎么升级到10)

    emui9.1怎么升级(emui9.1怎么升级到10)

  • 华为手机通讯录黑名单在哪找(华为手机通讯录怎么转移新手机)

    华为手机通讯录黑名单在哪找(华为手机通讯录怎么转移新手机)

  • 抖音取消点赞对方知道吗(抖音取消点赞对方的赞会不会少呢?)

    抖音取消点赞对方知道吗(抖音取消点赞对方的赞会不会少呢?)

  • win10任务栏还原到下面方法(win10任务栏还原到下边)

    win10任务栏还原到下面方法(win10任务栏还原到下边)

  • 冬季暴风雪中的欧亚鸲,英格兰峰区国家公园 (© Ben Robson Hull Photography/Getty Images)(暴风雪的寒冷)

    冬季暴风雪中的欧亚鸲,英格兰峰区国家公园 (© Ben Robson Hull Photography/Getty Images)(暴风雪的寒冷)

  • 做毕业设计,前端部分你需要掌握的6个核心技能(做毕业设计,前景如何)

    做毕业设计,前端部分你需要掌握的6个核心技能(做毕业设计,前景如何)

  • 织梦dedecms上下篇文章标题长度修改(织梦怎么新建页面)

    织梦dedecms上下篇文章标题长度修改(织梦怎么新建页面)

  • 增值税普通发票需要交税吗
  • 车辆报废做账务处理依据的法规是
  • 股权转让开票怎么做账
  • 简易计征怎么开票
  • 研发费用辅助账谁来做
  • 应付票据和应付账款有什么区别
  • 普通发票有没有有效期
  • 非贸易付汇去银行汇款流程
  • 营改增后房地产企业增值税税收筹划存在问题
  • 外购原材料自用
  • 购进环保节能设备如何抵扣进项税
  • 计提递延所得税资产
  • 机械设备租赁征求意见稿
  • 开发商开临时发票
  • 定期定额征收适用范围
  • 银行承兑贴现到哪里去了
  • 企业出租商铺交什么税费呢
  • 技术服务收入和产品服务收入举个例子
  • 销售外购设备并提供安装服务
  • 电脑怎么设置色盲模式
  • 进口的固定资产包括哪些
  • ie浏览器进程
  • flash是什么文件
  • dxva2.dll是什么意思
  • yolov5s和yolov5m
  • 工程建设的项目的划分?
  • ajax不刷新页面
  • php接口技术
  • vue项目内html
  • 科目汇总表借方发生额为零怎么填
  • 收残疾人就业保险合法吗
  • 律师费开票税费谁承担
  • 个体工商户个税优惠政策2023
  • 产权转移书据是什么印花税
  • 应收账款计提坏账准备方法
  • 注册一个公司没有流水可以吗
  • 微擎框架可以干什么
  • 用友t3系统功能怎么用
  • 营业总收入同比增长怎么分析
  • 小规模纳税人免税政策2023年
  • 保险补偿多久到账
  • 发现以前年度错账,不论错账是否涉及损益
  • 企业法人名下的产业多了是好事吗
  • 利润分配账务处理例题
  • 疫情期间统筹部工作总结
  • 去年未分配利润 负数 结转今年
  • 银行卡被误扣多少钱
  • 利息收入记借方还是贷方
  • 采购商品验收入库的会计分录怎么写
  • 如何处理公益性岗位问题
  • 公司注册实收资本
  • 资产负债表里的应交税费怎么填
  • 银行汇票哪个科目
  • 非营利医疗机构免征哪几种税
  • windows优化软件
  • centos7软件
  • centos apache 配置
  • msiexec.exe是什么进程介绍
  • win8出现蓝屏怎么修复
  • linux系统中的脚本文件一般以什么开头
  • win8系统如何
  • linux 内核编译
  • linux的kill函数
  • window8任务栏消失了怎么办
  • javascript语言介绍
  • android系统介绍
  • android系统介绍
  • unity3d Hair real time rendering 真实头发实时渲染
  • 利用js脚本模拟鼠标点击事件
  • Android开发工具
  • python中文分词库
  • 广东省深圳市税占27%,高新技术占15%,各市分别占多少?
  • 河北省税务局云平台运维
  • 税盘换电脑怎么登陆
  • 广西个人医保缴费时间
  • 出口退税的管理办法
  • 差旅费的补助计入哪个费用
  • 北京市注册税务师
  • 个人绩效考核税务局
  • 朝阳区第六税务所
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设