位置: 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资源管理器叫什么)

  • vivo x6s A复制粘贴怎么操作(vivoy66复制粘贴在哪里)

    vivo x6s A复制粘贴怎么操作(vivoy66复制粘贴在哪里)

  • 一体手机进水晾多久开机(一体手机进水晾干后充电慢)

    一体手机进水晾多久开机(一体手机进水晾干后充电慢)

  • 网络环境异常怎么修复(网络环境异常怎么解决)

    网络环境异常怎么修复(网络环境异常怎么解决)

  • 通过qq号能查到什么信息(通过qq号能查到吃鸡吗)

    通过qq号能查到什么信息(通过qq号能查到吃鸡吗)

  • 华为nova3怎么开微信美颜(华为nova3怎么开悬浮窗回复信息)

    华为nova3怎么开微信美颜(华为nova3怎么开悬浮窗回复信息)

  • 微信扫脸登录在哪里设置(微信扫脸登录在哪里打开)

    微信扫脸登录在哪里设置(微信扫脸登录在哪里打开)

  • 红米k30pro有耳机孔吗(红米k30pro有无耳机孔)

    红米k30pro有耳机孔吗(红米k30pro有无耳机孔)

  • 咸鱼包邮是得自己出运费吗(咸鱼包邮安全吗)

    咸鱼包邮是得自己出运费吗(咸鱼包邮安全吗)

  • 抖音速推能上热门吗(抖音速推上热门别人能看到花钱了吗)

    抖音速推能上热门吗(抖音速推上热门别人能看到花钱了吗)

  • 小电充电宝不还会怎样(小电充电宝不还会一直扣钱吗)

    小电充电宝不还会怎样(小电充电宝不还会一直扣钱吗)

  • iphone深色模式怎么开不了(iphone深色模式怎么设置)

    iphone深色模式怎么开不了(iphone深色模式怎么设置)

  • 苹果手机微信有美颜功能吗(苹果手机微信有延迟是真的吗)

    苹果手机微信有美颜功能吗(苹果手机微信有延迟是真的吗)

  • 拼多多怎么查看物流到哪里了(拼多多怎么查看自己买过的东西)

    拼多多怎么查看物流到哪里了(拼多多怎么查看自己买过的东西)

  • ppt设置艺术字的具体位置(ppt设置艺术字的位置为水平)

    ppt设置艺术字的具体位置(ppt设置艺术字的位置为水平)

  • 苹果x手机播放视频卡顿(苹果X手机播放媒体没有立体声)

    苹果x手机播放视频卡顿(苹果X手机播放媒体没有立体声)

  • 支付宝怎样取消刷脸支付(支付宝怎样取消银行卡绑定)

    支付宝怎样取消刷脸支付(支付宝怎样取消银行卡绑定)

  • 小米9pro怎么设置来电闪光灯(小米9pro怎么设置自动开关机)

    小米9pro怎么设置来电闪光灯(小米9pro怎么设置自动开关机)

  • 笔记本电脑过安检会损坏吗(笔记本电脑太卡了怎么解决)

    笔记本电脑过安检会损坏吗(笔记本电脑太卡了怎么解决)

  • 怎么把cpu性能调到最佳(怎么把cpu性能调到最佳win11)

    怎么把cpu性能调到最佳(怎么把cpu性能调到最佳win11)

  • 网络正常抖音为什么接不到网络(网络正常抖音打不开是什么原因)

    网络正常抖音为什么接不到网络(网络正常抖音打不开是什么原因)

  • 拼多多小额打款钱到哪(拼多多小额打款最多能打多少)

    拼多多小额打款钱到哪(拼多多小额打款最多能打多少)

  • 苹果手机怎么刷交通卡(苹果手机怎么刷机清除id密码)

    苹果手机怎么刷交通卡(苹果手机怎么刷机清除id密码)

  • 微信绿钻续费取消不了(微信绿钻连续包月怎么取消)

    微信绿钻续费取消不了(微信绿钻连续包月怎么取消)

  • dispatcherservlet的作用(in servlet with name dispatcherservlet)

    dispatcherservlet的作用(in servlet with name dispatcherservlet)

  • 完美的iOS 8越狱工具盘古1.0 for Mac版发布 附下载地址(iphone8plus完美越狱)

    完美的iOS 8越狱工具盘古1.0 for Mac版发布 附下载地址(iphone8plus完美越狱)

  • 如何选购餐桌?(如何选购餐桌椅)

    如何选购餐桌?(如何选购餐桌椅)

  • java使用同步的注意点(java中同步有两种方法)

    java使用同步的注意点(java中同步有两种方法)

  • 解除劳动合同支付违约金合法吗
  • 发生了原材料运进和成品运出,但并未发生所有权
  • 期初余额有误怎么在本期做调整凭证
  • 转账支票有没有密码
  • 其他收益在报表哪个位置
  • 职工食堂支出明细表
  • 预付货款核销如何做会计摘要呢?
  • 增值税普通发票有什么用
  • 自助开税票流程
  • 国税和地税归哪里管
  • 如何查询企业开票记录
  • 某企业2016年年末经营资产总额为4000万元
  • 商贸公司购买货物会计分录
  • 增值税发票确认时间
  • 旧税号的发票专用章还能使用吗
  • 契税和增值税的计税依据
  • 企业涉及预计负债的主要事项包括
  • 出租房屋免租期如何确认收入
  • 汇算清缴交的税怎么做分录
  • 支付知识产权服务费账务处理
  • 公司账外废品收入怎么算
  • 在edge浏览器中打开农行K宝
  • 关于其他应收款账户的说法
  • linux 数据类型
  • 承兑托收费用
  • 注销公司账上现金多怎么调
  • 购买股票的会计分录
  • php读取目录
  • uniapp使用px还是rpx
  • 员工不愿意缴纳个税 需要公司承担吗
  • 合伙企业分配股票给合伙人
  • vue3响应式丢失
  • 物流公司过户给我需要做什么
  • 蚁群算法是什么
  • 云原生istio
  • ChatGPT 逆天测试,结局出乎预料
  • python生成器定义
  • 劳务工资缴税标准
  • 其他应收款增加会计分录
  • 残疾人就业保障金会计分录怎么做
  • 关联企业借款费用
  • 成本费用率分析说明
  • 公司送礼计入什么会计科目
  • 代收的车船税没有发票怎么入账
  • 固定资产盘亏账务处理的问题
  • 房地产企业扣除土地价款如何申报
  • 发票拿到了怎样作废
  • 接受捐赠的增值税怎么处理
  • 无形资产如何摊销公式
  • 去税务局核定税种多久生效
  • 银行代扣水费分录
  • 一般纳税人购进税控设备如何抵扣
  • 营业执照代办需要什么手续
  • 企业如何进行年报
  • win7用固态
  • 为什么windows手机失败了
  • ubuntu not authorized to perform operation
  • mac怎么共享wifi密码给iphone
  • solaris版本查询
  • centos8 apache
  • adguard安全性
  • 使用标准用户帐号的方法
  • windows8怎么关闭广告弹窗
  • 台式装win7
  • linux内核编程指南
  • win7蓝屏0x000000d1
  • opengl怎么学
  • react-redux用法
  • JavaScript的函数库
  • android 样式
  • 基于javascript的论文题目
  • The method setClass(Context, Class<?>) in the type Intent is not applicable for the问题
  • linux命令行怎么用
  • 简要说明javascript的作用
  • unity移动脚本代码
  • 非常棒的jQuery图片轮播效果
  • 安卓两页合并到下一页
  • jqgrid loadcomplete
  • js基础
  • 法治税务示范基地枫桥
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设